aeoptimize 0.1.1 → 0.2.1
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/README.md +62 -45
- package/agents/aeo-ai-scorer.md +48 -0
- package/dist/cli/index.js +128 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ai-prompt.d.ts +11 -0
- package/dist/core/ai-prompt.js +56 -0
- package/dist/core/ai-prompt.js.map +1 -0
- package/dist/core/external-scorers.d.ts +8 -0
- package/dist/core/external-scorers.js +104 -0
- package/dist/core/external-scorers.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/merger.d.ts +3 -0
- package/dist/core/merger.js +48 -0
- package/dist/core/merger.js.map +1 -0
- package/dist/core/types.d.ts +14 -0
- package/package.json +1 -1
- package/skills/aeo-scan/SKILL.md +33 -7
package/README.md
CHANGED
|
@@ -1,27 +1,43 @@
|
|
|
1
|
-
#
|
|
1
|
+
# aeoptimize
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/aeoptimize)
|
|
4
|
+
[](https://github.com/dexuwang627-cloud/aeoptimize/blob/main/LICENSE)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
**CLI toolkit + Claude Code skills that transform SEO-optimized websites into AI-search-ready content.**
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
AI search engines (ChatGPT, Perplexity, Google AI Overview) don't rank pages — they **cite** content. `aeoptimize` helps you make your content citable.
|
|
8
9
|
|
|
9
10
|
```bash
|
|
10
|
-
# Scan any website
|
|
11
11
|
npx aeoptimize scan https://your-site.com
|
|
12
|
+
```
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
```
|
|
15
|
+
AEO Readability Report
|
|
16
|
+
Score: 61/100 AI Readability: Good
|
|
17
|
+
|
|
18
|
+
Structure ██████████████░░░░░░ 18/25
|
|
19
|
+
Citability ████████████░░░░░░░░ 16/25
|
|
20
|
+
Schema ███████░░░░░░░░░░░░░ 7/20
|
|
21
|
+
AI Metadata ███████░░░░░░░░░░░░░ 8/15
|
|
22
|
+
Content Density ███████████████░░░░░ 12/15
|
|
23
|
+
|
|
24
|
+
Top Suggestions:
|
|
25
|
+
→ Add FAQ section with question-format headings
|
|
26
|
+
→ Add AI-relevant schema types
|
|
27
|
+
→ Create and link an llms.txt file
|
|
18
28
|
```
|
|
19
29
|
|
|
20
|
-
##
|
|
30
|
+
## Features
|
|
21
31
|
|
|
22
|
-
###
|
|
32
|
+
### Scan — AI Readability Audit
|
|
23
33
|
|
|
24
|
-
|
|
34
|
+
17 rules across 5 dimensions, 0-100 score. Zero cost, offline capable, deterministic.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx aeoptimize scan https://example.com # Remote URL
|
|
38
|
+
npx aeoptimize scan ./dist # Local directory
|
|
39
|
+
npx aeoptimize scan ./dist --json # Machine-readable
|
|
40
|
+
```
|
|
25
41
|
|
|
26
42
|
| Dimension | Max | What it measures |
|
|
27
43
|
|-----------|-----|------------------|
|
|
@@ -31,30 +47,48 @@ Analyzes your content across 5 dimensions and gives a 0-100 score:
|
|
|
31
47
|
| **AI Metadata** | 15 | llms.txt, robots.txt AI config, meta description |
|
|
32
48
|
| **Content Density** | 15 | Content vs boilerplate, keyword stuffing detection |
|
|
33
49
|
|
|
50
|
+
### Multi-AI Scoring
|
|
51
|
+
|
|
52
|
+
Score with multiple AI engines simultaneously. Detects `gemini` and `copilot` CLIs, dispatches parallel scoring, merges with rule engine.
|
|
53
|
+
|
|
34
54
|
```bash
|
|
35
|
-
npx aeoptimize scan https://example.com
|
|
36
|
-
|
|
37
|
-
|
|
55
|
+
npx aeoptimize scan https://example.com --multi-ai
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
Score: 72/100 (Rule Engine: 61 | AI Consensus: 83)
|
|
60
|
+
|
|
61
|
+
Rule Engine ████████████░░░░░░░░ 61/100
|
|
62
|
+
Claude ████████████████░░░░ 85/100
|
|
63
|
+
Gemini ████████████████░░░░ 81/100
|
|
64
|
+
|
|
65
|
+
AI Insights:
|
|
66
|
+
Claude: "FAQ section lacks schema markup"
|
|
67
|
+
Gemini: "Missing llms.txt reduces discoverability"
|
|
38
68
|
```
|
|
39
69
|
|
|
40
|
-
|
|
70
|
+
| Scenario | Weighting |
|
|
71
|
+
|----------|-----------|
|
|
72
|
+
| Rule engine + 2+ AIs | 50% rules + 50% AI average |
|
|
73
|
+
| Rule engine + 1 AI | 60% rules + 40% AI |
|
|
74
|
+
| Rule engine only | 100% rules |
|
|
41
75
|
|
|
42
|
-
|
|
76
|
+
### Generate — AI Infrastructure Files
|
|
43
77
|
|
|
78
|
+
```bash
|
|
79
|
+
npx aeoptimize generate ./dist --dry-run # Preview
|
|
80
|
+
npx aeoptimize generate ./dist # Write files
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Generates:
|
|
44
84
|
- **llms.txt** — Machine-readable site summary ([llmstxt.org](https://llmstxt.org) standard)
|
|
45
85
|
- **llms-full.txt** — Full content for deep AI consumption
|
|
46
86
|
- **JSON-LD schemas** — Article, FAQPage, BreadcrumbList
|
|
47
87
|
- **robots.txt suggestions** — AI crawler allow/deny rules
|
|
48
88
|
|
|
49
|
-
|
|
50
|
-
npx aeoptimize generate ./dist --dry-run # Preview first
|
|
51
|
-
npx aeoptimize generate ./dist # Write files
|
|
52
|
-
npx aeoptimize generate ./dist --json # Machine-readable
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### `aeo transform` — AI Content Restructuring (Skill Only)
|
|
89
|
+
### Transform — AI Content Restructuring (Claude Code Skill)
|
|
56
90
|
|
|
57
|
-
|
|
91
|
+
Uses your existing Claude subscription — zero extra cost:
|
|
58
92
|
|
|
59
93
|
- Split long paragraphs into citable statements
|
|
60
94
|
- Extract implicit Q&A into FAQ schema
|
|
@@ -64,22 +98,16 @@ Available as a Claude Code skill — uses your existing subscription, no extra c
|
|
|
64
98
|
|
|
65
99
|
## Claude Code Skills
|
|
66
100
|
|
|
67
|
-
Install as a Claude Code plugin for interactive, AI-powered optimization:
|
|
68
|
-
|
|
69
101
|
```bash
|
|
70
102
|
claude plugin marketplace add dexuwang627-cloud/aeoptimize
|
|
71
103
|
```
|
|
72
104
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
- `/aeo-scan` — Interactive audit with discussion
|
|
105
|
+
- `/aeo-scan` — Interactive audit with multi-AI scoring
|
|
76
106
|
- `/aeo-generate` — Guided file generation with preview
|
|
77
107
|
- `/aeo-transform` — AI-powered content restructuring
|
|
78
108
|
|
|
79
109
|
## Why AEO?
|
|
80
110
|
|
|
81
|
-
Traditional SEO optimizes for ranking algorithms. AEO optimizes for AI comprehension.
|
|
82
|
-
|
|
83
111
|
| | SEO | AEO |
|
|
84
112
|
|---|---|---|
|
|
85
113
|
| **Goal** | Rank higher | Get cited |
|
|
@@ -88,18 +116,7 @@ Traditional SEO optimizes for ranking algorithms. AEO optimizes for AI comprehen
|
|
|
88
116
|
| **Content style** | Keyword-rich | Self-contained, structured |
|
|
89
117
|
| **Structured data** | Nice to have | Essential |
|
|
90
118
|
|
|
91
|
-
67% of users now get their first answer from AI
|
|
92
|
-
|
|
93
|
-
## Scoring Methodology
|
|
94
|
-
|
|
95
|
-
Each rule produces a score based on heuristic analysis (no LLM required):
|
|
96
|
-
|
|
97
|
-
- **17 rules** across 5 dimensions
|
|
98
|
-
- **Zero cost** — pure static analysis
|
|
99
|
-
- **Offline capable** — works without internet for local files
|
|
100
|
-
- **Deterministic** — same input always produces same score
|
|
101
|
-
|
|
102
|
-
The scoring weights (25/25/20/15/15) prioritize structure and citability because these factors most strongly correlate with AI citation rates.
|
|
119
|
+
67% of users now get their first answer from AI. If your content can't be extracted and cited, it's invisible.
|
|
103
120
|
|
|
104
121
|
## License
|
|
105
122
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aeo-ai-scorer
|
|
3
|
+
description: Use when scoring a webpage's AI readability using Claude's language understanding, as part of the multi-AI scoring workflow in aeo-scan
|
|
4
|
+
model: inherit
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are an AEO (Answer Engine Optimization) scoring engine. Your job is to evaluate a webpage's AI search readiness and return a structured score.
|
|
8
|
+
|
|
9
|
+
## Input
|
|
10
|
+
|
|
11
|
+
You will receive:
|
|
12
|
+
1. The page's HTML content (or text extract)
|
|
13
|
+
2. The rule engine's scan report (JSON)
|
|
14
|
+
|
|
15
|
+
## Scoring Dimensions
|
|
16
|
+
|
|
17
|
+
Score each dimension on its scale:
|
|
18
|
+
- **structure** (0-25): Heading hierarchy quality, paragraph length (ideal: 40-80 words), FAQ sections, list usage
|
|
19
|
+
- **citability** (0-25): Self-contained statements (no dangling "This...", "It..."), data/statistics, clear definitions ("X is Y"), source attribution
|
|
20
|
+
- **schema** (0-20): JSON-LD presence and completeness, AI-relevant types (Article, FAQPage, HowTo, Product)
|
|
21
|
+
- **aiMetadata** (0-15): llms.txt reference, robots.txt AI crawler configuration, meta description quality (50-160 chars)
|
|
22
|
+
- **contentDensity** (0-15): Content vs boilerplate ratio, keyword stuffing (>3% = bad), content uniqueness signals
|
|
23
|
+
|
|
24
|
+
## Output Format
|
|
25
|
+
|
|
26
|
+
Respond with ONLY valid JSON:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"score": <total 0-100>,
|
|
31
|
+
"structure": <0-25>,
|
|
32
|
+
"citability": <0-25>,
|
|
33
|
+
"schema": <0-20>,
|
|
34
|
+
"aiMetadata": <0-15>,
|
|
35
|
+
"contentDensity": <0-15>,
|
|
36
|
+
"insight": "<one sentence: the single most impactful thing to fix>"
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Guidelines
|
|
41
|
+
|
|
42
|
+
- Be objective and consistent — same content should get same score
|
|
43
|
+
- Compare against an ideal AEO-optimized page, not against average websites
|
|
44
|
+
- The rule engine already checks structural patterns; focus on semantic quality that rules can't measure:
|
|
45
|
+
- Can you actually extract a citable quote from each paragraph?
|
|
46
|
+
- Does the content answer a specific question or just ramble?
|
|
47
|
+
- Would you cite this page when answering a user's question?
|
|
48
|
+
- Do NOT inflate scores to be nice — a typical unoptimized page should score 30-50
|
package/dist/cli/index.js
CHANGED
|
@@ -4,6 +4,8 @@ import chalk from 'chalk';
|
|
|
4
4
|
import { writeFile, mkdir, stat } from 'node:fs/promises';
|
|
5
5
|
import { scan, scanDirectory } from '../core/scanner.js';
|
|
6
6
|
import { generate } from '../core/generator.js';
|
|
7
|
+
import { detectAvailableCLIs, scoreWithAllAvailable } from '../core/external-scorers.js';
|
|
8
|
+
import { mergeScores } from '../core/merger.js';
|
|
7
9
|
const program = new Command();
|
|
8
10
|
program
|
|
9
11
|
.name('aeo')
|
|
@@ -14,16 +16,29 @@ program
|
|
|
14
16
|
.command('scan <target>')
|
|
15
17
|
.description('Scan a URL or directory for AI readability')
|
|
16
18
|
.option('--json', 'Output raw JSON report')
|
|
19
|
+
.option('--multi-ai', 'Score with multiple AI engines (gemini, copilot) if available')
|
|
17
20
|
.action(async (target, options) => {
|
|
18
21
|
try {
|
|
19
22
|
const scanTarget = resolveTarget(target);
|
|
20
23
|
const report = await scan(scanTarget);
|
|
21
|
-
if (options.
|
|
22
|
-
|
|
24
|
+
if (options.multiAi) {
|
|
25
|
+
const multiReport = await runMultiAiScan(report, target);
|
|
26
|
+
if (options.json) {
|
|
27
|
+
console.log(JSON.stringify(multiReport, null, 2));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
printMultiAiReport(multiReport);
|
|
31
|
+
printSkillCta();
|
|
32
|
+
}
|
|
23
33
|
}
|
|
24
34
|
else {
|
|
25
|
-
|
|
26
|
-
|
|
35
|
+
if (options.json) {
|
|
36
|
+
console.log(JSON.stringify(report, null, 2));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
printReport(report);
|
|
40
|
+
printSkillCta();
|
|
41
|
+
}
|
|
27
42
|
}
|
|
28
43
|
}
|
|
29
44
|
catch (err) {
|
|
@@ -131,6 +146,10 @@ function resolveTarget(target) {
|
|
|
131
146
|
if (target.startsWith('http://') || target.startsWith('https://')) {
|
|
132
147
|
return { type: 'url', path: target };
|
|
133
148
|
}
|
|
149
|
+
// If it looks like a domain (contains a dot but no path separator), treat as URL
|
|
150
|
+
if (target.includes('.') && !target.includes('/') && !target.includes('\\')) {
|
|
151
|
+
return { type: 'url', path: `https://${target}` };
|
|
152
|
+
}
|
|
134
153
|
// Could be file or directory — stat will determine
|
|
135
154
|
return { type: 'directory', path: target };
|
|
136
155
|
}
|
|
@@ -214,6 +233,111 @@ function printDimensionBar(label, score, max) {
|
|
|
214
233
|
const labelPad = label.padEnd(16);
|
|
215
234
|
console.log(` ${labelPad} ${bar} ${color(String(score))}${chalk.dim('/' + max)}`);
|
|
216
235
|
}
|
|
236
|
+
async function runMultiAiScan(ruleReport, target) {
|
|
237
|
+
console.log(chalk.dim('\n Detecting AI CLIs...'));
|
|
238
|
+
const available = await detectAvailableCLIs();
|
|
239
|
+
const found = [];
|
|
240
|
+
if (available.gemini)
|
|
241
|
+
found.push('gemini');
|
|
242
|
+
if (available.copilot)
|
|
243
|
+
found.push('copilot');
|
|
244
|
+
if (found.length > 0) {
|
|
245
|
+
console.log(chalk.dim(` Found: ${found.join(', ')}`));
|
|
246
|
+
console.log(chalk.dim(' Requesting AI scores (this may take a moment)...\n'));
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
console.log(chalk.dim(' No external AI CLIs found. Using rule engine only.\n'));
|
|
250
|
+
}
|
|
251
|
+
// Fetch HTML for AI scoring
|
|
252
|
+
let html = '';
|
|
253
|
+
if (target.startsWith('http')) {
|
|
254
|
+
try {
|
|
255
|
+
const response = await fetch(target);
|
|
256
|
+
html = await response.text();
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
// Fall through with empty html
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const aiScores = html ? await scoreWithAllAvailable(html, target, available) : [];
|
|
263
|
+
return mergeScores(ruleReport, aiScores);
|
|
264
|
+
}
|
|
265
|
+
function printMultiAiReport(report) {
|
|
266
|
+
const { overall } = report;
|
|
267
|
+
console.log('');
|
|
268
|
+
console.log(chalk.bold(' AEO Readability Report (Multi-AI)'));
|
|
269
|
+
console.log(chalk.dim(` ${report.timestamp}`));
|
|
270
|
+
console.log(chalk.dim(` ${report.pages.length} page${report.pages.length > 1 ? 's' : ''} scanned`));
|
|
271
|
+
console.log(chalk.dim(` ${report.methodology}`));
|
|
272
|
+
console.log('');
|
|
273
|
+
// Consensus score
|
|
274
|
+
const scoreColor = report.consensusScore >= 70 ? chalk.green : report.consensusScore >= 40 ? chalk.yellow : chalk.red;
|
|
275
|
+
console.log(` ${chalk.bold('Score:')} ${scoreColor.bold(String(report.consensusScore))}${chalk.dim('/100')} (Rule Engine: ${report.ruleScore} | AI Consensus: ${report.aiScores.filter((s) => s.available).length > 0 ? Math.round(report.aiScores.filter((s) => s.available).reduce((sum, s) => sum + s.score, 0) / report.aiScores.filter((s) => s.available).length) : 'N/A'})`);
|
|
276
|
+
console.log('');
|
|
277
|
+
// Source breakdown
|
|
278
|
+
console.log(chalk.bold(' Scorer Breakdown:'));
|
|
279
|
+
printScoreBar('Rule Engine', report.ruleScore, 100);
|
|
280
|
+
for (const ai of report.aiScores) {
|
|
281
|
+
if (ai.available) {
|
|
282
|
+
const label = ai.source.charAt(0).toUpperCase() + ai.source.slice(1);
|
|
283
|
+
printScoreBar(label, ai.score, 100);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
console.log('');
|
|
287
|
+
// Dimension breakdown (from rule engine)
|
|
288
|
+
console.log(chalk.bold(' Dimension Breakdown (Rule Engine):'));
|
|
289
|
+
const ruleOverall = { ...report.overall, total: report.ruleScore };
|
|
290
|
+
printDimensionBar('Structure', report.pages[0]?.scores.structure ?? 0, 25);
|
|
291
|
+
printDimensionBar('Citability', report.pages[0]?.scores.citability ?? 0, 25);
|
|
292
|
+
printDimensionBar('Schema', report.pages[0]?.scores.schema ?? 0, 20);
|
|
293
|
+
printDimensionBar('AI Metadata', report.pages[0]?.scores.aiMetadata ?? 0, 15);
|
|
294
|
+
printDimensionBar('Content Density', report.pages[0]?.scores.contentDensity ?? 0, 15);
|
|
295
|
+
console.log('');
|
|
296
|
+
// AI Insights
|
|
297
|
+
const availableAi = report.aiScores.filter((s) => s.available && s.insight);
|
|
298
|
+
if (availableAi.length > 0) {
|
|
299
|
+
console.log(chalk.magenta.bold(' AI Insights:'));
|
|
300
|
+
for (const ai of availableAi) {
|
|
301
|
+
const label = ai.source.charAt(0).toUpperCase() + ai.source.slice(1);
|
|
302
|
+
console.log(` ${chalk.magenta(label + ':')} ${ai.insight}`);
|
|
303
|
+
}
|
|
304
|
+
console.log('');
|
|
305
|
+
}
|
|
306
|
+
// Issues and suggestions from rule engine
|
|
307
|
+
const allIssues = report.pages.flatMap((p) => p.issues);
|
|
308
|
+
const criticalIssues = allIssues.filter((i) => i.severity === 'critical');
|
|
309
|
+
if (criticalIssues.length > 0) {
|
|
310
|
+
console.log(chalk.red.bold(' Critical Issues:'));
|
|
311
|
+
for (const issue of criticalIssues.slice(0, 5)) {
|
|
312
|
+
console.log(` ${chalk.red('✗')} ${issue.message}`);
|
|
313
|
+
}
|
|
314
|
+
console.log('');
|
|
315
|
+
}
|
|
316
|
+
const allSuggestions = report.pages.flatMap((p) => p.suggestions);
|
|
317
|
+
const highImpact = allSuggestions.filter((s) => s.impact === 'high');
|
|
318
|
+
if (highImpact.length > 0) {
|
|
319
|
+
console.log(chalk.cyan.bold(' Top Suggestions:'));
|
|
320
|
+
const seen = new Set();
|
|
321
|
+
for (const sug of highImpact) {
|
|
322
|
+
if (seen.has(sug.action))
|
|
323
|
+
continue;
|
|
324
|
+
seen.add(sug.action);
|
|
325
|
+
console.log(` ${chalk.cyan('→')} ${sug.action}`);
|
|
326
|
+
console.log(` ${chalk.dim(sug.detail)}`);
|
|
327
|
+
}
|
|
328
|
+
console.log('');
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
function printScoreBar(label, score, max) {
|
|
332
|
+
const pct = score / max;
|
|
333
|
+
const barWidth = 20;
|
|
334
|
+
const filled = Math.round(pct * barWidth);
|
|
335
|
+
const empty = barWidth - filled;
|
|
336
|
+
const color = pct >= 0.7 ? chalk.green : pct >= 0.4 ? chalk.yellow : chalk.red;
|
|
337
|
+
const bar = color('█'.repeat(filled)) + chalk.dim('░'.repeat(empty));
|
|
338
|
+
const labelPad = label.padEnd(16);
|
|
339
|
+
console.log(` ${labelPad} ${bar} ${color(String(score))}${chalk.dim('/' + max)}`);
|
|
340
|
+
}
|
|
217
341
|
function printSkillCta() {
|
|
218
342
|
console.log(chalk.dim(' ─────────────────────────────────────────'));
|
|
219
343
|
console.log(chalk.dim(' Want AI-powered fixes? Install as Claude Code skill:'));
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function buildScoringPrompt(htmlContent: string, url: string): string;
|
|
2
|
+
export interface AiScoreResponse {
|
|
3
|
+
score: number;
|
|
4
|
+
structure: number;
|
|
5
|
+
citability: number;
|
|
6
|
+
schema: number;
|
|
7
|
+
aiMetadata: number;
|
|
8
|
+
contentDensity: number;
|
|
9
|
+
insight: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function parseAiResponse(raw: string): AiScoreResponse | null;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export function buildScoringPrompt(htmlContent, url) {
|
|
2
|
+
// Truncate to avoid token limits on external CLIs
|
|
3
|
+
const truncated = htmlContent.slice(0, 8000);
|
|
4
|
+
return `You are an AEO (Answer Engine Optimization) expert. Analyze this webpage and score its AI search readiness.
|
|
5
|
+
|
|
6
|
+
URL: ${url}
|
|
7
|
+
|
|
8
|
+
Score the page across these 5 dimensions. Each dimension has a maximum score:
|
|
9
|
+
- structure (max 25): Heading hierarchy, paragraph length (<150 words ideal), FAQ presence, list usage
|
|
10
|
+
- citability (max 25): Self-contained statements, data/statistics, clear definitions, source attribution
|
|
11
|
+
- schema (max 20): JSON-LD structured data presence, completeness, AI-relevant types (FAQPage, Article, HowTo)
|
|
12
|
+
- aiMetadata (max 15): llms.txt reference, robots.txt AI crawler config, meta description quality
|
|
13
|
+
- contentDensity (max 15): Content vs boilerplate ratio, keyword stuffing detection, content uniqueness
|
|
14
|
+
|
|
15
|
+
Respond with ONLY valid JSON, no markdown, no explanation:
|
|
16
|
+
{
|
|
17
|
+
"score": <total 0-100>,
|
|
18
|
+
"structure": <0-25>,
|
|
19
|
+
"citability": <0-25>,
|
|
20
|
+
"schema": <0-20>,
|
|
21
|
+
"aiMetadata": <0-15>,
|
|
22
|
+
"contentDensity": <0-15>,
|
|
23
|
+
"insight": "<one sentence summary of the biggest AEO issue>"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
PAGE CONTENT:
|
|
27
|
+
${truncated}`;
|
|
28
|
+
}
|
|
29
|
+
export function parseAiResponse(raw) {
|
|
30
|
+
try {
|
|
31
|
+
// Extract JSON from response (may have surrounding text)
|
|
32
|
+
const jsonMatch = raw.match(/\{[\s\S]*?"score"[\s\S]*?\}/);
|
|
33
|
+
if (!jsonMatch)
|
|
34
|
+
return null;
|
|
35
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
36
|
+
// Validate required fields
|
|
37
|
+
if (typeof parsed.score !== 'number')
|
|
38
|
+
return null;
|
|
39
|
+
return {
|
|
40
|
+
score: clamp(parsed.score, 0, 100),
|
|
41
|
+
structure: clamp(parsed.structure ?? 0, 0, 25),
|
|
42
|
+
citability: clamp(parsed.citability ?? 0, 0, 25),
|
|
43
|
+
schema: clamp(parsed.schema ?? 0, 0, 20),
|
|
44
|
+
aiMetadata: clamp(parsed.aiMetadata ?? 0, 0, 15),
|
|
45
|
+
contentDensity: clamp(parsed.contentDensity ?? 0, 0, 15),
|
|
46
|
+
insight: parsed.insight ?? 'No insight provided',
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function clamp(val, min, max) {
|
|
54
|
+
return Math.max(min, Math.min(max, Math.round(val)));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ai-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-prompt.js","sourceRoot":"","sources":["../../src/core/ai-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,GAAW;IACjE,kDAAkD;IAClD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7C,OAAO;;OAEF,GAAG;;;;;;;;;;;;;;;;;;;;;EAqBR,SAAS,EAAE,CAAC;AACd,CAAC;AAYD,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,yDAAyD;QACzD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAExC,2BAA2B;QAC3B,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAElD,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC;YAClC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,qBAAqB;SACjD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;IAClD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AiScorerResult, AiSource } from './types.js';
|
|
2
|
+
export interface AvailableCLIs {
|
|
3
|
+
gemini: boolean;
|
|
4
|
+
copilot: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function detectAvailableCLIs(): Promise<AvailableCLIs>;
|
|
7
|
+
export declare function scoreWithExternalCLI(source: AiSource, html: string, url: string): Promise<AiScorerResult>;
|
|
8
|
+
export declare function scoreWithAllAvailable(html: string, url: string, available: AvailableCLIs): Promise<AiScorerResult[]>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { execFile, exec } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
import { buildScoringPrompt, parseAiResponse } from './ai-prompt.js';
|
|
4
|
+
const execFileAsync = promisify(execFile);
|
|
5
|
+
const execAsync = promisify(exec);
|
|
6
|
+
const TIMEOUT_MS = 60_000;
|
|
7
|
+
export async function detectAvailableCLIs() {
|
|
8
|
+
const [gemini, copilot] = await Promise.all([
|
|
9
|
+
commandExists('gemini'),
|
|
10
|
+
commandExists('copilot'),
|
|
11
|
+
]);
|
|
12
|
+
return { gemini, copilot };
|
|
13
|
+
}
|
|
14
|
+
async function commandExists(cmd) {
|
|
15
|
+
try {
|
|
16
|
+
await execAsync(`command -v ${cmd}`, { timeout: 5000 });
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export async function scoreWithExternalCLI(source, html, url) {
|
|
24
|
+
const prompt = buildScoringPrompt(html, url);
|
|
25
|
+
const unavailable = {
|
|
26
|
+
source,
|
|
27
|
+
score: 0,
|
|
28
|
+
dimensions: { structure: 0, citability: 0, schema: 0, aiMetadata: 0, contentDensity: 0, total: 0 },
|
|
29
|
+
insight: 'CLI not available',
|
|
30
|
+
available: false,
|
|
31
|
+
};
|
|
32
|
+
try {
|
|
33
|
+
let raw;
|
|
34
|
+
if (source === 'gemini') {
|
|
35
|
+
raw = await runGemini(prompt);
|
|
36
|
+
}
|
|
37
|
+
else if (source === 'copilot') {
|
|
38
|
+
raw = await runCopilot(prompt);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return unavailable;
|
|
42
|
+
}
|
|
43
|
+
const parsed = parseAiResponse(raw);
|
|
44
|
+
if (!parsed) {
|
|
45
|
+
return { ...unavailable, available: true, insight: 'Failed to parse AI response' };
|
|
46
|
+
}
|
|
47
|
+
const dimensions = {
|
|
48
|
+
structure: parsed.structure,
|
|
49
|
+
citability: parsed.citability,
|
|
50
|
+
schema: parsed.schema,
|
|
51
|
+
aiMetadata: parsed.aiMetadata,
|
|
52
|
+
contentDensity: parsed.contentDensity,
|
|
53
|
+
total: parsed.score,
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
source,
|
|
57
|
+
score: parsed.score,
|
|
58
|
+
dimensions,
|
|
59
|
+
insight: parsed.insight,
|
|
60
|
+
available: true,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return { ...unavailable, insight: `${source} CLI timed out or errored` };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function runGemini(prompt) {
|
|
68
|
+
// gemini CLI accepts prompt via -p flag
|
|
69
|
+
const { stdout } = await execFileAsync('gemini', ['-p', prompt], {
|
|
70
|
+
timeout: TIMEOUT_MS,
|
|
71
|
+
maxBuffer: 1024 * 1024,
|
|
72
|
+
});
|
|
73
|
+
return stdout;
|
|
74
|
+
}
|
|
75
|
+
async function runCopilot(prompt) {
|
|
76
|
+
// copilot CLI accepts prompt via -p flag
|
|
77
|
+
const { stdout } = await execFileAsync('copilot', ['-p', prompt], {
|
|
78
|
+
timeout: TIMEOUT_MS,
|
|
79
|
+
maxBuffer: 1024 * 1024,
|
|
80
|
+
});
|
|
81
|
+
return stdout;
|
|
82
|
+
}
|
|
83
|
+
export async function scoreWithAllAvailable(html, url, available) {
|
|
84
|
+
const tasks = [];
|
|
85
|
+
if (available.gemini) {
|
|
86
|
+
tasks.push(scoreWithExternalCLI('gemini', html, url));
|
|
87
|
+
}
|
|
88
|
+
if (available.copilot) {
|
|
89
|
+
tasks.push(scoreWithExternalCLI('copilot', html, url));
|
|
90
|
+
}
|
|
91
|
+
const results = await Promise.allSettled(tasks);
|
|
92
|
+
return results.map((r) => {
|
|
93
|
+
if (r.status === 'fulfilled')
|
|
94
|
+
return r.value;
|
|
95
|
+
return {
|
|
96
|
+
source: 'gemini',
|
|
97
|
+
score: 0,
|
|
98
|
+
dimensions: { structure: 0, citability: 0, schema: 0, aiMetadata: 0, contentDensity: 0, total: 0 },
|
|
99
|
+
insight: 'Scorer failed unexpectedly',
|
|
100
|
+
available: false,
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=external-scorers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-scorers.js","sourceRoot":"","sources":["../../src/core/external-scorers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAErE,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,UAAU,GAAG,MAAM,CAAC;AAO1B,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,aAAa,CAAC,QAAQ,CAAC;QACvB,aAAa,CAAC,SAAS,CAAC;KACzB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW;IACtC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAgB,EAChB,IAAY,EACZ,GAAW;IAEX,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAmB;QAClC,MAAM;QACN,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAClG,OAAO,EAAE,mBAAmB;QAC5B,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,GAAW,CAAC;QAEhB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;QACrF,CAAC;QAED,MAAM,UAAU,GAAoB;YAClC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;QAEF,OAAO;YACL,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,2BAA2B,EAAE,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAc;IACrC,wCAAwC;IACxC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;QAC/D,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,IAAI,GAAG,IAAI;KACvB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAc;IACtC,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;QAChE,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,IAAI,GAAG,IAAI;KACvB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,GAAW,EACX,SAAwB;IAExB,MAAM,KAAK,GAA8B,EAAE,CAAC;IAE5C,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAEhD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC;QAC7C,OAAO;YACL,MAAM,EAAE,QAAoB;YAC5B,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAClG,OAAO,EAAE,4BAA4B;YACrC,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/core/index.d.ts
CHANGED
package/dist/core/index.js
CHANGED
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ScanReport, AiScorerResult, MultiAiReport, DimensionScores } from './types.js';
|
|
2
|
+
export declare function mergeScores(ruleReport: ScanReport, aiScores: AiScorerResult[]): MultiAiReport;
|
|
3
|
+
export declare function averageAiDimensions(aiScores: AiScorerResult[]): DimensionScores | null;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function mergeScores(ruleReport, aiScores) {
|
|
2
|
+
const availableAiScores = aiScores.filter((s) => s.available && s.score > 0);
|
|
3
|
+
const ruleScore = ruleReport.overall.total;
|
|
4
|
+
let consensusScore;
|
|
5
|
+
let methodology;
|
|
6
|
+
if (availableAiScores.length === 0) {
|
|
7
|
+
// No AI scores — rule engine only
|
|
8
|
+
consensusScore = ruleScore;
|
|
9
|
+
methodology = 'Rule engine only (no AI CLIs available)';
|
|
10
|
+
}
|
|
11
|
+
else if (availableAiScores.length === 1) {
|
|
12
|
+
// One AI + rule engine: 60/40
|
|
13
|
+
const aiAvg = availableAiScores[0].score;
|
|
14
|
+
consensusScore = Math.round(ruleScore * 0.6 + aiAvg * 0.4);
|
|
15
|
+
methodology = `Rule engine (60%) + ${availableAiScores[0].source} (40%)`;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
// Multiple AIs + rule engine: 50/50
|
|
19
|
+
const aiAvg = Math.round(availableAiScores.reduce((sum, s) => sum + s.score, 0) / availableAiScores.length);
|
|
20
|
+
consensusScore = Math.round(ruleScore * 0.5 + aiAvg * 0.5);
|
|
21
|
+
const sources = availableAiScores.map((s) => s.source).join(', ');
|
|
22
|
+
methodology = `Rule engine (50%) + AI average [${sources}] (50%)`;
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
...ruleReport,
|
|
26
|
+
overall: {
|
|
27
|
+
...ruleReport.overall,
|
|
28
|
+
total: consensusScore,
|
|
29
|
+
},
|
|
30
|
+
ruleScore,
|
|
31
|
+
aiScores,
|
|
32
|
+
consensusScore,
|
|
33
|
+
methodology,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function averageAiDimensions(aiScores) {
|
|
37
|
+
const available = aiScores.filter((s) => s.available && s.score > 0);
|
|
38
|
+
if (available.length === 0)
|
|
39
|
+
return null;
|
|
40
|
+
const dims = ['structure', 'citability', 'schema', 'aiMetadata', 'contentDensity'];
|
|
41
|
+
const avg = { structure: 0, citability: 0, schema: 0, aiMetadata: 0, contentDensity: 0, total: 0 };
|
|
42
|
+
for (const dim of dims) {
|
|
43
|
+
avg[dim] = Math.round(available.reduce((sum, s) => sum + s.dimensions[dim], 0) / available.length);
|
|
44
|
+
}
|
|
45
|
+
avg.total = avg.structure + avg.citability + avg.schema + avg.aiMetadata + avg.contentDensity;
|
|
46
|
+
return avg;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=merger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merger.js","sourceRoot":"","sources":["../../src/core/merger.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -85,3 +85,17 @@ export interface GenerateOutput {
|
|
|
85
85
|
jsonLd: object[];
|
|
86
86
|
robotsTxtSuggestions: string[];
|
|
87
87
|
}
|
|
88
|
+
export type AiSource = 'claude' | 'gemini' | 'copilot';
|
|
89
|
+
export interface AiScorerResult {
|
|
90
|
+
source: AiSource;
|
|
91
|
+
score: number;
|
|
92
|
+
dimensions: DimensionScores;
|
|
93
|
+
insight: string;
|
|
94
|
+
available: boolean;
|
|
95
|
+
}
|
|
96
|
+
export interface MultiAiReport extends ScanReport {
|
|
97
|
+
ruleScore: number;
|
|
98
|
+
aiScores: AiScorerResult[];
|
|
99
|
+
consensusScore: number;
|
|
100
|
+
methodology: string;
|
|
101
|
+
}
|
package/package.json
CHANGED
package/skills/aeo-scan/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ description: Use when auditing a website or build output for AI search readiness
|
|
|
5
5
|
|
|
6
6
|
# AEO Scan — AI Readability Audit
|
|
7
7
|
|
|
8
|
-
Scan a website or build directory and produce an interactive AI readability report.
|
|
8
|
+
Scan a website or build directory and produce an interactive AI readability report. Supports multi-AI scoring with gemini and copilot CLIs.
|
|
9
9
|
|
|
10
10
|
## Scoring Dimensions (0-100)
|
|
11
11
|
|
|
@@ -21,30 +21,56 @@ Scan a website or build directory and produce an interactive AI readability repo
|
|
|
21
21
|
|
|
22
22
|
1. **Identify target.** Ask the user for a URL or directory path. If in a project with a build output (e.g., `dist/`, `out/`, `.next/`, `build/`), suggest scanning that.
|
|
23
23
|
|
|
24
|
-
2. **
|
|
24
|
+
2. **Detect AI CLIs.** Check which AI tools are available:
|
|
25
|
+
```
|
|
26
|
+
which gemini && which copilot
|
|
27
|
+
```
|
|
28
|
+
Report which are found. If both are available, offer multi-AI scoring.
|
|
29
|
+
|
|
30
|
+
3. **Run scan.** Choose based on available CLIs:
|
|
31
|
+
|
|
32
|
+
**If external AI CLIs available:**
|
|
33
|
+
```
|
|
34
|
+
npx aeoptimize scan <target> --multi-ai --json
|
|
35
|
+
```
|
|
36
|
+
This runs the rule engine + dispatches gemini/copilot for parallel scoring.
|
|
37
|
+
|
|
38
|
+
**If no external CLIs:**
|
|
25
39
|
```
|
|
26
40
|
npx aeoptimize scan <target> --json
|
|
27
41
|
```
|
|
42
|
+
Then use the `aeo-ai-scorer` agent to add Claude's AI-level analysis on top of the rule engine score.
|
|
28
43
|
|
|
29
|
-
|
|
44
|
+
4. **Present results.** Show:
|
|
45
|
+
- **Consensus score** (rule engine + AI weighted average)
|
|
46
|
+
- **Per-scorer breakdown** (Rule Engine, Claude, Gemini, Copilot — whichever are available)
|
|
30
47
|
- Dimensions scoring below 60% of their max
|
|
31
48
|
- All critical issues
|
|
32
|
-
-
|
|
49
|
+
- **AI insights** — each AI's one-sentence summary of the biggest issue
|
|
33
50
|
|
|
34
|
-
|
|
51
|
+
5. **Discuss improvements.** For each weak dimension, explain:
|
|
35
52
|
- Why it matters for AI search visibility
|
|
36
53
|
- Concrete steps to improve
|
|
37
54
|
- Expected score impact
|
|
55
|
+
- Cross-reference insights from different AI scorers if they agree/disagree
|
|
38
56
|
|
|
39
|
-
|
|
57
|
+
6. **Offer next steps:**
|
|
40
58
|
- Score below 50? Suggest running `/aeo-transform` on the worst pages
|
|
41
59
|
- Missing llms.txt or schema? Suggest `/aeo-generate`
|
|
42
60
|
- Score above 80? Congratulate and suggest monitoring over time
|
|
43
61
|
|
|
62
|
+
## Multi-AI Scoring Methodology
|
|
63
|
+
|
|
64
|
+
| Scenario | Weighting |
|
|
65
|
+
|----------|-----------|
|
|
66
|
+
| Rule engine + 2+ AIs | 50% rule engine + 50% AI average |
|
|
67
|
+
| Rule engine + 1 AI | 60% rule engine + 40% AI |
|
|
68
|
+
| Rule engine only | 100% rule engine |
|
|
69
|
+
|
|
44
70
|
## Important
|
|
45
71
|
|
|
46
72
|
- Always run the CLI with `--json` for machine-readable output
|
|
47
73
|
- Present scores visually with context, not just numbers
|
|
48
74
|
- Focus discussion on high-impact fixes first
|
|
49
75
|
- If scanning a URL fails (CORS, timeout), suggest scanning the local build output instead
|
|
50
|
-
-
|
|
76
|
+
- When using Claude as AI scorer (no external CLIs), dispatch the `aeo-ai-scorer` agent
|