aeo.js 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/react.js +22 -7
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +22 -7
- package/dist/react.mjs.map +1 -1
- package/dist/vue.js +22 -7
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +22 -7
- package/dist/vue.mjs.map +1 -1
- package/dist/widget.js +22 -7
- package/dist/widget.js.map +1 -1
- package/dist/widget.mjs +22 -7
- package/dist/widget.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/utils.ts","../src/core/detect.ts","../src/core/robots.ts","../src/core/llms-txt.ts","../src/core/llms-full.ts","../src/core/raw-markdown.ts","../src/core/manifest.ts","../src/core/sitemap.ts","../src/core/ai-index.ts","../src/core/schema.ts","../src/core/generate-wrapper.ts","../src/core/html-extract.ts","../src/core/opengraph.ts","../src/core/audit.ts","../src/core/citability.ts","../src/core/platform-hints.ts","../src/core/report.ts","../src/index.ts"],"names":["join","existsSync","readFileSync","readdirSync","statSync","extname","relative","mkdirSync","dirname","copyFileSync","writeFileSync","createHash","index","extractTitle","p"],"mappings":"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","file":"index.js","sourcesContent":["import { readFileSync, existsSync, readdirSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { AeoConfig, ResolvedAeoConfig, MarkdownFile } from '../types';\nimport { detectFramework } from './detect';\nimport { minimatch } from 'minimatch';\n\nexport function validateConfig(config: AeoConfig): string[] {\n const warnings: string[] = [];\n\n if (config.url && !/^https?:\\/\\//.test(config.url)) {\n warnings.push(`url \"${config.url}\" should start with http:// or https://`);\n }\n\n if (config.url === 'https://example.com') {\n warnings.push('url is set to the default \"https://example.com\" — set your actual site URL');\n }\n\n if (!config.title) {\n warnings.push('title is not set — your generated files will use \"My Site\"');\n }\n\n if (config.robots?.crawlDelay && config.robots.crawlDelay < 0) {\n warnings.push('robots.crawlDelay should be a positive number');\n }\n\n return warnings;\n}\n\nexport function resolveConfig(config: AeoConfig = {}): ResolvedAeoConfig {\n const frameworkInfo = detectFramework();\n\n return {\n title: config.title || 'My Site',\n description: config.description || '',\n url: config.url || 'https://example.com',\n contentDir: config.contentDir || frameworkInfo.contentDir,\n outDir: config.outDir || frameworkInfo.outDir,\n pages: config.pages || [],\n generators: {\n robotsTxt: config.generators?.robotsTxt !== false,\n llmsTxt: config.generators?.llmsTxt !== false,\n llmsFullTxt: config.generators?.llmsFullTxt !== false,\n rawMarkdown: config.generators?.rawMarkdown !== false,\n manifest: config.generators?.manifest !== false,\n sitemap: config.generators?.sitemap !== false,\n aiIndex: config.generators?.aiIndex !== false,\n schema: config.generators?.schema !== false,\n },\n robots: {\n allow: config.robots?.allow || ['/'],\n disallow: config.robots?.disallow || [],\n crawlDelay: config.robots?.crawlDelay || 0,\n sitemap: config.robots?.sitemap || '',\n },\n schema: {\n enabled: config.schema?.enabled !== false,\n organization: {\n name: config.schema?.organization?.name || config.title || 'My Site',\n url: config.schema?.organization?.url || config.url || 'https://example.com',\n logo: config.schema?.organization?.logo || '',\n sameAs: config.schema?.organization?.sameAs || [],\n },\n defaultType: config.schema?.defaultType || 'WebPage',\n },\n og: {\n enabled: config.og?.enabled !== false,\n image: config.og?.image || '',\n twitterHandle: config.og?.twitterHandle || '',\n type: config.og?.type || 'website',\n },\n widget: {\n enabled: config.widget?.enabled !== false,\n position: config.widget?.position || 'bottom-right',\n theme: {\n background: config.widget?.theme?.background || 'rgba(18, 18, 24, 0.9)',\n text: config.widget?.theme?.text || '#C0C0C5',\n accent: config.widget?.theme?.accent || '#E8E8EA',\n badge: config.widget?.theme?.badge || '#4ADE80',\n },\n humanLabel: config.widget?.humanLabel || 'Human',\n aiLabel: config.widget?.aiLabel || 'AI',\n showBadge: config.widget?.showBadge !== false,\n },\n };\n}\n\nexport function parseFrontmatter(content: string): { frontmatter: Record<string, any>; content: string } {\n const frontmatterMatch = content.match(/^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)/);\n \n if (frontmatterMatch) {\n const frontmatterStr = frontmatterMatch[1];\n const contentWithoutFrontmatter = frontmatterMatch[2];\n \n const frontmatter: Record<string, any> = {};\n const lines = frontmatterStr.split('\\n');\n \n for (const line of lines) {\n const [key, ...valueParts] = line.split(':');\n if (key && valueParts.length > 0) {\n const value = valueParts.join(':').trim();\n frontmatter[key.trim()] = value.replace(/^[\"']|[\"']$/g, '');\n }\n }\n \n return { frontmatter, content: contentWithoutFrontmatter };\n }\n \n return { frontmatter: {}, content };\n}\n\nexport function bumpHeadings(content: string, levels: number = 1): string {\n return content.replace(/^(#{1,6})\\s/gm, (match, hashes) => {\n const newLevel = Math.min(hashes.length + levels, 6);\n return '#'.repeat(newLevel) + ' ';\n });\n}\n\nexport function extractTitle(content: string): string {\n const h1Match = content.match(/^#\\s+(.+)$/m);\n if (h1Match) return h1Match[1];\n \n const h2Match = content.match(/^##\\s+(.+)$/m);\n if (h2Match) return h2Match[1];\n \n const firstLine = content.split('\\n')[0];\n return firstLine.slice(0, 100);\n}\n\nexport function readPackageJson(projectRoot: string = process.cwd()): Record<string, any> {\n const packageJsonPath = join(projectRoot, 'package.json');\n \n if (!existsSync(packageJsonPath)) {\n return {};\n }\n \n try {\n const content = readFileSync(packageJsonPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n}\n\nexport function getAllMarkdownFiles(\n projectRoot: string,\n include: string[] = ['**/*.md'],\n exclude: string[] = ['**/node_modules/**']\n): string[] {\n const files: string[] = [];\n \n function scanDirectory(dir: string): void {\n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const relativePath = relative(projectRoot, fullPath);\n \n // Check if path should be excluded\n const shouldExclude = exclude.some(pattern => \n minimatch(relativePath, pattern) || minimatch(fullPath, pattern)\n );\n \n if (shouldExclude) {\n continue;\n }\n \n const stat = statSync(fullPath);\n \n if (stat.isDirectory()) {\n // Skip hidden directories\n if (!entry.startsWith('.')) {\n scanDirectory(fullPath);\n }\n } else if (stat.isFile()) {\n // Check if file matches include patterns\n const shouldInclude = include.some(pattern =>\n minimatch(relativePath, pattern) || minimatch(fullPath, pattern)\n );\n \n if (shouldInclude) {\n files.push(fullPath);\n }\n }\n }\n } catch (error) {\n // Silently skip directories we can't read\n }\n }\n \n scanDirectory(projectRoot);\n return files;\n}","import type { FrameworkType, FrameworkInfo } from '../types';\nimport { readPackageJson } from './utils';\n\nexport function detectFramework(projectRoot: string = process.cwd()): FrameworkInfo {\n const packageJson = readPackageJson(projectRoot);\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n \n if (dependencies['next']) {\n return {\n framework: 'next',\n contentDir: 'app',\n outDir: 'out',\n };\n }\n \n if (dependencies['nuxt'] || dependencies['@nuxt/kit']) {\n return {\n framework: 'nuxt',\n contentDir: 'content',\n outDir: '.output/public',\n };\n }\n \n if (dependencies['astro'] || dependencies['@astrojs/astro']) {\n return {\n framework: 'astro',\n contentDir: 'src/content',\n outDir: 'dist',\n };\n }\n \n if (dependencies['@remix-run/dev']) {\n return {\n framework: 'remix',\n contentDir: 'app',\n outDir: 'build/client',\n };\n }\n \n if (dependencies['@sveltejs/kit']) {\n return {\n framework: 'sveltekit',\n contentDir: 'src',\n outDir: 'build',\n };\n }\n \n if (dependencies['@angular/core']) {\n return {\n framework: 'angular',\n contentDir: 'src',\n outDir: 'dist',\n };\n }\n \n if (dependencies['@docusaurus/core']) {\n return {\n framework: 'docusaurus',\n contentDir: 'docs',\n outDir: 'build',\n };\n }\n \n if (dependencies['vite']) {\n return {\n framework: 'vite',\n contentDir: 'src',\n outDir: 'dist',\n };\n }\n \n return {\n framework: 'unknown',\n contentDir: 'src',\n outDir: 'dist',\n };\n}","import type { ResolvedAeoConfig } from '../types';\n\nconst AI_CRAWLERS = [\n 'GPTBot',\n 'OAI-SearchBot',\n 'ChatGPT-User',\n 'ClaudeBot',\n 'Claude-Web',\n 'anthropic-ai',\n 'PerplexityBot',\n 'Google-Extended',\n 'Gemini-Deep-Research',\n 'Bingbot',\n 'FacebookBot',\n 'meta-externalagent',\n 'Amazonbot',\n 'Applebot',\n 'DeepSeekBot',\n 'Bytespider',\n 'cohere-ai',\n 'CCBot',\n 'DiffBot',\n 'YouBot',\n 'FirecrawlAgent',\n 'Crawl4AI',\n 'BraveBot',\n 'SemrushBot',\n 'AhrefsBot',\n 'MJ12bot',\n 'DotBot',\n 'DataForSeoBot',\n 'Screaming Frog SEO Spider',\n 'SEOkicks',\n 'SEMrushBot',\n 'BLEXBot',\n 'Yandex',\n 'Baiduspider',\n 'Sogou',\n 'Exabot',\n 'facebookexternalhit',\n 'LinkedInBot',\n 'WhatsApp',\n 'Slackbot',\n 'TwitterBot',\n 'TelegramBot',\n 'Discordbot',\n 'PinterestBot',\n 'TumblrBot',\n 'ViberBot',\n 'SkypeUriPreview',\n 'redditbot',\n 'Snapchat',\n 'TikTok',\n];\n\nexport function generateRobotsTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n '# robots.txt generated by aeo.js',\n '# Allow AI crawlers to index this site',\n '',\n '# Traditional search engines',\n 'User-agent: Googlebot',\n 'Allow: /',\n '',\n 'User-agent: Bingbot',\n 'Allow: /',\n '',\n '# AI crawlers and answer engines',\n ];\n \n for (const crawler of AI_CRAWLERS) {\n lines.push(`User-agent: ${crawler}`);\n lines.push('Allow: /');\n lines.push('');\n }\n \n lines.push('# Default for all other bots');\n lines.push('User-agent: *');\n lines.push('Allow: /');\n lines.push('');\n \n if (config.url) {\n lines.push(`Sitemap: ${config.url}/sitemap.xml`);\n }\n \n lines.push('');\n lines.push('# AEO (Answer Engine Optimization) files');\n lines.push('# These help LLMs understand your content better');\n lines.push(`# ${config.url}/llms.txt`);\n lines.push(`# ${config.url}/llms-full.txt`);\n lines.push(`# ${config.url}/docs.json`);\n lines.push(`# ${config.url}/ai-index.json`);\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig, MarkdownFile } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction collectMarkdownFiles(dir: string, base: string = dir): MarkdownFile[] {\n const files: MarkdownFile[] = [];\n \n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n files.push(...collectMarkdownFiles(fullPath, base));\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n \n files.push({\n path: relativePath,\n content: mainContent,\n title: frontmatter.title || extractTitle(mainContent),\n description: frontmatter.description,\n frontmatter,\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return files;\n}\n\nexport function generateLlmsTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n `# ${config.title}`,\n '',\n ];\n \n if (config.description) {\n lines.push(`> ${config.description}`);\n lines.push('');\n }\n \n lines.push('## About');\n lines.push('');\n lines.push('This file provides a structured overview of the documentation and content available on this site,');\n lines.push('optimized for consumption by Large Language Models (LLMs) and AI assistants.');\n lines.push('');\n \n // List discovered pages (from framework plugin)\n if (config.pages && config.pages.length > 0) {\n lines.push('## Pages');\n lines.push('');\n\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n lines.push(`- [${title}](${url})`);\n if (page.description) {\n lines.push(` ${page.description}`);\n }\n }\n lines.push('');\n }\n\n // List markdown content files\n const markdownFiles = collectMarkdownFiles(config.contentDir);\n\n if (markdownFiles.length > 0) {\n lines.push('## Documentation');\n lines.push('');\n\n const grouped: Record<string, MarkdownFile[]> = {};\n\n for (const file of markdownFiles) {\n const dir = file.path.split('/')[0] || 'root';\n if (!grouped[dir]) grouped[dir] = [];\n grouped[dir].push(file);\n }\n\n for (const [dir, files] of Object.entries(grouped)) {\n lines.push(`### ${dir === 'root' ? 'Main Documentation' : dir}`);\n lines.push('');\n\n for (const file of files) {\n const url = `${config.url}/${file.path.replace(/\\.mdx?$/, '')}`;\n lines.push(`- [${file.title}](${url})`);\n if (file.description) {\n lines.push(` ${file.description}`);\n }\n }\n lines.push('');\n }\n }\n \n lines.push('## Quick Links');\n lines.push('');\n lines.push(`- Full Documentation: ${config.url}/llms-full.txt`);\n lines.push(`- Documentation Manifest: ${config.url}/docs.json`);\n lines.push(`- AI-Optimized Index: ${config.url}/ai-index.json`);\n lines.push(`- Sitemap: ${config.url}/sitemap.xml`);\n lines.push('');\n \n lines.push('## For LLMs');\n lines.push('');\n lines.push('To get the complete documentation in a single file, request:');\n lines.push(`${config.url}/llms-full.txt`);\n lines.push('');\n lines.push('For structured access to individual pages with metadata:');\n lines.push(`${config.url}/docs.json`);\n lines.push('');\n lines.push('For RAG (Retrieval Augmented Generation) systems:');\n lines.push(`${config.url}/ai-index.json`);\n lines.push('');\n \n lines.push('---');\n lines.push('Generated by aeo.js - Answer Engine Optimization for the modern web');\n lines.push('Learn more at https://aeojs.org');\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\nimport { parseFrontmatter, bumpHeadings } from './utils';\n\nfunction collectAndConcatenateMarkdown(dir: string, base: string = dir): string[] {\n const sections: string[] = [];\n \n try {\n const entries = readdirSync(dir).sort();\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n const subSections = collectAndConcatenateMarkdown(fullPath, base);\n if (subSections.length > 0) {\n sections.push(...subSections);\n }\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n \n const sectionLines: string[] = [\n '---',\n '',\n `# ${frontmatter.title || relativePath}`,\n '',\n `Source: ${relativePath}`,\n '',\n ];\n \n if (frontmatter.description) {\n sectionLines.push(`> ${frontmatter.description}`);\n sectionLines.push('');\n }\n \n const bumpedContent = bumpHeadings(mainContent, 1);\n sectionLines.push(bumpedContent);\n sectionLines.push('');\n \n sections.push(sectionLines.join('\\n'));\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return sections;\n}\n\nexport function generateLlmsFull(config: ResolvedAeoConfig): string {\n return generateLlmsFullTxt(config);\n}\n\nexport function generateLlmsFullTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n `# ${config.title} - Complete Documentation`,\n '',\n `This file contains all documentation concatenated into a single file for easy consumption by LLMs.`,\n '',\n ];\n \n if (config.description) {\n lines.push(`> ${config.description}`);\n lines.push('');\n }\n \n lines.push('## Table of Contents');\n lines.push('');\n lines.push('This document includes all content from this project.');\n lines.push('Each section is separated by a horizontal rule (---) for easy parsing.');\n lines.push('');\n\n let hasContent = false;\n\n // Include discovered pages (from framework plugin)\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n const sectionLines: string[] = [\n '---',\n '',\n `# ${title}`,\n '',\n `URL: ${url}`,\n '',\n ];\n if (page.description) {\n sectionLines.push(`> ${page.description}`);\n sectionLines.push('');\n }\n if (page.content) {\n sectionLines.push(page.content);\n sectionLines.push('');\n }\n lines.push(sectionLines.join('\\n'));\n hasContent = true;\n }\n }\n\n // Include markdown content files\n const sections = collectAndConcatenateMarkdown(config.contentDir);\n\n if (sections.length > 0) {\n lines.push(...sections);\n hasContent = true;\n }\n\n if (!hasContent) {\n // Always include site overview so LLMs have basic context\n lines.push('---');\n lines.push('');\n lines.push(`# ${config.title}`);\n lines.push('');\n lines.push(`URL: ${config.url}`);\n lines.push('');\n if (config.description) {\n lines.push(config.description);\n lines.push('');\n }\n }\n \n lines.push('---');\n lines.push('');\n lines.push('## About This Document');\n lines.push('');\n lines.push('This concatenated documentation file is generated automatically by aeo.js');\n lines.push('to make it easier for AI systems to understand the complete context of this project.');\n lines.push('');\n lines.push(`For a structured index, see: ${config.url}/llms.txt`);\n lines.push(`For individual files, see: ${config.url}/docs.json`);\n lines.push('');\n lines.push('Generated by aeo.js - https://aeojs.org');\n \n return lines.join('\\n');\n}","import { readdirSync, statSync, mkdirSync, writeFileSync, copyFileSync } from 'fs';\nimport { join, relative, extname, dirname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\n\nexport interface CopiedFile {\n source: string;\n destination: string;\n}\n\nexport interface GeneratedMarkdownFile {\n pathname: string;\n destination: string;\n}\n\nfunction ensureDir(path: string): void {\n mkdirSync(path, { recursive: true });\n}\n\nexport function copyRawMarkdown(config: ResolvedAeoConfig): CopiedFile[] {\n return copyMarkdownFiles(config);\n}\n\nexport function copyMarkdownFiles(config: ResolvedAeoConfig): CopiedFile[] {\n const copiedFiles: CopiedFile[] = [];\n \n function copyRecursive(dir: string, base: string = config.contentDir): void {\n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n copyRecursive(fullPath, base);\n } else if (stat.isFile() && extname(entry) === '.md') {\n const relativePath = relative(base, fullPath);\n const destPath = join(config.outDir, relativePath);\n \n ensureDir(dirname(destPath));\n \n try {\n copyFileSync(fullPath, destPath);\n copiedFiles.push({\n source: fullPath,\n destination: destPath,\n });\n } catch (error) {\n console.warn(`Warning: Could not copy ${fullPath}:`, error);\n }\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n }\n \n copyRecursive(config.contentDir);\n return copiedFiles;\n}\n\nexport function generatePageMarkdownFiles(config: ResolvedAeoConfig): GeneratedMarkdownFile[] {\n const generated: GeneratedMarkdownFile[] = [];\n const pages = config.pages || [];\n\n for (const page of pages) {\n // Only generate .md files for pages that have actual content.\n // Pages discovered from filenames (dev mode) only have pathname/title\n // but no body content — those are useless as standalone markdown files.\n if (!page.content) continue;\n\n const pageTitle = page.title || (page.pathname === '/' ? config.title : undefined);\n\n let filename: string;\n if (page.pathname === '/') {\n filename = 'index.md';\n } else {\n const clean = page.pathname.replace(/^\\//, '').replace(/\\/$/, '');\n filename = clean.includes('/') ? `${clean}.md` : `${clean}.md`;\n }\n\n const destPath = join(config.outDir, filename);\n\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n\n const lines: string[] = [];\n\n // YAML frontmatter\n lines.push('---');\n if (pageTitle) lines.push(`title: \"${pageTitle}\"`);\n if (page.description) lines.push(`description: \"${page.description}\"`);\n lines.push(`url: ${pageUrl}`);\n lines.push(`source: ${pageUrl}`);\n lines.push(`generated_by: aeo.js`);\n lines.push('---', '');\n\n if (pageTitle) {\n lines.push(`# ${pageTitle}`, '');\n }\n\n if (page.description) {\n lines.push(`${page.description}`, '');\n }\n\n if (page.content) {\n lines.push(page.content);\n }\n\n const content = lines.join('\\n');\n\n ensureDir(dirname(destPath));\n try {\n writeFileSync(destPath, content, 'utf-8');\n generated.push({ pathname: page.pathname, destination: destPath });\n } catch {\n // skip unwritable files\n }\n }\n\n return generated;\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig, ManifestEntry } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction collectManifestEntries(dir: string, config: ResolvedAeoConfig, base: string = dir): ManifestEntry[] {\n const entries: ManifestEntry[] = [];\n \n try {\n const files = readdirSync(dir);\n \n for (const file of files) {\n const fullPath = join(dir, file);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n entries.push(...collectManifestEntries(fullPath, config, base));\n } else if (stat.isFile() && (extname(file) === '.md' || extname(file) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.mdx?$/, '');\n \n entries.push({\n url: `${config.url}/${urlPath}`,\n title: frontmatter.title || extractTitle(mainContent),\n description: frontmatter.description,\n lastModified: stat.mtime.toISOString(),\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return entries;\n}\n\nexport function generateManifest(config: ResolvedAeoConfig): string {\n const entries: ManifestEntry[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n entries.push({\n url: `${config.url}${page.pathname === '/' ? '' : page.pathname}`,\n title: page.title || page.pathname,\n description: page.description,\n });\n }\n }\n\n // Add markdown content files\n entries.push(...collectManifestEntries(config.contentDir, config));\n \n const manifest = {\n version: '1.0',\n generated: new Date().toISOString(),\n site: {\n title: config.title,\n description: config.description,\n url: config.url,\n },\n documents: entries.sort((a, b) => a.url.localeCompare(b.url)),\n metadata: {\n totalDocuments: entries.length,\n generator: 'aeo.js',\n generatorUrl: 'https://aeojs.org',\n },\n };\n \n return JSON.stringify(manifest, null, 2);\n}","import { readdirSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\n\nfunction collectUrls(dir: string, config: ResolvedAeoConfig, base: string = dir): string[] {\n const urls: string[] = [];\n \n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n urls.push(...collectUrls(fullPath, config, base));\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx' || extname(entry) === '.html')) {\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.(md|mdx|html)$/, '');\n urls.push(`${config.url}/${urlPath}`);\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return urls;\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nexport function generateSitemap(config: ResolvedAeoConfig): string {\n const urls: string[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n urls.push(`${config.url}${page.pathname === '/' ? '' : page.pathname}`);\n }\n }\n\n // Add markdown/html files from content dir\n if (config.contentDir) {\n urls.push(...collectUrls(config.contentDir, config));\n }\n\n const lines: string[] = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n ];\n\n // Always include the site root\n urls.push(config.url);\n\n const uniqueUrls = [...new Set(urls)].sort();\n \n for (const url of uniqueUrls) {\n lines.push(' <url>');\n lines.push(` <loc>${escapeXml(url)}</loc>`);\n lines.push(` <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>`);\n lines.push(' <changefreq>weekly</changefreq>');\n lines.push(' <priority>0.8</priority>');\n lines.push(' </url>');\n }\n \n lines.push('</urlset>');\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport { createHash } from 'crypto';\nimport type { ResolvedAeoConfig, AIIndexEntry } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction extractKeywords(content: string): string[] {\n const words = content\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, ' ')\n .split(/\\s+/)\n .filter(word => word.length > 3);\n \n const wordCount: Record<string, number> = {};\n \n for (const word of words) {\n wordCount[word] = (wordCount[word] || 0) + 1;\n }\n \n return Object.entries(wordCount)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([word]) => word);\n}\n\nfunction chunkContent(content: string, maxLength: number = 2000): string[] {\n const chunks: string[] = [];\n const paragraphs = content.split('\\n\\n');\n \n let currentChunk = '';\n \n for (const paragraph of paragraphs) {\n if (currentChunk.length + paragraph.length > maxLength && currentChunk.length > 0) {\n chunks.push(currentChunk.trim());\n currentChunk = '';\n }\n currentChunk += paragraph + '\\n\\n';\n }\n \n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n }\n \n return chunks;\n}\n\nfunction collectAIIndexEntries(dir: string, config: ResolvedAeoConfig, base: string = dir): AIIndexEntry[] {\n const entries: AIIndexEntry[] = [];\n \n try {\n const files = readdirSync(dir);\n \n for (const file of files) {\n const fullPath = join(dir, file);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n entries.push(...collectAIIndexEntries(fullPath, config, base));\n } else if (stat.isFile() && (extname(file) === '.md' || extname(file) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.mdx?$/, '');\n const url = `${config.url}/${urlPath}`;\n \n const chunks = chunkContent(mainContent);\n const title = frontmatter.title || extractTitle(mainContent);\n const keywords = extractKeywords(mainContent);\n \n chunks.forEach((chunk, index) => {\n const id = createHash('sha256')\n .update(`${url}-${index}`)\n .digest('hex')\n .slice(0, 16);\n \n entries.push({\n id,\n url,\n title: chunks.length > 1 ? `${title} (Part ${index + 1})` : title,\n content: chunk,\n description: frontmatter.description,\n keywords,\n metadata: {\n ...frontmatter,\n chunkIndex: index,\n totalChunks: chunks.length,\n sourcePath: relativePath,\n },\n });\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return entries;\n}\n\nexport function generateAiIndex(config: ResolvedAeoConfig): string {\n return generateAIIndex(config);\n}\n\nexport function generateAIIndex(config: ResolvedAeoConfig): string {\n const entries: AIIndexEntry[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n const content = page.content || '';\n\n if (content) {\n const chunks = chunkContent(content);\n const keywords = extractKeywords(content);\n\n chunks.forEach((chunk, index) => {\n const id = createHash('sha256')\n .update(`${url}-${index}`)\n .digest('hex')\n .slice(0, 16);\n\n entries.push({\n id,\n url,\n title: chunks.length > 1 ? `${title} (Part ${index + 1})` : title,\n content: chunk,\n description: page.description,\n keywords,\n metadata: {\n chunkIndex: index,\n totalChunks: chunks.length,\n sourcePath: page.pathname,\n },\n });\n });\n } else {\n const id = createHash('sha256')\n .update(url)\n .digest('hex')\n .slice(0, 16);\n\n entries.push({\n id,\n url,\n title,\n content: page.description || title,\n description: page.description,\n keywords: [],\n });\n }\n }\n }\n\n // Add markdown content files\n entries.push(...collectAIIndexEntries(config.contentDir, config));\n \n const index = {\n version: '1.0',\n generated: new Date().toISOString(),\n site: {\n title: config.title,\n description: config.description,\n url: config.url,\n },\n entries: entries.sort((a, b) => a.id.localeCompare(b.id)),\n metadata: {\n totalEntries: entries.length,\n generator: 'aeo.js',\n generatorUrl: 'https://aeojs.org',\n embedding: {\n recommended: 'text-embedding-ada-002',\n dimensions: 1536,\n },\n },\n };\n \n return JSON.stringify(index, null, 2);\n}","import type { ResolvedAeoConfig, PageEntry } from '../types';\n\nexport interface SchemaOutput {\n site: object[];\n pages: Record<string, object[]>;\n}\n\n/**\n * Generate JSON-LD structured data for the entire site.\n * Returns site-level schemas (WebSite, Organization) and per-page schemas.\n */\nexport function generateSchema(config: ResolvedAeoConfig): string {\n const output = generateSchemaObjects(config);\n return JSON.stringify(output, null, 2);\n}\n\n/**\n * Generate schema objects without serialization (for injection into HTML).\n */\nexport function generateSchemaObjects(config: ResolvedAeoConfig): SchemaOutput {\n const siteSchemas = generateSiteSchemas(config);\n const pageSchemas: Record<string, object[]> = {};\n\n for (const page of config.pages) {\n const schemas = generatePageSchemas(page, config);\n if (schemas.length > 0) {\n pageSchemas[page.pathname] = schemas;\n }\n }\n\n return { site: siteSchemas, pages: pageSchemas };\n}\n\n/**\n * Generate site-level schemas: WebSite + Organization.\n */\nexport function generateSiteSchemas(config: ResolvedAeoConfig): object[] {\n const schemas: object[] = [];\n\n // WebSite schema\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'WebSite',\n name: config.title,\n description: config.description || undefined,\n url: config.url,\n });\n\n // Organization schema (if name or sameAs provided)\n const org = config.schema.organization;\n if (org.name || org.sameAs.length > 0) {\n const orgSchema: Record<string, any> = {\n '@context': 'https://schema.org',\n '@type': 'Organization',\n name: org.name,\n url: org.url,\n };\n if (org.logo) orgSchema.logo = org.logo;\n if (org.sameAs.length > 0) orgSchema.sameAs = org.sameAs;\n schemas.push(orgSchema);\n }\n\n return schemas;\n}\n\n/**\n * Generate per-page schemas based on page content and config defaults.\n */\nexport function generatePageSchemas(page: PageEntry, config: ResolvedAeoConfig): object[] {\n const schemas: object[] = [];\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n\n // Detect FAQ patterns in content\n const faqItems = detectFaqPatterns(page.content || '');\n if (faqItems.length > 0) {\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqItems.map(({ question, answer }) => ({\n '@type': 'Question',\n name: question,\n acceptedAnswer: {\n '@type': 'Answer',\n text: answer,\n },\n })),\n });\n }\n\n // WebPage or Article schema\n const pageType = config.schema.defaultType;\n const pageSchema: Record<string, any> = {\n '@context': 'https://schema.org',\n '@type': pageType,\n name: page.title || config.title,\n url: pageUrl,\n };\n if (page.description) pageSchema.description = page.description;\n if (pageType === 'Article') {\n pageSchema.headline = page.title || config.title;\n pageSchema.author = {\n '@type': 'Organization',\n name: config.schema.organization.name,\n };\n }\n schemas.push(pageSchema);\n\n // BreadcrumbList for non-root pages\n if (page.pathname !== '/') {\n const breadcrumbs = generateBreadcrumbs(page.pathname, config);\n if (breadcrumbs.length > 1) {\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: breadcrumbs.map((crumb, i) => ({\n '@type': 'ListItem',\n position: i + 1,\n name: crumb.name,\n item: crumb.url,\n })),\n });\n }\n }\n\n return schemas;\n}\n\n/**\n * Generate breadcrumb items from a pathname.\n */\nfunction generateBreadcrumbs(pathname: string, config: ResolvedAeoConfig): { name: string; url: string }[] {\n const baseUrl = config.url.replace(/\\/$/, '');\n const parts = pathname.split('/').filter(Boolean);\n const crumbs: { name: string; url: string }[] = [\n { name: 'Home', url: baseUrl + '/' },\n ];\n\n let currentPath = '';\n for (const part of parts) {\n currentPath += '/' + part;\n crumbs.push({\n name: part.charAt(0).toUpperCase() + part.slice(1).replace(/-/g, ' '),\n url: baseUrl + currentPath,\n });\n }\n\n return crumbs;\n}\n\n/**\n * Detect FAQ-like patterns in markdown/text content.\n * Looks for: headings ending with \"?\" followed by paragraph text.\n */\nfunction detectFaqPatterns(content: string): { question: string; answer: string }[] {\n const items: { question: string; answer: string }[] = [];\n\n // Pattern: ## Question? \\n\\n Answer text\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const headingMatch = line.match(/^#{1,6}\\s+(.+\\?)\\s*$/);\n if (headingMatch) {\n // Collect answer: all non-empty, non-heading lines following\n const answerLines: string[] = [];\n for (let j = i + 1; j < lines.length; j++) {\n const nextLine = lines[j].trim();\n if (!nextLine) {\n if (answerLines.length > 0) break; // empty line after content = end\n continue; // skip leading empty lines\n }\n if (/^#{1,6}\\s/.test(nextLine)) break; // next heading = end\n answerLines.push(nextLine);\n }\n if (answerLines.length > 0) {\n items.push({\n question: headingMatch[1],\n answer: answerLines.join(' ').slice(0, 500),\n });\n }\n }\n }\n\n return items;\n}\n\n/**\n * Generate a JSON-LD script tag string for injection into HTML.\n */\nexport function generateJsonLdScript(schemas: object[]): string {\n if (schemas.length === 0) return '';\n if (schemas.length === 1) {\n return `<script type=\"application/ld+json\">${JSON.stringify(schemas[0])}</script>`;\n }\n return schemas\n .map(s => `<script type=\"application/ld+json\">${JSON.stringify(s)}</script>`)\n .join('\\n');\n}\n","import { generateRobotsTxt as genRobots } from './robots';\nimport { generateLlmsTxt as genLlms } from './llms-txt';\nimport { generateLlmsFullTxt as genLlmsFull } from './llms-full';\nimport { copyMarkdownFiles, generatePageMarkdownFiles } from './raw-markdown';\nimport { generateManifest as genManifest } from './manifest';\nimport { generateSitemap as genSitemap } from './sitemap';\nimport { generateAIIndex as genAIIndex } from './ai-index';\nimport { generateSchema as genSchema } from './schema';\nimport { resolveConfig } from './utils';\nimport { writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport type { AeoConfig, ResolvedAeoConfig } from '../types';\n\nexport interface GenerateResult {\n files: string[];\n errors: string[];\n}\n\nexport async function generateAEOFiles(\n configOrRoot?: ResolvedAeoConfig | AeoConfig | string,\n maybeConfig?: Partial<AeoConfig>\n): Promise<GenerateResult> {\n let config: ResolvedAeoConfig;\n\n if (typeof configOrRoot === 'string') {\n config = resolveConfig({ ...maybeConfig, outDir: maybeConfig?.outDir || configOrRoot });\n } else if (\n configOrRoot &&\n typeof configOrRoot === 'object' &&\n 'generators' in configOrRoot &&\n typeof (configOrRoot as ResolvedAeoConfig).generators?.robotsTxt === 'boolean'\n ) {\n config = configOrRoot as ResolvedAeoConfig;\n } else {\n config = resolveConfig(configOrRoot as AeoConfig | undefined);\n }\n\n const outDir = config.outDir;\n const files: string[] = [];\n const errors: string[] = [];\n\n if (!existsSync(outDir)) {\n mkdirSync(outDir, { recursive: true });\n }\n\n if (config.generators.robotsTxt) {\n try {\n const content = genRobots(config);\n writeFileSync(join(outDir, 'robots.txt'), content, 'utf-8');\n files.push('robots.txt');\n } catch (e: any) {\n errors.push(`robots.txt: ${e.message}`);\n }\n }\n\n if (config.generators.llmsTxt) {\n try {\n const content = genLlms(config);\n writeFileSync(join(outDir, 'llms.txt'), content, 'utf-8');\n files.push('llms.txt');\n } catch (e: any) {\n errors.push(`llms.txt: ${e.message}`);\n }\n }\n\n if (config.generators.llmsFullTxt) {\n try {\n const content = genLlmsFull(config);\n writeFileSync(join(outDir, 'llms-full.txt'), content, 'utf-8');\n files.push('llms-full.txt');\n } catch (e: any) {\n errors.push(`llms-full.txt: ${e.message}`);\n }\n }\n\n if (config.generators.rawMarkdown) {\n // Generate page .md files first (auto-extracted from build output)\n try {\n const generated = generatePageMarkdownFiles(config);\n for (const f of generated) {\n files.push(f.destination);\n }\n } catch (e: any) {\n errors.push(`page-markdown: ${e.message}`);\n }\n\n // Then copy handwritten .md from contentDir (these take priority, overwriting generated ones)\n try {\n const copied = copyMarkdownFiles(config);\n for (const f of copied) {\n files.push(f.destination);\n }\n } catch (e: any) {\n errors.push(`raw-markdown: ${e.message}`);\n }\n }\n\n if (config.generators.manifest) {\n try {\n const content = genManifest(config);\n writeFileSync(join(outDir, 'docs.json'), content, 'utf-8');\n files.push('docs.json');\n } catch (e: any) {\n errors.push(`docs.json: ${e.message}`);\n }\n }\n\n if (config.generators.sitemap) {\n try {\n const content = genSitemap(config);\n writeFileSync(join(outDir, 'sitemap.xml'), content, 'utf-8');\n files.push('sitemap.xml');\n } catch (e: any) {\n errors.push(`sitemap.xml: ${e.message}`);\n }\n }\n\n if (config.generators.aiIndex) {\n try {\n const content = genAIIndex(config);\n writeFileSync(join(outDir, 'ai-index.json'), content, 'utf-8');\n files.push('ai-index.json');\n } catch (e: any) {\n errors.push(`ai-index.json: ${e.message}`);\n }\n }\n\n if (config.generators.schema && config.schema.enabled) {\n try {\n const content = genSchema(config);\n writeFileSync(join(outDir, 'schema.json'), content, 'utf-8');\n files.push('schema.json');\n } catch (e: any) {\n errors.push(`schema.json: ${e.message}`);\n }\n }\n\n return { files, errors };\n}\n","/**\n * Shared HTML-to-markdown extraction utilities.\n * Used by all framework plugins for content extraction from build output.\n */\n\n/**\n * Extract text content from HTML and convert to markdown.\n * Removes scripts, styles, SVGs, and boilerplate (nav, header, footer).\n * Prefers <main> content when available.\n */\nexport function extractTextFromHtml(html: string): string {\n let text = html;\n // Remove scripts, styles, SVGs\n text = text.replace(/<script[\\s\\S]*?<\\/script>/gi, '');\n text = text.replace(/<style[\\s\\S]*?<\\/style>/gi, '');\n text = text.replace(/<svg[\\s\\S]*?<\\/svg>/gi, '');\n // Extract from <main> if available, otherwise strip boilerplate\n const mainMatch = text.match(/<main[^>]*>([\\s\\S]*)<\\/main>/i);\n if (mainMatch) {\n text = mainMatch[1];\n } else {\n text = text.replace(/<nav[\\s\\S]*?<\\/nav>/gi, '');\n text = text.replace(/<header[\\s\\S]*?<\\/header>/gi, '');\n text = text.replace(/<footer[\\s\\S]*?<\\/footer>/gi, '');\n }\n // Handle links wrapping block elements: flatten to inline link\n text = text.replace(/<a[^>]+href=[\"']([^\"']*)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, (_, url, inner) => {\n if (/<(?:h[1-6]|div|p|section)[^>]*>/i.test(inner)) {\n const cleanInner = inner.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n return `\\n[${cleanInner.slice(0, 120).trim()}](${url})\\n`;\n }\n return `[${inner}](${url})`;\n });\n // Convert headings (h1 -> ## since # is the page title)\n text = text.replace(/<h1[^>]*>([\\s\\S]*?)<\\/h1>/gi, '\\n\\n## $1\\n\\n');\n text = text.replace(/<h2[^>]*>([\\s\\S]*?)<\\/h2>/gi, '\\n\\n## $1\\n\\n');\n text = text.replace(/<h3[^>]*>([\\s\\S]*?)<\\/h3>/gi, '\\n\\n### $1\\n\\n');\n text = text.replace(/<h4[^>]*>([\\s\\S]*?)<\\/h4>/gi, '\\n\\n#### $1\\n\\n');\n text = text.replace(/<h5[^>]*>([\\s\\S]*?)<\\/h5>/gi, '\\n\\n##### $1\\n\\n');\n text = text.replace(/<h6[^>]*>([\\s\\S]*?)<\\/h6>/gi, '\\n\\n###### $1\\n\\n');\n // Convert remaining inline links\n text = text.replace(/<a[^>]+href=[\"']([^\"']*)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, '[$2]($1)');\n // Convert bold and italic\n text = text.replace(/<(?:strong|b)[^>]*>([\\s\\S]*?)<\\/(?:strong|b)>/gi, '**$1**');\n text = text.replace(/<(?:em|i)[^>]*>([\\s\\S]*?)<\\/(?:em|i)>/gi, '*$1*');\n // Convert list items\n text = text.replace(/<li[^>]*>([\\s\\S]*?)<\\/li>/gi, '\\n- $1');\n // Convert blockquotes\n text = text.replace(/<blockquote[^>]*>([\\s\\S]*?)<\\/blockquote>/gi, '\\n\\n> $1\\n\\n');\n // Convert hr and br\n text = text.replace(/<hr[^>]*\\/?>/gi, '\\n\\n---\\n\\n');\n text = text.replace(/<br[^>]*\\/?>/gi, '\\n');\n // Convert paragraphs\n text = text.replace(/<\\/p>/gi, '\\n\\n');\n text = text.replace(/<p[^>]*>/gi, '');\n // Other block elements as newlines\n text = text.replace(/<\\/?(?:div|section|article|header|main|aside|figure|figcaption|table|thead|tbody|tr|td|th|ul|ol|dl|dt|dd)[^>]*>/gi, '\\n');\n // Remove all remaining HTML tags\n text = text.replace(/<[^>]+>/g, '');\n // Decode HTML entities\n text = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/'/g, \"'\").replace(/ /g, ' ').replace(/©/g, '(c)');\n // Strip emojis (including flags)\n text = text.replace(/[\\u{1F1E0}-\\u{1FAFF}\\u{2600}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{200D}\\u{20E3}]/gu, '');\n // Clean up lines\n text = text.split('\\n').map(l => l.replace(/\\s+/g, ' ').trim()).join('\\n');\n text = text.replace(/\\n{3,}/g, '\\n\\n');\n // Clean whitespace inside markdown syntax\n text = text.replace(/\\[[\\s\\n]+/g, '[').replace(/[\\s\\n]+\\]/g, ']');\n text = text.replace(/(#{2,6})\\s*\\n+\\s*/g, '$1 ');\n // Remove empty headings\n text = text.replace(/^#{2,6}\\s*$/gm, '');\n text = text.replace(/\\n{3,}/g, '\\n\\n');\n return text.trim().slice(0, 8000);\n}\n\n/**\n * Extract title from HTML <title> tag. Splits on | and takes the first part.\n */\nexport function extractTitle(html: string): string | undefined {\n const match = html.match(/<title>([^<]*)<\\/title>/i);\n if (!match) return undefined;\n return match[1]?.split('|')[0]?.trim() || match[1];\n}\n\n/**\n * Extract description from HTML <meta name=\"description\"> tag.\n */\nexport function extractDescription(html: string): string | undefined {\n const match = html.match(/<meta\\s+name=[\"']description[\"']\\s+content=[\"']([^\"']*)[\"']/i);\n return match?.[1];\n}\n\n/**\n * Extract existing JSON-LD structured data from HTML.\n */\nexport function extractJsonLd(html: string): object[] {\n const schemas: object[] = [];\n const regex = /<script\\s+type=[\"']application\\/ld\\+json[\"'][^>]*>([\\s\\S]*?)<\\/script>/gi;\n let match;\n while ((match = regex.exec(html)) !== null) {\n try {\n const parsed = JSON.parse(match[1]);\n schemas.push(parsed);\n } catch { /* skip invalid JSON-LD */ }\n }\n return schemas;\n}\n\n/**\n * Convert HTML page to a complete markdown document with YAML frontmatter.\n */\nexport function htmlToMarkdown(html: string, pagePath: string, config: { url: string }): string {\n const rawTitle = extractTitle(html);\n const description = extractDescription(html);\n const textContent = extractTextFromHtml(html);\n\n const pageUrl = pagePath === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${pagePath}`;\n\n const lines: string[] = [];\n\n // YAML frontmatter\n lines.push('---');\n if (rawTitle) lines.push(`title: \"${rawTitle}\"`);\n if (description) lines.push(`description: \"${description}\"`);\n lines.push(`url: ${pageUrl}`);\n lines.push(`source: ${pageUrl}`);\n lines.push(`generated_by: aeo.js`);\n lines.push('---', '');\n\n if (rawTitle) lines.push(`# ${rawTitle}`, '');\n if (description) lines.push(`${description}`, '');\n\n if (textContent) lines.push(textContent);\n\n return lines.join('\\n');\n}\n","import type { ResolvedAeoConfig, PageEntry } from '../types';\n\nexport interface MetaTag {\n property?: string;\n name?: string;\n content: string;\n}\n\n/**\n * Generate Open Graph and Twitter Card meta tags for a page.\n */\nexport function generateOGTags(page: PageEntry, config: ResolvedAeoConfig): MetaTag[] {\n const tags: MetaTag[] = [];\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n const title = page.title || config.title;\n const description = page.description || config.description;\n\n // Open Graph\n tags.push({ property: 'og:type', content: config.og.type });\n tags.push({ property: 'og:title', content: title });\n if (description) tags.push({ property: 'og:description', content: description });\n tags.push({ property: 'og:url', content: pageUrl });\n tags.push({ property: 'og:site_name', content: config.title });\n if (config.og.image) tags.push({ property: 'og:image', content: config.og.image });\n\n // Twitter Card\n tags.push({ name: 'twitter:card', content: config.og.image ? 'summary_large_image' : 'summary' });\n tags.push({ name: 'twitter:title', content: title });\n if (description) tags.push({ name: 'twitter:description', content: description });\n if (config.og.twitterHandle) tags.push({ name: 'twitter:site', content: config.og.twitterHandle });\n if (config.og.image) tags.push({ name: 'twitter:image', content: config.og.image });\n\n return tags;\n}\n\n/**\n * Generate meta tag HTML strings for injection.\n */\nexport function generateOGTagsHtml(page: PageEntry, config: ResolvedAeoConfig): string {\n const tags = generateOGTags(page, config);\n return tags\n .map(tag => {\n if (tag.property) return `<meta property=\"${tag.property}\" content=\"${escapeAttr(tag.content)}\" />`;\n return `<meta name=\"${tag.name}\" content=\"${escapeAttr(tag.content)}\" />`;\n })\n .join('\\n ');\n}\n\nfunction escapeAttr(str: string): string {\n return str.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>');\n}\n","import type { ResolvedAeoConfig, PageEntry } from '../types';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\n\nexport interface AuditIssue {\n category: string;\n severity: 'error' | 'warning' | 'info';\n message: string;\n fix?: string;\n}\n\nexport interface AuditCategory {\n name: string;\n score: number; // 0-20\n maxScore: number; // 20\n checks: { label: string; passed: boolean; points: number }[];\n}\n\nexport interface AuditResult {\n score: number; // 0-100\n categories: AuditCategory[];\n issues: AuditIssue[];\n suggestions: string[];\n}\n\n/**\n * Audit a site's GEO readiness based on config and generated files.\n * Returns a 0-100 score across 5 categories (20 points each).\n */\nexport function auditSite(config: ResolvedAeoConfig): AuditResult {\n const categories: AuditCategory[] = [];\n const issues: AuditIssue[] = [];\n const suggestions: string[] = [];\n\n categories.push(auditAIAccess(config, issues));\n categories.push(auditContentStructure(config, issues, suggestions));\n categories.push(auditSchemaPresence(config, issues, suggestions));\n categories.push(auditMetaQuality(config, issues, suggestions));\n categories.push(auditCitability(config, issues, suggestions));\n\n const score = categories.reduce((sum, c) => sum + c.score, 0);\n\n return { score, categories, issues, suggestions };\n}\n\n/**\n * Category 1: AI Access (0-20)\n * Checks: robots.txt allows AI crawlers, llms.txt exists, sitemap.xml, ai-index.json, schema.json\n */\nfunction auditAIAccess(config: ResolvedAeoConfig, issues: AuditIssue[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n const outDir = config.outDir;\n\n // robots.txt enabled (4 pts)\n const robotsEnabled = config.generators.robotsTxt;\n checks.push({ label: 'robots.txt generation enabled', passed: robotsEnabled, points: robotsEnabled ? 4 : 0 });\n if (!robotsEnabled) {\n issues.push({ category: 'AI Access', severity: 'error', message: 'robots.txt generation is disabled', fix: 'Set generators.robotsTxt: true' });\n }\n\n // llms.txt enabled (4 pts)\n const llmsEnabled = config.generators.llmsTxt;\n checks.push({ label: 'llms.txt generation enabled', passed: llmsEnabled, points: llmsEnabled ? 4 : 0 });\n if (!llmsEnabled) {\n issues.push({ category: 'AI Access', severity: 'error', message: 'llms.txt generation is disabled — AI crawlers won\\'t find your content summary', fix: 'Set generators.llmsTxt: true' });\n }\n\n // sitemap.xml enabled (4 pts)\n const sitemapEnabled = config.generators.sitemap;\n checks.push({ label: 'sitemap.xml generation enabled', passed: sitemapEnabled, points: sitemapEnabled ? 4 : 0 });\n if (!sitemapEnabled) {\n issues.push({ category: 'AI Access', severity: 'warning', message: 'sitemap.xml generation is disabled', fix: 'Set generators.sitemap: true' });\n }\n\n // ai-index.json enabled (4 pts)\n const aiIndexEnabled = config.generators.aiIndex;\n checks.push({ label: 'ai-index.json generation enabled', passed: aiIndexEnabled, points: aiIndexEnabled ? 4 : 0 });\n if (!aiIndexEnabled) {\n issues.push({ category: 'AI Access', severity: 'warning', message: 'ai-index.json generation is disabled', fix: 'Set generators.aiIndex: true' });\n }\n\n // No restrictive disallow rules blocking AI (4 pts)\n const hasBlockingRules = config.robots.disallow.includes('/') || config.robots.disallow.includes('/*');\n const noBlocking = !hasBlockingRules;\n checks.push({ label: 'No blanket disallow rules blocking AI crawlers', passed: noBlocking, points: noBlocking ? 4 : 0 });\n if (hasBlockingRules) {\n issues.push({ category: 'AI Access', severity: 'error', message: 'robots.txt has blanket disallow (/ or /*) which blocks AI crawlers', fix: 'Remove overly broad disallow rules from robots.disallow' });\n }\n\n return {\n name: 'AI Access',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Category 2: Content Structure (0-20)\n * Checks: pages have content, heading hierarchy, paragraph length, lists/tables\n */\nfunction auditContentStructure(config: ResolvedAeoConfig, issues: AuditIssue[], suggestions: string[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n const pages = config.pages;\n\n // Has pages defined (4 pts)\n const hasPages = pages.length > 0;\n checks.push({ label: 'Pages are defined', passed: hasPages, points: hasPages ? 4 : 0 });\n if (!hasPages) {\n issues.push({ category: 'Content Structure', severity: 'error', message: 'No pages defined — AEO files will have no content', fix: 'Add pages to your config or ensure your framework plugin scans pages' });\n }\n\n // Pages have content (4 pts)\n const pagesWithContent = pages.filter(p => p.content && p.content.length > 50);\n const hasContent = pagesWithContent.length > 0;\n checks.push({ label: 'Pages have extractable content', passed: hasContent, points: hasContent ? 4 : 0 });\n if (!hasContent && hasPages) {\n issues.push({ category: 'Content Structure', severity: 'warning', message: 'No pages have substantial text content (>50 chars)', fix: 'Ensure pages have meaningful text content for AI extraction' });\n }\n\n // Content has headings (4 pts)\n const headingPattern = /^#{1,6}\\s|<h[1-6]/m;\n const pagesWithHeadings = pagesWithContent.filter(p => headingPattern.test(p.content || ''));\n const hasHeadings = pagesWithHeadings.length >= Math.max(1, Math.floor(pagesWithContent.length * 0.5));\n checks.push({ label: 'Content uses heading hierarchy', passed: hasHeadings, points: hasHeadings ? 4 : 0 });\n if (!hasHeadings && pagesWithContent.length > 0) {\n suggestions.push('Add structured headings (H1-H6) to improve AI content extraction');\n }\n\n // Reasonable paragraph length (4 pts — check across all pages)\n const goodParagraphLength = pagesWithContent.every(p => {\n const paragraphs = (p.content || '').split(/\\n\\n+/).filter(p => p.trim().length > 20);\n if (paragraphs.length === 0) return true;\n const avgWords = paragraphs.reduce((sum, para) => sum + para.split(/\\s+/).length, 0) / paragraphs.length;\n return avgWords <= 200; // paragraphs shouldn't be walls of text\n });\n checks.push({ label: 'Paragraphs are reasonable length (<200 words avg)', passed: goodParagraphLength, points: goodParagraphLength ? 4 : 0 });\n if (!goodParagraphLength) {\n suggestions.push('Break up long paragraphs (>200 words) for better AI extraction — aim for 100-167 words');\n }\n\n // Multiple pages (4 pts)\n const multiplePages = pages.length >= 3;\n checks.push({ label: 'Site has 3+ pages for comprehensive coverage', passed: multiplePages, points: multiplePages ? 4 : 0 });\n if (!multiplePages && hasPages) {\n suggestions.push('Add more pages to improve site coverage for AI crawlers');\n }\n\n return {\n name: 'Content Structure',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Category 3: Schema Presence (0-20)\n * Checks: schema enabled, organization info, sameAs, defaultType, schema.json generated\n */\nfunction auditSchemaPresence(config: ResolvedAeoConfig, issues: AuditIssue[], suggestions: string[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n\n // Schema enabled (4 pts)\n const schemaEnabled = config.schema.enabled && config.generators.schema;\n checks.push({ label: 'Schema.org/JSON-LD generation enabled', passed: schemaEnabled, points: schemaEnabled ? 4 : 0 });\n if (!schemaEnabled) {\n issues.push({ category: 'Schema Presence', severity: 'error', message: 'Schema.org generation is disabled', fix: 'Set schema.enabled: true and generators.schema: true' });\n }\n\n // Organization name set (4 pts)\n const hasOrgName = config.schema.organization.name !== '' && config.schema.organization.name !== 'My Site';\n checks.push({ label: 'Organization name configured', passed: hasOrgName, points: hasOrgName ? 4 : 0 });\n if (!hasOrgName) {\n issues.push({ category: 'Schema Presence', severity: 'warning', message: 'Organization name is not configured (using default)', fix: 'Set schema.organization.name to your actual organization name' });\n }\n\n // Organization logo (4 pts)\n const hasLogo = !!config.schema.organization.logo;\n checks.push({ label: 'Organization logo URL set', passed: hasLogo, points: hasLogo ? 4 : 0 });\n if (!hasLogo) {\n suggestions.push('Add schema.organization.logo for richer search results and AI knowledge');\n }\n\n // sameAs social profiles (4 pts)\n const hasSameAs = config.schema.organization.sameAs.length > 0;\n checks.push({ label: 'Social profiles linked (sameAs)', passed: hasSameAs, points: hasSameAs ? 4 : 0 });\n if (!hasSameAs) {\n issues.push({ category: 'Schema Presence', severity: 'warning', message: 'No social profiles (sameAs) — critical for GEO/E-E-A-T signals', fix: 'Add schema.organization.sameAs with social profile URLs' });\n }\n\n // URL is not default (4 pts)\n const hasRealUrl = config.url !== 'https://example.com' && config.url !== '';\n checks.push({ label: 'Site URL is configured (not default)', passed: hasRealUrl, points: hasRealUrl ? 4 : 0 });\n if (!hasRealUrl) {\n issues.push({ category: 'Schema Presence', severity: 'error', message: 'Site URL is still the default (https://example.com)', fix: 'Set url to your actual site URL' });\n }\n\n return {\n name: 'Schema Presence',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Category 4: Meta Quality (0-20)\n * Checks: title length, description length, OG tags, pages have titles\n */\nfunction auditMetaQuality(config: ResolvedAeoConfig, issues: AuditIssue[], suggestions: string[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n\n // Site title exists and is good length (4 pts)\n const titleLen = config.title.length;\n const goodTitle = titleLen >= 10 && titleLen <= 70;\n checks.push({ label: 'Site title is 10-70 characters', passed: goodTitle, points: goodTitle ? 4 : 0 });\n if (titleLen < 10) {\n issues.push({ category: 'Meta Quality', severity: 'warning', message: `Site title is too short (${titleLen} chars)`, fix: 'Use a descriptive title between 10-70 characters' });\n } else if (titleLen > 70) {\n suggestions.push(`Site title is long (${titleLen} chars) — consider shortening to under 70`);\n }\n\n // Description exists and is good length (4 pts)\n const descLen = config.description.length;\n const goodDesc = descLen >= 50 && descLen <= 200;\n checks.push({ label: 'Site description is 50-200 characters', passed: goodDesc, points: goodDesc ? 4 : 0 });\n if (descLen === 0) {\n issues.push({ category: 'Meta Quality', severity: 'error', message: 'No site description configured', fix: 'Add a description (50-200 characters)' });\n } else if (descLen < 50) {\n issues.push({ category: 'Meta Quality', severity: 'warning', message: `Description is too short (${descLen} chars)`, fix: 'Expand description to 50-200 characters' });\n }\n\n // OG tags enabled (4 pts)\n const ogEnabled = config.og.enabled;\n checks.push({ label: 'Open Graph meta tags enabled', passed: ogEnabled, points: ogEnabled ? 4 : 0 });\n if (!ogEnabled) {\n issues.push({ category: 'Meta Quality', severity: 'warning', message: 'OG meta tags are disabled — social sharing and AI previews will be limited', fix: 'Set og.enabled: true' });\n }\n\n // Pages have titles (4 pts)\n const pagesWithTitles = config.pages.filter(p => p.title && p.title.length > 0);\n const titleCoverage = config.pages.length > 0 ? pagesWithTitles.length / config.pages.length : 0;\n const goodTitleCoverage = titleCoverage >= 0.8;\n checks.push({ label: '80%+ of pages have titles', passed: goodTitleCoverage, points: goodTitleCoverage ? 4 : 0 });\n if (!goodTitleCoverage && config.pages.length > 0) {\n issues.push({ category: 'Meta Quality', severity: 'warning', message: `Only ${pagesWithTitles.length}/${config.pages.length} pages have titles`, fix: 'Add titles to all pages' });\n }\n\n // Pages have descriptions (4 pts)\n const pagesWithDesc = config.pages.filter(p => p.description && p.description.length > 0);\n const descCoverage = config.pages.length > 0 ? pagesWithDesc.length / config.pages.length : 0;\n const goodDescCoverage = descCoverage >= 0.5;\n checks.push({ label: '50%+ of pages have descriptions', passed: goodDescCoverage, points: goodDescCoverage ? 4 : 0 });\n if (!goodDescCoverage && config.pages.length > 0) {\n suggestions.push(`Only ${pagesWithDesc.length}/${config.pages.length} pages have descriptions — add per-page descriptions`);\n }\n\n return {\n name: 'Meta Quality',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Category 5: Citability (0-20)\n * Checks: self-contained paragraphs, direct answers, statistical content, FAQ patterns\n */\nfunction auditCitability(config: ResolvedAeoConfig, issues: AuditIssue[], suggestions: string[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n const allContent = config.pages.map(p => p.content || '').join('\\n\\n');\n\n // Has direct answer patterns (4 pts) — sentences that start with a noun/subject and make a claim\n const directAnswerPattern = /^[A-Z][^.!?]{20,150}[.!?]/m;\n const hasDirectAnswers = directAnswerPattern.test(allContent);\n checks.push({ label: 'Content has direct answer patterns', passed: hasDirectAnswers, points: hasDirectAnswers ? 4 : 0 });\n if (!hasDirectAnswers) {\n suggestions.push('Add self-contained factual statements that AI can cite directly');\n }\n\n // Has statistical/factual content (4 pts) — numbers, percentages, dates\n const statPattern = /\\d+%|\\$[\\d,.]+|\\d{4}|\\d+\\s*(million|billion|thousand|users|customers|downloads)/i;\n const hasStats = statPattern.test(allContent);\n checks.push({ label: 'Content includes statistics/factual claims', passed: hasStats, points: hasStats ? 4 : 0 });\n if (!hasStats) {\n suggestions.push('Include concrete statistics, numbers, and dates — AI favors content with factual claims');\n }\n\n // Has FAQ-like patterns (4 pts)\n const faqPattern = /^#{1,6}\\s+.+\\?\\s*$/m;\n const hasFaq = faqPattern.test(allContent);\n checks.push({ label: 'Content has FAQ patterns (question headings)', passed: hasFaq, points: hasFaq ? 4 : 0 });\n if (!hasFaq) {\n suggestions.push('Add FAQ sections with question headings — these generate FAQPage schema automatically');\n }\n\n // Has structured lists (4 pts)\n const listPattern = /^[\\s]*[-*+]\\s|^\\d+\\.\\s/m;\n const hasLists = listPattern.test(allContent);\n checks.push({ label: 'Content uses lists for structured information', passed: hasLists, points: hasLists ? 4 : 0 });\n if (!hasLists) {\n suggestions.push('Use bullet or numbered lists for key information — improves AI extraction');\n }\n\n // Content is substantial (4 pts) — at least 500 words total\n const wordCount = allContent.split(/\\s+/).filter(w => w.length > 0).length;\n const substantialContent = wordCount >= 500;\n checks.push({ label: 'Total content is substantial (500+ words)', passed: substantialContent, points: substantialContent ? 4 : 0 });\n if (!substantialContent) {\n issues.push({ category: 'Citability', severity: 'warning', message: `Total content is only ${wordCount} words`, fix: 'Add more content — aim for at least 500 words across all pages' });\n }\n\n return {\n name: 'Citability',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Format audit result as a human-readable report string.\n */\nexport function formatAuditReport(result: AuditResult): string {\n const lines: string[] = [];\n const grade = getGrade(result.score);\n\n lines.push(`GEO Readiness Score: ${result.score}/100 (${grade})`);\n lines.push('═'.repeat(50));\n lines.push('');\n\n for (const cat of result.categories) {\n lines.push(`${cat.name}: ${cat.score}/${cat.maxScore}`);\n const bar = '█'.repeat(cat.score) + '░'.repeat(cat.maxScore - cat.score);\n lines.push(` ${bar}`);\n for (const check of cat.checks) {\n lines.push(` ${check.passed ? '+' : '-'} ${check.label}`);\n }\n lines.push('');\n }\n\n if (result.issues.length > 0) {\n lines.push('Issues:');\n for (const issue of result.issues) {\n const icon = issue.severity === 'error' ? '!' : issue.severity === 'warning' ? '~' : 'i';\n lines.push(` ${icon} [${issue.category}] ${issue.message}`);\n if (issue.fix) lines.push(` Fix: ${issue.fix}`);\n }\n lines.push('');\n }\n\n if (result.suggestions.length > 0) {\n lines.push('Suggestions:');\n for (const suggestion of result.suggestions) {\n lines.push(` * ${suggestion}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nexport function getGrade(score: number): string {\n if (score >= 90) return 'Excellent';\n if (score >= 75) return 'Good';\n if (score >= 50) return 'Fair';\n if (score >= 25) return 'Needs Work';\n return 'Poor';\n}\n","import type { PageEntry, ResolvedAeoConfig } from '../types';\n\nexport interface CitabilityDimension {\n name: string;\n score: number; // 0-25\n maxScore: number; // 25\n details: string;\n}\n\nexport interface ContentHint {\n type: 'error' | 'warning' | 'suggestion';\n message: string;\n line?: number;\n}\n\nexport interface PageCitabilityResult {\n pathname: string;\n score: number; // 0-100\n dimensions: CitabilityDimension[];\n hints: ContentHint[];\n}\n\nexport interface SiteCitabilityResult {\n averageScore: number;\n pages: PageCitabilityResult[];\n}\n\n/**\n * Score a single page's AI citability (0-100).\n * Four dimensions, 25 points each:\n * 1. Answer Blocks — direct, self-contained answers\n * 2. Self-Containment — paragraphs make sense without context\n * 3. Statistical Density — numbers, facts, named entities\n * 4. Structure Quality — heading hierarchy, lists, summaries\n */\nexport function scorePageCitability(page: PageEntry): PageCitabilityResult {\n const content = page.content || '';\n const dimensions: CitabilityDimension[] = [];\n const hints: ContentHint[] = [];\n\n dimensions.push(scoreAnswerBlocks(content, hints));\n dimensions.push(scoreSelfContainment(content, hints));\n dimensions.push(scoreStatisticalDensity(content, hints));\n dimensions.push(scoreStructureQuality(content, hints));\n\n const score = dimensions.reduce((sum, d) => sum + d.score, 0);\n\n return {\n pathname: page.pathname,\n score,\n dimensions,\n hints,\n };\n}\n\n/**\n * Score all pages in a site config.\n */\nexport function scoreSiteCitability(config: ResolvedAeoConfig): SiteCitabilityResult {\n const pages = config.pages.map(p => scorePageCitability(p));\n const averageScore = pages.length > 0\n ? Math.round(pages.reduce((sum, p) => sum + p.score, 0) / pages.length)\n : 0;\n\n return { averageScore, pages };\n}\n\n/**\n * Dimension 1: Answer Blocks (0-25)\n * Checks for direct, self-contained answer paragraphs.\n * Good answers: start with a noun/subject, 20-200 words, contain a factual claim.\n */\nfunction scoreAnswerBlocks(content: string, hints: ContentHint[]): CitabilityDimension {\n if (!content.trim()) {\n return { name: 'Answer Blocks', score: 0, maxScore: 25, details: 'No content' };\n }\n\n const paragraphs = splitParagraphs(content);\n let answerCount = 0;\n\n for (let i = 0; i < paragraphs.length; i++) {\n const para = paragraphs[i];\n const words = para.text.split(/\\s+/).length;\n\n // Skip headings and very short paragraphs\n if (para.text.startsWith('#') || words < 15) continue;\n\n // Good answer: starts with capital letter (not pronoun), 20-200 words\n const startsWithSubject = /^[A-Z][a-z]/.test(para.text) && !/^(This|That|These|Those|It|They|We|He|She|I)\\b/.test(para.text);\n const goodLength = words >= 20 && words <= 200;\n\n if (startsWithSubject && goodLength) {\n answerCount++;\n }\n }\n\n // Score: up to 25 based on answer density\n const answerRatio = paragraphs.length > 0 ? answerCount / Math.max(paragraphs.filter(p => !p.text.startsWith('#')).length, 1) : 0;\n let score = 0;\n if (answerCount >= 3 && answerRatio >= 0.5) score = 25;\n else if (answerCount >= 2 && answerRatio >= 0.3) score = 20;\n else if (answerCount >= 1) score = 12;\n else score = 0;\n\n if (answerCount === 0) {\n hints.push({ type: 'warning', message: 'No direct answer paragraphs found — add self-contained factual paragraphs that start with a clear subject' });\n }\n\n // Flag long paragraphs\n for (const para of paragraphs) {\n const words = para.text.split(/\\s+/).length;\n if (words > 200 && !para.text.startsWith('#')) {\n hints.push({ type: 'suggestion', message: `Paragraph at line ${para.line} is ${words} words — split for better AI extraction (aim for <200)`, line: para.line });\n }\n }\n\n return { name: 'Answer Blocks', score, maxScore: 25, details: `${answerCount} answer-quality paragraphs found` };\n}\n\n/**\n * Dimension 2: Self-Containment (0-25)\n * Penalizes paragraphs that depend on surrounding context.\n */\nfunction scoreSelfContainment(content: string, hints: ContentHint[]): CitabilityDimension {\n if (!content.trim()) {\n return { name: 'Self-Containment', score: 0, maxScore: 25, details: 'No content' };\n }\n\n const paragraphs = splitParagraphs(content).filter(p => !p.text.startsWith('#') && p.text.split(/\\s+/).length >= 10);\n if (paragraphs.length === 0) {\n return { name: 'Self-Containment', score: 5, maxScore: 25, details: 'No substantial paragraphs' };\n }\n\n // Context-dependent patterns\n const contextPatterns = [\n /^(As mentioned|As noted|As described|As shown|As stated|As discussed)\\b/i,\n /^(However|Furthermore|Moreover|Additionally|In addition|Nevertheless)\\b/,\n /\\b(above|below|previously|the following|as follows|see also)\\b/i,\n /^(This|That|These|Those|It) (is|was|are|were|has|have|will|can|should|means)\\b/,\n ];\n\n let contextDependentCount = 0;\n for (const para of paragraphs) {\n const isContextDependent = contextPatterns.some(p => p.test(para.text));\n if (isContextDependent) {\n contextDependentCount++;\n }\n }\n\n const selfContainedRatio = 1 - (contextDependentCount / paragraphs.length);\n let score: number;\n if (selfContainedRatio >= 0.8) score = 25;\n else if (selfContainedRatio >= 0.6) score = 18;\n else if (selfContainedRatio >= 0.4) score = 12;\n else score = 5;\n\n if (contextDependentCount > 0) {\n hints.push({ type: 'suggestion', message: `${contextDependentCount} paragraph(s) depend on surrounding context — rephrase to be self-contained for better AI citation` });\n }\n\n return { name: 'Self-Containment', score, maxScore: 25, details: `${Math.round(selfContainedRatio * 100)}% of paragraphs are self-contained` };\n}\n\n/**\n * Dimension 3: Statistical Density (0-25)\n * Scores presence of numbers, percentages, dates, named entities.\n */\nfunction scoreStatisticalDensity(content: string, hints: ContentHint[]): CitabilityDimension {\n if (!content.trim()) {\n return { name: 'Statistical Density', score: 0, maxScore: 25, details: 'No content' };\n }\n\n const patterns = {\n percentages: /\\d+(\\.\\d+)?%/g,\n currencies: /\\$[\\d,.]+|\\€[\\d,.]+|£[\\d,.]+/g,\n years: /\\b(19|20)\\d{2}\\b/g,\n quantities: /\\b\\d+[\\s,]*(million|billion|thousand|hundred|K|M|B)\\b/gi,\n metrics: /\\b\\d+(\\.\\d+)?\\s*(users|customers|downloads|visitors|employees|countries|cities|hours|minutes|seconds|pages|files|requests)\\b/gi,\n comparisons: /\\b\\d+x\\b|\\b\\d+(\\.\\d+)?%\\s*(faster|slower|more|less|better|worse|increase|decrease|growth|reduction)\\b/gi,\n };\n\n let totalMatches = 0;\n for (const [, pattern] of Object.entries(patterns)) {\n const matches = content.match(pattern);\n if (matches) totalMatches += matches.length;\n }\n\n const words = content.split(/\\s+/).length;\n const density = words > 0 ? totalMatches / (words / 100) : 0; // matches per 100 words\n\n let score: number;\n if (density >= 3) score = 25;\n else if (density >= 1.5) score = 20;\n else if (density >= 0.5) score = 12;\n else if (totalMatches > 0) score = 6;\n else score = 0;\n\n if (totalMatches === 0) {\n hints.push({ type: 'suggestion', message: 'No statistics or factual claims found — AI favors content with concrete numbers, percentages, and dates' });\n }\n\n return { name: 'Statistical Density', score, maxScore: 25, details: `${totalMatches} statistical claims (${density.toFixed(1)} per 100 words)` };\n}\n\n/**\n * Dimension 4: Structure Quality (0-25)\n * Checks heading hierarchy, lists, short paragraphs, summary/TL;DR.\n */\nfunction scoreStructureQuality(content: string, hints: ContentHint[]): CitabilityDimension {\n if (!content.trim()) {\n return { name: 'Structure Quality', score: 0, maxScore: 25, details: 'No content' };\n }\n\n let points = 0;\n const details: string[] = [];\n\n // Has headings (7 pts)\n const headingPattern = /^#{1,6}\\s/m;\n const headings = content.match(/^#{1,6}\\s.+$/gm) || [];\n if (headings.length > 0) {\n points += 7;\n details.push(`${headings.length} headings`);\n } else {\n hints.push({ type: 'warning', message: 'No headings found — add H1-H6 headings to structure content for AI extraction' });\n }\n\n // Has lists (6 pts)\n const listItems = content.match(/^[\\s]*[-*+]\\s.+$|^\\d+\\.\\s.+$/gm) || [];\n if (listItems.length >= 3) {\n points += 6;\n details.push(`${listItems.length} list items`);\n } else if (listItems.length > 0) {\n points += 3;\n details.push(`${listItems.length} list items`);\n } else {\n hints.push({ type: 'suggestion', message: 'No lists found — use bullet or numbered lists for key information' });\n }\n\n // Reasonable paragraph lengths (6 pts)\n const paragraphs = splitParagraphs(content).filter(p => !p.text.startsWith('#') && p.text.split(/\\s+/).length >= 10);\n const avgWords = paragraphs.length > 0\n ? paragraphs.reduce((sum, p) => sum + p.text.split(/\\s+/).length, 0) / paragraphs.length\n : 0;\n if (avgWords > 0 && avgWords <= 167) {\n points += 6;\n details.push(`avg ${Math.round(avgWords)} words/paragraph`);\n } else if (avgWords > 0 && avgWords <= 250) {\n points += 3;\n details.push(`avg ${Math.round(avgWords)} words/paragraph (aim for <167)`);\n }\n\n // Has summary/TL;DR or intro paragraph (6 pts)\n const hasSummary = /^(#{1,3}\\s*)?(summary|tl;?dr|overview|introduction|key takeaways|in brief)\\s*$/im.test(content);\n const firstPara = paragraphs[0];\n const hasShortIntro = firstPara && firstPara.text.split(/\\s+/).length <= 60;\n if (hasSummary) {\n points += 6;\n details.push('has summary section');\n } else if (hasShortIntro) {\n points += 3;\n details.push('has short intro');\n } else {\n hints.push({ type: 'suggestion', message: 'Add a summary or TL;DR section at the top — helps AI extract the key message' });\n }\n\n return { name: 'Structure Quality', score: Math.min(points, 25), maxScore: 25, details: details.join(', ') || 'minimal structure' };\n}\n\n/**\n * Split content into paragraphs with line numbers.\n */\nfunction splitParagraphs(content: string): { text: string; line: number }[] {\n const lines = content.split('\\n');\n const paragraphs: { text: string; line: number }[] = [];\n let currentText = '';\n let currentLine = 1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line === '') {\n if (currentText) {\n paragraphs.push({ text: currentText.trim(), line: currentLine });\n currentText = '';\n }\n } else {\n if (!currentText) currentLine = i + 1;\n currentText += (currentText ? ' ' : '') + line;\n }\n }\n if (currentText) {\n paragraphs.push({ text: currentText.trim(), line: currentLine });\n }\n\n return paragraphs;\n}\n\n/**\n * Format a page citability result as a human-readable string.\n */\nexport function formatPageCitability(result: PageCitabilityResult): string {\n const lines: string[] = [];\n\n lines.push(`Page: ${result.pathname} — Score: ${result.score}/100`);\n lines.push('─'.repeat(40));\n\n for (const dim of result.dimensions) {\n const bar = '█'.repeat(dim.score) + '░'.repeat(dim.maxScore - dim.score);\n lines.push(` ${dim.name}: ${dim.score}/${dim.maxScore} ${bar}`);\n lines.push(` ${dim.details}`);\n }\n\n if (result.hints.length > 0) {\n lines.push('');\n lines.push(' Hints:');\n for (const hint of result.hints) {\n const icon = hint.type === 'error' ? '!' : hint.type === 'warning' ? '~' : '*';\n const loc = hint.line ? ` (line ${hint.line})` : '';\n lines.push(` ${icon} ${hint.message}${loc}`);\n }\n }\n\n return lines.join('\\n');\n}\n","import type { AuditResult } from './audit';\nimport type { PageCitabilityResult } from './citability';\n\nexport interface PlatformHint {\n platform: string;\n status: 'good' | 'needs-work' | 'critical';\n tips: string[];\n}\n\n/**\n * Generate platform-specific optimization hints based on audit and citability results.\n * These are static recommendations — no live API calls.\n */\nexport function generatePlatformHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint[] {\n const hints: PlatformHint[] = [];\n\n hints.push(chatgptHints(audit, citability));\n hints.push(perplexityHints(audit, citability));\n hints.push(googleAIHints(audit, citability));\n hints.push(bingCopilotHints(audit, citability));\n\n return hints;\n}\n\nfunction chatgptHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint {\n const tips: string[] = [];\n const aiAccess = audit.categories.find(c => c.name === 'AI Access');\n const schema = audit.categories.find(c => c.name === 'Schema Presence');\n const content = audit.categories.find(c => c.name === 'Content Structure');\n\n // ChatGPT/SearchGPT prioritizes: GPTBot access, Article schema, answer blocks\n const llmsCheck = aiAccess?.checks.find(c => c.label.includes('llms.txt'));\n if (!llmsCheck?.passed) {\n tips.push('Enable llms.txt — ChatGPT uses this to understand your site content');\n }\n\n const robotsCheck = aiAccess?.checks.find(c => c.label.includes('blanket disallow'));\n if (!robotsCheck?.passed) {\n tips.push('Allow GPTBot in robots.txt — blanket disallow blocks ChatGPT crawling');\n }\n\n if (schema && schema.score < 12) {\n tips.push('Add Article or WebPage schema — helps ChatGPT extract structured content');\n }\n\n if (citability && citability.averageScore < 50) {\n tips.push('Improve answer blocks — ChatGPT citations favor self-contained factual paragraphs');\n }\n\n if (content && content.score < 12) {\n tips.push('Add more structured content — headings and paragraphs help SearchGPT parse your pages');\n }\n\n if (tips.length === 0) tips.push('Your site is well-optimized for ChatGPT/SearchGPT');\n\n return {\n platform: 'ChatGPT / SearchGPT',\n status: tips.length <= 1 ? 'good' : tips.length <= 3 ? 'needs-work' : 'critical',\n tips,\n };\n}\n\nfunction perplexityHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint {\n const tips: string[] = [];\n const meta = audit.categories.find(c => c.name === 'Meta Quality');\n const citabilityScore = audit.categories.find(c => c.name === 'Citability');\n\n // Perplexity prioritizes: statistical claims, source citations, heading hierarchy\n if (citabilityScore && citabilityScore.score < 12) {\n tips.push('Add statistical claims and concrete data — Perplexity favors cite-able facts');\n }\n\n if (meta && meta.score < 12) {\n tips.push('Improve page titles and descriptions — Perplexity uses meta tags for source attribution');\n }\n\n const faqCheck = citabilityScore?.checks.find(c => c.label.includes('FAQ'));\n if (!faqCheck?.passed) {\n tips.push('Add FAQ sections with question headings — Perplexity surfaces Q&A content prominently');\n }\n\n if (citability && citability.averageScore < 40) {\n tips.push('Improve self-contained paragraphs — Perplexity extracts and cites individual passages');\n }\n\n if (tips.length === 0) tips.push('Your site is well-optimized for Perplexity');\n\n return {\n platform: 'Perplexity',\n status: tips.length <= 1 ? 'good' : tips.length <= 3 ? 'needs-work' : 'critical',\n tips,\n };\n}\n\nfunction googleAIHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint {\n const tips: string[] = [];\n const schema = audit.categories.find(c => c.name === 'Schema Presence');\n\n // Google AI Overviews: E-E-A-T signals, Organization+sameAs, freshness, structured data\n const orgCheck = schema?.checks.find(c => c.label.includes('Organization'));\n if (!orgCheck?.passed) {\n tips.push('Configure Organization name — Google AI uses this for E-E-A-T authority signals');\n }\n\n const sameAsCheck = schema?.checks.find(c => c.label.includes('sameAs'));\n if (!sameAsCheck?.passed) {\n tips.push('Add sameAs social profiles — critical for Google Knowledge Panel and E-E-A-T');\n }\n\n const logoCheck = schema?.checks.find(c => c.label.includes('logo'));\n if (!logoCheck?.passed) {\n tips.push('Add Organization logo — enhances Google search presence and AI Overviews');\n }\n\n const schemaEnabled = schema?.checks.find(c => c.label.includes('JSON-LD'));\n if (!schemaEnabled?.passed) {\n tips.push('Enable Schema.org/JSON-LD — Google AI Overviews heavily rely on structured data');\n }\n\n if (tips.length === 0) tips.push('Your site is well-optimized for Google AI Overviews');\n\n return {\n platform: 'Google AI Overviews',\n status: tips.length <= 1 ? 'good' : tips.length <= 3 ? 'needs-work' : 'critical',\n tips,\n };\n}\n\nfunction bingCopilotHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint {\n const tips: string[] = [];\n const aiAccess = audit.categories.find(c => c.name === 'AI Access');\n const meta = audit.categories.find(c => c.name === 'Meta Quality');\n\n // Bing Copilot: Bingbot access, OG metadata, FAQ content, sitemap\n const robotsCheck = aiAccess?.checks.find(c => c.label.includes('blanket disallow'));\n if (!robotsCheck?.passed) {\n tips.push('Remove blanket disallow — Bing Copilot requires Bingbot access');\n }\n\n const sitemapCheck = aiAccess?.checks.find(c => c.label.includes('sitemap'));\n if (!sitemapCheck?.passed) {\n tips.push('Enable sitemap.xml — Bing Copilot relies on sitemaps for content discovery');\n }\n\n const ogCheck = meta?.checks.find(c => c.label.includes('Open Graph'));\n if (!ogCheck?.passed) {\n tips.push('Enable OG meta tags — Bing Copilot uses OG metadata for rich answers');\n }\n\n if (citability && citability.averageScore < 40) {\n tips.push('Improve content structure — Bing Copilot favors well-organized content with clear answers');\n }\n\n if (tips.length === 0) tips.push('Your site is well-optimized for Bing Copilot');\n\n return {\n platform: 'Bing Copilot',\n status: tips.length <= 1 ? 'good' : tips.length <= 3 ? 'needs-work' : 'critical',\n tips,\n };\n}\n","import type { ResolvedAeoConfig } from '../types';\nimport { auditSite, formatAuditReport } from './audit';\nimport type { AuditResult } from './audit';\nimport { scoreSiteCitability, formatPageCitability } from './citability';\nimport type { SiteCitabilityResult } from './citability';\nimport { generatePlatformHints } from './platform-hints';\nimport type { PlatformHint } from './platform-hints';\n\nexport interface AeoReport {\n generatedAt: string;\n site: {\n title: string;\n url: string;\n pageCount: number;\n };\n audit: AuditResult;\n citability: SiteCitabilityResult;\n platformHints: PlatformHint[];\n}\n\n/**\n * Generate a comprehensive AEO/GEO report for a site.\n */\nexport function generateReport(config: ResolvedAeoConfig): AeoReport {\n const audit = auditSite(config);\n const citability = scoreSiteCitability(config);\n const platformHints = generatePlatformHints(audit, citability);\n\n return {\n generatedAt: new Date().toISOString(),\n site: {\n title: config.title,\n url: config.url,\n pageCount: config.pages.length,\n },\n audit,\n citability,\n platformHints,\n };\n}\n\n/**\n * Format the report as markdown.\n */\nexport function formatReportMarkdown(report: AeoReport): string {\n const lines: string[] = [];\n\n lines.push(`# AEO/GEO Report — ${report.site.title}`);\n lines.push('');\n lines.push(`Generated: ${report.generatedAt}`);\n lines.push(`URL: ${report.site.url}`);\n lines.push(`Pages: ${report.site.pageCount}`);\n lines.push('');\n\n // GEO Readiness\n lines.push('## GEO Readiness Score');\n lines.push('');\n lines.push(formatAuditReport(report.audit));\n lines.push('');\n\n // Citability\n lines.push('## AI Citability');\n lines.push('');\n lines.push(`Average Citability Score: ${report.citability.averageScore}/100`);\n lines.push('');\n for (const page of report.citability.pages) {\n lines.push(formatPageCitability(page));\n lines.push('');\n }\n\n // Platform Insights\n lines.push('## Platform Optimization');\n lines.push('');\n for (const hint of report.platformHints) {\n const statusIcon = hint.status === 'good' ? '+' : hint.status === 'needs-work' ? '~' : '!';\n lines.push(`### ${statusIcon} ${hint.platform} (${hint.status})`);\n lines.push('');\n for (const tip of hint.tips) {\n lines.push(`- ${tip}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format the report as JSON string.\n */\nexport function formatReportJson(report: AeoReport): string {\n return JSON.stringify(report, null, 2);\n}\n","import type { AeoConfig } from './types';\n\nexport const VERSION = '0.0.4';\n\nexport function defineConfig(config: AeoConfig): AeoConfig {\n return config;\n}\n\n// Export all types\nexport type {\n AeoConfig,\n ResolvedAeoConfig,\n PageEntry,\n DocEntry,\n AeoManifest,\n MarkdownFile,\n ManifestEntry,\n AIIndexEntry,\n FrameworkType,\n FrameworkInfo\n} from './types';\n\n// Export core functions\nexport { detectFramework } from './core/detect';\nexport { generateAEOFiles as generateAll, generateAEOFiles } from './core/generate';\nexport { resolveConfig, validateConfig } from './core/utils';\nexport { generateSchema, generateSchemaObjects, generateSiteSchemas, generatePageSchemas, generateJsonLdScript } from './core/schema';\nexport { extractTextFromHtml, extractTitle, extractDescription, extractJsonLd, htmlToMarkdown } from './core/html-extract';\nexport { generateOGTags, generateOGTagsHtml } from './core/opengraph';\nexport { auditSite, formatAuditReport, getGrade } from './core/audit';\nexport type { AuditResult, AuditCategory, AuditIssue } from './core/audit';\nexport type { MetaTag } from './core/opengraph';\nexport { scorePageCitability, scoreSiteCitability, formatPageCitability } from './core/citability';\nexport type { PageCitabilityResult, SiteCitabilityResult, CitabilityDimension, ContentHint } from './core/citability';\nexport { generateReport, formatReportMarkdown, formatReportJson } from './core/report';\nexport type { AeoReport } from './core/report';\nexport { generatePlatformHints } from './core/platform-hints';\nexport type { PlatformHint } from './core/platform-hints';"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/utils.ts","../src/core/detect.ts","../src/core/robots.ts","../src/core/llms-txt.ts","../src/core/llms-full.ts","../src/core/raw-markdown.ts","../src/core/manifest.ts","../src/core/sitemap.ts","../src/core/ai-index.ts","../src/core/schema.ts","../src/core/generate-wrapper.ts","../src/core/html-extract.ts","../src/core/opengraph.ts","../src/core/audit.ts","../src/core/citability.ts","../src/core/platform-hints.ts","../src/core/report.ts","../src/index.ts"],"names":["join","existsSync","readFileSync","readdirSync","statSync","extname","relative","mkdirSync","dirname","copyFileSync","writeFileSync","createHash","index","extractTitle","p"],"mappings":"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","file":"index.js","sourcesContent":["import { readFileSync, existsSync, readdirSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { AeoConfig, ResolvedAeoConfig, MarkdownFile } from '../types';\nimport { detectFramework } from './detect';\nimport { minimatch } from 'minimatch';\n\nexport function validateConfig(config: AeoConfig): string[] {\n const warnings: string[] = [];\n\n if (config.url && !/^https?:\\/\\//.test(config.url)) {\n warnings.push(`url \"${config.url}\" should start with http:// or https://`);\n }\n\n if (config.url === 'https://example.com') {\n warnings.push('url is set to the default \"https://example.com\" — set your actual site URL');\n }\n\n if (!config.title) {\n warnings.push('title is not set — your generated files will use \"My Site\"');\n }\n\n if (config.robots?.crawlDelay && config.robots.crawlDelay < 0) {\n warnings.push('robots.crawlDelay should be a positive number');\n }\n\n return warnings;\n}\n\nexport function resolveConfig(config: AeoConfig = {}): ResolvedAeoConfig {\n const frameworkInfo = detectFramework();\n\n return {\n title: config.title || 'My Site',\n description: config.description || '',\n url: config.url || 'https://example.com',\n contentDir: config.contentDir || frameworkInfo.contentDir,\n outDir: config.outDir || frameworkInfo.outDir,\n pages: config.pages || [],\n generators: {\n robotsTxt: config.generators?.robotsTxt !== false,\n llmsTxt: config.generators?.llmsTxt !== false,\n llmsFullTxt: config.generators?.llmsFullTxt !== false,\n rawMarkdown: config.generators?.rawMarkdown !== false,\n manifest: config.generators?.manifest !== false,\n sitemap: config.generators?.sitemap !== false,\n aiIndex: config.generators?.aiIndex !== false,\n schema: config.generators?.schema !== false,\n },\n robots: {\n allow: config.robots?.allow || ['/'],\n disallow: config.robots?.disallow || [],\n crawlDelay: config.robots?.crawlDelay || 0,\n sitemap: config.robots?.sitemap || '',\n },\n schema: {\n enabled: config.schema?.enabled !== false,\n organization: {\n name: config.schema?.organization?.name || config.title || 'My Site',\n url: config.schema?.organization?.url || config.url || 'https://example.com',\n logo: config.schema?.organization?.logo || '',\n sameAs: config.schema?.organization?.sameAs || [],\n },\n defaultType: config.schema?.defaultType || 'WebPage',\n },\n og: {\n enabled: config.og?.enabled !== false,\n image: config.og?.image || '',\n twitterHandle: config.og?.twitterHandle || '',\n type: config.og?.type || 'website',\n },\n widget: {\n enabled: config.widget?.enabled !== false,\n position: config.widget?.position || 'bottom-right',\n theme: {\n background: config.widget?.theme?.background || 'rgba(18, 18, 24, 0.9)',\n text: config.widget?.theme?.text || '#C0C0C5',\n accent: config.widget?.theme?.accent || '#E8E8EA',\n badge: config.widget?.theme?.badge || '#4ADE80',\n },\n humanLabel: config.widget?.humanLabel || 'Human',\n aiLabel: config.widget?.aiLabel || 'AI',\n showBadge: config.widget?.showBadge !== false,\n },\n };\n}\n\nexport function parseFrontmatter(content: string): { frontmatter: Record<string, any>; content: string } {\n const frontmatterMatch = content.match(/^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)/);\n \n if (frontmatterMatch) {\n const frontmatterStr = frontmatterMatch[1];\n const contentWithoutFrontmatter = frontmatterMatch[2];\n \n const frontmatter: Record<string, any> = {};\n const lines = frontmatterStr.split('\\n');\n \n for (const line of lines) {\n const [key, ...valueParts] = line.split(':');\n if (key && valueParts.length > 0) {\n const value = valueParts.join(':').trim();\n frontmatter[key.trim()] = value.replace(/^[\"']|[\"']$/g, '');\n }\n }\n \n return { frontmatter, content: contentWithoutFrontmatter };\n }\n \n return { frontmatter: {}, content };\n}\n\nexport function bumpHeadings(content: string, levels: number = 1): string {\n return content.replace(/^(#{1,6})\\s/gm, (match, hashes) => {\n const newLevel = Math.min(hashes.length + levels, 6);\n return '#'.repeat(newLevel) + ' ';\n });\n}\n\nexport function extractTitle(content: string): string {\n const h1Match = content.match(/^#\\s+(.+)$/m);\n if (h1Match) return h1Match[1];\n \n const h2Match = content.match(/^##\\s+(.+)$/m);\n if (h2Match) return h2Match[1];\n \n const firstLine = content.split('\\n')[0];\n return firstLine.slice(0, 100);\n}\n\nexport function readPackageJson(projectRoot: string = process.cwd()): Record<string, any> {\n const packageJsonPath = join(projectRoot, 'package.json');\n \n if (!existsSync(packageJsonPath)) {\n return {};\n }\n \n try {\n const content = readFileSync(packageJsonPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n}\n\nexport function getAllMarkdownFiles(\n projectRoot: string,\n include: string[] = ['**/*.md'],\n exclude: string[] = ['**/node_modules/**']\n): string[] {\n const files: string[] = [];\n \n function scanDirectory(dir: string): void {\n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const relativePath = relative(projectRoot, fullPath);\n \n // Check if path should be excluded\n const shouldExclude = exclude.some(pattern => \n minimatch(relativePath, pattern) || minimatch(fullPath, pattern)\n );\n \n if (shouldExclude) {\n continue;\n }\n \n const stat = statSync(fullPath);\n \n if (stat.isDirectory()) {\n // Skip hidden directories\n if (!entry.startsWith('.')) {\n scanDirectory(fullPath);\n }\n } else if (stat.isFile()) {\n // Check if file matches include patterns\n const shouldInclude = include.some(pattern =>\n minimatch(relativePath, pattern) || minimatch(fullPath, pattern)\n );\n \n if (shouldInclude) {\n files.push(fullPath);\n }\n }\n }\n } catch (error) {\n // Silently skip directories we can't read\n }\n }\n \n scanDirectory(projectRoot);\n return files;\n}","import type { FrameworkType, FrameworkInfo } from '../types';\nimport { readPackageJson } from './utils';\n\nexport function detectFramework(projectRoot: string = process.cwd()): FrameworkInfo {\n const packageJson = readPackageJson(projectRoot);\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n \n if (dependencies['next']) {\n return {\n framework: 'next',\n contentDir: 'app',\n outDir: 'out',\n };\n }\n \n if (dependencies['nuxt'] || dependencies['@nuxt/kit']) {\n return {\n framework: 'nuxt',\n contentDir: 'content',\n outDir: '.output/public',\n };\n }\n \n if (dependencies['astro'] || dependencies['@astrojs/astro']) {\n return {\n framework: 'astro',\n contentDir: 'src/content',\n outDir: 'dist',\n };\n }\n \n if (dependencies['@remix-run/dev']) {\n return {\n framework: 'remix',\n contentDir: 'app',\n outDir: 'build/client',\n };\n }\n \n if (dependencies['@sveltejs/kit']) {\n return {\n framework: 'sveltekit',\n contentDir: 'src',\n outDir: 'build',\n };\n }\n \n if (dependencies['@angular/core']) {\n return {\n framework: 'angular',\n contentDir: 'src',\n outDir: 'dist',\n };\n }\n \n if (dependencies['@docusaurus/core']) {\n return {\n framework: 'docusaurus',\n contentDir: 'docs',\n outDir: 'build',\n };\n }\n \n if (dependencies['vite']) {\n return {\n framework: 'vite',\n contentDir: 'src',\n outDir: 'dist',\n };\n }\n \n return {\n framework: 'unknown',\n contentDir: 'src',\n outDir: 'dist',\n };\n}","import type { ResolvedAeoConfig } from '../types';\n\nconst AI_CRAWLERS = [\n 'GPTBot',\n 'OAI-SearchBot',\n 'ChatGPT-User',\n 'ClaudeBot',\n 'Claude-Web',\n 'anthropic-ai',\n 'PerplexityBot',\n 'Google-Extended',\n 'Gemini-Deep-Research',\n 'Bingbot',\n 'FacebookBot',\n 'meta-externalagent',\n 'Amazonbot',\n 'Applebot',\n 'DeepSeekBot',\n 'Bytespider',\n 'cohere-ai',\n 'CCBot',\n 'DiffBot',\n 'YouBot',\n 'FirecrawlAgent',\n 'Crawl4AI',\n 'BraveBot',\n 'SemrushBot',\n 'AhrefsBot',\n 'MJ12bot',\n 'DotBot',\n 'DataForSeoBot',\n 'Screaming Frog SEO Spider',\n 'SEOkicks',\n 'SEMrushBot',\n 'BLEXBot',\n 'Yandex',\n 'Baiduspider',\n 'Sogou',\n 'Exabot',\n 'facebookexternalhit',\n 'LinkedInBot',\n 'WhatsApp',\n 'Slackbot',\n 'TwitterBot',\n 'TelegramBot',\n 'Discordbot',\n 'PinterestBot',\n 'TumblrBot',\n 'ViberBot',\n 'SkypeUriPreview',\n 'redditbot',\n 'Snapchat',\n 'TikTok',\n];\n\nexport function generateRobotsTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n '# robots.txt generated by aeo.js',\n '# Allow AI crawlers to index this site',\n '',\n '# Traditional search engines',\n 'User-agent: Googlebot',\n 'Allow: /',\n '',\n 'User-agent: Bingbot',\n 'Allow: /',\n '',\n '# AI crawlers and answer engines',\n ];\n \n for (const crawler of AI_CRAWLERS) {\n lines.push(`User-agent: ${crawler}`);\n lines.push('Allow: /');\n lines.push('');\n }\n \n lines.push('# Default for all other bots');\n lines.push('User-agent: *');\n lines.push('Allow: /');\n lines.push('');\n \n if (config.url) {\n lines.push(`Sitemap: ${config.url}/sitemap.xml`);\n }\n \n lines.push('');\n lines.push('# AEO (Answer Engine Optimization) files');\n lines.push('# These help LLMs understand your content better');\n lines.push(`# ${config.url}/llms.txt`);\n lines.push(`# ${config.url}/llms-full.txt`);\n lines.push(`# ${config.url}/docs.json`);\n lines.push(`# ${config.url}/ai-index.json`);\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig, MarkdownFile } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction collectMarkdownFiles(dir: string, base: string = dir): MarkdownFile[] {\n const files: MarkdownFile[] = [];\n \n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n files.push(...collectMarkdownFiles(fullPath, base));\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n \n files.push({\n path: relativePath,\n content: mainContent,\n title: frontmatter.title || extractTitle(mainContent),\n description: frontmatter.description,\n frontmatter,\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return files;\n}\n\nexport function generateLlmsTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n `# ${config.title}`,\n '',\n ];\n \n if (config.description) {\n lines.push(`> ${config.description}`);\n lines.push('');\n }\n \n lines.push('## About');\n lines.push('');\n lines.push('This file provides a structured overview of the documentation and content available on this site,');\n lines.push('optimized for consumption by Large Language Models (LLMs) and AI assistants.');\n lines.push('');\n \n // List discovered pages (from framework plugin)\n if (config.pages && config.pages.length > 0) {\n lines.push('## Pages');\n lines.push('');\n\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n lines.push(`- [${title}](${url})`);\n if (page.description) {\n lines.push(` ${page.description}`);\n }\n }\n lines.push('');\n }\n\n // List markdown content files\n const markdownFiles = collectMarkdownFiles(config.contentDir);\n\n if (markdownFiles.length > 0) {\n lines.push('## Documentation');\n lines.push('');\n\n const grouped: Record<string, MarkdownFile[]> = {};\n\n for (const file of markdownFiles) {\n const dir = file.path.split('/')[0] || 'root';\n if (!grouped[dir]) grouped[dir] = [];\n grouped[dir].push(file);\n }\n\n for (const [dir, files] of Object.entries(grouped)) {\n lines.push(`### ${dir === 'root' ? 'Main Documentation' : dir}`);\n lines.push('');\n\n for (const file of files) {\n const url = `${config.url}/${file.path.replace(/\\.mdx?$/, '')}`;\n lines.push(`- [${file.title}](${url})`);\n if (file.description) {\n lines.push(` ${file.description}`);\n }\n }\n lines.push('');\n }\n }\n \n lines.push('## Quick Links');\n lines.push('');\n lines.push(`- Full Documentation: ${config.url}/llms-full.txt`);\n lines.push(`- Documentation Manifest: ${config.url}/docs.json`);\n lines.push(`- AI-Optimized Index: ${config.url}/ai-index.json`);\n lines.push(`- Sitemap: ${config.url}/sitemap.xml`);\n lines.push('');\n \n lines.push('## For LLMs');\n lines.push('');\n lines.push('To get the complete documentation in a single file, request:');\n lines.push(`${config.url}/llms-full.txt`);\n lines.push('');\n lines.push('For structured access to individual pages with metadata:');\n lines.push(`${config.url}/docs.json`);\n lines.push('');\n lines.push('For RAG (Retrieval Augmented Generation) systems:');\n lines.push(`${config.url}/ai-index.json`);\n lines.push('');\n \n lines.push('---');\n lines.push('Generated by aeo.js - Answer Engine Optimization for the modern web');\n lines.push('Learn more at https://aeojs.org');\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\nimport { parseFrontmatter, bumpHeadings } from './utils';\n\nfunction collectAndConcatenateMarkdown(dir: string, base: string = dir): string[] {\n const sections: string[] = [];\n \n try {\n const entries = readdirSync(dir).sort();\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n const subSections = collectAndConcatenateMarkdown(fullPath, base);\n if (subSections.length > 0) {\n sections.push(...subSections);\n }\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n \n const sectionLines: string[] = [\n '---',\n '',\n `# ${frontmatter.title || relativePath}`,\n '',\n `Source: ${relativePath}`,\n '',\n ];\n \n if (frontmatter.description) {\n sectionLines.push(`> ${frontmatter.description}`);\n sectionLines.push('');\n }\n \n const bumpedContent = bumpHeadings(mainContent, 1);\n sectionLines.push(bumpedContent);\n sectionLines.push('');\n \n sections.push(sectionLines.join('\\n'));\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return sections;\n}\n\nexport function generateLlmsFull(config: ResolvedAeoConfig): string {\n return generateLlmsFullTxt(config);\n}\n\nexport function generateLlmsFullTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n `# ${config.title} - Complete Documentation`,\n '',\n `This file contains all documentation concatenated into a single file for easy consumption by LLMs.`,\n '',\n ];\n \n if (config.description) {\n lines.push(`> ${config.description}`);\n lines.push('');\n }\n \n lines.push('## Table of Contents');\n lines.push('');\n lines.push('This document includes all content from this project.');\n lines.push('Each section is separated by a horizontal rule (---) for easy parsing.');\n lines.push('');\n\n let hasContent = false;\n\n // Include discovered pages (from framework plugin)\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n const sectionLines: string[] = [\n '---',\n '',\n `# ${title}`,\n '',\n `URL: ${url}`,\n '',\n ];\n if (page.description) {\n sectionLines.push(`> ${page.description}`);\n sectionLines.push('');\n }\n if (page.content) {\n sectionLines.push(page.content);\n sectionLines.push('');\n }\n lines.push(sectionLines.join('\\n'));\n hasContent = true;\n }\n }\n\n // Include markdown content files\n const sections = collectAndConcatenateMarkdown(config.contentDir);\n\n if (sections.length > 0) {\n lines.push(...sections);\n hasContent = true;\n }\n\n if (!hasContent) {\n // Always include site overview so LLMs have basic context\n lines.push('---');\n lines.push('');\n lines.push(`# ${config.title}`);\n lines.push('');\n lines.push(`URL: ${config.url}`);\n lines.push('');\n if (config.description) {\n lines.push(config.description);\n lines.push('');\n }\n }\n \n lines.push('---');\n lines.push('');\n lines.push('## About This Document');\n lines.push('');\n lines.push('This concatenated documentation file is generated automatically by aeo.js');\n lines.push('to make it easier for AI systems to understand the complete context of this project.');\n lines.push('');\n lines.push(`For a structured index, see: ${config.url}/llms.txt`);\n lines.push(`For individual files, see: ${config.url}/docs.json`);\n lines.push('');\n lines.push('Generated by aeo.js - https://aeojs.org');\n \n return lines.join('\\n');\n}","import { readdirSync, statSync, mkdirSync, writeFileSync, copyFileSync } from 'fs';\nimport { join, relative, extname, dirname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\n\nexport interface CopiedFile {\n source: string;\n destination: string;\n}\n\nexport interface GeneratedMarkdownFile {\n pathname: string;\n destination: string;\n}\n\nfunction ensureDir(path: string): void {\n mkdirSync(path, { recursive: true });\n}\n\nexport function copyRawMarkdown(config: ResolvedAeoConfig): CopiedFile[] {\n return copyMarkdownFiles(config);\n}\n\nexport function copyMarkdownFiles(config: ResolvedAeoConfig): CopiedFile[] {\n const copiedFiles: CopiedFile[] = [];\n \n function copyRecursive(dir: string, base: string = config.contentDir): void {\n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n copyRecursive(fullPath, base);\n } else if (stat.isFile() && extname(entry) === '.md') {\n const relativePath = relative(base, fullPath);\n const destPath = join(config.outDir, relativePath);\n \n ensureDir(dirname(destPath));\n \n try {\n copyFileSync(fullPath, destPath);\n copiedFiles.push({\n source: fullPath,\n destination: destPath,\n });\n } catch (error) {\n console.warn(`Warning: Could not copy ${fullPath}:`, error);\n }\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n }\n \n copyRecursive(config.contentDir);\n return copiedFiles;\n}\n\nexport function generatePageMarkdownFiles(config: ResolvedAeoConfig): GeneratedMarkdownFile[] {\n const generated: GeneratedMarkdownFile[] = [];\n const pages = config.pages || [];\n\n for (const page of pages) {\n // Only generate .md files for pages that have actual content.\n // Pages discovered from filenames (dev mode) only have pathname/title\n // but no body content — those are useless as standalone markdown files.\n if (!page.content) continue;\n\n const pageTitle = page.title || (page.pathname === '/' ? config.title : undefined);\n\n let filename: string;\n if (page.pathname === '/') {\n filename = 'index.md';\n } else {\n const clean = page.pathname.replace(/^\\//, '').replace(/\\/$/, '');\n filename = clean.includes('/') ? `${clean}.md` : `${clean}.md`;\n }\n\n const destPath = join(config.outDir, filename);\n\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n\n const lines: string[] = [];\n\n // YAML frontmatter\n lines.push('---');\n if (pageTitle) lines.push(`title: \"${pageTitle}\"`);\n if (page.description) lines.push(`description: \"${page.description}\"`);\n lines.push(`url: ${pageUrl}`);\n lines.push(`source: ${pageUrl}`);\n lines.push(`generated_by: aeo.js`);\n lines.push('---', '');\n\n if (pageTitle) {\n lines.push(`# ${pageTitle}`, '');\n }\n\n if (page.description) {\n lines.push(`${page.description}`, '');\n }\n\n if (page.content) {\n lines.push(page.content);\n }\n\n const content = lines.join('\\n');\n\n ensureDir(dirname(destPath));\n try {\n writeFileSync(destPath, content, 'utf-8');\n generated.push({ pathname: page.pathname, destination: destPath });\n } catch {\n // skip unwritable files\n }\n }\n\n return generated;\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig, ManifestEntry } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction collectManifestEntries(dir: string, config: ResolvedAeoConfig, base: string = dir): ManifestEntry[] {\n const entries: ManifestEntry[] = [];\n \n try {\n const files = readdirSync(dir);\n \n for (const file of files) {\n const fullPath = join(dir, file);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n entries.push(...collectManifestEntries(fullPath, config, base));\n } else if (stat.isFile() && (extname(file) === '.md' || extname(file) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.mdx?$/, '');\n \n entries.push({\n url: `${config.url}/${urlPath}`,\n title: frontmatter.title || extractTitle(mainContent),\n description: frontmatter.description,\n lastModified: stat.mtime.toISOString(),\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return entries;\n}\n\nexport function generateManifest(config: ResolvedAeoConfig): string {\n const entries: ManifestEntry[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n entries.push({\n url: `${config.url}${page.pathname === '/' ? '' : page.pathname}`,\n title: page.title || page.pathname,\n description: page.description,\n });\n }\n }\n\n // Add markdown content files\n entries.push(...collectManifestEntries(config.contentDir, config));\n \n const manifest = {\n version: '1.0',\n generated: new Date().toISOString(),\n site: {\n title: config.title,\n description: config.description,\n url: config.url,\n },\n documents: entries.sort((a, b) => a.url.localeCompare(b.url)),\n metadata: {\n totalDocuments: entries.length,\n generator: 'aeo.js',\n generatorUrl: 'https://aeojs.org',\n },\n };\n \n return JSON.stringify(manifest, null, 2);\n}","import { readdirSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\n\nfunction collectUrls(dir: string, config: ResolvedAeoConfig, base: string = dir): string[] {\n const urls: string[] = [];\n \n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n urls.push(...collectUrls(fullPath, config, base));\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx' || extname(entry) === '.html')) {\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.(md|mdx|html)$/, '');\n urls.push(`${config.url}/${urlPath}`);\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return urls;\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nexport function generateSitemap(config: ResolvedAeoConfig): string {\n const urls: string[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n urls.push(`${config.url}${page.pathname === '/' ? '' : page.pathname}`);\n }\n }\n\n // Add markdown/html files from content dir\n if (config.contentDir) {\n urls.push(...collectUrls(config.contentDir, config));\n }\n\n const lines: string[] = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n ];\n\n // Always include the site root\n urls.push(config.url);\n\n const uniqueUrls = [...new Set(urls)].sort();\n \n for (const url of uniqueUrls) {\n lines.push(' <url>');\n lines.push(` <loc>${escapeXml(url)}</loc>`);\n lines.push(` <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>`);\n lines.push(' <changefreq>weekly</changefreq>');\n lines.push(' <priority>0.8</priority>');\n lines.push(' </url>');\n }\n \n lines.push('</urlset>');\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport { createHash } from 'crypto';\nimport type { ResolvedAeoConfig, AIIndexEntry } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction extractKeywords(content: string): string[] {\n const words = content\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, ' ')\n .split(/\\s+/)\n .filter(word => word.length > 3);\n \n const wordCount: Record<string, number> = {};\n \n for (const word of words) {\n wordCount[word] = (wordCount[word] || 0) + 1;\n }\n \n return Object.entries(wordCount)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([word]) => word);\n}\n\nfunction chunkContent(content: string, maxLength: number = 2000): string[] {\n const chunks: string[] = [];\n const paragraphs = content.split('\\n\\n');\n \n let currentChunk = '';\n \n for (const paragraph of paragraphs) {\n if (currentChunk.length + paragraph.length > maxLength && currentChunk.length > 0) {\n chunks.push(currentChunk.trim());\n currentChunk = '';\n }\n currentChunk += paragraph + '\\n\\n';\n }\n \n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n }\n \n return chunks;\n}\n\nfunction collectAIIndexEntries(dir: string, config: ResolvedAeoConfig, base: string = dir): AIIndexEntry[] {\n const entries: AIIndexEntry[] = [];\n \n try {\n const files = readdirSync(dir);\n \n for (const file of files) {\n const fullPath = join(dir, file);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n entries.push(...collectAIIndexEntries(fullPath, config, base));\n } else if (stat.isFile() && (extname(file) === '.md' || extname(file) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.mdx?$/, '');\n const url = `${config.url}/${urlPath}`;\n \n const chunks = chunkContent(mainContent);\n const title = frontmatter.title || extractTitle(mainContent);\n const keywords = extractKeywords(mainContent);\n \n chunks.forEach((chunk, index) => {\n const id = createHash('sha256')\n .update(`${url}-${index}`)\n .digest('hex')\n .slice(0, 16);\n \n entries.push({\n id,\n url,\n title: chunks.length > 1 ? `${title} (Part ${index + 1})` : title,\n content: chunk,\n description: frontmatter.description,\n keywords,\n metadata: {\n ...frontmatter,\n chunkIndex: index,\n totalChunks: chunks.length,\n sourcePath: relativePath,\n },\n });\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return entries;\n}\n\nexport function generateAiIndex(config: ResolvedAeoConfig): string {\n return generateAIIndex(config);\n}\n\nexport function generateAIIndex(config: ResolvedAeoConfig): string {\n const entries: AIIndexEntry[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n const content = page.content || '';\n\n if (content) {\n const chunks = chunkContent(content);\n const keywords = extractKeywords(content);\n\n chunks.forEach((chunk, index) => {\n const id = createHash('sha256')\n .update(`${url}-${index}`)\n .digest('hex')\n .slice(0, 16);\n\n entries.push({\n id,\n url,\n title: chunks.length > 1 ? `${title} (Part ${index + 1})` : title,\n content: chunk,\n description: page.description,\n keywords,\n metadata: {\n chunkIndex: index,\n totalChunks: chunks.length,\n sourcePath: page.pathname,\n },\n });\n });\n } else {\n const id = createHash('sha256')\n .update(url)\n .digest('hex')\n .slice(0, 16);\n\n entries.push({\n id,\n url,\n title,\n content: page.description || title,\n description: page.description,\n keywords: [],\n });\n }\n }\n }\n\n // Add markdown content files\n entries.push(...collectAIIndexEntries(config.contentDir, config));\n \n const index = {\n version: '1.0',\n generated: new Date().toISOString(),\n site: {\n title: config.title,\n description: config.description,\n url: config.url,\n },\n entries: entries.sort((a, b) => a.id.localeCompare(b.id)),\n metadata: {\n totalEntries: entries.length,\n generator: 'aeo.js',\n generatorUrl: 'https://aeojs.org',\n embedding: {\n recommended: 'text-embedding-ada-002',\n dimensions: 1536,\n },\n },\n };\n \n return JSON.stringify(index, null, 2);\n}","import type { ResolvedAeoConfig, PageEntry } from '../types';\n\nexport interface SchemaOutput {\n site: object[];\n pages: Record<string, object[]>;\n}\n\n/**\n * Generate JSON-LD structured data for the entire site.\n * Returns site-level schemas (WebSite, Organization) and per-page schemas.\n */\nexport function generateSchema(config: ResolvedAeoConfig): string {\n const output = generateSchemaObjects(config);\n return JSON.stringify(output, null, 2);\n}\n\n/**\n * Generate schema objects without serialization (for injection into HTML).\n */\nexport function generateSchemaObjects(config: ResolvedAeoConfig): SchemaOutput {\n const siteSchemas = generateSiteSchemas(config);\n const pageSchemas: Record<string, object[]> = {};\n\n for (const page of config.pages) {\n const schemas = generatePageSchemas(page, config);\n if (schemas.length > 0) {\n pageSchemas[page.pathname] = schemas;\n }\n }\n\n return { site: siteSchemas, pages: pageSchemas };\n}\n\n/**\n * Generate site-level schemas: WebSite + Organization.\n */\nexport function generateSiteSchemas(config: ResolvedAeoConfig): object[] {\n const schemas: object[] = [];\n\n // WebSite schema\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'WebSite',\n name: config.title,\n description: config.description || undefined,\n url: config.url,\n });\n\n // Organization schema (if name or sameAs provided)\n const org = config.schema.organization;\n if (org.name || org.sameAs.length > 0) {\n const orgSchema: Record<string, any> = {\n '@context': 'https://schema.org',\n '@type': 'Organization',\n name: org.name,\n url: org.url,\n };\n if (org.logo) orgSchema.logo = org.logo;\n if (org.sameAs.length > 0) orgSchema.sameAs = org.sameAs;\n schemas.push(orgSchema);\n }\n\n return schemas;\n}\n\n/**\n * Generate per-page schemas based on page content and config defaults.\n */\nexport function generatePageSchemas(page: PageEntry, config: ResolvedAeoConfig): object[] {\n const schemas: object[] = [];\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n\n // Detect FAQ patterns in content\n const faqItems = detectFaqPatterns(page.content || '');\n if (faqItems.length > 0) {\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqItems.map(({ question, answer }) => ({\n '@type': 'Question',\n name: question,\n acceptedAnswer: {\n '@type': 'Answer',\n text: answer,\n },\n })),\n });\n }\n\n // WebPage or Article schema\n const pageType = config.schema.defaultType;\n const pageSchema: Record<string, any> = {\n '@context': 'https://schema.org',\n '@type': pageType,\n name: page.title || config.title,\n url: pageUrl,\n };\n if (page.description) pageSchema.description = page.description;\n if (pageType === 'Article') {\n pageSchema.headline = page.title || config.title;\n pageSchema.author = {\n '@type': 'Organization',\n name: config.schema.organization.name,\n };\n }\n schemas.push(pageSchema);\n\n // BreadcrumbList for non-root pages\n if (page.pathname !== '/') {\n const breadcrumbs = generateBreadcrumbs(page.pathname, config);\n if (breadcrumbs.length > 1) {\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: breadcrumbs.map((crumb, i) => ({\n '@type': 'ListItem',\n position: i + 1,\n name: crumb.name,\n item: crumb.url,\n })),\n });\n }\n }\n\n return schemas;\n}\n\n/**\n * Generate breadcrumb items from a pathname.\n */\nfunction generateBreadcrumbs(pathname: string, config: ResolvedAeoConfig): { name: string; url: string }[] {\n const baseUrl = config.url.replace(/\\/$/, '');\n const parts = pathname.split('/').filter(Boolean);\n const crumbs: { name: string; url: string }[] = [\n { name: 'Home', url: baseUrl + '/' },\n ];\n\n let currentPath = '';\n for (const part of parts) {\n currentPath += '/' + part;\n crumbs.push({\n name: part.charAt(0).toUpperCase() + part.slice(1).replace(/-/g, ' '),\n url: baseUrl + currentPath,\n });\n }\n\n return crumbs;\n}\n\n/**\n * Detect FAQ-like patterns in markdown/text content.\n * Looks for: headings ending with \"?\" followed by paragraph text.\n */\nfunction detectFaqPatterns(content: string): { question: string; answer: string }[] {\n const items: { question: string; answer: string }[] = [];\n\n // Pattern: ## Question? \\n\\n Answer text\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const headingMatch = line.match(/^#{1,6}\\s+(.+\\?)\\s*$/);\n if (headingMatch) {\n // Collect answer: all non-empty, non-heading lines following\n const answerLines: string[] = [];\n for (let j = i + 1; j < lines.length; j++) {\n const nextLine = lines[j].trim();\n if (!nextLine) {\n if (answerLines.length > 0) break; // empty line after content = end\n continue; // skip leading empty lines\n }\n if (/^#{1,6}\\s/.test(nextLine)) break; // next heading = end\n answerLines.push(nextLine);\n }\n if (answerLines.length > 0) {\n items.push({\n question: headingMatch[1],\n answer: answerLines.join(' ').slice(0, 500),\n });\n }\n }\n }\n\n return items;\n}\n\n/**\n * Generate a JSON-LD script tag string for injection into HTML.\n */\nexport function generateJsonLdScript(schemas: object[]): string {\n if (schemas.length === 0) return '';\n if (schemas.length === 1) {\n return `<script type=\"application/ld+json\">${JSON.stringify(schemas[0])}</script>`;\n }\n return schemas\n .map(s => `<script type=\"application/ld+json\">${JSON.stringify(s)}</script>`)\n .join('\\n');\n}\n","import { generateRobotsTxt as genRobots } from './robots';\nimport { generateLlmsTxt as genLlms } from './llms-txt';\nimport { generateLlmsFullTxt as genLlmsFull } from './llms-full';\nimport { copyMarkdownFiles, generatePageMarkdownFiles } from './raw-markdown';\nimport { generateManifest as genManifest } from './manifest';\nimport { generateSitemap as genSitemap } from './sitemap';\nimport { generateAIIndex as genAIIndex } from './ai-index';\nimport { generateSchema as genSchema } from './schema';\nimport { resolveConfig } from './utils';\nimport { writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport type { AeoConfig, ResolvedAeoConfig } from '../types';\n\nexport interface GenerateResult {\n files: string[];\n errors: string[];\n}\n\nexport async function generateAEOFiles(\n configOrRoot?: ResolvedAeoConfig | AeoConfig | string,\n maybeConfig?: Partial<AeoConfig>\n): Promise<GenerateResult> {\n let config: ResolvedAeoConfig;\n\n if (typeof configOrRoot === 'string') {\n config = resolveConfig({ ...maybeConfig, outDir: maybeConfig?.outDir || configOrRoot });\n } else if (\n configOrRoot &&\n typeof configOrRoot === 'object' &&\n 'generators' in configOrRoot &&\n typeof (configOrRoot as ResolvedAeoConfig).generators?.robotsTxt === 'boolean'\n ) {\n config = configOrRoot as ResolvedAeoConfig;\n } else {\n config = resolveConfig(configOrRoot as AeoConfig | undefined);\n }\n\n const outDir = config.outDir;\n const files: string[] = [];\n const errors: string[] = [];\n\n if (!existsSync(outDir)) {\n mkdirSync(outDir, { recursive: true });\n }\n\n if (config.generators.robotsTxt) {\n try {\n const content = genRobots(config);\n writeFileSync(join(outDir, 'robots.txt'), content, 'utf-8');\n files.push('robots.txt');\n } catch (e: any) {\n errors.push(`robots.txt: ${e.message}`);\n }\n }\n\n if (config.generators.llmsTxt) {\n try {\n const content = genLlms(config);\n writeFileSync(join(outDir, 'llms.txt'), content, 'utf-8');\n files.push('llms.txt');\n } catch (e: any) {\n errors.push(`llms.txt: ${e.message}`);\n }\n }\n\n if (config.generators.llmsFullTxt) {\n try {\n const content = genLlmsFull(config);\n writeFileSync(join(outDir, 'llms-full.txt'), content, 'utf-8');\n files.push('llms-full.txt');\n } catch (e: any) {\n errors.push(`llms-full.txt: ${e.message}`);\n }\n }\n\n if (config.generators.rawMarkdown) {\n // Generate page .md files first (auto-extracted from build output)\n try {\n const generated = generatePageMarkdownFiles(config);\n for (const f of generated) {\n files.push(f.destination);\n }\n } catch (e: any) {\n errors.push(`page-markdown: ${e.message}`);\n }\n\n // Then copy handwritten .md from contentDir (these take priority, overwriting generated ones)\n try {\n const copied = copyMarkdownFiles(config);\n for (const f of copied) {\n files.push(f.destination);\n }\n } catch (e: any) {\n errors.push(`raw-markdown: ${e.message}`);\n }\n }\n\n if (config.generators.manifest) {\n try {\n const content = genManifest(config);\n writeFileSync(join(outDir, 'docs.json'), content, 'utf-8');\n files.push('docs.json');\n } catch (e: any) {\n errors.push(`docs.json: ${e.message}`);\n }\n }\n\n if (config.generators.sitemap) {\n try {\n const content = genSitemap(config);\n writeFileSync(join(outDir, 'sitemap.xml'), content, 'utf-8');\n files.push('sitemap.xml');\n } catch (e: any) {\n errors.push(`sitemap.xml: ${e.message}`);\n }\n }\n\n if (config.generators.aiIndex) {\n try {\n const content = genAIIndex(config);\n writeFileSync(join(outDir, 'ai-index.json'), content, 'utf-8');\n files.push('ai-index.json');\n } catch (e: any) {\n errors.push(`ai-index.json: ${e.message}`);\n }\n }\n\n if (config.generators.schema && config.schema.enabled) {\n try {\n const content = genSchema(config);\n writeFileSync(join(outDir, 'schema.json'), content, 'utf-8');\n files.push('schema.json');\n } catch (e: any) {\n errors.push(`schema.json: ${e.message}`);\n }\n }\n\n return { files, errors };\n}\n","/**\n * Shared HTML-to-markdown extraction utilities.\n * Used by all framework plugins for content extraction from build output.\n */\n\n/**\n * Extract text content from HTML and convert to markdown.\n * Removes scripts, styles, SVGs, and boilerplate (nav, header, footer).\n * Prefers <main> content when available.\n */\nexport function extractTextFromHtml(html: string): string {\n let text = html;\n // Remove scripts, styles, SVGs\n text = text.replace(/<script[\\s\\S]*?<\\/script>/gi, '');\n text = text.replace(/<style[\\s\\S]*?<\\/style>/gi, '');\n text = text.replace(/<svg[\\s\\S]*?<\\/svg>/gi, '');\n // Extract from <main> if available, otherwise strip boilerplate\n const mainMatch = text.match(/<main[^>]*>([\\s\\S]*)<\\/main>/i);\n if (mainMatch) {\n text = mainMatch[1];\n } else {\n text = text.replace(/<nav[\\s\\S]*?<\\/nav>/gi, '');\n text = text.replace(/<header[\\s\\S]*?<\\/header>/gi, '');\n text = text.replace(/<footer[\\s\\S]*?<\\/footer>/gi, '');\n }\n // Handle links wrapping block elements: flatten to inline link\n text = text.replace(/<a[^>]+href=[\"']([^\"']*)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, (_, url, inner) => {\n if (/<(?:h[1-6]|div|p|section)[^>]*>/i.test(inner)) {\n const cleanInner = inner.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n return `\\n[${cleanInner.slice(0, 120).trim()}](${url})\\n`;\n }\n return `[${inner}](${url})`;\n });\n // Convert headings (h1 -> ## since # is the page title)\n text = text.replace(/<h1[^>]*>([\\s\\S]*?)<\\/h1>/gi, '\\n\\n## $1\\n\\n');\n text = text.replace(/<h2[^>]*>([\\s\\S]*?)<\\/h2>/gi, '\\n\\n## $1\\n\\n');\n text = text.replace(/<h3[^>]*>([\\s\\S]*?)<\\/h3>/gi, '\\n\\n### $1\\n\\n');\n text = text.replace(/<h4[^>]*>([\\s\\S]*?)<\\/h4>/gi, '\\n\\n#### $1\\n\\n');\n text = text.replace(/<h5[^>]*>([\\s\\S]*?)<\\/h5>/gi, '\\n\\n##### $1\\n\\n');\n text = text.replace(/<h6[^>]*>([\\s\\S]*?)<\\/h6>/gi, '\\n\\n###### $1\\n\\n');\n // Convert remaining inline links\n text = text.replace(/<a[^>]+href=[\"']([^\"']*)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, '[$2]($1)');\n // Convert bold and italic\n text = text.replace(/<(?:strong|b)[^>]*>([\\s\\S]*?)<\\/(?:strong|b)>/gi, '**$1**');\n text = text.replace(/<(?:em|i)[^>]*>([\\s\\S]*?)<\\/(?:em|i)>/gi, '*$1*');\n // Convert list items\n text = text.replace(/<li[^>]*>([\\s\\S]*?)<\\/li>/gi, '\\n- $1');\n // Convert blockquotes\n text = text.replace(/<blockquote[^>]*>([\\s\\S]*?)<\\/blockquote>/gi, '\\n\\n> $1\\n\\n');\n // Convert hr and br\n text = text.replace(/<hr[^>]*\\/?>/gi, '\\n\\n---\\n\\n');\n text = text.replace(/<br[^>]*\\/?>/gi, '\\n');\n // Convert paragraphs\n text = text.replace(/<\\/p>/gi, '\\n\\n');\n text = text.replace(/<p[^>]*>/gi, '');\n // Other block elements as newlines\n text = text.replace(/<\\/?(?:div|section|article|header|main|aside|figure|figcaption|table|thead|tbody|tr|td|th|ul|ol|dl|dt|dd)[^>]*>/gi, '\\n');\n // Remove all remaining HTML tags\n text = text.replace(/<[^>]+>/g, '');\n // Decode HTML entities\n text = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/'/g, \"'\").replace(/ /g, ' ').replace(/©/g, '(c)');\n // Strip emojis (including flags)\n text = text.replace(/[\\u{1F1E0}-\\u{1FAFF}\\u{2600}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{200D}\\u{20E3}]/gu, '');\n // Clean up lines\n text = text.split('\\n').map(l => l.replace(/\\s+/g, ' ').trim()).join('\\n');\n text = text.replace(/\\n{3,}/g, '\\n\\n');\n // Clean whitespace inside markdown syntax\n text = text.replace(/\\[[\\s\\n]+/g, '[').replace(/[\\s\\n]+\\]/g, ']');\n text = text.replace(/(#{2,6})\\s*\\n+\\s*/g, '$1 ');\n // Remove empty headings\n text = text.replace(/^#{2,6}\\s*$/gm, '');\n text = text.replace(/\\n{3,}/g, '\\n\\n');\n return text.trim().slice(0, 8000);\n}\n\n/**\n * Extract title from HTML <title> tag. Splits on | and takes the first part.\n */\nexport function extractTitle(html: string): string | undefined {\n const match = html.match(/<title>([^<]*)<\\/title>/i);\n if (!match) return undefined;\n return match[1]?.split('|')[0]?.trim() || match[1];\n}\n\n/**\n * Extract description from HTML <meta name=\"description\"> tag.\n */\nexport function extractDescription(html: string): string | undefined {\n const match = html.match(/<meta\\s+name=[\"']description[\"']\\s+content=[\"']([^\"']*)[\"']/i);\n return match?.[1];\n}\n\n/**\n * Extract existing JSON-LD structured data from HTML.\n */\nexport function extractJsonLd(html: string): object[] {\n const schemas: object[] = [];\n const regex = /<script\\s+type=[\"']application\\/ld\\+json[\"'][^>]*>([\\s\\S]*?)<\\/script>/gi;\n let match;\n while ((match = regex.exec(html)) !== null) {\n try {\n const parsed = JSON.parse(match[1]);\n schemas.push(parsed);\n } catch { /* skip invalid JSON-LD */ }\n }\n return schemas;\n}\n\n/**\n * Convert HTML page to a complete markdown document with YAML frontmatter.\n */\nexport function htmlToMarkdown(html: string, pagePath: string, config: { url: string }): string {\n const rawTitle = extractTitle(html);\n const description = extractDescription(html);\n const textContent = extractTextFromHtml(html);\n\n const pageUrl = pagePath === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${pagePath}`;\n\n const lines: string[] = [];\n\n // YAML frontmatter\n lines.push('---');\n if (rawTitle) lines.push(`title: \"${rawTitle}\"`);\n if (description) lines.push(`description: \"${description}\"`);\n lines.push(`url: ${pageUrl}`);\n lines.push(`source: ${pageUrl}`);\n lines.push(`generated_by: aeo.js`);\n lines.push('---', '');\n\n if (rawTitle) lines.push(`# ${rawTitle}`, '');\n if (description) lines.push(`${description}`, '');\n\n if (textContent) lines.push(textContent);\n\n return lines.join('\\n');\n}\n","import type { ResolvedAeoConfig, PageEntry } from '../types';\n\nexport interface MetaTag {\n property?: string;\n name?: string;\n content: string;\n}\n\n/**\n * Generate Open Graph and Twitter Card meta tags for a page.\n */\nexport function generateOGTags(page: PageEntry, config: ResolvedAeoConfig): MetaTag[] {\n const tags: MetaTag[] = [];\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n const title = page.title || config.title;\n const description = page.description || config.description;\n\n // Open Graph\n tags.push({ property: 'og:type', content: config.og.type });\n tags.push({ property: 'og:title', content: title });\n if (description) tags.push({ property: 'og:description', content: description });\n tags.push({ property: 'og:url', content: pageUrl });\n tags.push({ property: 'og:site_name', content: config.title });\n if (config.og.image) tags.push({ property: 'og:image', content: config.og.image });\n\n // Twitter Card\n tags.push({ name: 'twitter:card', content: config.og.image ? 'summary_large_image' : 'summary' });\n tags.push({ name: 'twitter:title', content: title });\n if (description) tags.push({ name: 'twitter:description', content: description });\n if (config.og.twitterHandle) tags.push({ name: 'twitter:site', content: config.og.twitterHandle });\n if (config.og.image) tags.push({ name: 'twitter:image', content: config.og.image });\n\n return tags;\n}\n\n/**\n * Generate meta tag HTML strings for injection.\n */\nexport function generateOGTagsHtml(page: PageEntry, config: ResolvedAeoConfig): string {\n const tags = generateOGTags(page, config);\n return tags\n .map(tag => {\n if (tag.property) return `<meta property=\"${tag.property}\" content=\"${escapeAttr(tag.content)}\" />`;\n return `<meta name=\"${tag.name}\" content=\"${escapeAttr(tag.content)}\" />`;\n })\n .join('\\n ');\n}\n\nfunction escapeAttr(str: string): string {\n return str.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>');\n}\n","import type { ResolvedAeoConfig, PageEntry } from '../types';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\n\nexport interface AuditIssue {\n category: string;\n severity: 'error' | 'warning' | 'info';\n message: string;\n fix?: string;\n}\n\nexport interface AuditCategory {\n name: string;\n score: number; // 0-20\n maxScore: number; // 20\n checks: { label: string; passed: boolean; points: number }[];\n}\n\nexport interface AuditResult {\n score: number; // 0-100\n categories: AuditCategory[];\n issues: AuditIssue[];\n suggestions: string[];\n}\n\n/**\n * Audit a site's GEO readiness based on config and generated files.\n * Returns a 0-100 score across 5 categories (20 points each).\n */\nexport function auditSite(config: ResolvedAeoConfig): AuditResult {\n const categories: AuditCategory[] = [];\n const issues: AuditIssue[] = [];\n const suggestions: string[] = [];\n\n categories.push(auditAIAccess(config, issues));\n categories.push(auditContentStructure(config, issues, suggestions));\n categories.push(auditSchemaPresence(config, issues, suggestions));\n categories.push(auditMetaQuality(config, issues, suggestions));\n categories.push(auditCitability(config, issues, suggestions));\n\n const score = categories.reduce((sum, c) => sum + c.score, 0);\n\n return { score, categories, issues, suggestions };\n}\n\n/**\n * Category 1: AI Access (0-20)\n * Checks: robots.txt allows AI crawlers, llms.txt exists, sitemap.xml, ai-index.json, schema.json\n */\nfunction auditAIAccess(config: ResolvedAeoConfig, issues: AuditIssue[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n const outDir = config.outDir;\n\n // robots.txt enabled (4 pts)\n const robotsEnabled = config.generators.robotsTxt;\n checks.push({ label: 'robots.txt generation enabled', passed: robotsEnabled, points: robotsEnabled ? 4 : 0 });\n if (!robotsEnabled) {\n issues.push({ category: 'AI Access', severity: 'error', message: 'robots.txt generation is disabled', fix: 'Set generators.robotsTxt: true' });\n }\n\n // llms.txt enabled (4 pts)\n const llmsEnabled = config.generators.llmsTxt;\n checks.push({ label: 'llms.txt generation enabled', passed: llmsEnabled, points: llmsEnabled ? 4 : 0 });\n if (!llmsEnabled) {\n issues.push({ category: 'AI Access', severity: 'error', message: 'llms.txt generation is disabled — AI crawlers won\\'t find your content summary', fix: 'Set generators.llmsTxt: true' });\n }\n\n // sitemap.xml enabled (4 pts)\n const sitemapEnabled = config.generators.sitemap;\n checks.push({ label: 'sitemap.xml generation enabled', passed: sitemapEnabled, points: sitemapEnabled ? 4 : 0 });\n if (!sitemapEnabled) {\n issues.push({ category: 'AI Access', severity: 'warning', message: 'sitemap.xml generation is disabled', fix: 'Set generators.sitemap: true' });\n }\n\n // ai-index.json enabled (4 pts)\n const aiIndexEnabled = config.generators.aiIndex;\n checks.push({ label: 'ai-index.json generation enabled', passed: aiIndexEnabled, points: aiIndexEnabled ? 4 : 0 });\n if (!aiIndexEnabled) {\n issues.push({ category: 'AI Access', severity: 'warning', message: 'ai-index.json generation is disabled', fix: 'Set generators.aiIndex: true' });\n }\n\n // No restrictive disallow rules blocking AI (4 pts)\n const hasBlockingRules = config.robots.disallow.includes('/') || config.robots.disallow.includes('/*');\n const noBlocking = !hasBlockingRules;\n checks.push({ label: 'No blanket disallow rules blocking AI crawlers', passed: noBlocking, points: noBlocking ? 4 : 0 });\n if (hasBlockingRules) {\n issues.push({ category: 'AI Access', severity: 'error', message: 'robots.txt has blanket disallow (/ or /*) which blocks AI crawlers', fix: 'Remove overly broad disallow rules from robots.disallow' });\n }\n\n return {\n name: 'AI Access',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Category 2: Content Structure (0-20)\n * Checks: pages have content, heading hierarchy, paragraph length, lists/tables\n */\nfunction auditContentStructure(config: ResolvedAeoConfig, issues: AuditIssue[], suggestions: string[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n const pages = config.pages;\n\n // Has pages defined (4 pts)\n const hasPages = pages.length > 0;\n checks.push({ label: 'Pages are defined', passed: hasPages, points: hasPages ? 4 : 0 });\n if (!hasPages) {\n issues.push({ category: 'Content Structure', severity: 'error', message: 'No pages defined — AEO files will have no content', fix: 'Add pages to your config or ensure your framework plugin scans pages' });\n }\n\n // Pages have content (4 pts)\n const pagesWithContent = pages.filter(p => p.content && p.content.length > 50);\n const hasContent = pagesWithContent.length > 0;\n checks.push({ label: 'Pages have extractable content', passed: hasContent, points: hasContent ? 4 : 0 });\n if (!hasContent && hasPages) {\n issues.push({ category: 'Content Structure', severity: 'warning', message: 'No pages have substantial text content (>50 chars)', fix: 'Ensure pages have meaningful text content for AI extraction' });\n }\n\n // Content has headings (4 pts)\n const headingPattern = /^#{1,6}\\s|<h[1-6]/m;\n const pagesWithHeadings = pagesWithContent.filter(p => headingPattern.test(p.content || ''));\n const hasHeadings = pagesWithHeadings.length >= Math.max(1, Math.floor(pagesWithContent.length * 0.5));\n checks.push({ label: 'Content uses heading hierarchy', passed: hasHeadings, points: hasHeadings ? 4 : 0 });\n if (!hasHeadings && pagesWithContent.length > 0) {\n suggestions.push('Add structured headings (H1-H6) to improve AI content extraction');\n }\n\n // Reasonable paragraph length (4 pts — check across all pages)\n const goodParagraphLength = pagesWithContent.every(p => {\n const paragraphs = (p.content || '').split(/\\n\\n+/).filter(p => p.trim().length > 20);\n if (paragraphs.length === 0) return true;\n const avgWords = paragraphs.reduce((sum, para) => sum + para.split(/\\s+/).length, 0) / paragraphs.length;\n return avgWords <= 200; // paragraphs shouldn't be walls of text\n });\n checks.push({ label: 'Paragraphs are reasonable length (<200 words avg)', passed: goodParagraphLength, points: goodParagraphLength ? 4 : 0 });\n if (!goodParagraphLength) {\n suggestions.push('Break up long paragraphs (>200 words) for better AI extraction — aim for 100-167 words');\n }\n\n // Multiple pages (4 pts)\n const multiplePages = pages.length >= 3;\n checks.push({ label: 'Site has 3+ pages for comprehensive coverage', passed: multiplePages, points: multiplePages ? 4 : 0 });\n if (!multiplePages && hasPages) {\n suggestions.push('Add more pages to improve site coverage for AI crawlers');\n }\n\n return {\n name: 'Content Structure',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Category 3: Schema Presence (0-20)\n * Checks: schema enabled, organization info, sameAs, defaultType, schema.json generated\n */\nfunction auditSchemaPresence(config: ResolvedAeoConfig, issues: AuditIssue[], suggestions: string[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n\n // Schema enabled (4 pts)\n const schemaEnabled = config.schema.enabled && config.generators.schema;\n checks.push({ label: 'Schema.org/JSON-LD generation enabled', passed: schemaEnabled, points: schemaEnabled ? 4 : 0 });\n if (!schemaEnabled) {\n issues.push({ category: 'Schema Presence', severity: 'error', message: 'Schema.org generation is disabled', fix: 'Set schema.enabled: true and generators.schema: true' });\n }\n\n // Organization name set (4 pts)\n const hasOrgName = config.schema.organization.name !== '' && config.schema.organization.name !== 'My Site';\n checks.push({ label: 'Organization name configured', passed: hasOrgName, points: hasOrgName ? 4 : 0 });\n if (!hasOrgName) {\n issues.push({ category: 'Schema Presence', severity: 'warning', message: 'Organization name is not configured (using default)', fix: 'Set schema.organization.name to your actual organization name' });\n }\n\n // Organization logo (4 pts)\n const hasLogo = !!config.schema.organization.logo;\n checks.push({ label: 'Organization logo URL set', passed: hasLogo, points: hasLogo ? 4 : 0 });\n if (!hasLogo) {\n suggestions.push('Add schema.organization.logo for richer search results and AI knowledge');\n }\n\n // sameAs social profiles (4 pts)\n const hasSameAs = config.schema.organization.sameAs.length > 0;\n checks.push({ label: 'Social profiles linked (sameAs)', passed: hasSameAs, points: hasSameAs ? 4 : 0 });\n if (!hasSameAs) {\n issues.push({ category: 'Schema Presence', severity: 'warning', message: 'No social profiles (sameAs) — critical for GEO/E-E-A-T signals', fix: 'Add schema.organization.sameAs with social profile URLs' });\n }\n\n // URL is not default (4 pts)\n const hasRealUrl = config.url !== 'https://example.com' && config.url !== '';\n checks.push({ label: 'Site URL is configured (not default)', passed: hasRealUrl, points: hasRealUrl ? 4 : 0 });\n if (!hasRealUrl) {\n issues.push({ category: 'Schema Presence', severity: 'error', message: 'Site URL is still the default (https://example.com)', fix: 'Set url to your actual site URL' });\n }\n\n return {\n name: 'Schema Presence',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Category 4: Meta Quality (0-20)\n * Checks: title length, description length, OG tags, pages have titles\n */\nfunction auditMetaQuality(config: ResolvedAeoConfig, issues: AuditIssue[], suggestions: string[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n\n // Site title exists and is good length (4 pts)\n const titleLen = config.title.length;\n const goodTitle = titleLen >= 10 && titleLen <= 70;\n checks.push({ label: 'Site title is 10-70 characters', passed: goodTitle, points: goodTitle ? 4 : 0 });\n if (titleLen < 10) {\n issues.push({ category: 'Meta Quality', severity: 'warning', message: `Site title is too short (${titleLen} chars)`, fix: 'Use a descriptive title between 10-70 characters' });\n } else if (titleLen > 70) {\n suggestions.push(`Site title is long (${titleLen} chars) — consider shortening to under 70`);\n }\n\n // Description exists and is good length (4 pts)\n const descLen = config.description.length;\n const goodDesc = descLen >= 50 && descLen <= 200;\n checks.push({ label: 'Site description is 50-200 characters', passed: goodDesc, points: goodDesc ? 4 : 0 });\n if (descLen === 0) {\n issues.push({ category: 'Meta Quality', severity: 'error', message: 'No site description configured', fix: 'Add a description (50-200 characters)' });\n } else if (descLen < 50) {\n issues.push({ category: 'Meta Quality', severity: 'warning', message: `Description is too short (${descLen} chars)`, fix: 'Expand description to 50-200 characters' });\n }\n\n // OG tags enabled (4 pts)\n const ogEnabled = config.og.enabled;\n checks.push({ label: 'Open Graph meta tags enabled', passed: ogEnabled, points: ogEnabled ? 4 : 0 });\n if (!ogEnabled) {\n issues.push({ category: 'Meta Quality', severity: 'warning', message: 'OG meta tags are disabled — social sharing and AI previews will be limited', fix: 'Set og.enabled: true' });\n }\n\n // Pages have titles (4 pts)\n const pagesWithTitles = config.pages.filter(p => p.title && p.title.length > 0);\n const titleCoverage = config.pages.length > 0 ? pagesWithTitles.length / config.pages.length : 0;\n const goodTitleCoverage = titleCoverage >= 0.8;\n checks.push({ label: '80%+ of pages have titles', passed: goodTitleCoverage, points: goodTitleCoverage ? 4 : 0 });\n if (!goodTitleCoverage && config.pages.length > 0) {\n issues.push({ category: 'Meta Quality', severity: 'warning', message: `Only ${pagesWithTitles.length}/${config.pages.length} pages have titles`, fix: 'Add titles to all pages' });\n }\n\n // Pages have descriptions (4 pts)\n const pagesWithDesc = config.pages.filter(p => p.description && p.description.length > 0);\n const descCoverage = config.pages.length > 0 ? pagesWithDesc.length / config.pages.length : 0;\n const goodDescCoverage = descCoverage >= 0.5;\n checks.push({ label: '50%+ of pages have descriptions', passed: goodDescCoverage, points: goodDescCoverage ? 4 : 0 });\n if (!goodDescCoverage && config.pages.length > 0) {\n suggestions.push(`Only ${pagesWithDesc.length}/${config.pages.length} pages have descriptions — add per-page descriptions`);\n }\n\n return {\n name: 'Meta Quality',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Category 5: Citability (0-20)\n * Checks: self-contained paragraphs, direct answers, statistical content, FAQ patterns\n */\nfunction auditCitability(config: ResolvedAeoConfig, issues: AuditIssue[], suggestions: string[]): AuditCategory {\n const checks: AuditCategory['checks'] = [];\n const allContent = config.pages.map(p => p.content || '').join('\\n\\n');\n\n // Has direct answer patterns (4 pts) — sentences that start with a noun/subject and make a claim\n const directAnswerPattern = /^[A-Z][^.!?]{20,150}[.!?]/m;\n const hasDirectAnswers = directAnswerPattern.test(allContent);\n checks.push({ label: 'Content has direct answer patterns', passed: hasDirectAnswers, points: hasDirectAnswers ? 4 : 0 });\n if (!hasDirectAnswers) {\n suggestions.push('Add self-contained factual statements that AI can cite directly');\n }\n\n // Has statistical/factual content (4 pts) — numbers, percentages, dates\n const statPattern = /\\d+%|\\$[\\d,.]+|\\d{4}|\\d+\\s*(million|billion|thousand|users|customers|downloads)/i;\n const hasStats = statPattern.test(allContent);\n checks.push({ label: 'Content includes statistics/factual claims', passed: hasStats, points: hasStats ? 4 : 0 });\n if (!hasStats) {\n suggestions.push('Include concrete statistics, numbers, and dates — AI favors content with factual claims');\n }\n\n // Has FAQ-like patterns (4 pts)\n const faqPattern = /^#{1,6}\\s+.+\\?\\s*$/m;\n const hasFaq = faqPattern.test(allContent);\n checks.push({ label: 'Content has FAQ patterns (question headings)', passed: hasFaq, points: hasFaq ? 4 : 0 });\n if (!hasFaq) {\n suggestions.push('Add FAQ sections with question headings — these generate FAQPage schema automatically');\n }\n\n // Has structured lists (4 pts)\n const listPattern = /^[\\s]*[-*+]\\s|^\\d+\\.\\s/m;\n const hasLists = listPattern.test(allContent);\n checks.push({ label: 'Content uses lists for structured information', passed: hasLists, points: hasLists ? 4 : 0 });\n if (!hasLists) {\n suggestions.push('Use bullet or numbered lists for key information — improves AI extraction');\n }\n\n // Content is substantial (4 pts) — at least 500 words total\n const wordCount = allContent.split(/\\s+/).filter(w => w.length > 0).length;\n const substantialContent = wordCount >= 500;\n checks.push({ label: 'Total content is substantial (500+ words)', passed: substantialContent, points: substantialContent ? 4 : 0 });\n if (!substantialContent) {\n issues.push({ category: 'Citability', severity: 'warning', message: `Total content is only ${wordCount} words`, fix: 'Add more content — aim for at least 500 words across all pages' });\n }\n\n return {\n name: 'Citability',\n score: checks.reduce((s, c) => s + c.points, 0),\n maxScore: 20,\n checks,\n };\n}\n\n/**\n * Format audit result as a human-readable report string.\n */\nexport function formatAuditReport(result: AuditResult): string {\n const lines: string[] = [];\n const grade = getGrade(result.score);\n\n lines.push(`GEO Readiness Score: ${result.score}/100 (${grade})`);\n lines.push('═'.repeat(50));\n lines.push('');\n\n for (const cat of result.categories) {\n lines.push(`${cat.name}: ${cat.score}/${cat.maxScore}`);\n const bar = '█'.repeat(cat.score) + '░'.repeat(cat.maxScore - cat.score);\n lines.push(` ${bar}`);\n for (const check of cat.checks) {\n lines.push(` ${check.passed ? '+' : '-'} ${check.label}`);\n }\n lines.push('');\n }\n\n if (result.issues.length > 0) {\n lines.push('Issues:');\n for (const issue of result.issues) {\n const icon = issue.severity === 'error' ? '!' : issue.severity === 'warning' ? '~' : 'i';\n lines.push(` ${icon} [${issue.category}] ${issue.message}`);\n if (issue.fix) lines.push(` Fix: ${issue.fix}`);\n }\n lines.push('');\n }\n\n if (result.suggestions.length > 0) {\n lines.push('Suggestions:');\n for (const suggestion of result.suggestions) {\n lines.push(` * ${suggestion}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nexport function getGrade(score: number): string {\n if (score >= 90) return 'Excellent';\n if (score >= 75) return 'Good';\n if (score >= 50) return 'Fair';\n if (score >= 25) return 'Needs Work';\n return 'Poor';\n}\n","import type { PageEntry, ResolvedAeoConfig } from '../types';\n\nexport interface CitabilityDimension {\n name: string;\n score: number; // 0-25\n maxScore: number; // 25\n details: string;\n}\n\nexport interface ContentHint {\n type: 'error' | 'warning' | 'suggestion';\n message: string;\n line?: number;\n}\n\nexport interface PageCitabilityResult {\n pathname: string;\n score: number; // 0-100\n dimensions: CitabilityDimension[];\n hints: ContentHint[];\n}\n\nexport interface SiteCitabilityResult {\n averageScore: number;\n pages: PageCitabilityResult[];\n}\n\n/**\n * Score a single page's AI citability (0-100).\n * Four dimensions, 25 points each:\n * 1. Answer Blocks — direct, self-contained answers\n * 2. Self-Containment — paragraphs make sense without context\n * 3. Statistical Density — numbers, facts, named entities\n * 4. Structure Quality — heading hierarchy, lists, summaries\n */\nexport function scorePageCitability(page: PageEntry): PageCitabilityResult {\n const content = page.content || '';\n const dimensions: CitabilityDimension[] = [];\n const hints: ContentHint[] = [];\n\n dimensions.push(scoreAnswerBlocks(content, hints));\n dimensions.push(scoreSelfContainment(content, hints));\n dimensions.push(scoreStatisticalDensity(content, hints));\n dimensions.push(scoreStructureQuality(content, hints));\n\n const score = dimensions.reduce((sum, d) => sum + d.score, 0);\n\n return {\n pathname: page.pathname,\n score,\n dimensions,\n hints,\n };\n}\n\n/**\n * Score all pages in a site config.\n */\nexport function scoreSiteCitability(config: ResolvedAeoConfig): SiteCitabilityResult {\n const pages = config.pages.map(p => scorePageCitability(p));\n const averageScore = pages.length > 0\n ? Math.round(pages.reduce((sum, p) => sum + p.score, 0) / pages.length)\n : 0;\n\n return { averageScore, pages };\n}\n\n/**\n * Dimension 1: Answer Blocks (0-25)\n * Checks for direct, self-contained answer paragraphs.\n * Good answers: start with a noun/subject, 20-200 words, contain a factual claim.\n */\nfunction scoreAnswerBlocks(content: string, hints: ContentHint[]): CitabilityDimension {\n if (!content.trim()) {\n return { name: 'Answer Blocks', score: 0, maxScore: 25, details: 'No content' };\n }\n\n const paragraphs = splitParagraphs(content);\n let answerCount = 0;\n\n for (let i = 0; i < paragraphs.length; i++) {\n const para = paragraphs[i];\n const words = para.text.split(/\\s+/).length;\n\n // Skip headings and very short paragraphs\n if (para.text.startsWith('#') || words < 15) continue;\n\n // Good answer: starts with capital letter (not pronoun), 20-200 words\n const startsWithSubject = /^[A-Z][a-z]/.test(para.text) && !/^(This|That|These|Those|It|They|We|He|She|I)\\b/.test(para.text);\n const goodLength = words >= 20 && words <= 200;\n\n if (startsWithSubject && goodLength) {\n answerCount++;\n }\n }\n\n // Score: up to 25 based on answer density\n const answerRatio = paragraphs.length > 0 ? answerCount / Math.max(paragraphs.filter(p => !p.text.startsWith('#')).length, 1) : 0;\n let score = 0;\n if (answerCount >= 3 && answerRatio >= 0.5) score = 25;\n else if (answerCount >= 2 && answerRatio >= 0.3) score = 20;\n else if (answerCount >= 1) score = 12;\n else score = 0;\n\n if (answerCount === 0) {\n hints.push({ type: 'warning', message: 'No direct answer paragraphs found — add self-contained factual paragraphs that start with a clear subject' });\n }\n\n // Flag long paragraphs\n for (const para of paragraphs) {\n const words = para.text.split(/\\s+/).length;\n if (words > 200 && !para.text.startsWith('#')) {\n hints.push({ type: 'suggestion', message: `Paragraph at line ${para.line} is ${words} words — split for better AI extraction (aim for <200)`, line: para.line });\n }\n }\n\n return { name: 'Answer Blocks', score, maxScore: 25, details: `${answerCount} answer-quality paragraphs found` };\n}\n\n/**\n * Dimension 2: Self-Containment (0-25)\n * Penalizes paragraphs that depend on surrounding context.\n */\nfunction scoreSelfContainment(content: string, hints: ContentHint[]): CitabilityDimension {\n if (!content.trim()) {\n return { name: 'Self-Containment', score: 0, maxScore: 25, details: 'No content' };\n }\n\n const paragraphs = splitParagraphs(content).filter(p => !p.text.startsWith('#') && p.text.split(/\\s+/).length >= 10);\n if (paragraphs.length === 0) {\n return { name: 'Self-Containment', score: 5, maxScore: 25, details: 'No substantial paragraphs' };\n }\n\n // Context-dependent patterns\n const contextPatterns = [\n /^(As mentioned|As noted|As described|As shown|As stated|As discussed)\\b/i,\n /^(However|Furthermore|Moreover|Additionally|In addition|Nevertheless)\\b/,\n /\\b(above|below|previously|the following|as follows|see also)\\b/i,\n /^(This|That|These|Those|It) (is|was|are|were|has|have|will|can|should|means)\\b/,\n ];\n\n let contextDependentCount = 0;\n for (const para of paragraphs) {\n const isContextDependent = contextPatterns.some(p => p.test(para.text));\n if (isContextDependent) {\n contextDependentCount++;\n }\n }\n\n const selfContainedRatio = 1 - (contextDependentCount / paragraphs.length);\n let score: number;\n if (selfContainedRatio >= 0.8) score = 25;\n else if (selfContainedRatio >= 0.6) score = 18;\n else if (selfContainedRatio >= 0.4) score = 12;\n else score = 5;\n\n if (contextDependentCount > 0) {\n hints.push({ type: 'suggestion', message: `${contextDependentCount} paragraph(s) depend on surrounding context — rephrase to be self-contained for better AI citation` });\n }\n\n return { name: 'Self-Containment', score, maxScore: 25, details: `${Math.round(selfContainedRatio * 100)}% of paragraphs are self-contained` };\n}\n\n/**\n * Dimension 3: Statistical Density (0-25)\n * Scores presence of numbers, percentages, dates, named entities.\n */\nfunction scoreStatisticalDensity(content: string, hints: ContentHint[]): CitabilityDimension {\n if (!content.trim()) {\n return { name: 'Statistical Density', score: 0, maxScore: 25, details: 'No content' };\n }\n\n const patterns = {\n percentages: /\\d+(\\.\\d+)?%/g,\n currencies: /\\$[\\d,.]+|\\€[\\d,.]+|£[\\d,.]+/g,\n years: /\\b(19|20)\\d{2}\\b/g,\n quantities: /\\b\\d+[\\s,]*(million|billion|thousand|hundred|K|M|B)\\b/gi,\n metrics: /\\b\\d+(\\.\\d+)?\\s*(users|customers|downloads|visitors|employees|countries|cities|hours|minutes|seconds|pages|files|requests)\\b/gi,\n comparisons: /\\b\\d+x\\b|\\b\\d+(\\.\\d+)?%\\s*(faster|slower|more|less|better|worse|increase|decrease|growth|reduction)\\b/gi,\n };\n\n let totalMatches = 0;\n for (const [, pattern] of Object.entries(patterns)) {\n const matches = content.match(pattern);\n if (matches) totalMatches += matches.length;\n }\n\n const words = content.split(/\\s+/).length;\n const density = words > 0 ? totalMatches / (words / 100) : 0; // matches per 100 words\n\n let score: number;\n if (density >= 3) score = 25;\n else if (density >= 1.5) score = 20;\n else if (density >= 0.5) score = 12;\n else if (totalMatches > 0) score = 6;\n else score = 0;\n\n if (totalMatches === 0) {\n hints.push({ type: 'suggestion', message: 'No statistics or factual claims found — AI favors content with concrete numbers, percentages, and dates' });\n }\n\n return { name: 'Statistical Density', score, maxScore: 25, details: `${totalMatches} statistical claims (${density.toFixed(1)} per 100 words)` };\n}\n\n/**\n * Dimension 4: Structure Quality (0-25)\n * Checks heading hierarchy, lists, short paragraphs, summary/TL;DR.\n */\nfunction scoreStructureQuality(content: string, hints: ContentHint[]): CitabilityDimension {\n if (!content.trim()) {\n return { name: 'Structure Quality', score: 0, maxScore: 25, details: 'No content' };\n }\n\n let points = 0;\n const details: string[] = [];\n\n // Has headings (7 pts)\n const headingPattern = /^#{1,6}\\s/m;\n const headings = content.match(/^#{1,6}\\s.+$/gm) || [];\n if (headings.length > 0) {\n points += 7;\n details.push(`${headings.length} headings`);\n } else {\n hints.push({ type: 'warning', message: 'No headings found — add H1-H6 headings to structure content for AI extraction' });\n }\n\n // Has lists (6 pts)\n const listItems = content.match(/^[\\s]*[-*+]\\s.+$|^\\d+\\.\\s.+$/gm) || [];\n if (listItems.length >= 3) {\n points += 6;\n details.push(`${listItems.length} list items`);\n } else if (listItems.length > 0) {\n points += 3;\n details.push(`${listItems.length} list items`);\n } else {\n hints.push({ type: 'suggestion', message: 'No lists found — use bullet or numbered lists for key information' });\n }\n\n // Reasonable paragraph lengths (6 pts)\n const paragraphs = splitParagraphs(content).filter(p => !p.text.startsWith('#') && p.text.split(/\\s+/).length >= 10);\n const avgWords = paragraphs.length > 0\n ? paragraphs.reduce((sum, p) => sum + p.text.split(/\\s+/).length, 0) / paragraphs.length\n : 0;\n if (avgWords > 0 && avgWords <= 167) {\n points += 6;\n details.push(`avg ${Math.round(avgWords)} words/paragraph`);\n } else if (avgWords > 0 && avgWords <= 250) {\n points += 3;\n details.push(`avg ${Math.round(avgWords)} words/paragraph (aim for <167)`);\n }\n\n // Has summary/TL;DR or intro paragraph (6 pts)\n const hasSummary = /^(#{1,3}\\s*)?(summary|tl;?dr|overview|introduction|key takeaways|in brief)\\s*$/im.test(content);\n const firstPara = paragraphs[0];\n const hasShortIntro = firstPara && firstPara.text.split(/\\s+/).length <= 60;\n if (hasSummary) {\n points += 6;\n details.push('has summary section');\n } else if (hasShortIntro) {\n points += 3;\n details.push('has short intro');\n } else {\n hints.push({ type: 'suggestion', message: 'Add a summary or TL;DR section at the top — helps AI extract the key message' });\n }\n\n return { name: 'Structure Quality', score: Math.min(points, 25), maxScore: 25, details: details.join(', ') || 'minimal structure' };\n}\n\n/**\n * Split content into paragraphs with line numbers.\n */\nfunction splitParagraphs(content: string): { text: string; line: number }[] {\n const lines = content.split('\\n');\n const paragraphs: { text: string; line: number }[] = [];\n let currentText = '';\n let currentLine = 1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line === '') {\n if (currentText) {\n paragraphs.push({ text: currentText.trim(), line: currentLine });\n currentText = '';\n }\n } else {\n if (!currentText) currentLine = i + 1;\n currentText += (currentText ? ' ' : '') + line;\n }\n }\n if (currentText) {\n paragraphs.push({ text: currentText.trim(), line: currentLine });\n }\n\n return paragraphs;\n}\n\n/**\n * Format a page citability result as a human-readable string.\n */\nexport function formatPageCitability(result: PageCitabilityResult): string {\n const lines: string[] = [];\n\n lines.push(`Page: ${result.pathname} — Score: ${result.score}/100`);\n lines.push('─'.repeat(40));\n\n for (const dim of result.dimensions) {\n const bar = '█'.repeat(dim.score) + '░'.repeat(dim.maxScore - dim.score);\n lines.push(` ${dim.name}: ${dim.score}/${dim.maxScore} ${bar}`);\n lines.push(` ${dim.details}`);\n }\n\n if (result.hints.length > 0) {\n lines.push('');\n lines.push(' Hints:');\n for (const hint of result.hints) {\n const icon = hint.type === 'error' ? '!' : hint.type === 'warning' ? '~' : '*';\n const loc = hint.line ? ` (line ${hint.line})` : '';\n lines.push(` ${icon} ${hint.message}${loc}`);\n }\n }\n\n return lines.join('\\n');\n}\n","import type { AuditResult } from './audit';\nimport type { PageCitabilityResult } from './citability';\n\nexport interface PlatformHint {\n platform: string;\n status: 'good' | 'needs-work' | 'critical';\n tips: string[];\n}\n\n/**\n * Generate platform-specific optimization hints based on audit and citability results.\n * These are static recommendations — no live API calls.\n */\nexport function generatePlatformHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint[] {\n const hints: PlatformHint[] = [];\n\n hints.push(chatgptHints(audit, citability));\n hints.push(perplexityHints(audit, citability));\n hints.push(googleAIHints(audit, citability));\n hints.push(bingCopilotHints(audit, citability));\n\n return hints;\n}\n\nfunction chatgptHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint {\n const tips: string[] = [];\n const aiAccess = audit.categories.find(c => c.name === 'AI Access');\n const schema = audit.categories.find(c => c.name === 'Schema Presence');\n const content = audit.categories.find(c => c.name === 'Content Structure');\n\n // ChatGPT/SearchGPT prioritizes: GPTBot access, Article schema, answer blocks\n const llmsCheck = aiAccess?.checks.find(c => c.label.includes('llms.txt'));\n if (!llmsCheck?.passed) {\n tips.push('Enable llms.txt — ChatGPT uses this to understand your site content');\n }\n\n const robotsCheck = aiAccess?.checks.find(c => c.label.includes('blanket disallow'));\n if (!robotsCheck?.passed) {\n tips.push('Allow GPTBot in robots.txt — blanket disallow blocks ChatGPT crawling');\n }\n\n if (schema && schema.score < 12) {\n tips.push('Add Article or WebPage schema — helps ChatGPT extract structured content');\n }\n\n if (citability && citability.averageScore < 50) {\n tips.push('Improve answer blocks — ChatGPT citations favor self-contained factual paragraphs');\n }\n\n if (content && content.score < 12) {\n tips.push('Add more structured content — headings and paragraphs help SearchGPT parse your pages');\n }\n\n if (tips.length === 0) tips.push('Your site is well-optimized for ChatGPT/SearchGPT');\n\n return {\n platform: 'ChatGPT / SearchGPT',\n status: tips.length <= 1 ? 'good' : tips.length <= 3 ? 'needs-work' : 'critical',\n tips,\n };\n}\n\nfunction perplexityHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint {\n const tips: string[] = [];\n const meta = audit.categories.find(c => c.name === 'Meta Quality');\n const citabilityScore = audit.categories.find(c => c.name === 'Citability');\n\n // Perplexity prioritizes: statistical claims, source citations, heading hierarchy\n if (citabilityScore && citabilityScore.score < 12) {\n tips.push('Add statistical claims and concrete data — Perplexity favors cite-able facts');\n }\n\n if (meta && meta.score < 12) {\n tips.push('Improve page titles and descriptions — Perplexity uses meta tags for source attribution');\n }\n\n const faqCheck = citabilityScore?.checks.find(c => c.label.includes('FAQ'));\n if (!faqCheck?.passed) {\n tips.push('Add FAQ sections with question headings — Perplexity surfaces Q&A content prominently');\n }\n\n if (citability && citability.averageScore < 40) {\n tips.push('Improve self-contained paragraphs — Perplexity extracts and cites individual passages');\n }\n\n if (tips.length === 0) tips.push('Your site is well-optimized for Perplexity');\n\n return {\n platform: 'Perplexity',\n status: tips.length <= 1 ? 'good' : tips.length <= 3 ? 'needs-work' : 'critical',\n tips,\n };\n}\n\nfunction googleAIHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint {\n const tips: string[] = [];\n const schema = audit.categories.find(c => c.name === 'Schema Presence');\n\n // Google AI Overviews: E-E-A-T signals, Organization+sameAs, freshness, structured data\n const orgCheck = schema?.checks.find(c => c.label.includes('Organization'));\n if (!orgCheck?.passed) {\n tips.push('Configure Organization name — Google AI uses this for E-E-A-T authority signals');\n }\n\n const sameAsCheck = schema?.checks.find(c => c.label.includes('sameAs'));\n if (!sameAsCheck?.passed) {\n tips.push('Add sameAs social profiles — critical for Google Knowledge Panel and E-E-A-T');\n }\n\n const logoCheck = schema?.checks.find(c => c.label.includes('logo'));\n if (!logoCheck?.passed) {\n tips.push('Add Organization logo — enhances Google search presence and AI Overviews');\n }\n\n const schemaEnabled = schema?.checks.find(c => c.label.includes('JSON-LD'));\n if (!schemaEnabled?.passed) {\n tips.push('Enable Schema.org/JSON-LD — Google AI Overviews heavily rely on structured data');\n }\n\n if (tips.length === 0) tips.push('Your site is well-optimized for Google AI Overviews');\n\n return {\n platform: 'Google AI Overviews',\n status: tips.length <= 1 ? 'good' : tips.length <= 3 ? 'needs-work' : 'critical',\n tips,\n };\n}\n\nfunction bingCopilotHints(audit: AuditResult, citability?: { averageScore: number }): PlatformHint {\n const tips: string[] = [];\n const aiAccess = audit.categories.find(c => c.name === 'AI Access');\n const meta = audit.categories.find(c => c.name === 'Meta Quality');\n\n // Bing Copilot: Bingbot access, OG metadata, FAQ content, sitemap\n const robotsCheck = aiAccess?.checks.find(c => c.label.includes('blanket disallow'));\n if (!robotsCheck?.passed) {\n tips.push('Remove blanket disallow — Bing Copilot requires Bingbot access');\n }\n\n const sitemapCheck = aiAccess?.checks.find(c => c.label.includes('sitemap'));\n if (!sitemapCheck?.passed) {\n tips.push('Enable sitemap.xml — Bing Copilot relies on sitemaps for content discovery');\n }\n\n const ogCheck = meta?.checks.find(c => c.label.includes('Open Graph'));\n if (!ogCheck?.passed) {\n tips.push('Enable OG meta tags — Bing Copilot uses OG metadata for rich answers');\n }\n\n if (citability && citability.averageScore < 40) {\n tips.push('Improve content structure — Bing Copilot favors well-organized content with clear answers');\n }\n\n if (tips.length === 0) tips.push('Your site is well-optimized for Bing Copilot');\n\n return {\n platform: 'Bing Copilot',\n status: tips.length <= 1 ? 'good' : tips.length <= 3 ? 'needs-work' : 'critical',\n tips,\n };\n}\n","import type { ResolvedAeoConfig } from '../types';\nimport { auditSite, formatAuditReport } from './audit';\nimport type { AuditResult } from './audit';\nimport { scoreSiteCitability, formatPageCitability } from './citability';\nimport type { SiteCitabilityResult } from './citability';\nimport { generatePlatformHints } from './platform-hints';\nimport type { PlatformHint } from './platform-hints';\n\nexport interface AeoReport {\n generatedAt: string;\n site: {\n title: string;\n url: string;\n pageCount: number;\n };\n audit: AuditResult;\n citability: SiteCitabilityResult;\n platformHints: PlatformHint[];\n}\n\n/**\n * Generate a comprehensive AEO/GEO report for a site.\n */\nexport function generateReport(config: ResolvedAeoConfig): AeoReport {\n const audit = auditSite(config);\n const citability = scoreSiteCitability(config);\n const platformHints = generatePlatformHints(audit, citability);\n\n return {\n generatedAt: new Date().toISOString(),\n site: {\n title: config.title,\n url: config.url,\n pageCount: config.pages.length,\n },\n audit,\n citability,\n platformHints,\n };\n}\n\n/**\n * Format the report as markdown.\n */\nexport function formatReportMarkdown(report: AeoReport): string {\n const lines: string[] = [];\n\n lines.push(`# AEO/GEO Report — ${report.site.title}`);\n lines.push('');\n lines.push(`Generated: ${report.generatedAt}`);\n lines.push(`URL: ${report.site.url}`);\n lines.push(`Pages: ${report.site.pageCount}`);\n lines.push('');\n\n // GEO Readiness\n lines.push('## GEO Readiness Score');\n lines.push('');\n lines.push(formatAuditReport(report.audit));\n lines.push('');\n\n // Citability\n lines.push('## AI Citability');\n lines.push('');\n lines.push(`Average Citability Score: ${report.citability.averageScore}/100`);\n lines.push('');\n for (const page of report.citability.pages) {\n lines.push(formatPageCitability(page));\n lines.push('');\n }\n\n // Platform Insights\n lines.push('## Platform Optimization');\n lines.push('');\n for (const hint of report.platformHints) {\n const statusIcon = hint.status === 'good' ? '+' : hint.status === 'needs-work' ? '~' : '!';\n lines.push(`### ${statusIcon} ${hint.platform} (${hint.status})`);\n lines.push('');\n for (const tip of hint.tips) {\n lines.push(`- ${tip}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format the report as JSON string.\n */\nexport function formatReportJson(report: AeoReport): string {\n return JSON.stringify(report, null, 2);\n}\n","import type { AeoConfig } from './types';\n\nexport const VERSION = '0.0.5';\n\nexport function defineConfig(config: AeoConfig): AeoConfig {\n return config;\n}\n\n// Export all types\nexport type {\n AeoConfig,\n ResolvedAeoConfig,\n PageEntry,\n DocEntry,\n AeoManifest,\n MarkdownFile,\n ManifestEntry,\n AIIndexEntry,\n FrameworkType,\n FrameworkInfo\n} from './types';\n\n// Export core functions\nexport { detectFramework } from './core/detect';\nexport { generateAEOFiles as generateAll, generateAEOFiles } from './core/generate';\nexport { resolveConfig, validateConfig } from './core/utils';\nexport { generateSchema, generateSchemaObjects, generateSiteSchemas, generatePageSchemas, generateJsonLdScript } from './core/schema';\nexport { extractTextFromHtml, extractTitle, extractDescription, extractJsonLd, htmlToMarkdown } from './core/html-extract';\nexport { generateOGTags, generateOGTagsHtml } from './core/opengraph';\nexport { auditSite, formatAuditReport, getGrade } from './core/audit';\nexport type { AuditResult, AuditCategory, AuditIssue } from './core/audit';\nexport type { MetaTag } from './core/opengraph';\nexport { scorePageCitability, scoreSiteCitability, formatPageCitability } from './core/citability';\nexport type { PageCitabilityResult, SiteCitabilityResult, CitabilityDimension, ContentHint } from './core/citability';\nexport { generateReport, formatReportMarkdown, formatReportJson } from './core/report';\nexport type { AeoReport } from './core/report';\nexport { generatePlatformHints } from './core/platform-hints';\nexport type { PlatformHint } from './core/platform-hints';"]}
|