aeo-ready 1.7.4 → 1.7.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aeo-ready",
3
- "version": "1.7.4",
3
+ "version": "1.7.6",
4
4
  "description": "AEO benchmark aggregator. One scan, every score. Collects agentic-seo, Cloudflare, Fern, Vercel, and AgentGrade in one report.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,6 +17,13 @@ const RECOMMENDATION_MAP = [
17
17
  "Add User-agent / Allow rules for GPTBot, ClaudeBot, and other AI crawlers",
18
18
  match: (id) => /^robots\.txt$|robots.*blocked/i.test(id),
19
19
  },
20
+ {
21
+ key: "links-resolve",
22
+ label: "Fix broken links in llms.txt",
23
+ detail:
24
+ "Some links in llms.txt point to pages that return errors or unexpected content types",
25
+ match: (id) => /llms-txt-links/i.test(id),
26
+ },
20
27
  {
21
28
  key: "llms-txt",
22
29
  label: "Create and link llms.txt",
@@ -134,13 +141,6 @@ const RECOMMENDATION_MAP = [
134
141
  "Add tool-name and tool-description attributes to <form> elements for browser AI agents",
135
142
  match: (id) => /form tool annotations/i.test(id),
136
143
  },
137
- {
138
- key: "links-resolve",
139
- label: "Fix broken links in llms.txt",
140
- detail:
141
- "Some links in llms.txt point to pages that return errors or unexpected content types",
142
- match: (id) => /llms-txt-links/i.test(id),
143
- },
144
144
  ];
145
145
 
146
146
  function collectFailedChecks(benchmarks) {
@@ -273,6 +273,48 @@ function generateAgentPrompt(result, recs) {
273
273
  return lines.join("\n");
274
274
  }
275
275
 
276
+ function printPromptForTerminal(result, recs) {
277
+ let currentTier = null;
278
+ let num = 1;
279
+
280
+ console.log("");
281
+ for (const rec of recs) {
282
+ const tier = tierLabel(rec.priority);
283
+ if (tier !== currentTier) {
284
+ currentTier = tier;
285
+ const color =
286
+ rec.priority >= 3
287
+ ? chalk.red
288
+ : rec.priority >= 2
289
+ ? chalk.yellow
290
+ : chalk.dim;
291
+ if (num > 1) console.log("");
292
+ console.log(
293
+ ` ${color.bold(tier)} ${chalk.dim(`(${tierDescription(rec.priority)})`)}`,
294
+ );
295
+ console.log("");
296
+ }
297
+ const benchmarkList = rec.benchmarks
298
+ .map((b) => BENCHMARK_NAMES[b])
299
+ .join(" · ");
300
+ console.log(` ${chalk.white.bold(`${num}.`)} ${rec.label}`);
301
+ if (rec.detail) {
302
+ console.log(` ${chalk.dim(rec.detail)}`);
303
+ }
304
+ console.log(` ${chalk.dim(benchmarkList)}`);
305
+ num++;
306
+ }
307
+
308
+ console.log("");
309
+ console.log(chalk.dim(" ─".repeat(25)));
310
+ console.log("");
311
+ console.log(
312
+ ` ${chalk.dim("Not every recommendation may apply — review and prioritize for your site.")}`,
313
+ );
314
+ console.log(` ${chalk.dim(`Re-scan: npx aeo-ready scan ${result.url}`)}`);
315
+ console.log("");
316
+ }
317
+
276
318
  function copyToClipboard(text) {
277
319
  try {
278
320
  execSync("pbcopy", { input: text, stdio: ["pipe", "pipe", "pipe"] });
@@ -339,14 +381,7 @@ export async function showRecommendations(result) {
339
381
  const answer = await ask(` ${optStr} `);
340
382
 
341
383
  if (answer === "v") {
342
- console.log("");
343
- console.log(
344
- prompt
345
- .split("\n")
346
- .map((line) => ` ${line}`)
347
- .join("\n"),
348
- );
349
- console.log("");
384
+ printPromptForTerminal(result, recs);
350
385
  } else if (answer === "c") {
351
386
  const copied = copyToClipboard(prompt);
352
387
  if (copied) {
package/src/scan.js CHANGED
@@ -36,7 +36,7 @@ export async function scan(opts) {
36
36
  const baseDir = process.cwd();
37
37
  await saveResult(result, baseDir);
38
38
 
39
- if (!json && averageScore < 100 && process.stdin.isTTY) {
39
+ if (!json && averageScore < 100) {
40
40
  await showRecommendations(result);
41
41
  }
42
42