@rivi-software/agentic-seo-check 0.1.0 → 0.1.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.
Files changed (119) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +65 -15
  3. package/dist/brand.d.ts +11 -0
  4. package/dist/brand.js +22 -0
  5. package/dist/brand.js.map +1 -0
  6. package/dist/cli.js +125 -80
  7. package/dist/cli.js.map +1 -1
  8. package/dist/core/audit.d.ts +16 -16
  9. package/dist/core/audit.js +363 -248
  10. package/dist/core/audit.js.map +1 -1
  11. package/dist/core/concurrency.d.ts +4 -4
  12. package/dist/core/concurrency.js +33 -23
  13. package/dist/core/concurrency.js.map +1 -1
  14. package/dist/core/crawl.d.ts +5 -5
  15. package/dist/core/crawl.js +250 -121
  16. package/dist/core/crawl.js.map +1 -1
  17. package/dist/core/fetch.d.ts +5 -5
  18. package/dist/core/fetch.js +151 -100
  19. package/dist/core/fetch.js.map +1 -1
  20. package/dist/core/html/dom.d.ts +13 -0
  21. package/dist/core/html/dom.js +17 -0
  22. package/dist/core/html/dom.js.map +1 -0
  23. package/dist/core/html/extract.d.ts +2 -2
  24. package/dist/core/html/extract.js +168 -111
  25. package/dist/core/html/extract.js.map +1 -1
  26. package/dist/core/html/structured-data.d.ts +16 -6
  27. package/dist/core/html/structured-data.js +180 -145
  28. package/dist/core/html/structured-data.js.map +1 -1
  29. package/dist/core/html/text.d.ts +14 -14
  30. package/dist/core/html/text.js +110 -107
  31. package/dist/core/html/text.js.map +1 -1
  32. package/dist/core/lighthouse.d.ts +26 -25
  33. package/dist/core/lighthouse.js +181 -105
  34. package/dist/core/lighthouse.js.map +1 -1
  35. package/dist/core/performance-rules.d.ts +2 -2
  36. package/dist/core/performance-rules.js +105 -33
  37. package/dist/core/performance-rules.js.map +1 -1
  38. package/dist/core/render-rules.d.ts +5 -4
  39. package/dist/core/render-rules.js +129 -62
  40. package/dist/core/render-rules.js.map +1 -1
  41. package/dist/core/render.d.ts +2 -2
  42. package/dist/core/render.js +29 -23
  43. package/dist/core/render.js.map +1 -1
  44. package/dist/core/report/markdown.d.ts +2 -2
  45. package/dist/core/report/markdown.js +110 -131
  46. package/dist/core/report/markdown.js.map +1 -1
  47. package/dist/core/robots.d.ts +5 -5
  48. package/dist/core/robots.js +31 -16
  49. package/dist/core/robots.js.map +1 -1
  50. package/dist/core/rules/canonical.d.ts +1 -1
  51. package/dist/core/rules/canonical.js +93 -57
  52. package/dist/core/rules/canonical.js.map +1 -1
  53. package/dist/core/rules/content.js +40 -26
  54. package/dist/core/rules/content.js.map +1 -1
  55. package/dist/core/rules/document.js +64 -41
  56. package/dist/core/rules/document.js.map +1 -1
  57. package/dist/core/rules/headings.js +58 -38
  58. package/dist/core/rules/headings.js.map +1 -1
  59. package/dist/core/rules/hreflang.js +70 -38
  60. package/dist/core/rules/hreflang.js.map +1 -1
  61. package/dist/core/rules/images.js +44 -26
  62. package/dist/core/rules/images.js.map +1 -1
  63. package/dist/core/rules/index.d.ts +6 -6
  64. package/dist/core/rules/index.js +36 -35
  65. package/dist/core/rules/index.js.map +1 -1
  66. package/dist/core/rules/indexing.d.ts +2 -2
  67. package/dist/core/rules/indexing.js +48 -26
  68. package/dist/core/rules/indexing.js.map +1 -1
  69. package/dist/core/rules/keyword.js +84 -47
  70. package/dist/core/rules/keyword.js.map +1 -1
  71. package/dist/core/rules/links.js +72 -37
  72. package/dist/core/rules/links.js.map +1 -1
  73. package/dist/core/rules/meta.js +55 -34
  74. package/dist/core/rules/meta.js.map +1 -1
  75. package/dist/core/rules/response.js +75 -41
  76. package/dist/core/rules/response.js.map +1 -1
  77. package/dist/core/rules/rule.d.ts +6 -6
  78. package/dist/core/rules/rule.js +36 -36
  79. package/dist/core/rules/rule.js.map +1 -1
  80. package/dist/core/rules/social.js +86 -45
  81. package/dist/core/rules/social.js.map +1 -1
  82. package/dist/core/rules/structured-data.d.ts +6 -4
  83. package/dist/core/rules/structured-data.js +314 -102
  84. package/dist/core/rules/structured-data.js.map +1 -1
  85. package/dist/core/rules/title.js +48 -33
  86. package/dist/core/rules/title.js.map +1 -1
  87. package/dist/core/score.d.ts +3 -3
  88. package/dist/core/score.js +11 -9
  89. package/dist/core/score.js.map +1 -1
  90. package/dist/core/site-rules.d.ts +3 -3
  91. package/dist/core/site-rules.js +409 -198
  92. package/dist/core/site-rules.js.map +1 -1
  93. package/dist/core/sitemap.d.ts +5 -5
  94. package/dist/core/sitemap.js +109 -64
  95. package/dist/core/sitemap.js.map +1 -1
  96. package/dist/core/static.d.ts +2 -2
  97. package/dist/core/static.js +209 -112
  98. package/dist/core/static.js.map +1 -1
  99. package/dist/core/summary.d.ts +2 -2
  100. package/dist/core/summary.js +11 -6
  101. package/dist/core/summary.js.map +1 -1
  102. package/dist/core/types.d.ts +14 -14
  103. package/dist/core/types.js +15 -8
  104. package/dist/core/types.js.map +1 -1
  105. package/dist/core/url.d.ts +11 -11
  106. package/dist/core/url.js +122 -70
  107. package/dist/core/url.js.map +1 -1
  108. package/dist/index.d.ts +11 -11
  109. package/dist/index.js +9 -9
  110. package/dist/index.js.map +1 -1
  111. package/dist/mcp-bin.js +7 -4
  112. package/dist/mcp-bin.js.map +1 -1
  113. package/dist/mcp.d.ts +3 -3
  114. package/dist/mcp.js +312 -122
  115. package/dist/mcp.js.map +1 -1
  116. package/dist/version.d.ts +0 -1
  117. package/dist/version.js +4 -2
  118. package/dist/version.js.map +1 -1
  119. package/package.json +27 -9
package/dist/mcp.js CHANGED
@@ -1,92 +1,244 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
- import { z } from 'zod';
4
- import { auditDirectory, auditHtml, auditSite, auditUrl, compactAudit } from './core/audit.js';
5
- import { runLighthouse } from './core/lighthouse.js';
6
- import { performanceFindings } from './core/performance-rules.js';
7
- import { renderMarkdown } from './core/report/markdown.js';
8
- import { ALL_RULES } from './core/rules/index.js';
9
- import { VERSION } from './version.js';
10
- export const MCP_SERVER_NAME = 'agentic-seo-check';
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { z } from "zod";
4
+ import { MAKER, MCP_ICONS, REPOSITORY_URL } from "./brand.js";
5
+ import { auditDirectory, auditHtml, auditSite, auditUrl, compactAudit, } from "./core/audit.js";
6
+ import { runLighthouse } from "./core/lighthouse.js";
7
+ import { performanceFindings } from "./core/performance-rules.js";
8
+ import { renderMarkdown } from "./core/report/markdown.js";
9
+ import { ALL_RULES } from "./core/rules/index.js";
10
+ import { VERSION } from "./version.js";
11
+ export const MCP_SERVER_NAME = "agentic-seo-check";
11
12
  export const MCP_SERVER_VERSION = VERSION;
12
- const format = z.enum(['json', 'markdown']).default('json').describe('json (default) returns the structured audit; markdown returns a human-readable report.');
13
- const detail = z.enum(['full', 'compact']).default('compact').describe('compact trims evidence lists and bulky fields to save tokens (default); full returns everything.');
13
+ const format = z
14
+ .enum(["json", "markdown"])
15
+ .default("json")
16
+ .describe("json (default) returns the structured audit; markdown returns a human-readable report.");
17
+ const detail = z
18
+ .enum(["full", "compact"])
19
+ .default("compact")
20
+ .describe("compact trims evidence lists and bulky fields to save tokens (default); full returns everything.");
14
21
  const commonOptions = {
15
- keyword: z.string().optional().describe('Target keyword/phrase. Enables keyword.* checks (title, H1, body, description, URL, density).'),
16
- includeInfo: z.boolean().default(true).describe('Include info-level findings (best practices). Set false to see only errors and warnings.'),
17
- disableRules: z.array(z.string()).optional().describe('Rule ids to skip, e.g. ["twitter.card-missing"]. Use seo_list_rules to see ids.'),
18
- timeoutMs: z.number().int().min(1000).max(120_000).optional().describe('Per-request timeout in milliseconds (default 15000).'),
19
- userAgent: z.string().optional().describe('Override the User-Agent header.'),
20
- headers: z.record(z.string(), z.string()).optional().describe('Extra request headers, e.g. {"Authorization": "Basic ..."} for staging sites.'),
22
+ keyword: z
23
+ .string()
24
+ .optional()
25
+ .describe("Target keyword/phrase. Enables keyword.* checks (title, H1, body, description, URL, density)."),
26
+ includeInfo: z
27
+ .boolean()
28
+ .default(true)
29
+ .describe("Include info-level findings (best practices). Set false to see only errors and warnings."),
30
+ disableRules: z
31
+ .array(z.string())
32
+ .optional()
33
+ .describe('Rule ids to skip, e.g. ["twitter.card-missing"]. Use seo_list_rules to see ids.'),
34
+ timeoutMs: z
35
+ .number()
36
+ .int()
37
+ .min(1000)
38
+ .max(120_000)
39
+ .optional()
40
+ .describe("Per-request timeout in milliseconds (default 15000)."),
41
+ userAgent: z.string().optional().describe("Override the User-Agent header."),
42
+ headers: z
43
+ .record(z.string(), z.string())
44
+ .optional()
45
+ .describe('Extra request headers, e.g. {"Authorization": "Basic ..."} for staging sites.'),
21
46
  format,
22
47
  detail,
23
48
  };
24
- function toOptions(input) {
49
+ const toOptions = (input) => ({
50
+ keyword: input.keyword,
51
+ includeInfo: input.includeInfo,
52
+ disableRules: input.disableRules,
53
+ fetch: {
54
+ timeoutMs: input.timeoutMs,
55
+ userAgent: input.userAgent,
56
+ headers: input.headers,
57
+ },
58
+ });
59
+ const respond = (audit, fmt, det) => {
60
+ const report = det === "compact" ? compactAudit(audit) : audit;
61
+ const text = fmt === "markdown"
62
+ ? renderMarkdown(report)
63
+ : JSON.stringify(report, null, 2);
25
64
  return {
26
- keyword: input.keyword,
27
- includeInfo: input.includeInfo,
28
- disableRules: input.disableRules,
29
- fetch: { timeoutMs: input.timeoutMs, userAgent: input.userAgent, headers: input.headers },
65
+ content: [{ type: "text", text }],
66
+ structuredContent: { ...report },
30
67
  };
31
- }
32
- function respond(audit, fmt, det) {
33
- const shaped = det === 'compact' ? compactAudit(audit) : audit;
34
- const text = fmt === 'markdown' ? renderMarkdown(shaped) : JSON.stringify(shaped, null, 2);
35
- return { content: [{ type: 'text', text }], structuredContent: shaped };
36
- }
37
- function fail(err) {
38
- const message = err instanceof Error ? err.message : String(err);
39
- return { isError: true, content: [{ type: 'text', text: `agentic-seo-check error: ${message}` }] };
40
- }
41
- export function createMcpServer() {
42
- const server = new McpServer({ name: MCP_SERVER_NAME, version: MCP_SERVER_VERSION });
43
- server.registerTool('seo_audit_page', {
44
- title: 'Audit one page for SEO',
45
- description: 'Audit a single page and return prioritised, actionable findings (rule id, severity, message, recommendation, CSS selector, evidence). ' +
46
- 'Checks title, meta description, headings, canonical, robots/noindex, viewport/lang, Open Graph/Twitter cards, images, links, hreflang, structured data (JSON-LD/microdata), content quality and the HTTP response. ' +
47
- 'Provide either `url` (live site, staging or http://localhost dev server) or `html` (raw HTML string, e.g. from a template or test render). ' +
48
- 'Set `render: true` to also load the page in headless Chromium and report content that only exists after JavaScript runs (SPA/CSR problems). ' +
49
- 'Set `lighthouse: true` for Core Web Vitals (LCP, CLS, TBT) and Lighthouse SEO audits; this takes 20-60 seconds. ' +
50
- 'Typical workflow: audit, fix the errors and warnings in the source code, re-audit to confirm.',
68
+ };
69
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters -- a thrown value is unknown until this reads it
70
+ const fail = (error) => {
71
+ const message = error instanceof Error ? error.message : String(error);
72
+ return {
73
+ isError: true,
74
+ content: [
75
+ { type: "text", text: `agentic-seo-check error: ${message}` },
76
+ ],
77
+ };
78
+ };
79
+ const metricCell = (name, value) => {
80
+ if (value === null) {
81
+ return "—";
82
+ }
83
+ return name.endsWith("Ms") ? `${Math.round(value)} ms` : String(value);
84
+ };
85
+ const lighthouseMarkdown = (payload) => {
86
+ const lines = [
87
+ `# Lighthouse (${payload.formFactor}): ${payload.finalUrl}`,
88
+ "",
89
+ "| Metric | Value |",
90
+ "| --- | --- |",
91
+ ];
92
+ for (const [name, value] of Object.entries(payload.metrics)) {
93
+ lines.push(`| ${name} | ${metricCell(name, value)} |`);
94
+ }
95
+ lines.push("", "## Opportunities", "");
96
+ for (const o of payload.opportunities.slice(0, 10)) {
97
+ lines.push(`- ${o.title}${o.savingsMs ? ` (~${Math.round(o.savingsMs)} ms)` : ""}${o.savingsBytes ? ` (~${Math.round(o.savingsBytes / 1024)} KiB)` : ""}`);
98
+ }
99
+ lines.push("", "## Findings", "");
100
+ for (const f of payload.findings) {
101
+ lines.push(`- **\`${f.rule}\`** ${f.message}`, ` - Fix: ${f.recommendation}`);
102
+ }
103
+ return lines.join("\n");
104
+ };
105
+ export const createMcpServer = () => {
106
+ const server = new McpServer({
107
+ name: MCP_SERVER_NAME,
108
+ title: `agentic-seo-check by ${MAKER}`,
109
+ version: MCP_SERVER_VERSION,
110
+ description: "SEO audits for coding agents: pages, sites, build output and raw HTML, with findings an agent can act on.",
111
+ websiteUrl: REPOSITORY_URL,
112
+ icons: MCP_ICONS,
113
+ });
114
+ server.registerTool("seo_audit_page", {
115
+ title: "Audit one page for SEO",
116
+ description: "Audit a single page and return prioritised, actionable findings (rule id, severity, message, recommendation, CSS selector, evidence). " +
117
+ "Checks title, meta description, headings, canonical, robots/noindex, viewport/lang, Open Graph/Twitter cards, images, links, hreflang, structured data (JSON-LD/microdata), content quality and the HTTP response. " +
118
+ "Provide either `url` (live site, staging or http://localhost dev server) or `html` (raw HTML string, e.g. from a template or test render). " +
119
+ "Set `render: true` to also load the page in headless Chromium and report content that only exists after JavaScript runs (SPA/CSR problems). " +
120
+ "Set `lighthouse: true` for Core Web Vitals (LCP, CLS, TBT) and Lighthouse SEO audits; this takes 20-60 seconds. " +
121
+ "Typical workflow: audit, fix the errors and warnings in the source code, re-audit to confirm.",
51
122
  inputSchema: {
52
- url: z.string().url().optional().describe('Absolute http(s) URL to fetch and audit.'),
53
- html: z.string().optional().describe('Raw HTML to audit instead of fetching a URL.'),
54
- baseUrl: z.string().url().optional().describe('With `html`: the URL the HTML would be served at (used to resolve links and classify them as internal/external).'),
55
- render: z.boolean().default(false).describe('Also render with headless Chromium (Playwright) and compare against the server HTML.'),
56
- lighthouse: z.boolean().default(false).describe('Also run Lighthouse (performance, SEO, agentic-browsing categories). Slow.'),
57
- formFactor: z.enum(['mobile', 'desktop']).default('mobile').describe('Lighthouse device emulation.'),
123
+ url: z
124
+ .string()
125
+ .url()
126
+ .optional()
127
+ .describe("Absolute http(s) URL to fetch and audit."),
128
+ html: z
129
+ .string()
130
+ .optional()
131
+ .describe("Raw HTML to audit instead of fetching a URL."),
132
+ baseUrl: z
133
+ .string()
134
+ .url()
135
+ .optional()
136
+ .describe("With `html`: the URL the HTML would be served at (used to resolve links and classify them as internal/external)."),
137
+ render: z
138
+ .boolean()
139
+ .default(false)
140
+ .describe("Also render with headless Chromium (Playwright) and compare against the server HTML."),
141
+ lighthouse: z
142
+ .boolean()
143
+ .default(false)
144
+ .describe("Also run Lighthouse (performance, SEO, agentic-browsing categories). Slow."),
145
+ formFactor: z
146
+ .enum(["mobile", "desktop"])
147
+ .default("mobile")
148
+ .describe("Lighthouse device emulation."),
58
149
  ...commonOptions,
59
150
  },
60
- annotations: { readOnlyHint: true, openWorldHint: true, idempotentHint: true },
151
+ annotations: {
152
+ readOnlyHint: true,
153
+ openWorldHint: true,
154
+ idempotentHint: true,
155
+ },
61
156
  }, async (input) => {
62
157
  try {
63
- if (!input.url && !input.html)
64
- throw new Error('Provide `url` or `html`.');
65
- const options = { ...toOptions(input), render: input.render, lighthouse: input.lighthouse, formFactor: input.formFactor, baseUrl: input.baseUrl };
66
- const audit = input.html !== undefined ? await auditHtml(input.html, { url: input.baseUrl, source: 'html', target: 'inline-html' }, options) : await auditUrl(input.url, options);
158
+ const options = {
159
+ ...toOptions(input),
160
+ render: input.render,
161
+ lighthouse: input.lighthouse,
162
+ formFactor: input.formFactor,
163
+ baseUrl: input.baseUrl,
164
+ };
165
+ const { html, url } = input;
166
+ let audit;
167
+ // `html` wins over `url`; an empty `html` counts only when a `url` came with it.
168
+ if (html !== undefined && (html || url)) {
169
+ audit = await auditHtml(html, { url: input.baseUrl, source: "html", target: "inline-html" }, options);
170
+ }
171
+ else if (url) {
172
+ audit = await auditUrl(url, options);
173
+ }
174
+ else {
175
+ throw new Error("Provide `url` or `html`.");
176
+ }
67
177
  return respond(audit, input.format, input.detail);
68
178
  }
69
- catch (err) {
70
- return fail(err);
179
+ catch (error) {
180
+ return fail(error);
71
181
  }
72
182
  });
73
- server.registerTool('seo_crawl_site', {
74
- title: 'Crawl a site and audit every page',
75
- description: 'Crawl internal links from a start URL (default 25 pages, depth 3), audit every HTML page, and run site-wide checks: robots.txt, XML sitemap coverage (missing/noindex/non-canonical/broken URLs), broken internal links with their sources, redirect chains, duplicate titles/descriptions/H1s/content, orphan and deep pages, soft-404 behaviour, http→https and www redirects, hreflang return links. ' +
76
- 'Returns site findings plus `issues` (page findings rolled up by rule with example URLs) and per-page scores. Use seo_audit_page on a specific URL for full per-page detail. ' +
77
- 'Works on http://localhost dev servers; for those set `respectRobots: false` if the dev server serves a blocking robots.txt.',
183
+ server.registerTool("seo_crawl_site", {
184
+ title: "Crawl a site and audit every page",
185
+ description: "Crawl internal links from a start URL (default 25 pages, depth 3), audit every HTML page, and run site-wide checks: robots.txt, XML sitemap coverage (missing/noindex/non-canonical/broken URLs), broken internal links with their sources, redirect chains, duplicate titles/descriptions/H1s/content, orphan and deep pages, soft-404 behaviour, http→https and www redirects, hreflang return links. " +
186
+ "Returns site findings plus `issues` (page findings rolled up by rule with example URLs) and per-page scores. Use seo_audit_page on a specific URL for full per-page detail. " +
187
+ "Works on http://localhost dev servers; for those set `respectRobots: false` if the dev server serves a blocking robots.txt.",
78
188
  inputSchema: {
79
- url: z.string().url().describe('Start URL (usually the homepage).'),
80
- maxPages: z.number().int().min(1).max(500).default(25).describe('Maximum pages to fetch.'),
81
- maxDepth: z.number().int().min(0).max(10).default(3).describe('Maximum link depth from the start URL.'),
82
- concurrency: z.number().int().min(1).max(10).default(4).describe('Parallel requests.'),
83
- delayMs: z.number().int().min(0).max(5000).default(0).describe('Delay between requests per worker (politeness).'),
84
- respectRobots: z.boolean().default(true).describe('Obey robots.txt disallow rules while crawling.'),
85
- includeSubdomains: z.boolean().default(false).describe('Treat subdomains of the start host as internal.'),
86
- checkExternalLinks: z.boolean().default(false).describe('Also probe external link targets for 4xx/5xx (slower).'),
87
- includePatterns: z.array(z.string()).optional().describe('Only crawl URLs matching one of these regular expressions.'),
88
- excludePatterns: z.array(z.string()).optional().describe('Skip URLs matching any of these regular expressions.'),
89
- pageDetail: z.enum(['summary', 'full']).default('summary').describe('summary: per-page scores/counts only (findings are rolled up in `issues`); full: every finding on every page.'),
189
+ url: z.string().url().describe("Start URL (usually the homepage)."),
190
+ maxPages: z
191
+ .number()
192
+ .int()
193
+ .min(1)
194
+ .max(500)
195
+ .default(25)
196
+ .describe("Maximum pages to fetch."),
197
+ maxDepth: z
198
+ .number()
199
+ .int()
200
+ .min(0)
201
+ .max(10)
202
+ .default(3)
203
+ .describe("Maximum link depth from the start URL."),
204
+ concurrency: z
205
+ .number()
206
+ .int()
207
+ .min(1)
208
+ .max(10)
209
+ .default(4)
210
+ .describe("Parallel requests."),
211
+ delayMs: z
212
+ .number()
213
+ .int()
214
+ .min(0)
215
+ .max(5000)
216
+ .default(0)
217
+ .describe("Delay between requests per worker (politeness)."),
218
+ respectRobots: z
219
+ .boolean()
220
+ .default(true)
221
+ .describe("Obey robots.txt disallow rules while crawling."),
222
+ includeSubdomains: z
223
+ .boolean()
224
+ .default(false)
225
+ .describe("Treat subdomains of the start host as internal."),
226
+ checkExternalLinks: z
227
+ .boolean()
228
+ .default(false)
229
+ .describe("Also probe external link targets for 4xx/5xx (slower)."),
230
+ includePatterns: z
231
+ .array(z.string())
232
+ .optional()
233
+ .describe("Only crawl URLs matching one of these regular expressions."),
234
+ excludePatterns: z
235
+ .array(z.string())
236
+ .optional()
237
+ .describe("Skip URLs matching any of these regular expressions."),
238
+ pageDetail: z
239
+ .enum(["summary", "full"])
240
+ .default("summary")
241
+ .describe("summary: per-page scores/counts only (findings are rolled up in `issues`); full: every finding on every page."),
90
242
  ...commonOptions,
91
243
  },
92
244
  annotations: { readOnlyHint: true, openWorldHint: true },
@@ -107,84 +259,122 @@ export function createMcpServer() {
107
259
  });
108
260
  return respond(audit, input.format, input.detail);
109
261
  }
110
- catch (err) {
111
- return fail(err);
262
+ catch (error) {
263
+ return fail(error);
112
264
  }
113
265
  });
114
- server.registerTool('seo_audit_directory', {
115
- title: 'Audit a static build output directory',
116
- description: 'Audit every .html file in a build output directory (dist/, out/, build/, .output/public) without running a server. Runs all page checks plus directory-level checks: internal links that resolve to no file, sitemap.xml/robots.txt in the output, duplicate titles/descriptions/content, unlinked files. ' +
117
- 'Pass `baseUrl` as the production origin (e.g. https://www.example.com) so absolute links, canonicals and sitemap URLs are classified correctly.',
266
+ server.registerTool("seo_audit_directory", {
267
+ title: "Audit a static build output directory",
268
+ description: "Audit every .html file in a build output directory (dist/, out/, build/, .output/public) without running a server. Runs all page checks plus directory-level checks: internal links that resolve to no file, sitemap.xml/robots.txt in the output, duplicate titles/descriptions/content, unlinked files. " +
269
+ "Pass `baseUrl` as the production origin (e.g. https://www.example.com) so absolute links, canonicals and sitemap URLs are classified correctly.",
118
270
  inputSchema: {
119
- dir: z.string().describe('Absolute or relative path to the directory containing built HTML files.'),
120
- baseUrl: z.string().url().default('http://localhost/').describe('Origin the files will be served from.'),
121
- maxPages: z.number().int().min(1).max(5000).default(500).describe('Maximum HTML files to audit.'),
122
- pageDetail: z.enum(['summary', 'full']).default('summary').describe('summary: per-page scores/counts only; full: every finding on every page.'),
271
+ dir: z
272
+ .string()
273
+ .describe("Absolute or relative path to the directory containing built HTML files."),
274
+ baseUrl: z
275
+ .string()
276
+ .url()
277
+ .default("http://localhost/")
278
+ .describe("Origin the files will be served from."),
279
+ maxPages: z
280
+ .number()
281
+ .int()
282
+ .min(1)
283
+ .max(5000)
284
+ .default(500)
285
+ .describe("Maximum HTML files to audit."),
286
+ pageDetail: z
287
+ .enum(["summary", "full"])
288
+ .default("summary")
289
+ .describe("summary: per-page scores/counts only; full: every finding on every page."),
123
290
  ...commonOptions,
124
291
  },
125
- annotations: { readOnlyHint: true, openWorldHint: false, idempotentHint: true },
292
+ annotations: {
293
+ readOnlyHint: true,
294
+ openWorldHint: false,
295
+ idempotentHint: true,
296
+ },
126
297
  }, async (input) => {
127
298
  try {
128
- const audit = await auditDirectory(input.dir, { ...toOptions(input), baseUrl: input.baseUrl, maxPages: input.maxPages, pageDetail: input.pageDetail });
299
+ const audit = await auditDirectory(input.dir, {
300
+ ...toOptions(input),
301
+ baseUrl: input.baseUrl,
302
+ maxPages: input.maxPages,
303
+ pageDetail: input.pageDetail,
304
+ });
129
305
  return respond(audit, input.format, input.detail);
130
306
  }
131
- catch (err) {
132
- return fail(err);
307
+ catch (error) {
308
+ return fail(error);
133
309
  }
134
310
  });
135
- server.registerTool('seo_lighthouse', {
136
- title: 'Run Lighthouse on a URL',
137
- description: 'Run Google Lighthouse (performance, SEO and agentic-browsing categories) against one URL using a local headless Chrome. Returns Core Web Vitals lab metrics (LCP, CLS, TBT, FCP, Speed Index, TTFB), the top opportunities with estimated savings, failed Lighthouse SEO audits, and findings with thresholds applied. Takes 20-60 seconds. Requires Chrome or Playwright Chromium on this machine.',
311
+ server.registerTool("seo_lighthouse", {
312
+ title: "Run Lighthouse on a URL",
313
+ description: "Run Google Lighthouse (performance, SEO and agentic-browsing categories) against one URL using a local headless Chrome. Returns Core Web Vitals lab metrics (LCP, CLS, TBT, FCP, Speed Index, TTFB), the top opportunities with estimated savings, failed Lighthouse SEO audits, and findings with thresholds applied. Takes 20-60 seconds. Requires Chrome or Playwright Chromium on this machine.",
138
314
  inputSchema: {
139
- url: z.string().url().describe('Absolute http(s) URL.'),
140
- formFactor: z.enum(['mobile', 'desktop']).default('mobile').describe('Device emulation. Mobile is what Google uses for ranking.'),
141
- headers: z.record(z.string(), z.string()).optional().describe('Extra request headers (e.g. auth for staging).'),
315
+ url: z.string().url().describe("Absolute http(s) URL."),
316
+ formFactor: z
317
+ .enum(["mobile", "desktop"])
318
+ .default("mobile")
319
+ .describe("Device emulation. Mobile is what Google uses for ranking."),
320
+ headers: z
321
+ .record(z.string(), z.string())
322
+ .optional()
323
+ .describe("Extra request headers (e.g. auth for staging)."),
142
324
  format,
143
325
  },
144
326
  annotations: { readOnlyHint: true, openWorldHint: true },
145
327
  }, async (input) => {
146
328
  try {
147
- const result = await runLighthouse(input.url, { formFactor: input.formFactor, headers: input.headers });
329
+ const result = await runLighthouse(input.url, {
330
+ formFactor: input.formFactor,
331
+ headers: input.headers,
332
+ });
148
333
  const findings = performanceFindings(result);
149
334
  const payload = { ...result, findings };
150
- const text = input.format === 'markdown' ? lighthouseMarkdown(payload) : JSON.stringify(payload, null, 2);
151
- return { content: [{ type: 'text', text }], structuredContent: payload };
335
+ const text = input.format === "markdown"
336
+ ? lighthouseMarkdown(payload)
337
+ : JSON.stringify(payload, null, 2);
338
+ return {
339
+ content: [{ type: "text", text }],
340
+ structuredContent: payload,
341
+ };
152
342
  }
153
- catch (err) {
154
- return fail(err);
343
+ catch (error) {
344
+ return fail(error);
155
345
  }
156
346
  });
157
- server.registerTool('seo_list_rules', {
158
- title: 'List SEO rules',
159
- description: 'List every rule this tool can report, with id, category, typical severity, what it checks and the generic fix. Filter by category or look up one rule id to understand a finding.',
347
+ server.registerTool("seo_list_rules", {
348
+ title: "List SEO rules",
349
+ description: "List every rule this tool can report, with id, category, typical severity, what it checks and the generic fix. Filter by category or look up one rule id to understand a finding.",
160
350
  inputSchema: {
161
- category: z.string().optional().describe('Filter by category (title, meta, headings, canonical, indexing, document, social, images, links, international, structured-data, content, keyword, response, rendering, performance, site).'),
162
- rule: z.string().optional().describe('Return only this rule id.'),
351
+ category: z
352
+ .string()
353
+ .optional()
354
+ .describe("Filter by category (title, meta, headings, canonical, indexing, document, social, images, links, international, structured-data, content, keyword, response, rendering, performance, site)."),
355
+ rule: z.string().optional().describe("Return only this rule id."),
163
356
  },
164
- annotations: { readOnlyHint: true, openWorldHint: false, idempotentHint: true },
165
- }, async (input) => {
166
- const rules = ALL_RULES.filter((r) => (!input.category || r.category === input.category) && (!input.rule || r.id === input.rule));
357
+ annotations: {
358
+ readOnlyHint: true,
359
+ openWorldHint: false,
360
+ idempotentHint: true,
361
+ },
362
+ }, (input) => {
363
+ const rules = ALL_RULES.filter((r) => (!input.category || r.category === input.category) &&
364
+ (!input.rule || r.id === input.rule));
167
365
  const payload = { count: rules.length, rules };
168
- return { content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }], structuredContent: payload };
366
+ return {
367
+ content: [
368
+ { type: "text", text: JSON.stringify(payload, null, 2) },
369
+ ],
370
+ structuredContent: payload,
371
+ };
169
372
  });
170
373
  return server;
171
- }
172
- function lighthouseMarkdown(payload) {
173
- const lines = [`# Lighthouse (${payload.formFactor}): ${payload.finalUrl}`, '', '| Metric | Value |', '| --- | --- |'];
174
- for (const [k, v] of Object.entries(payload.metrics)) {
175
- lines.push(`| ${k} | ${v === null ? '—' : k.endsWith('Ms') ? `${Math.round(v)} ms` : v} |`);
176
- }
177
- lines.push('', '## Opportunities', '');
178
- for (const o of payload.opportunities.slice(0, 10))
179
- lines.push(`- ${o.title}${o.savingsMs ? ` (~${Math.round(o.savingsMs)} ms)` : ''}${o.savingsBytes ? ` (~${Math.round(o.savingsBytes / 1024)} KiB)` : ''}`);
180
- lines.push('', '## Findings', '');
181
- for (const f of payload.findings)
182
- lines.push(`- **\`${f.rule}\`** ${f.message}`, ` - Fix: ${f.recommendation}`);
183
- return lines.join('\n');
184
- }
185
- export async function startMcpServer() {
374
+ };
375
+ export const startMcpServer = async () => {
186
376
  const server = createMcpServer();
187
377
  const transport = new StdioServerTransport();
188
378
  await server.connect(transport);
189
- }
379
+ };
190
380
  //# sourceMappingURL=mcp.js.map
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,MAAM,MAAM,GAAG,CAAC;KACb,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KAC1B,OAAO,CAAC,MAAM,CAAC;KACf,QAAQ,CACP,wFAAwF,CACzF,CAAC;AAEJ,MAAM,MAAM,GAAG,CAAC;KACb,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;KACzB,OAAO,CAAC,SAAS,CAAC;KAClB,QAAQ,CACP,kGAAkG,CACnG,CAAC;AAEJ,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,+FAA+F,CAChG;IACH,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CACP,0FAA0F,CAC3F;IACH,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,iFAAiF,CAClF;IACH,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,OAAO,CAAC;SACZ,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC5E,OAAO,EAAE,CAAC;SACP,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SAC9B,QAAQ,EAAE;SACV,QAAQ,CACP,+EAA+E,CAChF;IACH,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAOlB,EAAgB,EAAE,CAAC,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,WAAW,EAAE,KAAK,CAAC,WAAW;IAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;IAChC,KAAK,EAAE;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CACd,KAAY,EACZ,GAAwB,EACxB,GAAuB,EACvB,EAAE;IACF,MAAM,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE/D,MAAM,IAAI,GACR,GAAG,KAAK,UAAU;QAChB,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEtC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;QAC1C,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE;KACjC,CAAC;AACJ,CAAC,CAAC;AAEF,4GAA4G;AAC5G,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,4BAA4B,OAAO,EAAE,EAAE;SACvE;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAoB,EAAU,EAAE;IAChE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,OAAoD,EAC5C,EAAE;IACV,MAAM,KAAK,GAAG;QACZ,iBAAiB,OAAO,CAAC,UAAU,MAAM,OAAO,CAAC,QAAQ,EAAE;QAC3D,EAAE;QACF,oBAAoB;QACpB,eAAe;KAChB,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/I,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CACR,SAAS,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,OAAO,EAAE,EAClC,YAAY,CAAC,CAAC,cAAc,EAAE,CAC/B,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAc,EAAE;IAC7C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,wBAAwB,KAAK,EAAE;QACtC,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EACT,2GAA2G;QAC7G,UAAU,EAAE,cAAc;QAC1B,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,wIAAwI;YACxI,qNAAqN;YACrN,6IAA6I;YAC7I,8IAA8I;YAC9I,kHAAkH;YAClH,+FAA+F;QACjG,WAAW,EAAE;YACX,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,CAAC,0CAA0C,CAAC;YACvD,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,CACP,kHAAkH,CACnH;YACH,MAAM,EAAE,CAAC;iBACN,OAAO,EAAE;iBACT,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CACP,sFAAsF,CACvF;YACH,UAAU,EAAE,CAAC;iBACV,OAAO,EAAE;iBACT,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CACP,4EAA4E,CAC7E;YACH,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;iBAC3B,OAAO,CAAC,QAAQ,CAAC;iBACjB,QAAQ,CAAC,8BAA8B,CAAC;YAC3C,GAAG,aAAa;SACjB;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC;YACH,MAAM,OAAO,GAAG;gBACd,GAAG,SAAS,CAAC,KAAK,CAAC;gBACnB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;YAEF,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;YAC5B,IAAI,KAAY,CAAC;YAEjB,iFAAiF;YACjF,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACxC,KAAK,GAAG,MAAM,SAAS,CACrB,IAAI,EACJ,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,EAC7D,OAAO,CACR,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,EAAE,CAAC;gBACf,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,0YAA0Y;YAC1Y,8KAA8K;YAC9K,6HAA6H;QAC/H,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACnE,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,yBAAyB,CAAC;YACtC,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,wCAAwC,CAAC;YACrD,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,oBAAoB,CAAC;YACjC,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,aAAa,EAAE,CAAC;iBACb,OAAO,EAAE;iBACT,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,iBAAiB,EAAE,CAAC;iBACjB,OAAO,EAAE;iBACT,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,kBAAkB,EAAE,CAAC;iBAClB,OAAO,EAAE;iBACT,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,wDAAwD,CAAC;YACrE,eAAe,EAAE,CAAC;iBACf,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CACP,4DAA4D,CAC7D;YACH,eAAe,EAAE,CAAC;iBACf,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CAAC,sDAAsD,CAAC;YACnE,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;iBACzB,OAAO,CAAC,SAAS,CAAC;iBAClB,QAAQ,CACP,+GAA+G,CAChH;YACH,GAAG,aAAa;SACjB;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACzD,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE;gBACvC,GAAG,SAAS,CAAC,KAAK,CAAC;gBACnB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;gBAC5C,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EACT,4SAA4S;YAC5S,iJAAiJ;QACnJ,WAAW,EAAE;YACX,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,QAAQ,CACP,yEAAyE,CAC1E;YACH,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,OAAO,CAAC,mBAAmB,CAAC;iBAC5B,QAAQ,CAAC,uCAAuC,CAAC;YACpD,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,OAAO,CAAC,GAAG,CAAC;iBACZ,QAAQ,CAAC,8BAA8B,CAAC;YAC3C,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;iBACzB,OAAO,CAAC,SAAS,CAAC;iBAClB,QAAQ,CACP,0EAA0E,CAC3E;YACH,GAAG,aAAa;SACjB;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC5C,GAAG,SAAS,CAAC,KAAK,CAAC;gBACnB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,qYAAqY;QACvY,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACvD,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;iBAC3B,OAAO,CAAC,QAAQ,CAAC;iBACjB,QAAQ,CACP,2DAA2D,CAC5D;YACH,OAAO,EAAE,CAAC;iBACP,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;iBAC9B,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,MAAM;SACP;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACzD,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC5C,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC;YAExC,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,UAAU;gBACzB,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAC7B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAEvC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;gBAC1C,iBAAiB,EAAE,OAAO;aAC3B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,mLAAmL;QACrL,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,6LAA6L,CAC9L;YACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SAClE;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC;YAClD,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,CACvC,CAAC;QAEF,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QAE/C,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAClE;YACD,iBAAiB,EAAE,OAAO;SAC3B,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAmB,EAAE;IACtD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1 @@
1
- /** Package version, read from package.json (one level above both src/ and dist/) so a release bumps one file. */
2
1
  export declare const VERSION: string;
package/dist/version.js CHANGED
@@ -1,4 +1,6 @@
1
- import { readFileSync } from 'node:fs';
1
+ import { readFileSync } from "node:fs";
2
2
  /** Package version, read from package.json (one level above both src/ and dist/) so a release bumps one file. */
3
- export const VERSION = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version;
3
+ // SAFETY: npm and pnpm refuse to pack or publish a package.json without a string version.
4
+ const manifest = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
5
+ export const VERSION = manifest.version;
4
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,iHAAiH;AACjH,MAAM,CAAC,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,iHAAiH;AACjH,0FAA0F;AAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAC5C,CAAC;AAEzB,MAAM,CAAC,MAAM,OAAO,GAAW,QAAQ,CAAC,OAAO,CAAC"}