@automatelab/citation-intelligence 0.4.0

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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +302 -0
  3. package/dist/adapters/anthropic.d.ts +3 -0
  4. package/dist/adapters/anthropic.d.ts.map +1 -0
  5. package/dist/adapters/anthropic.js +52 -0
  6. package/dist/adapters/anthropic.js.map +1 -0
  7. package/dist/adapters/bing.d.ts +3 -0
  8. package/dist/adapters/bing.d.ts.map +1 -0
  9. package/dist/adapters/bing.js +31 -0
  10. package/dist/adapters/bing.js.map +1 -0
  11. package/dist/adapters/gemini.d.ts +3 -0
  12. package/dist/adapters/gemini.d.ts.map +1 -0
  13. package/dist/adapters/gemini.js +47 -0
  14. package/dist/adapters/gemini.js.map +1 -0
  15. package/dist/adapters/openai.d.ts +3 -0
  16. package/dist/adapters/openai.d.ts.map +1 -0
  17. package/dist/adapters/openai.js +49 -0
  18. package/dist/adapters/openai.js.map +1 -0
  19. package/dist/adapters/perplexity.d.ts +3 -0
  20. package/dist/adapters/perplexity.d.ts.map +1 -0
  21. package/dist/adapters/perplexity.js +55 -0
  22. package/dist/adapters/perplexity.js.map +1 -0
  23. package/dist/adapters/predictors.d.ts +42 -0
  24. package/dist/adapters/predictors.d.ts.map +1 -0
  25. package/dist/adapters/predictors.js +495 -0
  26. package/dist/adapters/predictors.js.map +1 -0
  27. package/dist/adapters/serpapi.d.ts +8 -0
  28. package/dist/adapters/serpapi.d.ts.map +1 -0
  29. package/dist/adapters/serpapi.js +45 -0
  30. package/dist/adapters/serpapi.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +132 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/lib/cache.d.ts +33 -0
  36. package/dist/lib/cache.d.ts.map +1 -0
  37. package/dist/lib/cache.js +110 -0
  38. package/dist/lib/cache.js.map +1 -0
  39. package/dist/lib/config.d.ts +6 -0
  40. package/dist/lib/config.d.ts.map +1 -0
  41. package/dist/lib/config.js +12 -0
  42. package/dist/lib/config.js.map +1 -0
  43. package/dist/lib/fetch.d.ts +18 -0
  44. package/dist/lib/fetch.d.ts.map +1 -0
  45. package/dist/lib/fetch.js +75 -0
  46. package/dist/lib/fetch.js.map +1 -0
  47. package/dist/lib/log.d.ts +11 -0
  48. package/dist/lib/log.d.ts.map +1 -0
  49. package/dist/lib/log.js +37 -0
  50. package/dist/lib/log.js.map +1 -0
  51. package/dist/lib/panels.d.ts +30 -0
  52. package/dist/lib/panels.d.ts.map +1 -0
  53. package/dist/lib/panels.js +69 -0
  54. package/dist/lib/panels.js.map +1 -0
  55. package/dist/tools/ai-overview.d.ts +29 -0
  56. package/dist/tools/ai-overview.d.ts.map +1 -0
  57. package/dist/tools/ai-overview.js +47 -0
  58. package/dist/tools/ai-overview.js.map +1 -0
  59. package/dist/tools/am-i-cited.d.ts +39 -0
  60. package/dist/tools/am-i-cited.d.ts.map +1 -0
  61. package/dist/tools/am-i-cited.js +73 -0
  62. package/dist/tools/am-i-cited.js.map +1 -0
  63. package/dist/tools/audit-sitemap.d.ts +49 -0
  64. package/dist/tools/audit-sitemap.d.ts.map +1 -0
  65. package/dist/tools/audit-sitemap.js +100 -0
  66. package/dist/tools/audit-sitemap.js.map +1 -0
  67. package/dist/tools/check-citations.d.ts +30 -0
  68. package/dist/tools/check-citations.d.ts.map +1 -0
  69. package/dist/tools/check-citations.js +101 -0
  70. package/dist/tools/check-citations.js.map +1 -0
  71. package/dist/tools/citation-freshness-score.d.ts +53 -0
  72. package/dist/tools/citation-freshness-score.d.ts.map +1 -0
  73. package/dist/tools/citation-freshness-score.js +89 -0
  74. package/dist/tools/citation-freshness-score.js.map +1 -0
  75. package/dist/tools/citation-trend.d.ts +47 -0
  76. package/dist/tools/citation-trend.d.ts.map +1 -0
  77. package/dist/tools/citation-trend.js +48 -0
  78. package/dist/tools/citation-trend.js.map +1 -0
  79. package/dist/tools/cited-for-diff.d.ts +54 -0
  80. package/dist/tools/cited-for-diff.d.ts.map +1 -0
  81. package/dist/tools/cited-for-diff.js +89 -0
  82. package/dist/tools/cited-for-diff.js.map +1 -0
  83. package/dist/tools/cited-for.d.ts +39 -0
  84. package/dist/tools/cited-for.d.ts.map +1 -0
  85. package/dist/tools/cited-for.js +28 -0
  86. package/dist/tools/cited-for.js.map +1 -0
  87. package/dist/tools/compare-domains.d.ts +36 -0
  88. package/dist/tools/compare-domains.d.ts.map +1 -0
  89. package/dist/tools/compare-domains.js +54 -0
  90. package/dist/tools/compare-domains.js.map +1 -0
  91. package/dist/tools/compete-for-query.d.ts +72 -0
  92. package/dist/tools/compete-for-query.d.ts.map +1 -0
  93. package/dist/tools/compete-for-query.js +91 -0
  94. package/dist/tools/compete-for-query.js.map +1 -0
  95. package/dist/tools/gsc-citation-gap.d.ts +77 -0
  96. package/dist/tools/gsc-citation-gap.d.ts.map +1 -0
  97. package/dist/tools/gsc-citation-gap.js +121 -0
  98. package/dist/tools/gsc-citation-gap.js.map +1 -0
  99. package/dist/tools/predict-citation.d.ts +25 -0
  100. package/dist/tools/predict-citation.d.ts.map +1 -0
  101. package/dist/tools/predict-citation.js +32 -0
  102. package/dist/tools/predict-citation.js.map +1 -0
  103. package/dist/tools/run-panel.d.ts +46 -0
  104. package/dist/tools/run-panel.d.ts.map +1 -0
  105. package/dist/tools/run-panel.js +60 -0
  106. package/dist/tools/run-panel.js.map +1 -0
  107. package/dist/tools/track-queries.d.ts +52 -0
  108. package/dist/tools/track-queries.d.ts.map +1 -0
  109. package/dist/tools/track-queries.js +52 -0
  110. package/dist/tools/track-queries.js.map +1 -0
  111. package/dist/tools/wikipedia-mentions.d.ts +32 -0
  112. package/dist/tools/wikipedia-mentions.d.ts.map +1 -0
  113. package/dist/tools/wikipedia-mentions.js +56 -0
  114. package/dist/tools/wikipedia-mentions.js.map +1 -0
  115. package/dist/types.d.ts +42 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +2 -0
  118. package/dist/types.js.map +1 -0
  119. package/package.json +57 -0
@@ -0,0 +1,42 @@
1
+ export type PredictorSignals = {
2
+ wikipedia_linked: boolean;
3
+ github_referenced: boolean;
4
+ github_stars?: number;
5
+ reddit_referenced: boolean;
6
+ llms_txt_present: boolean;
7
+ https: boolean;
8
+ schema_org_present: boolean;
9
+ schema_types: string[];
10
+ has_article_schema: boolean;
11
+ has_faq_schema: boolean;
12
+ has_howto_schema: boolean;
13
+ has_breadcrumb_schema: boolean;
14
+ canonical_clean: boolean;
15
+ word_count: number;
16
+ reading_time_minutes: number;
17
+ h1_count: number;
18
+ h2_count: number;
19
+ h2_question_count: number;
20
+ table_of_contents_present: boolean;
21
+ image_count: number;
22
+ internal_link_count: number;
23
+ external_link_count: number;
24
+ authority_link_count: number;
25
+ title_length: number;
26
+ meta_description_length: number;
27
+ has_open_graph: boolean;
28
+ has_twitter_card: boolean;
29
+ date_modified_iso?: string;
30
+ last_modified_days_ago?: number;
31
+ };
32
+ export declare function collectSignals(url: string): Promise<PredictorSignals>;
33
+ export declare function scoreSignals(s: PredictorSignals): {
34
+ score: number;
35
+ grade: "A" | "B" | "C" | "D" | "F";
36
+ };
37
+ export declare function suggestFixes(s: PredictorSignals): Array<{
38
+ signal: string;
39
+ suggestion: string;
40
+ estimated_lift: "low" | "medium" | "high";
41
+ }>;
42
+ //# sourceMappingURL=predictors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predictors.d.ts","sourceRoot":"","sources":["../../src/adapters/predictors.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG;IAE7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;IAEf,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yBAAyB,EAAE,OAAO,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAE7B,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AA+HF,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiL3E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,gBAAgB,GAAG;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACpC,CA0DA;AAED,wBAAgB,YAAY,CAC1B,CAAC,EAAE,gBAAgB,GAClB,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;CAAE,CAAC,CAgJ1F"}
@@ -0,0 +1,495 @@
1
+ import * as cheerio from "cheerio";
2
+ import { fetchJson, fetchText, ToolFetchError } from "../lib/fetch.js";
3
+ const AUTHORITY_DOMAINS = [
4
+ "wikipedia.org",
5
+ "github.com",
6
+ "arxiv.org",
7
+ "developer.mozilla.org",
8
+ "w3.org",
9
+ "ietf.org",
10
+ "schema.org",
11
+ "nih.gov",
12
+ "nasa.gov",
13
+ "who.int",
14
+ ];
15
+ function isAuthorityHost(host) {
16
+ const h = host.toLowerCase();
17
+ if (h.endsWith(".gov") || h.endsWith(".edu"))
18
+ return true;
19
+ return AUTHORITY_DOMAINS.some((d) => h === d || h.endsWith(`.${d}`));
20
+ }
21
+ async function checkWikipedia(domain) {
22
+ try {
23
+ const params = new URLSearchParams({
24
+ action: "query",
25
+ list: "exturlusage",
26
+ euquery: domain,
27
+ eulimit: "1",
28
+ format: "json",
29
+ origin: "*",
30
+ });
31
+ const res = await fetchJson(`https://en.wikipedia.org/w/api.php?${params.toString()}`, {
32
+ timeoutMs: 8_000,
33
+ });
34
+ return (res.query?.exturlusage?.length ?? 0) > 0;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ async function checkGithubStars(url) {
41
+ try {
42
+ const u = new URL(url);
43
+ if (u.hostname !== "github.com") {
44
+ const params = new URLSearchParams({
45
+ q: u.hostname,
46
+ per_page: "1",
47
+ });
48
+ const res = await fetchJson(`https://api.github.com/search/code?${params.toString()}`, {
49
+ headers: { accept: "application/vnd.github+json" },
50
+ timeoutMs: 8_000,
51
+ });
52
+ return { referenced: (res.total_count ?? 0) > 0 };
53
+ }
54
+ const parts = u.pathname.split("/").filter(Boolean);
55
+ if (parts.length < 2)
56
+ return { referenced: false };
57
+ const repo = `${parts[0]}/${parts[1]}`;
58
+ const res = await fetchJson(`https://api.github.com/repos/${repo}`, {
59
+ headers: { accept: "application/vnd.github+json" },
60
+ timeoutMs: 8_000,
61
+ });
62
+ return { referenced: true, stars: res.stargazers_count };
63
+ }
64
+ catch {
65
+ return { referenced: false };
66
+ }
67
+ }
68
+ async function checkReddit(domain) {
69
+ try {
70
+ const res = await fetchJson(`https://www.reddit.com/search.json?q=site%3A${encodeURIComponent(domain)}&limit=1`, {
71
+ headers: { "user-agent": "citation-intelligence-mcp/0.1 (+research)" },
72
+ timeoutMs: 8_000,
73
+ });
74
+ return (res.data?.children?.length ?? 0) > 0;
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ }
80
+ async function checkLlmsTxt(origin) {
81
+ try {
82
+ const { status, text } = await fetchText(`${origin}/llms.txt`, {
83
+ timeoutMs: 8_000,
84
+ });
85
+ return status === 200 && text.length > 0;
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ }
91
+ function extractDateModified($, jsonLdNodes) {
92
+ for (const node of jsonLdNodes) {
93
+ if (!node || typeof node !== "object")
94
+ continue;
95
+ const obj = node;
96
+ const dm = obj.dateModified ?? obj.datePublished;
97
+ if (typeof dm === "string")
98
+ return dm;
99
+ }
100
+ const meta = $('meta[property="article:modified_time"]').attr("content") ??
101
+ $('meta[name="last-modified"]').attr("content") ??
102
+ $('meta[property="article:published_time"]').attr("content") ??
103
+ $("time[datetime]").first().attr("datetime");
104
+ return meta || undefined;
105
+ }
106
+ function daysSince(iso) {
107
+ const t = Date.parse(iso);
108
+ if (Number.isNaN(t))
109
+ return undefined;
110
+ return Math.max(0, Math.round((Date.now() - t) / 86_400_000));
111
+ }
112
+ export async function collectSignals(url) {
113
+ const u = new URL(url);
114
+ const domain = u.hostname;
115
+ const origin = `${u.protocol}//${u.hostname}`;
116
+ let pageHtml = "";
117
+ try {
118
+ const { text, status } = await fetchText(url, { timeoutMs: 15_000 });
119
+ if (status >= 400) {
120
+ throw new ToolFetchError({
121
+ type: "fetch_error",
122
+ url,
123
+ status,
124
+ message: `URL returned HTTP ${status} - cannot score a non-existent page.`,
125
+ });
126
+ }
127
+ pageHtml = text;
128
+ }
129
+ catch (err) {
130
+ if (err instanceof ToolFetchError)
131
+ throw err;
132
+ pageHtml = "";
133
+ }
134
+ const $ = pageHtml ? cheerio.load(pageHtml) : null;
135
+ const schemaTypes = new Set();
136
+ const jsonLdNodes = [];
137
+ if ($) {
138
+ $('script[type="application/ld+json"]').each((_, el) => {
139
+ try {
140
+ const json = JSON.parse($(el).text());
141
+ const collect = (node) => {
142
+ if (Array.isArray(node)) {
143
+ node.forEach(collect);
144
+ return;
145
+ }
146
+ if (node && typeof node === "object") {
147
+ jsonLdNodes.push(node);
148
+ const t = node["@type"];
149
+ if (typeof t === "string")
150
+ schemaTypes.add(t);
151
+ else if (Array.isArray(t))
152
+ t.forEach((x) => typeof x === "string" && schemaTypes.add(x));
153
+ for (const v of Object.values(node)) {
154
+ collect(v);
155
+ }
156
+ }
157
+ };
158
+ collect(json);
159
+ }
160
+ catch {
161
+ // ignore malformed JSON-LD
162
+ }
163
+ });
164
+ $("[itemtype]").each((_, el) => {
165
+ const t = $(el).attr("itemtype");
166
+ if (t) {
167
+ const last = t.split("/").pop();
168
+ if (last)
169
+ schemaTypes.add(last);
170
+ }
171
+ });
172
+ }
173
+ let canonicalClean = false;
174
+ if ($) {
175
+ const canonicals = $('link[rel="canonical"]')
176
+ .toArray()
177
+ .map((el) => $(el).attr("href") ?? "");
178
+ canonicalClean = canonicals.length === 1 && canonicals[0].length > 0;
179
+ }
180
+ let wordCount = 0;
181
+ let h1Count = 0;
182
+ let h2Count = 0;
183
+ let h2QuestionCount = 0;
184
+ let imageCount = 0;
185
+ let internalLinkCount = 0;
186
+ let externalLinkCount = 0;
187
+ let authorityLinkCount = 0;
188
+ let titleLength = 0;
189
+ let metaDescriptionLength = 0;
190
+ let hasOpenGraph = false;
191
+ let hasTwitterCard = false;
192
+ let tocPresent = false;
193
+ if ($) {
194
+ const mainText = $("main, article").first().text() || $("body").text();
195
+ wordCount = mainText.trim().split(/\s+/).filter(Boolean).length;
196
+ h1Count = $("h1").length;
197
+ h2Count = $("h2").length;
198
+ $("h2").each((_, el) => {
199
+ const t = $(el).text().trim();
200
+ if (t.endsWith("?"))
201
+ h2QuestionCount += 1;
202
+ });
203
+ imageCount = $("img").length;
204
+ $("a[href]").each((_, el) => {
205
+ const href = $(el).attr("href") ?? "";
206
+ if (!href || href.startsWith("#") || href.startsWith("mailto:") || href.startsWith("tel:"))
207
+ return;
208
+ try {
209
+ const linkUrl = new URL(href, url);
210
+ if (linkUrl.hostname === domain) {
211
+ internalLinkCount += 1;
212
+ }
213
+ else {
214
+ externalLinkCount += 1;
215
+ if (isAuthorityHost(linkUrl.hostname))
216
+ authorityLinkCount += 1;
217
+ }
218
+ }
219
+ catch {
220
+ // skip malformed
221
+ }
222
+ });
223
+ titleLength = ($("title").first().text() || "").trim().length;
224
+ metaDescriptionLength = ($('meta[name="description"]').attr("content") || "").trim().length;
225
+ hasOpenGraph = $('meta[property^="og:"]').length > 0;
226
+ hasTwitterCard = $('meta[name^="twitter:"]').length > 0;
227
+ const tocSelectors = [
228
+ ".toc",
229
+ "#toc",
230
+ ".table-of-contents",
231
+ "#table-of-contents",
232
+ "nav[aria-label*='table' i]",
233
+ "nav[aria-label*='contents' i]",
234
+ ];
235
+ tocPresent = tocSelectors.some((s) => $(s).length > 0);
236
+ }
237
+ const dateModifiedIso = $ ? extractDateModified($, jsonLdNodes) : undefined;
238
+ const lastModifiedDaysAgo = dateModifiedIso ? daysSince(dateModifiedIso) : undefined;
239
+ const readingTimeMinutes = Math.max(1, Math.round(wordCount / 220));
240
+ const hasArticleSchema = ["Article", "BlogPosting", "NewsArticle", "TechArticle"].some((t) => schemaTypes.has(t));
241
+ const hasFaqSchema = schemaTypes.has("FAQPage") || schemaTypes.has("Question");
242
+ const hasHowtoSchema = schemaTypes.has("HowTo");
243
+ const hasBreadcrumbSchema = schemaTypes.has("BreadcrumbList");
244
+ const [wiki, gh, reddit, llms] = await Promise.all([
245
+ checkWikipedia(domain),
246
+ checkGithubStars(url),
247
+ checkReddit(domain),
248
+ checkLlmsTxt(origin),
249
+ ]);
250
+ return {
251
+ wikipedia_linked: wiki,
252
+ github_referenced: gh.referenced,
253
+ github_stars: gh.stars,
254
+ reddit_referenced: reddit,
255
+ llms_txt_present: llms,
256
+ https: u.protocol === "https:",
257
+ schema_org_present: schemaTypes.size > 0,
258
+ schema_types: [...schemaTypes],
259
+ has_article_schema: hasArticleSchema,
260
+ has_faq_schema: hasFaqSchema,
261
+ has_howto_schema: hasHowtoSchema,
262
+ has_breadcrumb_schema: hasBreadcrumbSchema,
263
+ canonical_clean: canonicalClean,
264
+ word_count: wordCount,
265
+ reading_time_minutes: readingTimeMinutes,
266
+ h1_count: h1Count,
267
+ h2_count: h2Count,
268
+ h2_question_count: h2QuestionCount,
269
+ table_of_contents_present: tocPresent,
270
+ image_count: imageCount,
271
+ internal_link_count: internalLinkCount,
272
+ external_link_count: externalLinkCount,
273
+ authority_link_count: authorityLinkCount,
274
+ title_length: titleLength,
275
+ meta_description_length: metaDescriptionLength,
276
+ has_open_graph: hasOpenGraph,
277
+ has_twitter_card: hasTwitterCard,
278
+ date_modified_iso: dateModifiedIso,
279
+ last_modified_days_ago: lastModifiedDaysAgo,
280
+ };
281
+ }
282
+ export function scoreSignals(s) {
283
+ let score = 0;
284
+ // Domain authority (max 25)
285
+ if (s.wikipedia_linked)
286
+ score += 10;
287
+ if (s.github_referenced)
288
+ score += 5;
289
+ if ((s.github_stars ?? 0) >= 100)
290
+ score += 3;
291
+ if (s.reddit_referenced)
292
+ score += 5;
293
+ if (s.llms_txt_present)
294
+ score += 2;
295
+ // Structured data (max 20)
296
+ if (s.has_article_schema)
297
+ score += 6;
298
+ if (s.has_faq_schema)
299
+ score += 6;
300
+ if (s.has_howto_schema)
301
+ score += 4;
302
+ if (s.has_breadcrumb_schema)
303
+ score += 2;
304
+ if (s.schema_org_present && !s.has_article_schema && !s.has_faq_schema && !s.has_howto_schema)
305
+ score += 2;
306
+ // Content depth (max 20)
307
+ if (s.word_count >= 2500)
308
+ score += 10;
309
+ else if (s.word_count >= 1500)
310
+ score += 7;
311
+ else if (s.word_count >= 800)
312
+ score += 4;
313
+ else if (s.word_count >= 300)
314
+ score += 1;
315
+ if (s.h2_count >= 5)
316
+ score += 4;
317
+ else if (s.h2_count >= 2)
318
+ score += 2;
319
+ if (s.h2_question_count >= 2)
320
+ score += 4;
321
+ else if (s.h2_question_count >= 1)
322
+ score += 2;
323
+ if (s.table_of_contents_present)
324
+ score += 2;
325
+ // Link graph (max 12)
326
+ if (s.authority_link_count >= 3)
327
+ score += 6;
328
+ else if (s.authority_link_count >= 1)
329
+ score += 3;
330
+ if (s.external_link_count >= 5)
331
+ score += 3;
332
+ else if (s.external_link_count >= 1)
333
+ score += 1;
334
+ if (s.internal_link_count >= 5)
335
+ score += 3;
336
+ else if (s.internal_link_count >= 1)
337
+ score += 1;
338
+ // Freshness (max 8)
339
+ if (s.last_modified_days_ago !== undefined) {
340
+ if (s.last_modified_days_ago <= 90)
341
+ score += 8;
342
+ else if (s.last_modified_days_ago <= 365)
343
+ score += 5;
344
+ else if (s.last_modified_days_ago <= 730)
345
+ score += 2;
346
+ }
347
+ // Metadata hygiene (max 10)
348
+ if (s.canonical_clean)
349
+ score += 3;
350
+ if (s.h1_count === 1)
351
+ score += 2;
352
+ if (s.title_length >= 20 && s.title_length <= 70)
353
+ score += 2;
354
+ if (s.meta_description_length >= 70 && s.meta_description_length <= 200)
355
+ score += 2;
356
+ if (s.has_open_graph)
357
+ score += 1;
358
+ // Transport (max 5)
359
+ if (s.https)
360
+ score += 5;
361
+ score = Math.min(100, score);
362
+ const grade = score >= 80 ? "A" : score >= 65 ? "B" : score >= 50 ? "C" : score >= 35 ? "D" : "F";
363
+ return { score, grade };
364
+ }
365
+ export function suggestFixes(s) {
366
+ const fixes = [];
367
+ if (!s.has_article_schema && !s.has_faq_schema && !s.has_howto_schema) {
368
+ fixes.push({
369
+ signal: "schema_specific",
370
+ suggestion: "Add JSON-LD with Article, FAQPage, or HowTo schema. Generic schema is not enough - LLMs prefer typed content.",
371
+ estimated_lift: "high",
372
+ });
373
+ }
374
+ if (!s.has_faq_schema && s.h2_question_count >= 2) {
375
+ fixes.push({
376
+ signal: "has_faq_schema",
377
+ suggestion: "Page already has question-style H2s. Wrap them in FAQPage JSON-LD - high-leverage win.",
378
+ estimated_lift: "high",
379
+ });
380
+ }
381
+ if (s.word_count < 800) {
382
+ fixes.push({
383
+ signal: "word_count",
384
+ suggestion: `Page is ${s.word_count} words. Citation-worthy pages average 1500+. Expand depth, examples, edge cases.`,
385
+ estimated_lift: "high",
386
+ });
387
+ }
388
+ if (s.h2_question_count === 0 && s.word_count >= 500) {
389
+ fixes.push({
390
+ signal: "h2_question_count",
391
+ suggestion: "Reframe at least 2 H2s as questions users actually ask. Question-shaped headings get cited in Q&A answers.",
392
+ estimated_lift: "medium",
393
+ });
394
+ }
395
+ if (s.authority_link_count === 0) {
396
+ fixes.push({
397
+ signal: "authority_link_count",
398
+ suggestion: "Cite 1-3 authoritative sources (Wikipedia, GitHub, .gov, .edu, MDN, arXiv). LLMs treat outbound authority links as topical signal.",
399
+ estimated_lift: "medium",
400
+ });
401
+ }
402
+ if (s.last_modified_days_ago !== undefined && s.last_modified_days_ago > 365) {
403
+ fixes.push({
404
+ signal: "freshness",
405
+ suggestion: `Last modified ${s.last_modified_days_ago} days ago. Refresh dates, examples, and bump dateModified - freshness biases AI retrieval.`,
406
+ estimated_lift: "medium",
407
+ });
408
+ }
409
+ if (s.last_modified_days_ago === undefined) {
410
+ fixes.push({
411
+ signal: "freshness",
412
+ suggestion: "No dateModified detected. Add JSON-LD dateModified or article:modified_time meta - lets engines verify freshness.",
413
+ estimated_lift: "low",
414
+ });
415
+ }
416
+ if (!s.has_breadcrumb_schema) {
417
+ fixes.push({
418
+ signal: "has_breadcrumb_schema",
419
+ suggestion: "Add BreadcrumbList JSON-LD. Cheap to ship, helps engines understand site hierarchy.",
420
+ estimated_lift: "low",
421
+ });
422
+ }
423
+ if (!s.table_of_contents_present && s.h2_count >= 4) {
424
+ fixes.push({
425
+ signal: "table_of_contents_present",
426
+ suggestion: "Add a visible table of contents. Long pages without TOC are harder for chunkers to segment cleanly.",
427
+ estimated_lift: "low",
428
+ });
429
+ }
430
+ if (!s.llms_txt_present) {
431
+ fixes.push({
432
+ signal: "llms_txt_present",
433
+ suggestion: "Publish /llms.txt at the site root. Tells AI crawlers what to index.",
434
+ estimated_lift: "medium",
435
+ });
436
+ }
437
+ if (!s.canonical_clean) {
438
+ fixes.push({
439
+ signal: "canonical_clean",
440
+ suggestion: "Set exactly one <link rel=\"canonical\"> per page. Conflicting canonicals split citation weight.",
441
+ estimated_lift: "medium",
442
+ });
443
+ }
444
+ if (s.h1_count !== 1) {
445
+ fixes.push({
446
+ signal: "h1_count",
447
+ suggestion: `Page has ${s.h1_count} H1s. Use exactly one - it anchors the topic for chunkers.`,
448
+ estimated_lift: "low",
449
+ });
450
+ }
451
+ if (s.title_length === 0 || s.title_length > 70) {
452
+ fixes.push({
453
+ signal: "title_length",
454
+ suggestion: "Keep <title> between 20-70 chars. Too long gets truncated, too short loses context.",
455
+ estimated_lift: "low",
456
+ });
457
+ }
458
+ if (s.meta_description_length === 0) {
459
+ fixes.push({
460
+ signal: "meta_description_length",
461
+ suggestion: "Add a 70-200 char meta description - often quoted verbatim in AI answer snippets.",
462
+ estimated_lift: "low",
463
+ });
464
+ }
465
+ if (!s.has_open_graph) {
466
+ fixes.push({
467
+ signal: "has_open_graph",
468
+ suggestion: "Add Open Graph tags (og:title, og:description, og:image). Used by social previews and some AI parsers.",
469
+ estimated_lift: "low",
470
+ });
471
+ }
472
+ if (!s.https) {
473
+ fixes.push({
474
+ signal: "https",
475
+ suggestion: "Serve over HTTPS. Non-HTTPS URLs are de-prioritized by every engine.",
476
+ estimated_lift: "high",
477
+ });
478
+ }
479
+ if (!s.reddit_referenced) {
480
+ fixes.push({
481
+ signal: "reddit_referenced",
482
+ suggestion: "Reddit mentions correlate with Perplexity and ChatGPT citations. Earn organic mentions in relevant subs.",
483
+ estimated_lift: "low",
484
+ });
485
+ }
486
+ if (!s.github_referenced) {
487
+ fixes.push({
488
+ signal: "github_referenced",
489
+ suggestion: "Get the URL referenced from a GitHub repo README or issue. GitHub is heavily mined by LLM training and search.",
490
+ estimated_lift: "medium",
491
+ });
492
+ }
493
+ return fixes;
494
+ }
495
+ //# sourceMappingURL=predictors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predictors.js","sourceRoot":"","sources":["../../src/adapters/predictors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Citation } from "../types.js";
2
+ export type AiOverviewResult = {
3
+ ai_overview_present: boolean;
4
+ ai_overview_text?: string;
5
+ sources: Citation[];
6
+ };
7
+ export declare function serpapiAiOverview(query: string, location?: string, hl?: string): Promise<AiOverviewResult>;
8
+ //# sourceMappingURL=serpapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serpapi.d.ts","sourceRoot":"","sources":["../../src/adapters/serpapi.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAU5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,EAAE,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CA+C3B"}
@@ -0,0 +1,45 @@
1
+ import { envKey } from "../lib/config.js";
2
+ import { fetchJson, ToolFetchError } from "../lib/fetch.js";
3
+ export async function serpapiAiOverview(query, location, hl) {
4
+ const key = envKey("SERPAPI_KEY");
5
+ if (!key) {
6
+ throw new ToolFetchError({
7
+ type: "missing_key",
8
+ engine: "auto",
9
+ env_var: "SERPAPI_KEY",
10
+ message: "Set SERPAPI_KEY to fetch Google AI Overviews. Free tier at https://serpapi.com (100 searches/month).",
11
+ });
12
+ }
13
+ const params = new URLSearchParams({
14
+ engine: "google",
15
+ q: query,
16
+ api_key: key,
17
+ hl: hl ?? "en",
18
+ });
19
+ if (location)
20
+ params.set("location", location);
21
+ const res = await fetchJson(`https://serpapi.com/search?${params.toString()}`);
22
+ const ao = res.ai_overview;
23
+ if (!ao) {
24
+ return { ai_overview_present: false, sources: [] };
25
+ }
26
+ const textParts = [];
27
+ for (const block of ao.text_blocks ?? []) {
28
+ const t = block.text ?? block.snippet;
29
+ if (t)
30
+ textParts.push(t);
31
+ }
32
+ const sources = [];
33
+ let rank = 1;
34
+ for (const ref of ao.references ?? []) {
35
+ if (!ref.link)
36
+ continue;
37
+ sources.push({ url: ref.link, title: ref.title, rank: rank++ });
38
+ }
39
+ return {
40
+ ai_overview_present: true,
41
+ ai_overview_text: textParts.join("\n\n") || undefined,
42
+ sources,
43
+ };
44
+ }
45
+ //# sourceMappingURL=serpapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serpapi.js","sourceRoot":"","sources":["../../src/adapters/serpapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAiB5D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAa,EACb,QAAiB,EACjB,EAAW;IAEX,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,cAAc,CAAC;YACvB,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,aAAa;YACtB,OAAO,EACL,sGAAsG;SACzG,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,MAAM,EAAE,QAAQ;QAChB,CAAC,EAAE,KAAK;QACR,OAAO,EAAE,GAAG;QACZ,EAAE,EAAE,EAAE,IAAI,IAAI;KACf,CAAC,CAAC;IACH,IAAI,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAE/C,MAAM,GAAG,GAAG,MAAM,SAAS,CACzB,8BAA8B,MAAM,CAAC,QAAQ,EAAE,EAAE,CAClD,CAAC;IAEF,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,SAAS;QACxB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACL,mBAAmB,EAAE,IAAI;QACzB,gBAAgB,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS;QACrD,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}