@automatelab/citation-intelligence 0.5.0 → 0.6.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 (47) hide show
  1. package/README.md +32 -1
  2. package/dist/adapters/google-ai-mode.d.ts +6 -0
  3. package/dist/adapters/google-ai-mode.d.ts.map +1 -0
  4. package/dist/adapters/google-ai-mode.js +48 -0
  5. package/dist/adapters/google-ai-mode.js.map +1 -0
  6. package/dist/adapters/openai.d.ts.map +1 -1
  7. package/dist/adapters/openai.js +3 -4
  8. package/dist/adapters/openai.js.map +1 -1
  9. package/dist/index.js +44 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/prompts.d.ts +3 -0
  12. package/dist/prompts.d.ts.map +1 -0
  13. package/dist/prompts.js +137 -0
  14. package/dist/prompts.js.map +1 -0
  15. package/dist/resources.d.ts +3 -0
  16. package/dist/resources.d.ts.map +1 -0
  17. package/dist/resources.js +242 -0
  18. package/dist/resources.js.map +1 -0
  19. package/dist/tools/am-i-cited.d.ts +4 -4
  20. package/dist/tools/am-i-cited.js +1 -1
  21. package/dist/tools/am-i-cited.js.map +1 -1
  22. package/dist/tools/canonical-competitor-set.d.ts +73 -0
  23. package/dist/tools/canonical-competitor-set.d.ts.map +1 -0
  24. package/dist/tools/canonical-competitor-set.js +209 -0
  25. package/dist/tools/canonical-competitor-set.js.map +1 -0
  26. package/dist/tools/check-citations.d.ts +4 -4
  27. package/dist/tools/check-citations.d.ts.map +1 -1
  28. package/dist/tools/check-citations.js +15 -1
  29. package/dist/tools/check-citations.js.map +1 -1
  30. package/dist/tools/citation-evidence.d.ts +54 -0
  31. package/dist/tools/citation-evidence.d.ts.map +1 -0
  32. package/dist/tools/citation-evidence.js +148 -0
  33. package/dist/tools/citation-evidence.js.map +1 -0
  34. package/dist/tools/crawler-access-audit.d.ts +49 -0
  35. package/dist/tools/crawler-access-audit.d.ts.map +1 -0
  36. package/dist/tools/crawler-access-audit.js +256 -0
  37. package/dist/tools/crawler-access-audit.js.map +1 -0
  38. package/dist/tools/run-panel.d.ts +5 -5
  39. package/dist/tools/run-panel.js +1 -1
  40. package/dist/tools/run-panel.js.map +1 -1
  41. package/dist/tools/sitemap-citation-map.d.ts +77 -0
  42. package/dist/tools/sitemap-citation-map.d.ts.map +1 -0
  43. package/dist/tools/sitemap-citation-map.js +149 -0
  44. package/dist/tools/sitemap-citation-map.js.map +1 -0
  45. package/dist/types.d.ts +2 -2
  46. package/dist/types.d.ts.map +1 -1
  47. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"run-panel.js","sourceRoot":"","sources":["../../src/tools/run-panel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-panel.js","sourceRoot":"","sources":["../../src/tools/run-panel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { z } from "zod";
2
+ export declare const sitemapCitationMapInputSchema: {
3
+ sitemap_url: z.ZodString;
4
+ domain: z.ZodOptional<z.ZodString>;
5
+ since: z.ZodOptional<z.ZodString>;
6
+ limit: z.ZodDefault<z.ZodNumber>;
7
+ };
8
+ declare const inputSchema: z.ZodObject<{
9
+ sitemap_url: z.ZodString;
10
+ domain: z.ZodOptional<z.ZodString>;
11
+ since: z.ZodOptional<z.ZodString>;
12
+ limit: z.ZodDefault<z.ZodNumber>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ limit: number;
15
+ sitemap_url: string;
16
+ domain?: string | undefined;
17
+ since?: string | undefined;
18
+ }, {
19
+ sitemap_url: string;
20
+ domain?: string | undefined;
21
+ since?: string | undefined;
22
+ limit?: number | undefined;
23
+ }>;
24
+ export declare function sitemapCitationMap(input: z.infer<typeof inputSchema>): Promise<{
25
+ sitemap_url: string;
26
+ total_urls: number;
27
+ mapped: number;
28
+ unmapped: number;
29
+ message: string;
30
+ domain?: undefined;
31
+ since?: undefined;
32
+ fetched_at?: undefined;
33
+ coverage_pct?: undefined;
34
+ citations_in_cache?: undefined;
35
+ mapped_urls?: undefined;
36
+ unmapped_urls?: undefined;
37
+ note?: undefined;
38
+ } | {
39
+ sitemap_url: string;
40
+ domain: string;
41
+ total_urls: number;
42
+ mapped: number;
43
+ unmapped: number;
44
+ message: string;
45
+ since?: undefined;
46
+ fetched_at?: undefined;
47
+ coverage_pct?: undefined;
48
+ citations_in_cache?: undefined;
49
+ mapped_urls?: undefined;
50
+ unmapped_urls?: undefined;
51
+ note?: undefined;
52
+ } | {
53
+ sitemap_url: string;
54
+ domain: string;
55
+ since: string | undefined;
56
+ fetched_at: string;
57
+ total_urls: number;
58
+ mapped: number;
59
+ unmapped: number;
60
+ coverage_pct: number;
61
+ citations_in_cache: number;
62
+ mapped_urls: {
63
+ url: string;
64
+ citation_count: number;
65
+ unique_queries: number;
66
+ engines: string[];
67
+ last_seen: string;
68
+ sample_queries: string[];
69
+ }[];
70
+ unmapped_urls: {
71
+ url: string;
72
+ }[];
73
+ note: string;
74
+ message?: undefined;
75
+ }>;
76
+ export {};
77
+ //# sourceMappingURL=sitemap-citation-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sitemap-citation-map.d.ts","sourceRoot":"","sources":["../../src/tools/sitemap-citation-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,6BAA6B;;;;;CAuBzC,CAAC;AAEF,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;EAA0C,CAAC;AAgC5D,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAsElE,MAAM;wBACK,MAAM;wBACN,MAAM;iBACb,MAAM,EAAE;mBACN,MAAM;wBACD,MAAM,EAAE;;;aAEA,MAAM;;;;GA4CjC"}
@@ -0,0 +1,149 @@
1
+ import { z } from "zod";
2
+ import * as cheerio from "cheerio";
3
+ import { fetchText } from "../lib/fetch.js";
4
+ import { citedForDomain } from "../lib/cache.js";
5
+ import { log } from "../lib/log.js";
6
+ export const sitemapCitationMapInputSchema = {
7
+ sitemap_url: z
8
+ .string()
9
+ .url()
10
+ .describe("URL of sitemap.xml (or a sitemap index). Nested sitemaps are followed."),
11
+ domain: z
12
+ .string()
13
+ .min(1)
14
+ .optional()
15
+ .describe("Domain to look up citations for. If omitted, inferred from the sitemap host."),
16
+ since: z
17
+ .string()
18
+ .optional()
19
+ .describe("ISO date floor; only count citations recorded on or after this date."),
20
+ limit: z
21
+ .number()
22
+ .int()
23
+ .min(1)
24
+ .max(5000)
25
+ .default(500)
26
+ .describe("Max sitemap URLs to consider."),
27
+ };
28
+ const inputSchema = z.object(sitemapCitationMapInputSchema);
29
+ async function parseSitemap(url, depth = 0) {
30
+ if (depth > 2)
31
+ return [];
32
+ const { text } = await fetchText(url, { timeoutMs: 15_000 });
33
+ const $ = cheerio.load(text, { xmlMode: true });
34
+ const childSitemaps = $("sitemap > loc")
35
+ .toArray()
36
+ .map((el) => $(el).text().trim())
37
+ .filter(Boolean);
38
+ if (childSitemaps.length > 0) {
39
+ const nested = await Promise.all(childSitemaps.map((s) => parseSitemap(s, depth + 1)));
40
+ return nested.flat();
41
+ }
42
+ return $("url > loc")
43
+ .toArray()
44
+ .map((el) => $(el).text().trim())
45
+ .filter(Boolean);
46
+ }
47
+ function normalizeUrl(u) {
48
+ try {
49
+ const parsed = new URL(u);
50
+ parsed.hash = "";
51
+ let p = parsed.pathname.replace(/\/+$/, "") || "/";
52
+ parsed.pathname = p;
53
+ return parsed.toString().toLowerCase();
54
+ }
55
+ catch {
56
+ return u.toLowerCase();
57
+ }
58
+ }
59
+ export async function sitemapCitationMap(input) {
60
+ const parsed = inputSchema.parse(input);
61
+ log.debug("sitemap_citation_map start", { sitemap_url: parsed.sitemap_url });
62
+ const inferredDomain = parsed.domain ?? (() => {
63
+ try {
64
+ return new URL(parsed.sitemap_url).hostname;
65
+ }
66
+ catch {
67
+ return "";
68
+ }
69
+ })();
70
+ if (!inferredDomain) {
71
+ return {
72
+ sitemap_url: parsed.sitemap_url,
73
+ total_urls: 0,
74
+ mapped: 0,
75
+ unmapped: 0,
76
+ message: "could not infer domain from sitemap_url and no domain provided",
77
+ };
78
+ }
79
+ const urls = (await parseSitemap(parsed.sitemap_url)).slice(0, parsed.limit);
80
+ if (urls.length === 0) {
81
+ return {
82
+ sitemap_url: parsed.sitemap_url,
83
+ domain: inferredDomain,
84
+ total_urls: 0,
85
+ mapped: 0,
86
+ unmapped: 0,
87
+ message: "no URLs found in sitemap",
88
+ };
89
+ }
90
+ const citations = await citedForDomain(inferredDomain, parsed.since, undefined, 100_000);
91
+ // Bucket cached citations by normalized URL.
92
+ const byUrl = new Map();
93
+ for (const c of citations) {
94
+ const norm = normalizeUrl(c.url);
95
+ let entry = byUrl.get(norm);
96
+ if (!entry) {
97
+ entry = {
98
+ queries: new Set(),
99
+ engines: new Set(),
100
+ last_seen: c.fetched_at,
101
+ raw_urls: new Set(),
102
+ };
103
+ byUrl.set(norm, entry);
104
+ }
105
+ entry.queries.add(c.query);
106
+ entry.engines.add(c.engine);
107
+ entry.raw_urls.add(c.url);
108
+ if (c.fetched_at > entry.last_seen)
109
+ entry.last_seen = c.fetched_at;
110
+ }
111
+ const mapped = [];
112
+ const unmapped = [];
113
+ for (const u of urls) {
114
+ const norm = normalizeUrl(u);
115
+ const hit = byUrl.get(norm);
116
+ if (!hit) {
117
+ unmapped.push({ url: u });
118
+ continue;
119
+ }
120
+ const sampleQueries = [...hit.queries].slice(0, 5);
121
+ mapped.push({
122
+ url: u,
123
+ citation_count: citations.filter((c) => normalizeUrl(c.url) === norm).length,
124
+ unique_queries: hit.queries.size,
125
+ engines: [...hit.engines].sort(),
126
+ last_seen: hit.last_seen,
127
+ sample_queries: sampleQueries,
128
+ });
129
+ }
130
+ mapped.sort((a, b) => b.citation_count - a.citation_count || b.unique_queries - a.unique_queries);
131
+ // Bucket sitemap URLs that aren't mapped, ranked by traffic potential isn't
132
+ // available here - emit deterministically (alphabetical, top first).
133
+ unmapped.sort((a, b) => a.url.localeCompare(b.url));
134
+ return {
135
+ sitemap_url: parsed.sitemap_url,
136
+ domain: inferredDomain,
137
+ since: parsed.since,
138
+ fetched_at: new Date().toISOString(),
139
+ total_urls: urls.length,
140
+ mapped: mapped.length,
141
+ unmapped: unmapped.length,
142
+ coverage_pct: urls.length === 0 ? 0 : Math.round((mapped.length / urls.length) * 1000) / 10,
143
+ citations_in_cache: citations.length,
144
+ mapped_urls: mapped,
145
+ unmapped_urls: unmapped.slice(0, 200),
146
+ note: "mapped_urls = sitemap URLs that appear in the citation cache. unmapped_urls = sitemap URLs the cache has never seen cited (next-action candidates). Coverage_pct = mapped / total_urls. Cache must be primed first via check_citations or run_panel.",
147
+ };
148
+ }
149
+ //# sourceMappingURL=sitemap-citation-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sitemap-citation-map.js","sourceRoot":"","sources":["../../src/tools/sitemap-citation-map.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type Engine = "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "auto";
1
+ export type Engine = "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "google_ai_mode" | "auto";
2
2
  export type Citation = {
3
3
  url: string;
4
4
  title?: string;
@@ -19,7 +19,7 @@ export type AdapterResult = {
19
19
  };
20
20
  export type ToolError = {
21
21
  type: "missing_key";
22
- engine: Engine;
22
+ engine: Engine | "google_ai_mode";
23
23
  env_var: string;
24
24
  message: string;
25
25
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,MAAM,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automatelab/citation-intelligence",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "mcpName": "io.github.AutomateLab-tech/citation-intelligence",
5
5
  "description": "What LLMs cite, for agents. MCP server: check what Perplexity, Claude, ChatGPT, Gemini, Bing, and Google AI Overviews cite for any query. Self-hosted, BYO API key.",
6
6
  "license": "MIT",
@@ -28,6 +28,7 @@
28
28
  "@modelcontextprotocol/sdk": "1.29.0",
29
29
  "cheerio": "1.0.0",
30
30
  "google-auth-library": "9.15.0",
31
+ "robots-parser": "3.0.1",
31
32
  "undici": "7.25.0",
32
33
  "zod": "3.25.76"
33
34
  },