| interface GenerateLlmsOptions { | ||
| articles?: string; | ||
| output?: string; | ||
| siteName?: string; | ||
| siteUrl?: string; | ||
| siteDescription?: string; | ||
| config?: string; | ||
| minScore?: number; | ||
| maxArticles?: number; | ||
| } | ||
| /** | ||
| * 生成 llms.txt 和 llms-full.txt 命令 | ||
| */ | ||
| export declare function generateLlmsCommand(options?: GenerateLlmsOptions): Promise<void>; | ||
| export {}; | ||
| //# sourceMappingURL=generate-llms.d.ts.map |
| {"version":3,"file":"generate-llms.d.ts","sourceRoot":"","sources":["../../src/commands/generate-llms.ts"],"names":[],"mappings":"AAOA,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,mBAAwB,iBA8G1E"} |
| import fs from 'fs-extra'; | ||
| import path from 'path'; | ||
| import chalk from 'chalk'; | ||
| import ora from 'ora'; | ||
| import { LLMsTxtGenerator } from '../llms/llms-generator.js'; | ||
| /** | ||
| * 生成 llms.txt 和 llms-full.txt 命令 | ||
| */ | ||
| export async function generateLlmsCommand(options = {}) { | ||
| const spinner = ora('正在初始化...').start(); | ||
| try { | ||
| // 1. 读取配置文件或使用命令行参数 | ||
| const config = await loadConfig(options, spinner); | ||
| // 2. 验证配置 | ||
| if (!config.siteName || !config.siteUrl || !config.siteDescription) { | ||
| spinner.fail(chalk.red('缺少必需配置')); | ||
| console.log(); | ||
| console.log(chalk.yellow('请提供以下配置:')); | ||
| console.log(chalk.gray(' --site-name 网站名称')); | ||
| console.log(chalk.gray(' --site-url 网站 URL')); | ||
| console.log(chalk.gray(' --site-description 网站描述')); | ||
| console.log(); | ||
| console.log(chalk.yellow('或使用配置文件:')); | ||
| console.log(chalk.gray(' --config .geoify/config.yaml')); | ||
| console.log(); | ||
| process.exit(1); | ||
| } | ||
| // 3. 确定文章目录和输出目录 | ||
| const articlesDir = path.resolve(options.articles || 'articles'); | ||
| const outputDir = path.resolve(options.output || 'public'); | ||
| spinner.text = '检查目录...'; | ||
| // 检查文章目录是否存在 | ||
| if (!await fs.pathExists(articlesDir)) { | ||
| spinner.fail(chalk.red(`文章目录不存在: ${articlesDir}`)); | ||
| process.exit(1); | ||
| } | ||
| // 确保输出目录存在 | ||
| await fs.ensureDir(outputDir); | ||
| spinner.succeed(chalk.green('目录检查完成')); | ||
| // 4. 生成 llms.txt | ||
| spinner.start('正在扫描文章...'); | ||
| const generator = new LLMsTxtGenerator(config); | ||
| const result = await generator.generate(articlesDir); | ||
| spinner.succeed(chalk.green(`扫描完成: 共 ${result.metadata.totalArticles} 篇文章`)); | ||
| // 5. 保存文件 | ||
| spinner.start('正在生成文件...'); | ||
| const llmsTxtPath = path.join(outputDir, 'llms.txt'); | ||
| const llmsFullTxtPath = path.join(outputDir, 'llms-full.txt'); | ||
| await fs.writeFile(llmsTxtPath, result.llmsTxt, 'utf-8'); | ||
| await fs.writeFile(llmsFullTxtPath, result.llmsFullTxt, 'utf-8'); | ||
| spinner.succeed(chalk.green('文件生成完成')); | ||
| // 6. 显示统计信息 | ||
| console.log(); | ||
| console.log(chalk.cyan('='.repeat(50))); | ||
| console.log(chalk.cyan.bold(' llms.txt 生成结果')); | ||
| console.log(chalk.cyan('='.repeat(50))); | ||
| console.log(); | ||
| console.log(chalk.bold('文章统计:')); | ||
| console.log(` 总文章数: ${chalk.green(result.metadata.totalArticles)}`); | ||
| console.log(` 已分类: ${chalk.green(result.metadata.categorizedArticles)}`); | ||
| console.log(` 未分类: ${chalk.yellow(result.metadata.uncategorizedArticles)}`); | ||
| console.log(` 平均 E-E-A-T: ${colorScore(result.metadata.averageEEATScore)}/10`); | ||
| console.log(); | ||
| console.log(chalk.bold('生成文件:')); | ||
| console.log(` ${chalk.cyan('llms.txt')}: ${chalk.gray(llmsTxtPath)}`); | ||
| console.log(` ${chalk.cyan('llms-full.txt')}: ${chalk.gray(llmsFullTxtPath)}`); | ||
| console.log(); | ||
| // 7. 文件大小统计 | ||
| const llmsTxtSize = (await fs.stat(llmsTxtPath)).size; | ||
| const llmsFullTxtSize = (await fs.stat(llmsFullTxtPath)).size; | ||
| console.log(chalk.bold('文件大小:')); | ||
| console.log(` ${chalk.cyan('llms.txt')}: ${formatBytes(llmsTxtSize)}`); | ||
| console.log(` ${chalk.cyan('llms-full.txt')}: ${formatBytes(llmsFullTxtSize)}`); | ||
| console.log(); | ||
| // 8. 下一步建议 | ||
| console.log(chalk.cyan('📋 下一步:')); | ||
| console.log(chalk.gray(' 1. 将文件部署到网站根目录')); | ||
| console.log(chalk.gray(' 2. 确保文件可通过以下 URL 访问:')); | ||
| console.log(chalk.gray(` - ${config.siteUrl}/llms.txt`)); | ||
| console.log(chalk.gray(` - ${config.siteUrl}/llms-full.txt`)); | ||
| console.log(chalk.gray(' 3. 验证文件: geoify validate-llms --url <your-site-url>')); | ||
| console.log(); | ||
| // 9. 性能提示 | ||
| if (result.metadata.totalArticles > 50) { | ||
| console.log(chalk.yellow('💡 性能提示:')); | ||
| console.log(chalk.gray(' - 考虑设置 --min-score 过滤低质量文章')); | ||
| console.log(chalk.gray(' - 考虑设置 --max-articles 限制文章数量')); | ||
| console.log(chalk.gray(' - 大型项目建议使用配置文件管理')); | ||
| console.log(); | ||
| } | ||
| } | ||
| catch (error) { | ||
| spinner.fail(chalk.red('生成失败')); | ||
| console.error(); | ||
| console.error(chalk.red('错误详情:'), error); | ||
| process.exit(1); | ||
| } | ||
| } | ||
| /** | ||
| * 加载配置 | ||
| */ | ||
| async function loadConfig(options, spinner) { | ||
| let config = {}; | ||
| // 1. 从配置文件加载 | ||
| if (options.config) { | ||
| const configPath = path.resolve(options.config); | ||
| if (await fs.pathExists(configPath)) { | ||
| spinner.text = '加载配置文件...'; | ||
| try { | ||
| // 支持 JSON 配置 | ||
| if (configPath.endsWith('.json')) { | ||
| config = await fs.readJSON(configPath); | ||
| } | ||
| // 支持 YAML 配置 (未来实现) | ||
| else if (configPath.endsWith('.yaml') || configPath.endsWith('.yml')) { | ||
| spinner.warn(chalk.yellow('YAML 配置支持即将推出,请使用 JSON 格式')); | ||
| } | ||
| } | ||
| catch (error) { | ||
| spinner.warn(chalk.yellow(`配置文件加载失败: ${error}`)); | ||
| } | ||
| } | ||
| } | ||
| // 2. 从命令行参数覆盖 | ||
| const finalConfig = { | ||
| siteName: options.siteName || config.siteName || '', | ||
| siteUrl: options.siteUrl || config.siteUrl || '', | ||
| siteDescription: options.siteDescription || config.siteDescription || '', | ||
| categories: config.categories, | ||
| minEEATScore: options.minScore || config.minEEATScore, | ||
| maxArticles: options.maxArticles || config.maxArticles | ||
| }; | ||
| return finalConfig; | ||
| } | ||
| /** | ||
| * 格式化字节大小 | ||
| */ | ||
| function formatBytes(bytes) { | ||
| if (bytes < 1024) | ||
| return `${bytes} B`; | ||
| if (bytes < 1024 * 1024) | ||
| return `${(bytes / 1024).toFixed(2)} KB`; | ||
| return `${(bytes / (1024 * 1024)).toFixed(2)} MB`; | ||
| } | ||
| /** | ||
| * 根据分数着色 | ||
| */ | ||
| function colorScore(score) { | ||
| if (score >= 8) | ||
| return chalk.green(score.toString()); | ||
| if (score >= 7) | ||
| return chalk.yellow(score.toString()); | ||
| return chalk.red(score.toString()); | ||
| } | ||
| //# sourceMappingURL=generate-llms.js.map |
| {"version":3,"file":"generate-llms.js","sourceRoot":"","sources":["../../src/commands/generate-llms.ts"],"names":[],"mappings":"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"} |
| import type { LlmsTxtConfig, LlmsTxtOutput } from './types.js'; | ||
| /** | ||
| * llms.txt 和 llms-full.txt 生成器 | ||
| * | ||
| * 核心功能: | ||
| * 1. 扫描文章目录,解析 frontmatter | ||
| * 2. 计算 E-E-A-T 分数 | ||
| * 3. 基于标签自动分类 | ||
| * 4. 生成 llms.txt (导航索引) | ||
| * 5. 生成 llms-full.txt (完整内容) | ||
| */ | ||
| export declare class LLMsTxtGenerator { | ||
| private config; | ||
| private scorer; | ||
| constructor(config: LlmsTxtConfig); | ||
| /** | ||
| * 生成 llms.txt 和 llms-full.txt | ||
| */ | ||
| generate(articlesDir: string): Promise<LlmsTxtOutput>; | ||
| /** | ||
| * 扫描文章目录,提取元数据 | ||
| */ | ||
| private scanArticles; | ||
| /** | ||
| * 递归获取所有 Markdown 文件 | ||
| */ | ||
| private getAllMarkdownFiles; | ||
| /** | ||
| * 从内容中提取标题 | ||
| */ | ||
| private extractTitle; | ||
| /** | ||
| * 从内容中提取描述 | ||
| */ | ||
| private extractDescription; | ||
| /** | ||
| * 按质量过滤文章 | ||
| */ | ||
| private filterByQuality; | ||
| /** | ||
| * 按 E-E-A-T 分数排序并限制数量 | ||
| */ | ||
| private sortByEEAT; | ||
| /** | ||
| * 按标签分类文章 | ||
| */ | ||
| private categorizeArticles; | ||
| /** | ||
| * 生成 llms.txt 内容 (导航索引) | ||
| */ | ||
| private generateLlmsTxt; | ||
| /** | ||
| * 生成 llms-full.txt 内容 (完整内容) | ||
| */ | ||
| private generateLlmsFullTxt; | ||
| /** | ||
| * 生成元数据 | ||
| */ | ||
| private generateMetadata; | ||
| } | ||
| //# sourceMappingURL=llms-generator.d.ts.map |
| {"version":3,"file":"llms-generator.d.ts","sourceRoot":"","sources":["../../src/llms/llms-generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAGd,MAAM,YAAY,CAAA;AAGnB;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,aAAa;IASjC;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6B3D;;OAEG;YACW,YAAY;IAwC1B;;OAEG;YACW,mBAAmB;IAkBjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqD1B;;OAEG;IACH,OAAO,CAAC,eAAe;IA8CvB;;OAEG;YACW,mBAAmB;IA2EjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAyBzB"} |
| import { readFile, readdir } from 'node:fs/promises'; | ||
| import { join, relative } from 'node:path'; | ||
| import matter from 'gray-matter'; | ||
| import { EEATScorer } from '../scoring/eeat-scorer.js'; | ||
| /** | ||
| * llms.txt 和 llms-full.txt 生成器 | ||
| * | ||
| * 核心功能: | ||
| * 1. 扫描文章目录,解析 frontmatter | ||
| * 2. 计算 E-E-A-T 分数 | ||
| * 3. 基于标签自动分类 | ||
| * 4. 生成 llms.txt (导航索引) | ||
| * 5. 生成 llms-full.txt (完整内容) | ||
| */ | ||
| export class LLMsTxtGenerator { | ||
| config; | ||
| scorer; | ||
| constructor(config) { | ||
| this.config = { | ||
| minEEATScore: 7.0, | ||
| maxArticles: 100, | ||
| ...config | ||
| }; | ||
| this.scorer = new EEATScorer(); | ||
| } | ||
| /** | ||
| * 生成 llms.txt 和 llms-full.txt | ||
| */ | ||
| async generate(articlesDir) { | ||
| // 1. 扫描和解析所有文章 | ||
| const articles = await this.scanArticles(articlesDir); | ||
| // 2. 过滤低质量文章 | ||
| const qualityArticles = this.filterByQuality(articles); | ||
| // 3. 按 E-E-A-T 分数排序 | ||
| const sortedArticles = this.sortByEEAT(qualityArticles); | ||
| // 4. 按标签分类 | ||
| const categorized = this.categorizeArticles(sortedArticles); | ||
| // 5. 生成 llms.txt | ||
| const llmsTxt = this.generateLlmsTxt(categorized, sortedArticles); | ||
| // 6. 生成 llms-full.txt | ||
| const llmsFullTxt = await this.generateLlmsFullTxt(categorized, sortedArticles, articlesDir); | ||
| // 7. 生成元数据 | ||
| const metadata = this.generateMetadata(sortedArticles, categorized); | ||
| return { | ||
| llmsTxt, | ||
| llmsFullTxt, | ||
| metadata | ||
| }; | ||
| } | ||
| /** | ||
| * 扫描文章目录,提取元数据 | ||
| */ | ||
| async scanArticles(articlesDir) { | ||
| const articles = []; | ||
| try { | ||
| const files = await this.getAllMarkdownFiles(articlesDir); | ||
| for (const filePath of files) { | ||
| try { | ||
| const content = await readFile(filePath, 'utf-8'); | ||
| const { data: frontmatter, content: markdownContent } = matter(content); | ||
| // 计算 E-E-A-T 分数 | ||
| const score = this.scorer.score(content); | ||
| // 生成 URL (相对路径转 URL) | ||
| const relativePath = relative(articlesDir, filePath); | ||
| const url = this.config.siteUrl + '/' + relativePath.replace(/\.md$/, ''); | ||
| articles.push({ | ||
| title: frontmatter.title || this.extractTitle(markdownContent), | ||
| description: frontmatter.description || this.extractDescription(markdownContent), | ||
| url, | ||
| tags: frontmatter.tags || [], | ||
| category: frontmatter.category, | ||
| publishDate: frontmatter.publishDate || frontmatter.date, | ||
| author: frontmatter.author, | ||
| eeatlScore: score.overall, | ||
| filePath | ||
| }); | ||
| } | ||
| catch (error) { | ||
| console.warn(`解析文章失败: ${filePath}`, error); | ||
| } | ||
| } | ||
| } | ||
| catch (error) { | ||
| throw new Error(`扫描文章目录失败: ${error}`); | ||
| } | ||
| return articles; | ||
| } | ||
| /** | ||
| * 递归获取所有 Markdown 文件 | ||
| */ | ||
| async getAllMarkdownFiles(dir) { | ||
| const files = []; | ||
| const entries = await readdir(dir, { withFileTypes: true }); | ||
| for (const entry of entries) { | ||
| const fullPath = join(dir, entry.name); | ||
| if (entry.isDirectory()) { | ||
| const subFiles = await this.getAllMarkdownFiles(fullPath); | ||
| files.push(...subFiles); | ||
| } | ||
| else if (entry.isFile() && entry.name.endsWith('.md')) { | ||
| files.push(fullPath); | ||
| } | ||
| } | ||
| return files; | ||
| } | ||
| /** | ||
| * 从内容中提取标题 | ||
| */ | ||
| extractTitle(content) { | ||
| const match = content.match(/^#\s+(.+)$/m); | ||
| return match ? match[1].trim() : 'Untitled'; | ||
| } | ||
| /** | ||
| * 从内容中提取描述 | ||
| */ | ||
| extractDescription(content) { | ||
| // 去除标题后的第一段 | ||
| const withoutTitle = content.replace(/^#\s+.+$/m, '').trim(); | ||
| const firstParagraph = withoutTitle.split('\n\n')[0]; | ||
| return firstParagraph.substring(0, 200).trim(); | ||
| } | ||
| /** | ||
| * 按质量过滤文章 | ||
| */ | ||
| filterByQuality(articles) { | ||
| return articles.filter(article => { | ||
| if (article.eeatlScore === undefined) | ||
| return false; | ||
| return article.eeatlScore >= (this.config.minEEATScore || 7.0); | ||
| }); | ||
| } | ||
| /** | ||
| * 按 E-E-A-T 分数排序并限制数量 | ||
| */ | ||
| sortByEEAT(articles) { | ||
| return [...articles] | ||
| .sort((a, b) => { | ||
| const scoreA = a.eeatlScore || 0; | ||
| const scoreB = b.eeatlScore || 0; | ||
| return scoreB - scoreA; | ||
| }) | ||
| .slice(0, this.config.maxArticles || 100); | ||
| } | ||
| /** | ||
| * 按标签分类文章 | ||
| */ | ||
| categorizeArticles(articles) { | ||
| const categorized = {}; | ||
| const categories = this.config.categories || {}; | ||
| // 初始化分类 | ||
| Object.keys(categories).forEach(category => { | ||
| categorized[category] = []; | ||
| }); | ||
| // 未分类的文章 | ||
| categorized['其他'] = []; | ||
| for (const article of articles) { | ||
| let assigned = false; | ||
| // 如果文章已指定分类 | ||
| if (article.category && categorized[article.category]) { | ||
| categorized[article.category].push(article); | ||
| assigned = true; | ||
| continue; | ||
| } | ||
| // 根据标签自动分类 | ||
| const articleTags = article.tags || []; | ||
| for (const [categoryName, config] of Object.entries(categories)) { | ||
| const categoryTags = config.tags || []; | ||
| const hasMatchingTag = articleTags.some(tag => categoryTags.includes(tag)); | ||
| if (hasMatchingTag) { | ||
| categorized[categoryName].push(article); | ||
| assigned = true; | ||
| break; | ||
| } | ||
| } | ||
| if (!assigned) { | ||
| categorized['其他'].push(article); | ||
| } | ||
| } | ||
| // 移除空分类 | ||
| Object.keys(categorized).forEach(category => { | ||
| if (categorized[category].length === 0) { | ||
| delete categorized[category]; | ||
| } | ||
| }); | ||
| return categorized; | ||
| } | ||
| /** | ||
| * 生成 llms.txt 内容 (导航索引) | ||
| */ | ||
| generateLlmsTxt(categorized, allArticles) { | ||
| const lines = []; | ||
| // 网站头部 | ||
| lines.push(`# ${this.config.siteName}`); | ||
| lines.push(''); | ||
| lines.push(`> ${this.config.siteDescription}`); | ||
| lines.push(''); | ||
| // 主要内容分类 | ||
| const categories = this.config.categories || {}; | ||
| const sortedCategories = Object.keys(categorized).sort((a, b) => { | ||
| const priorityA = categories[a]?.priority || 999; | ||
| const priorityB = categories[b]?.priority || 999; | ||
| return priorityA - priorityB; | ||
| }); | ||
| for (const category of sortedCategories) { | ||
| const articles = categorized[category]; | ||
| if (articles.length === 0) | ||
| continue; | ||
| const categoryLabel = categories[category]?.label || category; | ||
| lines.push(`## ${categoryLabel}`); | ||
| lines.push(''); | ||
| for (const article of articles) { | ||
| const description = article.description | ||
| ? `: ${article.description.substring(0, 100)}` | ||
| : ''; | ||
| lines.push(`- [${article.title}](${article.url})${description}`); | ||
| } | ||
| lines.push(''); | ||
| } | ||
| // 网站元信息 | ||
| lines.push('## 关于'); | ||
| lines.push(''); | ||
| lines.push(`- [完整内容](${this.config.siteUrl}/llms-full.txt)`); | ||
| lines.push(`- 总文章数: ${allArticles.length}`); | ||
| lines.push(`- 最后更新: ${new Date().toISOString().split('T')[0]}`); | ||
| lines.push(''); | ||
| return lines.join('\n'); | ||
| } | ||
| /** | ||
| * 生成 llms-full.txt 内容 (完整内容) | ||
| */ | ||
| async generateLlmsFullTxt(categorized, allArticles, articlesDir) { | ||
| const lines = []; | ||
| // 网站头部 | ||
| lines.push(`# ${this.config.siteName}`); | ||
| lines.push(''); | ||
| lines.push(`> ${this.config.siteDescription}`); | ||
| lines.push(''); | ||
| lines.push('---'); | ||
| lines.push(''); | ||
| // 按分类输出完整内容 | ||
| const categories = this.config.categories || {}; | ||
| const sortedCategories = Object.keys(categorized).sort((a, b) => { | ||
| const priorityA = categories[a]?.priority || 999; | ||
| const priorityB = categories[b]?.priority || 999; | ||
| return priorityA - priorityB; | ||
| }); | ||
| for (const category of sortedCategories) { | ||
| const articles = categorized[category]; | ||
| if (articles.length === 0) | ||
| continue; | ||
| const categoryLabel = categories[category]?.label || category; | ||
| lines.push(`## ${categoryLabel}`); | ||
| lines.push(''); | ||
| for (const article of articles) { | ||
| // 读取文章完整内容 | ||
| try { | ||
| const content = await readFile(article.filePath, 'utf-8'); | ||
| const { content: markdownContent } = matter(content); | ||
| lines.push(`### ${article.title}`); | ||
| lines.push(''); | ||
| if (article.description) { | ||
| lines.push(`> ${article.description}`); | ||
| lines.push(''); | ||
| } | ||
| lines.push(`**URL**: ${article.url}`); | ||
| if (article.author) { | ||
| lines.push(`**作者**: ${article.author}`); | ||
| } | ||
| if (article.publishDate) { | ||
| lines.push(`**发布日期**: ${article.publishDate}`); | ||
| } | ||
| if (article.eeatlScore) { | ||
| lines.push(`**E-E-A-T 分数**: ${article.eeatlScore}/10`); | ||
| } | ||
| lines.push(''); | ||
| lines.push(markdownContent.trim()); | ||
| lines.push(''); | ||
| lines.push('---'); | ||
| lines.push(''); | ||
| } | ||
| catch (error) { | ||
| console.warn(`读取文章内容失败: ${article.filePath}`, error); | ||
| } | ||
| } | ||
| } | ||
| // 网站元信息 | ||
| lines.push('## 关于本站'); | ||
| lines.push(''); | ||
| lines.push(`- 网站: ${this.config.siteUrl}`); | ||
| lines.push(`- 总文章数: ${allArticles.length}`); | ||
| lines.push(`- 最后更新: ${new Date().toISOString().split('T')[0]}`); | ||
| lines.push(''); | ||
| return lines.join('\n'); | ||
| } | ||
| /** | ||
| * 生成元数据 | ||
| */ | ||
| generateMetadata(allArticles, categorized) { | ||
| const categorizedCount = Object.values(categorized) | ||
| .filter(articles => articles.length > 0) | ||
| .reduce((sum, articles) => sum + articles.length, 0); | ||
| const uncategorizedCount = categorized['其他']?.length || 0; | ||
| const totalScore = allArticles.reduce((sum, article) => sum + (article.eeatlScore || 0), 0); | ||
| const averageScore = allArticles.length > 0 | ||
| ? totalScore / allArticles.length | ||
| : 0; | ||
| return { | ||
| totalArticles: allArticles.length, | ||
| categorizedArticles: categorizedCount - uncategorizedCount, | ||
| uncategorizedArticles: uncategorizedCount, | ||
| averageEEATScore: Math.round(averageScore * 10) / 10, | ||
| generatedAt: new Date().toISOString() | ||
| }; | ||
| } | ||
| } | ||
| //# sourceMappingURL=llms-generator.js.map |
| {"version":3,"file":"llms-generator.js","sourceRoot":"","sources":["../../src/llms/llms-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,MAAM,MAAM,aAAa,CAAA;AAOhC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEtD;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAe;IACrB,MAAM,CAAY;IAE1B,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG;YACZ,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,GAAG;YAChB,GAAG,MAAM;SACV,CAAA;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,WAAmB;QAChC,eAAe;QACf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QAErD,aAAa;QACb,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAEtD,oBAAoB;QACpB,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;QAEvD,WAAW;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAA;QAE3D,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;QAEjE,sBAAsB;QACtB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,CAAC,CAAA;QAE5F,WAAW;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAEnE,OAAO;YACL,OAAO;YACP,WAAW;YACX,QAAQ;SACT,CAAA;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,WAAmB;QAC5C,MAAM,QAAQ,GAAsB,EAAE,CAAA;QAEtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAA;YAEzD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;oBACjD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;oBAEvE,gBAAgB;oBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;oBAExC,qBAAqB;oBACrB,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;oBACpD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;oBAEzE,QAAQ,CAAC,IAAI,CAAC;wBACZ,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;wBAC9D,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;wBAChF,GAAG;wBACH,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;wBAC5B,QAAQ,EAAE,WAAW,CAAC,QAAQ;wBAC9B,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI;wBACxD,MAAM,EAAE,WAAW,CAAC,MAAM;wBAC1B,UAAU,EAAE,KAAK,CAAC,OAAO;wBACzB,QAAQ;qBACT,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,WAAW,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAA;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,EAAE,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,GAAW;QAC3C,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAEtC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAA;gBACzD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;YACzB,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAAe;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAA;IAC7C,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,OAAe;QACxC,YAAY;QACZ,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAC5D,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACpD,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAChD,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAA2B;QACjD,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAC/B,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAA;YAClD,OAAO,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,QAA2B;QAC5C,OAAO,CAAC,GAAG,QAAQ,CAAC;aACjB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAA;YAChC,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAA;YAChC,OAAO,MAAM,GAAG,MAAM,CAAA;QACxB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,CAAA;IAC7C,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,QAA2B;QACpD,MAAM,WAAW,GAAwB,EAAE,CAAA;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA;QAE/C,QAAQ;QACR,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;QAC5B,CAAC,CAAC,CAAA;QAEF,SAAS;QACT,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,YAAY;YACZ,IAAI,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC3C,QAAQ,GAAG,IAAI,CAAA;gBACf,SAAQ;YACV,CAAC;YAED,WAAW;YACX,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;YAEtC,KAAK,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;gBACtC,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC5C,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC3B,CAAA;gBAED,IAAI,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACvC,QAAQ,GAAG,IAAI,CAAA;oBACf,MAAK;gBACP,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QAED,QAAQ;QACR,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC1C,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvC,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,WAAW,CAAA;IACpB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,WAAgC,EAAE,WAA8B;QACtF,MAAM,KAAK,GAAa,EAAE,CAAA;QAE1B,OAAO;QACP,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAA;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEd,SAAS;QACT,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA;QAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9D,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,GAAG,CAAA;YAChD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,GAAG,CAAA;YAChD,OAAO,SAAS,GAAG,SAAS,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;YACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAQ;YAEnC,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAA;YAC7D,KAAK,CAAC,IAAI,CAAC,MAAM,aAAa,EAAE,CAAC,CAAA;YACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEd,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;oBACrC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;oBAC9C,CAAC,CAAC,EAAE,CAAA;gBACN,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,CAAA;YAClE,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;QAED,QAAQ;QACR,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA;QAC5D,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3C,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,WAAgC,EAChC,WAA8B,EAC9B,WAAmB;QAEnB,MAAM,KAAK,GAAa,EAAE,CAAA;QAE1B,OAAO;QACP,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAA;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEd,YAAY;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA;QAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9D,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,GAAG,CAAA;YAChD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,GAAG,CAAA;YAChD,OAAO,SAAS,GAAG,SAAS,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;YACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAQ;YAEnC,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAA;YAC7D,KAAK,CAAC,IAAI,CAAC,MAAM,aAAa,EAAE,CAAC,CAAA;YACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEd,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,WAAW;gBACX,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;oBACzD,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;oBAEpD,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;oBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBACd,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;wBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;wBACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAChB,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;oBACrC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACnB,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;oBACzC,CAAC;oBACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;wBACxB,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;oBAChD,CAAC;oBACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;wBACvB,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,UAAU,KAAK,CAAC,CAAA;oBACxD,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBACd,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAA;oBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAChB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAA;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,QAAQ;QACR,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;QAC1C,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3C,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,WAA8B,EAC9B,WAAgC;QAEhC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;aAChD,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEtD,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAA;QAEzD,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CACrD,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,CACnC,CAAA;QACD,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;YACzC,CAAC,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM;YACjC,CAAC,CAAC,CAAC,CAAA;QAEL,OAAO;YACL,aAAa,EAAE,WAAW,CAAC,MAAM;YACjC,mBAAmB,EAAE,gBAAgB,GAAG,kBAAkB;YAC1D,qBAAqB,EAAE,kBAAkB;YACzC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE;YACpD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAA;IACH,CAAC;CACF"} |
| /** | ||
| * llms.txt 生成器的类型定义 | ||
| */ | ||
| /** | ||
| * 文章元数据 | ||
| */ | ||
| export interface ArticleMetadata { | ||
| title: string; | ||
| description?: string; | ||
| url: string; | ||
| tags?: string[]; | ||
| category?: string; | ||
| publishDate?: string; | ||
| author?: string; | ||
| eeatlScore?: number; | ||
| filePath: string; | ||
| } | ||
| /** | ||
| * 分类配置 | ||
| */ | ||
| export interface CategoryConfig { | ||
| tags: string[]; | ||
| priority: number; | ||
| label?: string; | ||
| } | ||
| /** | ||
| * llms.txt 生成器配置 | ||
| */ | ||
| export interface LlmsTxtConfig { | ||
| siteName: string; | ||
| siteUrl: string; | ||
| siteDescription: string; | ||
| categories?: { | ||
| [key: string]: CategoryConfig; | ||
| }; | ||
| minEEATScore?: number; | ||
| maxArticles?: number; | ||
| } | ||
| /** | ||
| * llms.txt 生成结果 | ||
| */ | ||
| export interface LlmsTxtOutput { | ||
| llmsTxt: string; | ||
| llmsFullTxt: string; | ||
| metadata: { | ||
| totalArticles: number; | ||
| categorizedArticles: number; | ||
| uncategorizedArticles: number; | ||
| averageEEATScore: number; | ||
| generatedAt: string; | ||
| }; | ||
| } | ||
| /** | ||
| * 文章分类结果 | ||
| */ | ||
| export interface CategorizedArticles { | ||
| [category: string]: ArticleMetadata[]; | ||
| } | ||
| //# sourceMappingURL=types.d.ts.map |
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llms/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;KAC9B,CAAA;IACD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE;QACR,aAAa,EAAE,MAAM,CAAA;QACrB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,qBAAqB,EAAE,MAAM,CAAA;QAC7B,gBAAgB,EAAE,MAAM,CAAA;QACxB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAAA;CACtC"} |
| /** | ||
| * llms.txt 生成器的类型定义 | ||
| */ | ||
| export {}; | ||
| //# sourceMappingURL=types.js.map |
| {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llms/types.ts"],"names":[],"mappings":"AAAA;;GAEG"} |
+32
-1
@@ -7,2 +7,3 @@ #!/usr/bin/env node | ||
| import { schemaCommand } from './commands/schema.js'; | ||
| import { generateLlmsCommand } from './commands/generate-llms.js'; | ||
| const program = new Command(); | ||
@@ -12,3 +13,3 @@ program | ||
| .description('GEO (Generative Engine Optimization) - 优化内容使其成为 AI 引擎的引用来源') | ||
| .version('0.1.0'); // GEO MVP - E-E-A-T scoring + Schema.org generation | ||
| .version('0.2.0'); // GEO v0.2.0 - E-E-A-T + Schema.org + llms.txt | ||
| // Init 命令 | ||
@@ -94,2 +95,32 @@ program | ||
| }); | ||
| // Generate LLMs 命令 | ||
| program | ||
| .command('generate-llms') | ||
| .description('生成 llms.txt 和 llms-full.txt 文件') | ||
| .option('--articles <dir>', '文章目录', 'articles') | ||
| .option('--output <dir>', '输出目录', 'public') | ||
| .option('--site-name <name>', '网站名称') | ||
| .option('--site-url <url>', '网站 URL') | ||
| .option('--site-description <desc>', '网站描述') | ||
| .option('--config <path>', '配置文件路径 (.geoify/config.json)') | ||
| .option('--min-score <score>', '最低 E-E-A-T 分数', '7.0') | ||
| .option('--max-articles <num>', '最大文章数', '100') | ||
| .action(async (options) => { | ||
| try { | ||
| await generateLlmsCommand({ | ||
| articles: options.articles, | ||
| output: options.output, | ||
| siteName: options.siteName, | ||
| siteUrl: options.siteUrl, | ||
| siteDescription: options.siteDescription, | ||
| config: options.config, | ||
| minScore: parseFloat(options.minScore), | ||
| maxArticles: parseInt(options.maxArticles, 10) | ||
| }); | ||
| } | ||
| catch (error) { | ||
| console.error(chalk.red('llms.txt 生成失败:'), error); | ||
| process.exit(1); | ||
| } | ||
| }); | ||
| // Analyze 命令 (未来实现) | ||
@@ -96,0 +127,0 @@ program |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} |
+9
-2
| { | ||
| "name": "geoify", | ||
| "version": "0.1.0", | ||
| "version": "0.2.0", | ||
| "type": "module", | ||
@@ -36,2 +36,6 @@ "description": "GEO (Generative Engine Optimization) - 优化内容使其成为 AI 引擎的引用来源", | ||
| "start": "node dist/cli.js", | ||
| "test": "vitest", | ||
| "test:ui": "vitest --ui", | ||
| "test:coverage": "vitest --coverage", | ||
| "benchmark": "tsx benchmark.ts", | ||
| "clean": "rm -rf dist", | ||
@@ -56,4 +60,7 @@ "prepare": "npm run build", | ||
| "@types/node": "^20.10.0", | ||
| "@vitest/coverage-v8": "^4.0.6", | ||
| "@vitest/ui": "^4.0.6", | ||
| "tsx": "^4.7.0", | ||
| "typescript": "^5.3.3" | ||
| "typescript": "^5.3.3", | ||
| "vitest": "^4.0.6" | ||
| }, | ||
@@ -60,0 +67,0 @@ "engines": { |
+8
-0
| # Geoify - AI 引用优化工具 | ||
| [](https://www.npmjs.com/package/geoify) | ||
| [](LICENSE) | ||
| [](https://nodejs.org/) | ||
| [](https://github.com/wordflowlab/geoify/actions/workflows/test.yml) | ||
| [](COVERAGE_REPORT.md) | ||
| [](TEST_SUMMARY.md) | ||
| [](CONTRIBUTING.md) | ||
| > Optimize for AI Citation, Not Just Search Ranking | ||
@@ -4,0 +12,0 @@ |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
257734
21.2%89
15.58%3242
24.45%1
-50%313
2.62%9
50%2
100%