@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
@@ -0,0 +1,242 @@
1
+ // MCP resources surfaced by this server. Each resource returns cache state
2
+ // the client can read or subscribe to without firing tool calls.
3
+ import { readFile, readdir, stat } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import { CONFIG_DIR, CACHE_FILE } from "./lib/config.js";
7
+ import { citedForDomain } from "./lib/cache.js";
8
+ function asJson(uri, value) {
9
+ return {
10
+ contents: [
11
+ {
12
+ uri,
13
+ mimeType: "application/json",
14
+ text: JSON.stringify(value, null, 2),
15
+ },
16
+ ],
17
+ };
18
+ }
19
+ async function loadCacheSummary() {
20
+ let size = 0;
21
+ let exists = false;
22
+ try {
23
+ const s = await stat(CACHE_FILE);
24
+ size = s.size;
25
+ exists = true;
26
+ }
27
+ catch {
28
+ // missing cache file - return empty summary
29
+ }
30
+ let entries = [];
31
+ if (exists) {
32
+ try {
33
+ const raw = await readFile(CACHE_FILE, "utf8");
34
+ const parsed = JSON.parse(raw);
35
+ entries = parsed.entries ?? [];
36
+ }
37
+ catch {
38
+ // ignore corrupt cache
39
+ }
40
+ }
41
+ const byType = {};
42
+ const byEngine = {};
43
+ const queries = new Set();
44
+ const urls = new Set();
45
+ let oldest = null;
46
+ let newest = null;
47
+ for (const e of entries) {
48
+ if (e.type)
49
+ byType[e.type] = (byType[e.type] ?? 0) + 1;
50
+ if (e.engine)
51
+ byEngine[e.engine] = (byEngine[e.engine] ?? 0) + 1;
52
+ if (e.query)
53
+ queries.add(e.query.toLowerCase());
54
+ for (const c of e.citations ?? [])
55
+ if (c.url)
56
+ urls.add(c.url);
57
+ for (const c of e.sources ?? [])
58
+ if (c.url)
59
+ urls.add(c.url);
60
+ if (e.fetched_at) {
61
+ if (!oldest || e.fetched_at < oldest)
62
+ oldest = e.fetched_at;
63
+ if (!newest || e.fetched_at > newest)
64
+ newest = e.fetched_at;
65
+ }
66
+ }
67
+ return {
68
+ cache_file: CACHE_FILE,
69
+ exists,
70
+ size_bytes: size,
71
+ entries_total: entries.length,
72
+ by_type: byType,
73
+ by_engine: byEngine,
74
+ unique_queries: queries.size,
75
+ unique_urls: urls.size,
76
+ oldest_fetched_at: oldest,
77
+ newest_fetched_at: newest,
78
+ };
79
+ }
80
+ async function loadPanelsList() {
81
+ const panelDir = join(CONFIG_DIR, "panels");
82
+ const snapshotDir = join(CONFIG_DIR, "snapshots");
83
+ const panels = [];
84
+ try {
85
+ const files = await readdir(panelDir);
86
+ for (const f of files.filter((f) => f.endsWith(".json"))) {
87
+ const name = f.slice(0, -5);
88
+ try {
89
+ const raw = await readFile(join(panelDir, f), "utf8");
90
+ const p = JSON.parse(raw);
91
+ panels.push({
92
+ name,
93
+ queries: p.queries?.length ?? 0,
94
+ domain: p.domain,
95
+ updated_at: p.updated_at,
96
+ });
97
+ }
98
+ catch {
99
+ panels.push({ name, queries: 0 });
100
+ }
101
+ }
102
+ }
103
+ catch {
104
+ // panels dir doesn't exist yet
105
+ }
106
+ const snapshotsByPanel = {};
107
+ try {
108
+ const panelDirs = await readdir(snapshotDir);
109
+ for (const p of panelDirs) {
110
+ try {
111
+ const files = await readdir(join(snapshotDir, p));
112
+ snapshotsByPanel[p] = files.filter((f) => f.endsWith(".json")).length;
113
+ }
114
+ catch {
115
+ // skip
116
+ }
117
+ }
118
+ }
119
+ catch {
120
+ // snapshots dir doesn't exist yet
121
+ }
122
+ return {
123
+ config_dir: CONFIG_DIR,
124
+ panels,
125
+ snapshots_by_panel: snapshotsByPanel,
126
+ };
127
+ }
128
+ const LLMS_TXT_PRIMER = [
129
+ "# llms.txt — what it is",
130
+ "",
131
+ "Proposed by llmstxt.org. A markdown file at /llms.txt that orients LLM",
132
+ "crawlers to your site: H1 title, short blurb, then sectioned link lists.",
133
+ "Distinct from robots.txt (gates) and sitemap.xml (URL enumeration) - it",
134
+ "tells the model *what's important*, not just *what exists*.",
135
+ "",
136
+ "## Mainstream signal status",
137
+ "",
138
+ "- OpenAI, Anthropic, Perplexity: no public statement of consumption.",
139
+ "- Adopters use it as a documentation / discoverability nudge.",
140
+ "- Generally harmless to ship; benefit > zero, cost ~ zero.",
141
+ "",
142
+ "## How this server helps",
143
+ "",
144
+ "- `llms_txt_generator` builds a draft from your sitemap.",
145
+ "- `audit_sitemap` ranks pages by citation-readiness before you include them.",
146
+ "- `predict_citation` scores any URL on the public signals (llms.txt is one).",
147
+ "",
148
+ "## Spec",
149
+ "",
150
+ "https://llmstxt.org",
151
+ ].join("\n");
152
+ const CRAWLERS_PRIMER = [
153
+ "# AI crawlers cheatsheet",
154
+ "",
155
+ "## Training/index bots (robots.txt gate)",
156
+ "",
157
+ "- GPTBot — OpenAI ChatGPT training",
158
+ "- OAI-SearchBot — ChatGPT Search index",
159
+ "- ClaudeBot — Anthropic training",
160
+ "- PerplexityBot — Perplexity index",
161
+ "- CCBot — Common Crawl (feeds many LLM corpora)",
162
+ "- Google-Extended — robots-only opt-out token for Gemini training",
163
+ "- Applebot-Extended — robots-only opt-out for Apple Intelligence",
164
+ "- Bytespider — ByteDance Doubao",
165
+ "- Meta-ExternalAgent — Llama",
166
+ "",
167
+ "## Real-time fetch bots (UA gate)",
168
+ "",
169
+ "- ChatGPT-User — OpenAI on-prompt fetch",
170
+ "- Claude-Web — Anthropic on-prompt fetch",
171
+ "- Perplexity-User — Perplexity on-query fetch",
172
+ "",
173
+ "## Audit",
174
+ "",
175
+ "Use `crawler_access_audit` to verify these can each fetch a URL. Use the",
176
+ "`ai_crawler_checkup` prompt for an LLM-driven write-up.",
177
+ ].join("\n");
178
+ export function registerResources(server) {
179
+ server.registerResource("cache_summary", "citation://cache/summary", {
180
+ title: "Citation cache summary",
181
+ description: "Aggregate counts of cached entries by type, engine, unique queries, and unique URLs. Read-only view of the local citation cache.",
182
+ mimeType: "application/json",
183
+ }, async (uri) => {
184
+ const summary = await loadCacheSummary();
185
+ return asJson(uri.toString(), summary);
186
+ });
187
+ server.registerResource("panels_list", "citation://panels", {
188
+ title: "Saved panels",
189
+ description: "List of saved query panels and per-panel snapshot counts. Mirrors track_queries action=list with snapshot context.",
190
+ mimeType: "application/json",
191
+ }, async (uri) => {
192
+ const panels = await loadPanelsList();
193
+ return asJson(uri.toString(), panels);
194
+ });
195
+ server.registerResource("llms_txt_primer", "citation://docs/llms-txt", {
196
+ title: "llms.txt primer",
197
+ description: "What llms.txt is, what it isn't, and how this server's tools help build one. Short markdown primer.",
198
+ mimeType: "text/markdown",
199
+ }, (uri) => ({
200
+ contents: [
201
+ {
202
+ uri: uri.toString(),
203
+ mimeType: "text/markdown",
204
+ text: LLMS_TXT_PRIMER,
205
+ },
206
+ ],
207
+ }));
208
+ server.registerResource("crawlers_primer", "citation://docs/ai-crawlers", {
209
+ title: "AI crawlers cheatsheet",
210
+ description: "Quick reference for the AI crawlers `crawler_access_audit` checks, grouped by training vs real-time fetch.",
211
+ mimeType: "text/markdown",
212
+ }, (uri) => ({
213
+ contents: [
214
+ {
215
+ uri: uri.toString(),
216
+ mimeType: "text/markdown",
217
+ text: CRAWLERS_PRIMER,
218
+ },
219
+ ],
220
+ }));
221
+ server.registerResource("cited_for_domain", new ResourceTemplate("citation://domain/{domain}/cited-for", {
222
+ list: undefined,
223
+ }), {
224
+ title: "Citations for a domain",
225
+ description: "Cached citations for {domain}. Returns the most recent 200 entries. Same source as cited_for tool, surfaced as a resource for clients that subscribe.",
226
+ mimeType: "application/json",
227
+ }, async (uri, variables) => {
228
+ const domainVar = variables.domain;
229
+ const domain = Array.isArray(domainVar) ? domainVar[0] : domainVar;
230
+ const safe = typeof domain === "string" ? domain : "";
231
+ const results = safe
232
+ ? await citedForDomain(safe, undefined, undefined, 200)
233
+ : [];
234
+ return asJson(uri.toString(), {
235
+ domain: safe,
236
+ results,
237
+ total: results.length,
238
+ source: "local_cache",
239
+ });
240
+ });
241
+ }
242
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
@@ -3,20 +3,20 @@ import type { Engine } from "../types.js";
3
3
  export declare const amICitedInputSchema: {
4
4
  domain: z.ZodString;
5
5
  queries: z.ZodArray<z.ZodString, "many">;
6
- engine: z.ZodDefault<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave", "auto"]>>;
6
+ engine: z.ZodDefault<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave", "google_ai_mode", "auto"]>>;
7
7
  };
8
8
  declare const inputSchema: z.ZodObject<{
9
9
  domain: z.ZodString;
10
10
  queries: z.ZodArray<z.ZodString, "many">;
11
- engine: z.ZodDefault<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave", "auto"]>>;
11
+ engine: z.ZodDefault<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave", "google_ai_mode", "auto"]>>;
12
12
  }, "strip", z.ZodTypeAny, {
13
- engine: "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "auto";
13
+ engine: "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "google_ai_mode" | "auto";
14
14
  domain: string;
15
15
  queries: string[];
16
16
  }, {
17
17
  domain: string;
18
18
  queries: string[];
19
- engine?: "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "auto" | undefined;
19
+ engine?: "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "google_ai_mode" | "auto" | undefined;
20
20
  }>;
21
21
  export declare function amICited(input: z.infer<typeof inputSchema>): Promise<{
22
22
  domain: string;
@@ -11,7 +11,7 @@ export const amICitedInputSchema = {
11
11
  .max(20)
12
12
  .describe("Queries to test the domain against. 1-20 queries per call."),
13
13
  engine: z
14
- .enum(["perplexity", "claude", "openai", "gemini", "bing", "brave", "auto"])
14
+ .enum(["perplexity", "claude", "openai", "gemini", "bing", "brave", "google_ai_mode", "auto"])
15
15
  .default("auto")
16
16
  .describe("AI engine to query."),
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"am-i-cited.js","sourceRoot":"","sources":["../../src/tools/am-i-cited.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"am-i-cited.js","sourceRoot":"","sources":["../../src/tools/am-i-cited.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+ import type { Engine } from "../types.js";
3
+ export declare const canonicalCompetitorSetInputSchema: {
4
+ query: z.ZodString;
5
+ engines: z.ZodOptional<z.ZodArray<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave"]>, "many">>;
6
+ top_n: z.ZodDefault<z.ZodNumber>;
7
+ max_results: z.ZodDefault<z.ZodNumber>;
8
+ exclude_domains: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ };
10
+ declare const inputSchema: z.ZodObject<{
11
+ query: z.ZodString;
12
+ engines: z.ZodOptional<z.ZodArray<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave"]>, "many">>;
13
+ top_n: z.ZodDefault<z.ZodNumber>;
14
+ max_results: z.ZodDefault<z.ZodNumber>;
15
+ exclude_domains: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ query: string;
18
+ max_results: number;
19
+ top_n: number;
20
+ engines?: ("perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave")[] | undefined;
21
+ exclude_domains?: string[] | undefined;
22
+ }, {
23
+ query: string;
24
+ max_results?: number | undefined;
25
+ engines?: ("perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave")[] | undefined;
26
+ top_n?: number | undefined;
27
+ exclude_domains?: string[] | undefined;
28
+ }>;
29
+ export declare function canonicalCompetitorSet(input: z.infer<typeof inputSchema>): Promise<{
30
+ query: string;
31
+ fetched_at: string;
32
+ engines: never[];
33
+ domains: never[];
34
+ note: string;
35
+ engines_queried?: undefined;
36
+ engines_succeeded?: undefined;
37
+ excluded_domains?: undefined;
38
+ total_unique_domains?: undefined;
39
+ top_n?: undefined;
40
+ } | {
41
+ query: string;
42
+ fetched_at: string;
43
+ engines: {
44
+ engine: Engine;
45
+ ok: boolean;
46
+ citations: number;
47
+ error: string | undefined;
48
+ }[];
49
+ engines_queried: number;
50
+ engines_succeeded: number;
51
+ excluded_domains: string[];
52
+ total_unique_domains: number;
53
+ top_n: number;
54
+ domains: {
55
+ domain: string;
56
+ total_citations: number;
57
+ engine_count: number;
58
+ best_rank: number;
59
+ by_engine: {
60
+ engine: Engine;
61
+ citations: number;
62
+ best_rank: number;
63
+ sample_urls: string[];
64
+ }[];
65
+ top_urls: {
66
+ url: string;
67
+ count: number;
68
+ }[];
69
+ }[];
70
+ note: string;
71
+ }>;
72
+ export {};
73
+ //# sourceMappingURL=canonical-competitor-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-competitor-set.d.ts","sourceRoot":"","sources":["../../src/tools/canonical-competitor-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,iCAAiC;;;;;;CAgC7C,CAAC;AAEF,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;EAA8C,CAAC;AA4DhE,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsI9E"}
@@ -0,0 +1,209 @@
1
+ import { z } from "zod";
2
+ import { envKey } from "../lib/config.js";
3
+ import { checkCitations } from "./check-citations.js";
4
+ import { log } from "../lib/log.js";
5
+ export const canonicalCompetitorSetInputSchema = {
6
+ query: z
7
+ .string()
8
+ .min(1)
9
+ .describe("Search query to fan out across engines."),
10
+ engines: z
11
+ .array(z.enum(["perplexity", "claude", "openai", "gemini", "bing", "brave"]))
12
+ .min(1)
13
+ .max(6)
14
+ .optional()
15
+ .describe("Engines to query. If omitted, uses all engines with a configured API key."),
16
+ top_n: z
17
+ .number()
18
+ .int()
19
+ .min(1)
20
+ .max(50)
21
+ .default(10)
22
+ .describe("Max competitor domains to return."),
23
+ max_results: z
24
+ .number()
25
+ .int()
26
+ .min(1)
27
+ .max(20)
28
+ .default(10)
29
+ .describe("Max citations per engine."),
30
+ exclude_domains: z
31
+ .array(z.string())
32
+ .max(50)
33
+ .optional()
34
+ .describe("Domains to filter out (e.g. your own brand, Wikipedia, Reddit). Suffix-match."),
35
+ };
36
+ const inputSchema = z.object(canonicalCompetitorSetInputSchema);
37
+ // Crude registered-domain extractor. Strips www. and handles the common
38
+ // two-label suffixes (co.uk, com.au, com.br, etc.). Good enough for grouping
39
+ // competitor citations; not RFC-correct.
40
+ const TWO_LABEL_TLDS = new Set([
41
+ "co.uk",
42
+ "co.jp",
43
+ "co.kr",
44
+ "co.in",
45
+ "co.nz",
46
+ "co.za",
47
+ "com.au",
48
+ "com.br",
49
+ "com.mx",
50
+ "com.tr",
51
+ "com.sg",
52
+ "com.tw",
53
+ "com.hk",
54
+ "com.cn",
55
+ "com.ar",
56
+ "ac.uk",
57
+ "gov.uk",
58
+ "gov.au",
59
+ "net.au",
60
+ "org.uk",
61
+ "or.jp",
62
+ "ne.jp",
63
+ "ac.jp",
64
+ ]);
65
+ function registeredDomain(host) {
66
+ const lower = host.toLowerCase().replace(/^www\./, "");
67
+ const parts = lower.split(".");
68
+ if (parts.length <= 2)
69
+ return lower;
70
+ const tail2 = parts.slice(-2).join(".");
71
+ const tail3 = parts.slice(-3).join(".");
72
+ if (TWO_LABEL_TLDS.has(tail2))
73
+ return tail3;
74
+ return tail2;
75
+ }
76
+ function hostOf(url) {
77
+ try {
78
+ return new URL(url).hostname;
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ }
84
+ function availableEngines() {
85
+ const list = [];
86
+ if (envKey("PERPLEXITY_API_KEY"))
87
+ list.push("perplexity");
88
+ if (envKey("ANTHROPIC_API_KEY"))
89
+ list.push("claude");
90
+ if (envKey("OPENAI_API_KEY"))
91
+ list.push("openai");
92
+ if (envKey("GEMINI_API_KEY"))
93
+ list.push("gemini");
94
+ if (envKey("BRAVE_API_KEY"))
95
+ list.push("brave");
96
+ if (envKey("BING_API_KEY"))
97
+ list.push("bing");
98
+ return list;
99
+ }
100
+ export async function canonicalCompetitorSet(input) {
101
+ const parsed = inputSchema.parse(input);
102
+ log.debug("canonical_competitor_set start", { query: parsed.query });
103
+ const engines = parsed.engines ?? availableEngines();
104
+ if (engines.length === 0) {
105
+ return {
106
+ query: parsed.query,
107
+ fetched_at: new Date().toISOString(),
108
+ engines: [],
109
+ domains: [],
110
+ note: "No engine API keys configured. Set at least one of PERPLEXITY_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, BRAVE_API_KEY, BING_API_KEY.",
111
+ };
112
+ }
113
+ const excludeRegistered = (parsed.exclude_domains ?? []).map((d) => registeredDomain(d.replace(/^https?:\/\//, "").replace(/\/.*/, "")));
114
+ const runs = await Promise.all(engines.map(async (engine) => {
115
+ try {
116
+ const res = await checkCitations({
117
+ query: parsed.query,
118
+ engine,
119
+ max_results: parsed.max_results,
120
+ });
121
+ return { engine, ok: true, citations: res.citations };
122
+ }
123
+ catch (err) {
124
+ const msg = err instanceof Error ? err.message : String(err);
125
+ return { engine, ok: false, citations: [], error: msg };
126
+ }
127
+ }));
128
+ const okRuns = runs.filter((r) => r.ok);
129
+ const agg = new Map();
130
+ for (const r of okRuns) {
131
+ for (const c of r.citations) {
132
+ const host = hostOf(c.url);
133
+ if (!host)
134
+ continue;
135
+ const dom = registeredDomain(host);
136
+ if (excludeRegistered.some((d) => dom === d || dom.endsWith(`.${d}`)))
137
+ continue;
138
+ let entry = agg.get(dom);
139
+ if (!entry) {
140
+ entry = {
141
+ domain: dom,
142
+ total_citations: 0,
143
+ best_rank: c.rank,
144
+ engines: new Map(),
145
+ urls: new Map(),
146
+ };
147
+ agg.set(dom, entry);
148
+ }
149
+ entry.total_citations += 1;
150
+ entry.best_rank = Math.min(entry.best_rank, c.rank);
151
+ let perEngine = entry.engines.get(r.engine);
152
+ if (!perEngine) {
153
+ perEngine = { count: 0, best_rank: c.rank, sample_urls: new Set() };
154
+ entry.engines.set(r.engine, perEngine);
155
+ }
156
+ perEngine.count += 1;
157
+ perEngine.best_rank = Math.min(perEngine.best_rank, c.rank);
158
+ perEngine.sample_urls.add(c.url);
159
+ entry.urls.set(c.url, (entry.urls.get(c.url) ?? 0) + 1);
160
+ }
161
+ }
162
+ const ranked = [...agg.values()]
163
+ .map((e) => ({
164
+ domain: e.domain,
165
+ total_citations: e.total_citations,
166
+ engine_count: e.engines.size,
167
+ best_rank: e.best_rank,
168
+ by_engine: [...e.engines.entries()]
169
+ .map(([engine, v]) => ({
170
+ engine,
171
+ citations: v.count,
172
+ best_rank: v.best_rank,
173
+ sample_urls: [...v.sample_urls].slice(0, 3),
174
+ }))
175
+ .sort((a, b) => b.citations - a.citations),
176
+ top_urls: [...e.urls.entries()]
177
+ .sort((a, b) => b[1] - a[1])
178
+ .slice(0, 5)
179
+ .map(([url, count]) => ({ url, count })),
180
+ }))
181
+ .sort((a, b) => {
182
+ // Primary: cited by more engines (cross-engine consensus).
183
+ if (b.engine_count !== a.engine_count)
184
+ return b.engine_count - a.engine_count;
185
+ // Secondary: total citations.
186
+ if (b.total_citations !== a.total_citations)
187
+ return b.total_citations - a.total_citations;
188
+ // Tertiary: best rank (lower = earlier).
189
+ return a.best_rank - b.best_rank;
190
+ });
191
+ return {
192
+ query: parsed.query,
193
+ fetched_at: new Date().toISOString(),
194
+ engines: runs.map((r) => ({
195
+ engine: r.engine,
196
+ ok: r.ok,
197
+ citations: r.citations.length,
198
+ error: r.error,
199
+ })),
200
+ engines_queried: runs.length,
201
+ engines_succeeded: okRuns.length,
202
+ excluded_domains: excludeRegistered,
203
+ total_unique_domains: ranked.length,
204
+ top_n: parsed.top_n,
205
+ domains: ranked.slice(0, parsed.top_n),
206
+ note: "domains aggregated by registered domain (eTLD+1 approximation). engine_count = how many engines cited this domain (cross-engine consensus). by_engine breaks down per-engine citation counts and best rank. Order: engine_count desc, then total_citations desc, then best_rank asc.",
207
+ };
208
+ }
209
+ //# sourceMappingURL=canonical-competitor-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-competitor-set.js","sourceRoot":"","sources":["../../src/tools/canonical-competitor-set.ts"],"names":[],"mappings":"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"}
@@ -2,20 +2,20 @@ import { z } from "zod";
2
2
  import type { Engine } from "../types.js";
3
3
  export declare const checkCitationsInputSchema: {
4
4
  query: z.ZodString;
5
- engine: z.ZodDefault<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave", "auto"]>>;
5
+ engine: z.ZodDefault<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave", "google_ai_mode", "auto"]>>;
6
6
  max_results: z.ZodDefault<z.ZodNumber>;
7
7
  };
8
8
  declare const inputSchema: z.ZodObject<{
9
9
  query: z.ZodString;
10
- engine: z.ZodDefault<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave", "auto"]>>;
10
+ engine: z.ZodDefault<z.ZodEnum<["perplexity", "claude", "openai", "gemini", "bing", "brave", "google_ai_mode", "auto"]>>;
11
11
  max_results: z.ZodDefault<z.ZodNumber>;
12
12
  }, "strip", z.ZodTypeAny, {
13
13
  query: string;
14
- engine: "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "auto";
14
+ engine: "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "google_ai_mode" | "auto";
15
15
  max_results: number;
16
16
  }, {
17
17
  query: string;
18
- engine?: "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "auto" | undefined;
18
+ engine?: "perplexity" | "claude" | "openai" | "gemini" | "bing" | "brave" | "google_ai_mode" | "auto" | undefined;
19
19
  max_results?: number | undefined;
20
20
  }>;
21
21
  export declare function checkCitations(input: z.infer<typeof inputSchema>): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"check-citations.d.ts","sourceRoot":"","sources":["../../src/tools/check-citations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,yBAAyB;;;;CAarC,CAAC;AAEF,QAAA,MAAM,WAAW;;;;;;;;;;;;EAAsC,CAAC;AAmCxD,wBAAsB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC;;;;;;;GAmDtE"}
1
+ {"version":3,"file":"check-citations.d.ts","sourceRoot":"","sources":["../../src/tools/check-citations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,yBAAyB;;;;CAsBrC,CAAC;AAEF,QAAA,MAAM,WAAW;;;;;;;;;;;;EAAsC,CAAC;AAsCxD,wBAAsB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC;;;;;;;GAmDtE"}