{"_id":"seo","_rev":"80-d264c64ff3be8f95bed88e7f08f21d3d","name":"seo","dist-tags":{"latest":"0.2.41"},"versions":{"0.0.1":{"name":"seo","version":"0.0.1","author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.1","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"dist":{"shasum":"e75200013cdeb43772c34f0385596908cc16c47c","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.1.tgz"},"main":"index.js","_from":".","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"_npmVersion":"1.3.21","description":"A connect middleware that serves html snapshots to search engine bots","directories":{}},"0.0.2":{"name":"seo","version":"0.0.2","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.2","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"8d1872ce7bed5bf881fc1f78077e556ab57ea607","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.2.tgz","integrity":"sha512-J+RE9ZFb9d417NGJNV5USkcyK0oQOwLz9nZ1KlrDxv3PMh0QQer2KrzJ6tRuHp9KpypyaUmwgt9cSkMo4jUeDw==","signatures":[{"sig":"MEYCIQC8SbVDn/AwmGKyZJFBCeumO1W73gBVZoidqUP6BmciogIhAJsM8hQS7VDZm3CeYfugsToYzMSiNlajf+c7kmDBUdve","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"1.3.21","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"dependencies":{"q":"~1.0.1","mime":"~1.2.11","send":"~0.3.0","fresh":"~0.2.2","phantom":"~0.6.1","underscore":"~1.6.0","buffer-crc32":"~0.2.1","range-parser":"~1.0.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.3":{"name":"seo","version":"0.0.3","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.3","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"53f37815c635f7f8ee0376d2ee99d12128970121","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.3.tgz","integrity":"sha512-6o4512+paBFKcWWS1tKQZQP9ILapaZFqv9ZJ1RBVBne3YjmgSIPB4ciMSEKzybmz71PgJpbuWGvk11nbQLGVGA==","signatures":[{"sig":"MEUCIQDo+7lRbv7gD9MBVhscyDOE3V6eowsNdBqrPMx0dJ2vswIgcCoJ4qoywffPBt8wYyIvSORZEwECqr83P3KGyKsTlys=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"1.3.21","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.4":{"name":"seo","version":"0.0.4","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.4","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"53f9f73111d9a815b692029ed066df1900aa49c0","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.4.tgz","integrity":"sha512-qo+/cyneuZ3fB6nfp+yHhn9kJhhtpyx/Sz96hn9Evt55JJeJowOrd2TIk10FPvP7cy+zzcQbn+b2yQkMDOlV7Q==","signatures":[{"sig":"MEUCIFbFN+tusKDoyJ8Z/WsJwK+dCofjgFCNMIzIzRDMusY+AiEA/oOW+DJagtXCLrlTK2i1yqcdo/NxozU5iFCmk/Jeuv0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"1.3.21","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.5":{"name":"seo","version":"0.0.5","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.5","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"3818ae5ef44157b27a944a17ee3b45ff97cbbee2","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.5.tgz","integrity":"sha512-ArxwNZcyprMPchqOBz27HReTzbZlJYOz0xV8yXkGXFjPo5+VLr39nWbbWrdfhqwcYIwjTSkkAZCBcaBvqFjuew==","signatures":[{"sig":"MEUCIHrdDW7m8eIX5YE8kayQKJZJcMEm6oSJGNxxSVlgI7cWAiEAhBPPt+uQsJVuyzhKrRSyjeqkw4x3BLgyKtraYL5Fo1k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"1.3.21","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.6":{"name":"seo","version":"0.0.6","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.6","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"dd7b2c801d55755466a2ac207e0206d76e740acb","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.6.tgz","integrity":"sha512-jPRg7vl1pXYKlZwvVfqBgGV8MeJaAdZREeXvlamYe3j2fsTD/lnPZva6CUR+VEUrHRaZLxI+wUn9uRFAsPvgJQ==","signatures":[{"sig":"MEYCIQDV2rf9RU2y51/rljZqcVelg9M79Wozds0TXO0JIg4M8gIhANMoZDvAy2FyxPlVBDHG8tBUa10vbkSFNC5fApunjG8k","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"1.3.21","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.7":{"name":"seo","version":"0.0.7","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.7","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"505b53932dbc094a53a5205d341245260a577714","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.7.tgz","integrity":"sha512-d9qhRuX2uIn91ZdLH7dAVFxl6Gu8ted5xjx1luAfym4p0yUEzLI+bH6rWezySkAZH6eW7dqTLj2NbXj2mrUDuA==","signatures":[{"sig":"MEUCIQC8sNb4JEtKM7PzB2hmQ9O1/KTc/02oQGidGLo+czd5EAIgYib1x/Bqh6H/YY4OXRJyV6dId1swyKWK09FAttsxVP4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"1.3.21","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.8":{"name":"seo","version":"0.0.8","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.8","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"8a8661e576fdc00c99ee5caab118481b9bb85833","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.8.tgz","integrity":"sha512-6DLW5ksJzsAA3IruEGwZS5Vsc5lus0AhIB7E+EayPVMsrREYgWTtNqtL5Eljo2zZgvup5Z0IzNB3HWeI+TYOJQ==","signatures":[{"sig":"MEUCIQCGKqWFn3gpTavLwbbLQKDq1DI4spFXL5tK1w9Pj6aqawIgZ6+xDFS8expU/M/NS72B+KmusO+iSsOeYpJQslglMdU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"1.3.21","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.9":{"name":"seo","version":"0.0.9","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.9","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"aabfd78333fa5e78c61581ad0e9979ee8536f963","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.9.tgz","integrity":"sha512-etyvaM0ukFcBCQcmCgij/V9WRnd3PXLyFAHwgU5kJhVkkDvdrVn7zCpFzur6pub904aJ2+EjwphZHhlojRTNkA==","signatures":[{"sig":"MEUCIQD+yh+uGcp11pI8PRz027MUT311J6uB21to9s1hPUfIiwIgQqPCUk6VAhG/idH8JNR0j+cyjIOQJFCUinOJniUdjgU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"aabfd78333fa5e78c61581ad0e9979ee8536f963","gitHead":"71cdfafc3c657f9fdf2aa5ca59b3905bf196bc09","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"2.1.8","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"_nodeVersion":"0.10.28","dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.10":{"name":"seo","version":"0.0.10","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.10","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"288abfd9cc29c00f8a67d108728c4e91f79e749c","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.10.tgz","integrity":"sha512-p/E7aUabTR/zOugSkgnCt7SA3vKJuX9PsRqEW7RSzQegg69oeRe1tlRRDUzspwFXEfk8qH/f9rbUIqyNJX81cg==","signatures":[{"sig":"MEUCIQC6zsWLjehy2EsmxbYns97RdavneqyvAjhV46dza1epLAIgFVbpzZ6iWD9wosCUIEDm27YjFO699oDTQrChjiSy4wA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"288abfd9cc29c00f8a67d108728c4e91f79e749c","gitHead":"2e173c4246d5f5c2f451802dddf76162b5c523cb","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"2.1.8","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"_nodeVersion":"0.10.28","dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.11":{"name":"seo","version":"0.0.11","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.11","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"a3b0ebdbf3ff793ec3c4af86d801fa80327b2d8b","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.11.tgz","integrity":"sha512-uWY34im5Q9xyvuCNud1nauw2Ilf8k4FiMWmnXNb84IEFHAZGyRmF4+KQSzf6rQvKXHjK3mRRipVm202++7TkxA==","signatures":[{"sig":"MEYCIQDpWhzote1SOFP6G5sdTtO3iZuz/MGB6d5xWGkKPPIR/QIhAMJAmVCjCizwTYTkmPhPdzQNhtGRoJFGhY1dc3WcqZv6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"a3b0ebdbf3ff793ec3c4af86d801fa80327b2d8b","gitHead":"d82dd69ac07bf50461bd2b2b216dc044f4013d4e","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"2.1.8","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"_nodeVersion":"0.10.28","dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.12":{"name":"seo","version":"0.0.12","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.12","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"92739ed5c3bd4162a291a8fd88e80e909dab0412","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.12.tgz","integrity":"sha512-kuzHkKPrw4A0cww6SJCXdKqtkZ2+SKsXEk9JSknXZZmykB/ysU9J/zhl7I2FDxTMUSRrkX1W8LFy4HOroocEwQ==","signatures":[{"sig":"MEYCIQCngHp9a9VkEKGi5IzmA2bprzqEWq8BLAN5FVR6sSyw/gIhAKZpFpTvC+R6GZOz/UCH4xK8a+UNpF02YI+Tzf0AUL4z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"92739ed5c3bd4162a291a8fd88e80e909dab0412","gitHead":"e33c32179ad000597a62d78545666681e93c794a","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"2.1.8","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"_nodeVersion":"0.10.28","dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.13":{"name":"seo","version":"0.0.13","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.13","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"f05c275123ceb88eae72f8ad1945a2e1838ca0ea","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.13.tgz","integrity":"sha512-RC8UeQ0PRgKuc0hF9JwCjtz4NQ1WU352M37BaWN7SBOc8HdWc785huzBKZj9lshaFNXFfIMUVvlc02mgCIkm5Q==","signatures":[{"sig":"MEUCIQCfbfx54gHCX8QsE9GHnVtxc77HESynnAkAvHnI87rkkQIgA4Fzhq/MaVCVPmJblPs4tPLGbwwdLfMh5DFAFLcM9NE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"f05c275123ceb88eae72f8ad1945a2e1838ca0ea","gitHead":"923c7a364237993de786596ab9fb27f6e353d8f5","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"2.1.8","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"_nodeVersion":"0.10.28","dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.14":{"name":"seo","version":"0.0.14","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.14","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"f870ea2b18778b3b67fce320b2a034b4438af44a","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.14.tgz","integrity":"sha512-tKfbrFncYC6grRmuZvFEzotnfzddqGOZmbrYjmQnKAaeOOdI5RgdTk0+q9ygUkmFzq7FjKbu/2lZ4drGYnWbtw==","signatures":[{"sig":"MEUCIQCAwyQtJHhUiiD7tKDkWdr5RzABMqlEblGWhlPQoJf02wIgEzq192rpNDywXO1MZIIXHl6/gSxosvDesbhN9+D14Ak=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"f870ea2b18778b3b67fce320b2a034b4438af44a","gitHead":"9e8f3d9d15a6ea403dabb2a49bd2a5523e4b9b79","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"2.12.1","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"_nodeVersion":"0.12.4","dependencies":{"q":"~1.0.1","phantom":"~0.7.2","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.0.15":{"name":"seo","version":"0.0.15","keywords":["snapshot","phantom","search","bots"],"author":{"name":"Sascha Gehlich","email":"sascha@gehlich.us"},"license":"MIT","_id":"seo@0.0.15","maintainers":[{"name":"saschagehlich","email":"sascha@gehlich.us"}],"homepage":"https://github.com/saschagehlich/node-seo","bugs":{"url":"https://github.com/saschagehlich/node-seo/issues"},"dist":{"shasum":"356c41b73412fddce384aa30d9fcfe2be9d79582","tarball":"https://registry.npmjs.org/seo/-/seo-0.0.15.tgz","integrity":"sha512-oJS4VYfUuJCzcEalyOPRurG7buKv9MidzZ6uqsFzHvKaeJSyGW5EMXGryN/7pTcIJvT9VlEANFF60hVBJWaokA==","signatures":[{"sig":"MEYCIQCCR6JPm7A1sVp9dzBHHBVcv5aSggFMTWozV4ElaVMQ8gIhAPkVlaiUrBsgRqH/UmlYlOiYTUEbplqgByINNLYKqeND","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"356c41b73412fddce384aa30d9fcfe2be9d79582","gitHead":"01e22c272252f6d1c4ec875c4996cc67d3a422eb","scripts":{"test":"make test"},"_npmUser":{"name":"saschagehlich","email":"sascha@gehlich.us"},"repository":{"url":"git://github.com/saschagehlich/node-seo.git","type":"git"},"_npmVersion":"2.12.1","description":"A connect middleware that serves html snapshots of single page apps","directories":{},"_nodeVersion":"0.12.4","dependencies":{"q":"~1.0.1","phantom":"~0.6.1","underscore":"~1.6.0"},"devDependencies":{"mocha":"~1.18.2","should":"~3.3.1","express":"~4.1.2","supertest":"~0.12.0"}},"0.1.0":{"name":"seo","version":"0.1.0","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.1.0","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskills.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"71a9b0e0400040d6ec5caff10190d914124c710b","tarball":"https://registry.npmjs.org/seo/-/seo-0.1.0.tgz","fileCount":133,"integrity":"sha512-AosDalFLaaezbGL7Clm3qIMh2CT7NUwgoAYKksVXRQJp81qEoK4YsE4BxeAoi3bStflljuK1AiKNKp2uuwAOQg==","signatures":[{"sig":"MEQCIHpOarN38WIHR99VSy9yQcUa3DR9xNoh8I/WGgtlMjLkAiBWcunqQhAWAAsCCmVjO7NpwbcierS5ZTDBvRPYlmfwFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14299641},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"gitHead":"dcbb241643286fb1975556255ceb4e3e5ab482e3","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"SEO Skills CLI and MCP for finding technical problems, ranking fixes with search data, and running reports locally.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","better-sqlite3":"^12.11.1","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@types/better-sqlite3":"^7.6.13","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.1.0_1783797580548_0.2550897946858941","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"seo","version":"0.2.0","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.0","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"03622da03be5b42bf1b313c7907866aa9cbd2286","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.0.tgz","fileCount":80,"integrity":"sha512-U4Pd0PufIVCfFl4xNp+N7sBCvPUh78bVvgYzmNiCiolyGZxPuxyhlQcbNsJxTiN5TLLLnRJxxOdFXWu+1KT3HA==","signatures":[{"sig":"MEYCIQCVol3Ehol65Ow2PlmZDcRFuDNgfR8OPt9BKOh2lTdrewIhAL+dMgLm8XF7DafkfQHqIBzouirToFa9MhzXApPn8Hwj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14840779},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"9b63efa50da89f361986022190fa7b82ff7f94c9","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and GA4 data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","better-sqlite3":"^12.11.1","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@types/better-sqlite3":"^7.6.13","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.0_1783863833153_0.750071926758153","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"seo","version":"0.2.1","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.1","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"16251c00d515904fb846953f01d5ba1595b8f168","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.1.tgz","fileCount":80,"integrity":"sha512-QyjvRjQLt1C6N8itK65q7PQDauCKBH2ErRZcGPWkGBHgp7zNaJvQZRdYbGZr2NyMVJcuE7VK/OFm0BDaLHQH9Q==","signatures":[{"sig":"MEUCIHHUE8ZcUmost7rfeeiM1g5f01MDTNtppy+CpIbvYdlpAiEAxET1mW+nlRzGZfVc0h+curHq4oHQLH55ej53PZEUzAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14843225},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"7ee38ef45309061790aea7cda18132194d5535c1","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and GA4 data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","better-sqlite3":"^12.11.1","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@types/better-sqlite3":"^7.6.13","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.1_1783976884311_0.2912086914425551","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"seo","version":"0.2.2","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.2","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"0703845f93d8bdf98c81bce7982784942badc097","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.2.tgz","fileCount":81,"integrity":"sha512-zJcXUFy19ZU2aGDXLOrXIYhMDLf4q9lFuWI1UI52K1gN+MoH6IL/Phwb/YZ020aIg/lV+TRcE47FIKFIzCaOSw==","signatures":[{"sig":"MEUCIQCuB8KqxoNDV8xz9OUOr+nN171BqfwqieIwjPcVuQ0MYAIgazu0cikb9zQT+JvYLcU9ppGGLkBLXU5UFMgvjpdz3kc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15510863},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"a0de0bb90f1dd1ca884952ce71ee8519fdf9fef4","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and GA4 data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","better-sqlite3":"^12.11.1","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@types/better-sqlite3":"^7.6.13","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.2_1784039087883_0.6802500782746064","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"seo","version":"0.2.3","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.3","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"0d4c75966a0f888154fe69acb9911e7899a2d8ad","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.3.tgz","fileCount":81,"integrity":"sha512-BVDx+Y4X02LpSoOpDUWSMwks5o47cRrT48EP36JJDfcRODgp6rvl/UQQHu9PW/CaXCopm7Zbik2Cl8CK+AD5LQ==","signatures":[{"sig":"MEYCIQCAX43+9dA+oGHb8T3IEXkWwUAm1BKpT2HY8AW2lRXIJQIhAJbIz+ZJUnYF1Z1272S4ta09oAgGQc2WMdxXNtr/fd3J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15516503},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"33dd760e855a2c92bb1651511276e0c286666302","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and GA4 data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","better-sqlite3":"^12.11.1","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@types/better-sqlite3":"^7.6.13","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.3_1784045371828_0.7460936032571936","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"seo","version":"0.2.4","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.4","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"403ddc79cf8ef6fed93162cf334160d228182ed6","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.4.tgz","fileCount":81,"integrity":"sha512-pc7J7CqTsUNUZRt65pkeBFiYbjn9MxMEY3i2IeVgJQfOHVftuRJZOew2MTrzXUaZXgwWS1M2o5elkaBrE0RABA==","signatures":[{"sig":"MEUCIQC2rPBrOG/ckSLgzBs7IfZVsDNwv6LMdMOyJ4bl4nhABgIgCXeMyVKePNY3fL+x2fdCuP8Bwk4NXownyyu65pak478=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15552618},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"61829c0790d3ed682b1ee8027fe0d96759479aeb","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and GA4 data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","better-sqlite3":"^12.11.1","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@types/better-sqlite3":"^7.6.13","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.4_1784060298020_0.9920677579622272","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"seo","version":"0.2.5","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.5","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"506c221fd46be25c4fd83d3d7d6f7817ace3121b","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.5.tgz","fileCount":81,"integrity":"sha512-1VyChmxYNkyHgEgmmt2XEHi2JbwC8GafN2G/P/gLJ5wXUqmYFNiK7se/gZvWYn/7/OvWxNJcsYB+V3hT77ylYA==","signatures":[{"sig":"MEUCIBvl69c/brVUpHNRGm9MG4I9K7d+KbjPYOAqgy3g47+JAiEAhOaskFqSJtIX1pivFx7IxgB4xCJT3VtmyELpVx3YsWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15581892},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"2e36e86d523bf0a7422fbe61d1ca13342c36d8a6","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","better-sqlite3":"^12.11.1","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@types/better-sqlite3":"^7.6.13","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.5_1784115092646_0.30715090988161586","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"seo","version":"0.2.6","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.6","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"46c48855414a1e3692572035c70781a587670e4e","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.6.tgz","fileCount":81,"integrity":"sha512-j8M0fmbiu9So1ousc66yt0MBlZ+VTuCrH2LyrKtn4jn1k3nzjre9Cj8GmS4iRoPJjK1qmIuFDDhGQqua6DClUw==","signatures":[{"sig":"MEUCIQDQlJFmduE0Y5qAIbXyahhJzR2nymDpkMn53Kj0qGvcqwIgIlMmwJk4xkp0byeJ0r1x4ECBWXnmi1lafW0F862+M+M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15697404},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"fb7eccef2269dbf7d83a4b0e7174072472619456","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","better-sqlite3":"^12.11.1","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@types/better-sqlite3":"^7.6.13","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.6_1784211392787_0.788525981087115","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"seo","version":"0.2.7","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.7","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"5741a99d9a9b4c740cefb135211e8459b2adbfd1","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.7.tgz","fileCount":81,"integrity":"sha512-bODX9I3dLJ1CJ3Vt5rLMLLEjxFlrZSsX3AhsC4W+z0SnCFFkSqPO7FJlfMvHh7Qgb2Rf7zOf2sYGdRGbhT7dxw==","signatures":[{"sig":"MEQCIBNsbZwGOGhE7VfIrBK2PQpJKZOxHMVC4VfjnZC6iSneAiBx5YaIhORtg+kc1DtomVXrrm/VtMhfJTmVl+oB+uI74w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15715204},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"ee16eff61d990fb9e3e21a3fc8fb856e40c44626","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.7_1784220188931_0.8860435648471803","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"seo","version":"0.2.8","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.8","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"42a2deef603b84b1bee552242942ad48e6a1b98c","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.8.tgz","fileCount":81,"integrity":"sha512-fe5vept1oA8+ykaVZJNESZt8Jk/JViVIrMJbNJSQe/yTbAARKGmAq9Z5DCPU+cku9puh0WIo1nVggUp8s6HTfw==","signatures":[{"sig":"MEUCIB8heWZr+8UrlUu9Q+DeH9UiCGzOcE3+N0P7pckv+MkNAiEA/F/d//bRudriR2tNxCsmeIUeYbGW2uMBNLiZ5GQIJfQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15724938},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"c147f0de400b6327ef0f796118af2d51585e9038","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","user-agents":"2.1.117","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.8_1784222052352_0.15327615958538976","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"seo","version":"0.2.9","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.9","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"40abf08efa687bc799f0eb99dbf3570032c96eeb","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.9.tgz","fileCount":81,"integrity":"sha512-mz3xESKcZSJZtnvaoc61JPbn6iJkhxmbu4+tATkzb3MHtxDkFU8XpUYBj4VEHMmeiXgReb1tmm4JJf708u1l3A==","signatures":[{"sig":"MEYCIQCJYOecvBktPy7Zlkm/6RNe4oj4yiQlr1PfDcngBIxCDQIhAMNgRTC7U40SUeyTnUiEVQgLYf+etlK4EMpyGbW7nBdt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16493469},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"af7eb3c18330246802adec6841429094a8919bf8","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.9_1784365477534_0.27382037991322794","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"seo","version":"0.2.10","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.10","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"f3c06956b5e716417bc85efddc22ce64ab84f42f","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.10.tgz","fileCount":81,"integrity":"sha512-IWQZl8fn5nol/fMELf2QnXCS5dOS3x3AQFJkU2CmyUBh4YSjvAcHFjbyyMbPrM+xyNIPDORwPEK2+maFem9F/w==","signatures":[{"sig":"MEUCICoF1YDcObW1uNOi9OSJs37I+QBJjwTDH0mr8pSHJTI5AiEAxv6DN3lZ2H06vC+HAB/8nO3uzcGAeBT37He3IuGkVgo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16545844},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"95dcf4b0dcb643aa4af32a65cff0f053c2e82e04","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.10_1784387841516_0.564162917563521","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"seo","version":"0.2.12","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.12","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"552c53542f4b1299939171b38f36c362cf519b36","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.12.tgz","fileCount":84,"integrity":"sha512-xGY6gsh8fYkrm7oxTNn1O0eImf6WvqmCRrOzFJ8sIZI5lEFmCjwhI03X3Yrmvc5FYplBzs25ag2X9nZsPpgtww==","signatures":[{"sig":"MEUCIQD0pY0anihwQGFQwcoh0AEmZbeBr2M2kMznQqd7a6+5DwIgJRk3U630wAdaGrHvxBE9vCdjHlCs82qPNwsIGbqcwqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17318414},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"42e7cd35e506655cf694948b7d83064f4f8e8cf1","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.12_1784450630442_0.1336770271895813","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"seo","version":"0.2.13","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.13","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"f0b859b2a2737cb65428381f6fc2bf0d2aeee32b","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.13.tgz","fileCount":84,"integrity":"sha512-T1Ei5MkIqbeZ+ZSt3lm7+sN37rtz7VVgRQ9YcZfQhXyvzIGJvBkWOpg809esAWiXmoD/a/HXSsHyWa0LRSBQhA==","signatures":[{"sig":"MEUCIQDgvRQD8srSKdngv665FBapP+CwLJWYw98iHahWSVsPHQIgKFz6QQctzqaW7vqIaYsVmHo5WzNtBZMJ2WE2BgMt7oA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17567106},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"365bc423b19c363e1c64e386863d795f03ac27b0","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.13_1784458317141_0.04103395752230066","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"seo","version":"0.2.14","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.14","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"755b3f1270a3c23696705c862845a70489f0b54a","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.14.tgz","fileCount":84,"integrity":"sha512-tAMlc0QmUeAsor68OMz9s4VJM9JJ6fKIscf27LPJip7dZ4fKFEXZCuXaQp+3LNJEXajQkxG/bYvH65VTUFrjMg==","signatures":[{"sig":"MEUCIQCHKTxbeQ9lndDghr0NqegjOo19M/7RiEisMOakrk55BAIgBg7ab69Hz+s0+wduIvxsrUWIrwxwUHX230c7darQPV0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17606532},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"4648f7b08ede3afee8681997407393fd05bc7de3","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.14_1784460100880_0.1658729881705454","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"seo","version":"0.2.15","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.15","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"0a83cb86df3ae9bcf5f068202f3102d3cf557bb8","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.15.tgz","fileCount":89,"integrity":"sha512-GpM35LjjQSdwkGaZdr0uRMxlnTZON7Tdd5rwNQ1i8pMRntk6qer4DNwsdozNWpD7v4RHaPmlV9XZXXBMOBoX9Q==","signatures":[{"sig":"MEYCIQDqTbsaXphspXyKGckRSuGpZ40ODz3/HPzvYPQcLO8pkAIhAODCGH5qnJKm7N3ZSqe0h3AV4thhndkn2n+CNmKGJBvE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19324035},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"4c90fd55eeaee3b458dd635f4c75cca3679afd42","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.15_1784651350413_0.6278683249401067","host":"s3://npm-registry-packages-npm-production"}},"0.2.16":{"name":"seo","version":"0.2.16","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.16","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"77618ba63d988f6c9f7d7279bb3d0f5491c52c7b","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.16.tgz","fileCount":90,"integrity":"sha512-feimOPtK34M1p58mHReAjNIuxihpRvwUCGWS1s6E1VkHonnWfV0ABI1Yr4H2YCo3RPtGSrmMu+VKQ3CZKszelQ==","signatures":[{"sig":"MEQCIEKq1+AZBXRSsNfu+H9H0MMQLUlnBUtFBRZgdBEm9ei3AiAp61Dsqo/57OeQnhKMlLKyT5sKeWcGNSKBWQgytVPXYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19667799},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"1aa2d04b83f62a387f2ab122a669f9e30679d320","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.16_1784661760038_0.2556292792343222","host":"s3://npm-registry-packages-npm-production"}},"0.2.17":{"name":"seo","version":"0.2.17","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.17","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"463a98fc914cfc009fbb9751dc901cae9c4a3e2f","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.17.tgz","fileCount":91,"integrity":"sha512-N4vLgA115P1oU9JtSub1axLerK/mf1hsoJRyJ/fiyNAZ1N7JEIsMLROCK9UvtYriFggmO1thx/bkkiNetNEJuQ==","signatures":[{"sig":"MEQCIEINW+RE0eQsu/g8+uNsTWn5b2xOcCLnY0l9hkaS65j8AiBAasG3nFie8UGY7im8VpMWOyJUPGSHrVrxEJc4V8l7Dw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20171151},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"828b10474867440424733247cf68b1b813f62335","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.7.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.0","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^7.2.0","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.4","tsdown":"^0.22.4","typescript":"^6.0.3","@biomejs/biome":"^2.5.3","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.17_1784668180001_0.05176827263669015","host":"s3://npm-registry-packages-npm-production"}},"0.2.18":{"name":"seo","version":"0.2.18","keywords":["seo","search-console","google-analytics","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.18","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"b5b937f2c01723e203945e5898d4899844a50245","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.18.tgz","fileCount":91,"integrity":"sha512-VxpxO397FQBHXpu1++QxuS0NwxXlj2N3ZWyrYcfEMWzYyiE6bfgVtxyuSqxW7klqGaCld/SbaSHhSkTJgeI3sw==","signatures":[{"sig":"MEUCIFq9HyRRHHVpK5ExDaDSJg4Nd/PhG0P9IYr7mLdCYnqhAiEArcM/oplkT5RGwrWIPDjw+HgiCQPGLv6L93UQJcuUAd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20171342},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"b34f0037fe1e1ebaf464df72e23dc5af8937f379","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The only SEO skill your agent needs. 50+ SEO audit tools through a local CLI and MCP server, using your own crawl, Search Console, and Google Analytics data.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.18_1784669949292_0.10458797121855112","host":"s3://npm-registry-packages-npm-production"}},"0.2.19":{"name":"seo","version":"0.2.19","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.19","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"8014116ec49e46198be1e76c74e7ccdb4c9903cf","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.19.tgz","fileCount":92,"integrity":"sha512-wRwLM6yK395IsLRWn/Fb0V8uy14l9DTj23r4fsGdrOq1c4yzDdGZ1nczVW4JLyC0eRSykSX08TgKlckXuyTVEQ==","signatures":[{"sig":"MEUCIQDZRWUMsUZlDJmdYdaWp34CnsleOh1+HKehEjWvq9QKcQIgEjhoEtC2zsfEmQS9xIskuOjN9XQ/+3v6RCgIBHQEkQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21001919},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"7a2bde536ca7627fc7a91590ff659c2e15e4635a","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.19_1784702862086_0.40694453609732295","host":"s3://npm-registry-packages-npm-production"}},"0.2.20":{"name":"seo","version":"0.2.20","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.20","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"7a0b5f6e3c0268ba62da066e207329878c33113d","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.20.tgz","fileCount":92,"integrity":"sha512-ZzGRwCxcG2izZNJc8d1eP92P+lezAL8h1CWhpQr9ZEwtxH/qI0jZ2LatqGsJRjD8gkFB/MSFhQa5PiXncFtVBA==","signatures":[{"sig":"MEUCIQD8xx0XY29vT4ZvhVOz5vObjowBEe/Su9tejLeBU2NTpwIgKbRVvfbluQTduM01VLxgIhJ5jFd3bLRwlp77kGbKmN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21018039},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"86396f8054ed3bb2e6c04674d6934f79b35d5fe1","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.20_1784704102422_0.15474657293488936","host":"s3://npm-registry-packages-npm-production"}},"0.2.21":{"name":"seo","version":"0.2.21","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.21","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"d243e04fac8e78f941d01b9022d59b24824d5fc5","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.21.tgz","fileCount":92,"integrity":"sha512-d8o9UlTWCFGxdN2WrUTioZ8wjTwWfN81/RtkTBhR9GsrifnsEpmf8Xiuzhu+yATxEsOgl3gAy5bZB7NsR21JHQ==","signatures":[{"sig":"MEUCIHIi47jIgUspqUiQnZYiKPwl+BMbrDnbrJr/waOz15eIAiEAikT05GeJI2sYpL8X91W8QzZNUsVfjeJlv0BZmPL6NpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21418723},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"fd318a738535187d46fce8c5731aff942d63a6d3","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.21_1784710889148_0.9463524177414588","host":"s3://npm-registry-packages-npm-production"}},"0.2.22":{"name":"seo","version":"0.2.22","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.22","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"b064b5138ef7df5ea4371d04f6004410ae2a3c61","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.22.tgz","fileCount":93,"integrity":"sha512-/CjAZijwGwt2sgRuhO6h6mlha1LkY00gRbQ4Gdi+8lZySK/n9vBunurWQ69/2ezUeFLbLNMyjv68ZPUULb8YyA==","signatures":[{"sig":"MEUCICoFCeUZhMQAXPsNVl+jfOTl7lN2T8zIiM20QUMGXLFvAiEAjcfzhiEon+FZ+yk2Q9K4z1v28f7wbI/i2SCV3lOM5YI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21627461},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"bd208583cac816be6d4b9685c0189d1f4bc3b703","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.22_1784719243462_0.8786175997304277","host":"s3://npm-registry-packages-npm-production"}},"0.2.23":{"name":"seo","version":"0.2.23","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.23","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"c4c9501f33dbfba214ef7406a1051a644cd807e7","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.23.tgz","fileCount":94,"integrity":"sha512-HChPRbJHw7Bn4GUKltv23RA95mtbxCkq6Z8Zn8wdqPFcVyUms3wi1Ccv/bZ3kq2AWZwR6XVxXVXh1L8fP34vxA==","signatures":[{"sig":"MEQCIBAgbG5HKuLLdZWiriWnR143QmRenUCDwQyjZJOM7AA4AiA6Sy2JTtNK9jRAFGlqiFq8XRcm/RKG5Mx4GV09pa0gVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24231813},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"0d8b9d94a54fc3f2dd707844e33d23c3221e957f","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.23_1784726701317_0.6404748405788234","host":"s3://npm-registry-packages-npm-production"}},"0.2.24":{"name":"seo","version":"0.2.24","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.24","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"befa509261da11eb4818174a194156d29c8ce5c4","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.24.tgz","fileCount":95,"integrity":"sha512-5POHBv6QfN9WZb9Ml8b5H6r6xptYUbs9h6PDvKz9I+0BDNxYRpIcZQ5+lo3EHDJsVkF75xQQYcc6DPWidgHoNg==","signatures":[{"sig":"MEUCIQCIMi4bzLclwpWIgmpjzHkH9E1Ug8tyZK0pQUDzWZ3uaQIgB6bx3c3IxdUO1dDzwq9wDpgoozjC8jR/e36khN6bvxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24736070},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"c5edded48bf613eb62a22c8f0529aa1b45f1539c","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.24_1784732614867_0.7708584802727496","host":"s3://npm-registry-packages-npm-production"}},"0.2.25":{"name":"seo","version":"0.2.25","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.25","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"1ec8e5b0fbf52e074579852ffbd9b733b3c69725","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.25.tgz","fileCount":95,"integrity":"sha512-fngSXRCjfTW+9dwKA19dcj1lqBViobq8N9KShGk1XGe7VZyFSdy0no/eBf7btdpLB8fKD5xpHYAnj2lV/a4Qsw==","signatures":[{"sig":"MEYCIQDdsN8SqGDmjKykGlGZAUDzLlng+DMiwMCCjIv+1ZdYigIhANMfTQnItT7I20111ibuTNK9JdTKRmwbvP3gYfVAR4Rp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25115124},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"6ae9e8e97604684e743761ad1dbfd82c08410974","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.25_1784743852588_0.5768480268992016","host":"s3://npm-registry-packages-npm-production"}},"0.2.26":{"name":"seo","version":"0.2.26","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.26","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"f2bc780e278f2b0a3c0546abc4459a827e7e5519","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.26.tgz","fileCount":95,"integrity":"sha512-svuwBU1VCKreuHidZjmzsrgaz2NHrpJzWFCdKGJaJKjsfahJ2EZeo+kM+9rKMDAkQWsIHWrWkK+xri1VUGqS8g==","signatures":[{"sig":"MEUCIQCN++F5KOhPkbuctjXYNLlirhjN56T9iqyK+F8HOATHlQIgDO9cKPOEA9ST31y67jjkqcj3Htmu83VqMJpJfkh7zR0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25300823},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"e6cdc784aae9483cbc555652c2cd1bbc00060bb2","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.26_1784753159598_0.16228124139195743","host":"s3://npm-registry-packages-npm-production"}},"0.2.27":{"name":"seo","version":"0.2.27","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.27","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"a11fa291d8bd3e254ab988f74bcec89c29c95495","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.27.tgz","fileCount":95,"integrity":"sha512-ARmS2uJdTDIzk69JDy/AE1Va3ebk1SZi3YXm6FOgRKOeutoYxuO2he/17zW3lIJ3huXTm8ghmkiwkJC3u03nXQ==","signatures":[{"sig":"MEYCIQDdfWn8Vf4ANpob+lt3dBuXTfI2dIgOd4IqahmRw4/xLgIhANKvd34SjYRFDisRkJmUQaykYqVTMuK01kzM0CTCTYIO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25323632},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"9416f76e3c80ed227d2152aeb995362246518db4","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && pnpm run skills:validate","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.8.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.27_1784814991941_0.4320207390746227","host":"s3://npm-registry-packages-npm-production"}},"0.2.28":{"name":"seo","version":"0.2.28","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.28","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"743f110a91f7538b398af0b7ee50d3c06837c98a","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.28.tgz","fileCount":98,"integrity":"sha512-7+oLx4N5RdfeJR5rtBljB0wCWaq9R1ib2KYlXRez+u0UZe95m8j3mT4Bw8gQhcjVfxAD1GPxJg5pWxh39oGnWQ==","signatures":[{"sig":"MEYCIQDpX1g23UEGrE/2c0J2C+35qDzxyQ2bSyX3TwQS4KVenAIhAMddmRNRgX9jH/HXmDtIaEUuHUEveWJkj1su3ORsvMlW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27779257},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"2779d5e814fb624f7fd476936f6e97b3fbf2eeb7","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs scripts/semrush-live-acceptance.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs scripts/semrush-live-acceptance.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs && pnpm run skills:validate","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.28_1785832338331_0.34180284377425196","host":"s3://npm-registry-packages-npm-production"}},"0.2.29":{"name":"seo","version":"0.2.29","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.29","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"401f476fd186380d59a9a91654ea021e75a4b4e7","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.29.tgz","fileCount":98,"integrity":"sha512-NgEdvHzPlbqUISIQU1g6EBPqncKqDy1sy8v6opTjNrJpVg8WoHht9Q9iBXy/82hruJ1Ldlk4wOQlPYXufA/NlA==","signatures":[{"sig":"MEUCIA02QXKEdvoRIIe7Tn84k/Yy9cTYqAGVNsV789PkR40gAiEAz5lv04nobNEFfbXAjKu3syjup8yVpaYzRvD0UaFoqB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27797745},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"095306121039ed6194c466649c277f5f4e945bc2","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs scripts/semrush-live-acceptance.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs && pnpm run skills:validate","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs scripts/semrush-live-acceptance.test.mjs && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs && pnpm run skills:validate","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.29_1785848322605_0.8454600158285739","host":"s3://npm-registry-packages-npm-production"}},"0.2.30":{"name":"seo","version":"0.2.30","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.30","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"693a7f0153d9858669f9b418e827f878a9bb27fc","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.30.tgz","fileCount":98,"integrity":"sha512-LF5rAzMHhU5ijq1kletXVxgjDci+cL2kdhpk5Wz9JygQlEAME+zA4yb7wHpJ5BoROzGEsHz+U/BN3OLPNy8r4g==","signatures":[{"sig":"MEUCIQCGMVbn9Eg8bN3ZROAaAc5vhuXW0uIcfY85Nw9C/eowowIgUvM/emdiMfU+DGDuLaSfGeOblIeRHlB2wdJwbVGV1ww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27857711},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"ed53545cc2009c6e3484e948e9c1e63cd8cc758b","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.30_1786294352874_0.9827972422282301","host":"s3://npm-registry-packages-npm-production"}},"0.2.31":{"name":"seo","version":"0.2.31","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.31","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"ba52da1bd45fea59abd5c4882ae7244d93cd8541","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.31.tgz","fileCount":98,"integrity":"sha512-ahwedQhEqXcc9o/cE5SWhUqeuSp5WhNS4+kbDfqJE7IvJQ4rFjyprSMUCRb0e+wkX53a5Mqs5XKK9YpkYOADzA==","signatures":[{"sig":"MEQCIBVOzoBOTzuR8ZGeZNoM1sbBD+M0I1KGtZ4DAqehzCsEAiAX4vj7k/NDgOaVa4TO8thfSOrxtU40RxCyhKchbhzNpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27930402},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"7cca986c3233b63aa637c0a583ec23f5a909cc1a","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.31_1786303150711_0.31427502293355936","host":"s3://npm-registry-packages-npm-production"}},"0.2.32":{"name":"seo","version":"0.2.32","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.32","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"7c3b6c6259d5992b23edd80607c10bf7019bec8f","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.32.tgz","fileCount":98,"integrity":"sha512-9bRywGLJ5mxTBvKtLcCwq5cwybGsyw5vdSQmK0MvULDzppam5JI/7Ttdp3UcAp4bTQXo2hZYXZGLB4ocydHoFw==","signatures":[{"sig":"MEQCIHaLGykIldVkL4T+JBTjvsJjAsNOmsNn0ss4bIuYwhqpAiBW2ZaD6g2LvXF+Ypy/yhmC6jts2UdOGsphD9iWW6fKpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28180165},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"caf969f7383d6a73c741d820f3e91505340156ce","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.32_1786452072823_0.4638139557910512","host":"s3://npm-registry-packages-npm-production"}},"0.2.33":{"name":"seo","version":"0.2.33","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.33","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"1333dfdad5aa69295c395acd33297b7eca3845d1","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.33.tgz","fileCount":98,"integrity":"sha512-RbSjFuV+CKlBkbkrLlsJBrisVs7Ax5yOCoiwb5SXrQZqr30pI8IIoe1xGjKK/e2ZZspTEFvFYZzkzu2spsOiyQ==","signatures":[{"sig":"MEUCIQCIBV//zLqq2HUmRqd7Z8mhK3GYStOQuVthPgDrFhit/wIgVYSKwDWrBexJhyi8Hj9ufKeBfleBxUR0NYxAdQl3QI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.33","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28621146},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json"},"funding":"https://github.com/iannuttall/seo","gitHead":"3cf6e940204af923349bd866a89c312aa04a728b","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/clicky-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.33_1786524891427_0.5339497744241533","host":"s3://npm-registry-packages-npm-production"}},"0.2.34":{"name":"seo","version":"0.2.34","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.34","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"191b00c8283ed20100fbb3ab9487910755e94f47","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.34.tgz","fileCount":101,"integrity":"sha512-v+aJJWp+ek90oMUZl4CTLNvJdLiUO6QmFQ77iSP206fkXKPJpEPge7YZaIFW8iaRZNuGdJpfqyi9N7Qys/e8oA==","signatures":[{"sig":"MEQCIDz6IWZJPlNwM/ajCFCrrD4JHXR6LxNad8wdoOFhSNpEAiA6dcmrn1IXEUlGEMAnQrQp9KAT0Fd4n3ShsLdJHeUONA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.34","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28985037},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json","./provider-sdk":{"types":"./dist/provider-sdk.d.ts","import":"./dist/provider-sdk.js"}},"funding":"https://github.com/iannuttall/seo","gitHead":"449641f413bae6a62165d50f71ebd48d1b503a75","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/provider-packages.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.34_1786651436446_0.00226411224362999","host":"s3://npm-registry-packages-npm-production"}},"0.2.35":{"name":"seo","version":"0.2.35","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.35","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"749a1fbe3764c6693ea21540cf695b17d1427a00","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.35.tgz","fileCount":101,"integrity":"sha512-hAsUeNa0+h+ASYXk5r7JP7K28Ufg7FYypeo+EVKLhyJjJrLGOql9N6PJWGoryB9qdZE0aKLbLUoOGNRS08DeQg==","signatures":[{"sig":"MEUCIQCtJyvkWNn5WTFv+lQKNYYvOlx8UC3rZvEdoiazpBF2hAIgJlo5Aax2gnUssAobfwlGNuWX585tzc5c/WkspfjDJmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.35","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29083350},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json","./provider-sdk":{"types":"./dist/provider-sdk.d.ts","import":"./dist/provider-sdk.js"}},"funding":"https://github.com/iannuttall/seo","gitHead":"725694db2f280891a019a0440ee8145a1c02346b","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/provider-packages.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.35_1786894616491_0.12995692442112472","host":"s3://npm-registry-packages-npm-production"}},"0.2.36":{"name":"seo","version":"0.2.36","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.36","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"dc2659e476f12ba1eaa612f4587cc6bcbaf81c8f","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.36.tgz","fileCount":101,"integrity":"sha512-xjLbMiP5FzZANch/WPy37NtnTZpl+CwiXLqkc16HJc/R4s5+t88gYyVQJlC9i64mgz+Q2SOlTrq1hXRoCRiGew==","signatures":[{"sig":"MEUCIFTxSbB6kCciOOsCqxj1kbM9iWwmOqT/UMaqDsm2d1vHAiEA2P/OonrpbrcZjkgB2dJoa6Id5rX5HDYTkkiOEif+xso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.36","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29231673},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json","./provider-sdk":{"types":"./dist/provider-sdk.d.ts","import":"./dist/provider-sdk.js"}},"funding":"https://github.com/iannuttall/seo","gitHead":"a24692142d76aae3db145143a2c45843e7857a7a","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/provider-packages.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.36_1786958263818_0.20310890525502012","host":"s3://npm-registry-packages-npm-production"}},"0.2.37":{"name":"seo","version":"0.2.37","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.37","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"149900119a79c95a295302a5baf80a49ef35e99e","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.37.tgz","fileCount":101,"integrity":"sha512-RGObIaIQ/nQotXxYMeqKUzE5nF3Zia8rZ2IfMAAaQAFqGmSL7SRljxiGTndW4lnr5us67dNgCkS3iynVRkpaXA==","signatures":[{"sig":"MEUCIQCAAVcrODZ9vgW620t3wNc1Mgc8oXmNzmwjf6zAPAXw9wIgBl3oXSloiKVjx2mzVX7x9I1nH4390gkHtCf1pvB1XVY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.37","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29231342},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json","./provider-sdk":{"types":"./dist/provider-sdk.d.ts","import":"./dist/provider-sdk.js"}},"funding":"https://github.com/iannuttall/seo","gitHead":"ec80712a6b363409c8deddad650413eb9b13d52f","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/provider-packages.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.37_1787054501039_0.9816888640747539","host":"s3://npm-registry-packages-npm-production"}},"0.2.38":{"name":"seo","version":"0.2.38","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.38","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"9556d80b85408969a0fe2851def045af34064330","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.38.tgz","fileCount":101,"integrity":"sha512-mdvEcglhnywWnEezoRJvmqn6bMHBM2Pkcgy1IYSc1N94skSE8A0mfKTOmsXqqU069wHJhre917uHdzhFyejz5g==","signatures":[{"sig":"MEYCIQCdSXN9ApB7sNtbS7AXIHypoIotoNDJXV5Q4WX3+0FoRgIhAK0JUNuKztq2y+1Vp4ZNqDQljVyW/j+dHeszZI3b90dI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.38","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29231705},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json","./provider-sdk":{"types":"./dist/provider-sdk.d.ts","import":"./dist/provider-sdk.js"}},"funding":"https://github.com/iannuttall/seo","gitHead":"9bca598fa2f8cb1a179c4d1f67d3a2d3c4854375","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/provider-packages.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.38_1787575180734_0.7941540752433338","host":"s3://npm-registry-packages-npm-production"}},"0.2.39":{"name":"seo","version":"0.2.39","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.39","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"312c275f524fdd59bef9fa069f61552a024afa8f","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.39.tgz","fileCount":101,"integrity":"sha512-zmzNT+qFPtI+LW+YiIfX6kFIXy043zdC9fJ1alN8QcjSydPud3jcQsDB7lkgmnVONb1LazVslLTMVYgjoSTazQ==","signatures":[{"sig":"MEQCIHPZc0+vKPDyM/agxZB0u5aXlQFYuYxZ2PI3L+6wb147AiBALw11gUstqMvnblSZNdsYDE0LcJE3HjUcSRwLmeMiVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.39","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29443352},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json","./provider-sdk":{"types":"./dist/provider-sdk.d.ts","import":"./dist/provider-sdk.js"}},"funding":"https://github.com/iannuttall/seo","gitHead":"966611e2b768853fa64007a84981b9b0f92fd6e1","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/provider-packages.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.39_1788164963585_0.3490260339105504","host":"s3://npm-registry-packages-npm-production"}},"0.2.40":{"name":"seo","version":"0.2.40","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","_id":"seo@0.2.40","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"homepage":"https://seoskill.dev","bugs":{"url":"https://github.com/iannuttall/seo/issues"},"bin":{"seo":"dist/cli.js"},"dist":{"shasum":"a723b819082a7ff745752ba28e6c278db48d6816","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.40.tgz","fileCount":101,"integrity":"sha512-hTJw/keONLFZEv+prEwGh3FhbnJ9ARD6rtHQYBKxPBnJXxZaFnGxkyjTC1IUmnU0lGhYzutdVL62PFwIFpdzMQ==","signatures":[{"sig":"MEYCIQC2GIfZcQl5fWL1sc+UZdvxcWGezYUqRqBT56NbwK8RWwIhAM1KLWCANgzXDdsrXCPGTRVQmSmguPCKbpG8tO6MSJun","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.40","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29450076},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json","./provider-sdk":{"types":"./dist/provider-sdk.d.ts","import":"./dist/provider-sdk.js"}},"funding":"https://github.com/iannuttall/seo","gitHead":"52f10012021131c2405cddfb976d583a6af3b490","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/provider-packages.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/seo_0.2.40_1788182222974_0.5956533246737363","host":"s3://npm-registry-packages-npm-production"}},"0.2.41":{"_id":"seo@0.2.41","bin":{"seo":"dist/cli.js"},"bugs":{"url":"https://github.com/iannuttall/seo/issues"},"dist":{"shasum":"1c64dc9650a1265231b6f865af73c87fcaf391b0","tarball":"https://registry.npmjs.org/seo/-/seo-0.2.41.tgz","fileCount":101,"integrity":"sha512-soDvp140Y+RKU/Rf2X4E2evQg6UlMMv8RvUSaJL2f8DlId/YZpvlx7MgZa1mym7F2Bu5FrCE87JPzPDmj4JZug==","signatures":[{"sig":"MEUCIFJlvFUN0zCar7XMZwlOtb16zJTglIm9sZm3rJR3fYh/AiEAmFh9z+sv6n7a6x/LXSog3UQdADqnY8LWFEcuTCiYOOM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGX+SDG6qmaaxbp7CuIs6id5YzcjdL1ei3v7PBTU0zwuAiBrJs7QoBOA+/5/2NNVO0qv4UT2oBA7hQFjmV7msuEPmQ=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/seo@0.2.41","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29606221},"main":"./dist/index.js","name":"seo","type":"module","types":"./dist/index.d.ts","author":{"name":"Ian Nuttall"},"module":"./dist/index.js","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./package.json":"./package.json","./provider-sdk":{"types":"./dist/provider-sdk.d.ts","import":"./dist/provider-sdk.js"}},"funding":"https://github.com/iannuttall/seo","gitHead":"5b794fe9c8addbc227c49262bb6ac79ad8429452","license":"Apache-2.0","scripts":{"dev":"turbo run dev","lint":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate && turbo run lint","test":"turbo run test && pnpm run build:package && pnpm run test:contracts:built && pnpm run test:resources:built","build":"turbo run build && pnpm run build:package","clean":"turbo run clean && rm -rf dist","prepack":"pnpm run skills:validate && pnpm run build:package && node --test scripts/package.test.mjs","lint:fix":"biome check . --write","build:web":"pnpm --filter @seo/web... build","loc:audit":"node scripts/loc-audit.mjs","typecheck":"turbo run typecheck","deploy:web":"pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy","pack:check":"pnpm pack --dry-run","test:built":"turbo run test && pnpm run test:contracts:built && pnpm run test:resources:built","lint:static":"biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate","build:package":"tsdown --config tsdown.config.ts","hooks:install":"node scripts/install-git-hooks.mjs","security:audit":"pnpm audit --audit-level low","security:check":"pnpm run security:audit && pnpm run security:secrets","test:resources":"pnpm run build:package && pnpm run test:resources:built","skills:validate":"node scripts/validate-skills.mjs","security:secrets":"node scripts/security-secrets.mjs","secrets:web:check":"pnpm --filter @seo/web secrets:check","test:semrush-live":"pnpm run build:package && node scripts/semrush-live-acceptance.mjs","deploy:web:dry-run":"pnpm --filter @seo/web exec wrangler deploy --dry-run","secrets:web:publish":"pnpm --filter @seo/web secrets:publish","test:rank-resources":"pnpm run build:package && node scripts/rank-tracking-resource-harness.mjs","test:cli-shard:built":"node scripts/run-cli-test-shard.mjs","test:contracts:built":"node --test scripts/package.test.mjs scripts/provider-packages.test.mjs scripts/dogfood-summary.test.mjs scripts/git-hooks.test.mjs scripts/run-cli-test-shard.test.mjs scripts/semrush-live-acceptance.test.mjs && pnpm run skills:validate","test:package-install":"pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs","test:resources:built":"node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/pseo-resource-harness.mjs && node scripts/competitive-opportunities-resource-harness.mjs && node scripts/indexnow-resource-harness.mjs && node scripts/bing-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs && node scripts/server-log-resource-harness.mjs","secrets:web:check-local":"pnpm --filter @seo/web secrets:check-local","auth:inject-shared-client":"node scripts/inject-shared-oauth-client.mjs","test:package-install:built":"node --test scripts/installed-package.test.mjs"},"version":"0.2.41","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60af2f14-7ea6-4634-816a-7c093a768a4d"}},"homepage":"https://seoskill.dev","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"_npmVersion":"11.10.0","description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","directories":{},"maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.4.3","open":"^11.0.0","pino":"^10.3.1","yaml":"^2.9.0","citty":"^0.2.2","debug":"^4.4.3","libsql":"^0.5.29","undici":"^8.9.0","consola":"^3.4.2","p-queue":"^9.3.1","p-retry":"^8.0.0","defuddle":"^0.19.1","linkedom":"^0.18.13","cli-table3":"^0.6.5","lighthouse":"13.4.1","picocolors":"^1.1.1","schema-dts":"^2.0.0","@types/node":"^22.20.1","pino-pretty":"^13.1.3","jsonc-parser":"^3.3.1","string-width":"^8.2.2","robots-parser":"^3.0.1","@clack/prompts":"^1.7.0","playwright-core":"1.61.1","proper-lockfile":"^4.1.2","update-notifier":"^7.3.1","@napi-rs/keyring":"^1.3.0","@mozilla/readability":"^0.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.11.0","devDependencies":{"turbo":"^2.10.5","tsdown":"^0.22.12","typescript":"^6.0.3","@biomejs/biome":"^2.5.4","@changesets/cli":"^2.31.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/seo_0.2.41_1790523083470_0.49936196573010805"}}},"time":{"created":"2014-02-17T18:34:08.218Z","modified":"2026-09-27T15:31:24.047Z","0.0.1":"2014-02-17T18:34:08.218Z","0.0.2":"2014-05-09T13:13:43.916Z","0.0.3":"2014-05-09T13:20:21.530Z","0.0.4":"2014-05-27T14:28:24.278Z","0.0.5":"2014-05-27T20:00:10.147Z","0.0.6":"2014-06-04T13:55:26.319Z","0.0.7":"2014-06-04T13:56:33.138Z","0.0.8":"2014-06-04T14:16:14.530Z","0.0.9":"2014-12-06T16:41:32.964Z","0.0.10":"2014-12-06T16:55:34.612Z","0.0.11":"2014-12-07T18:25:27.633Z","0.0.12":"2014-12-07T19:53:41.013Z","0.0.13":"2014-12-08T17:18:11.459Z","0.0.14":"2015-07-03T14:25:45.501Z","0.0.15":"2015-07-06T13:08:36.113Z","0.1.0":"2026-07-11T19:19:40.796Z","0.2.0":"2026-07-12T13:43:53.439Z","0.2.1":"2026-07-13T21:08:04.674Z","0.2.2":"2026-07-14T14:24:48.135Z","0.2.3":"2026-07-14T16:09:32.123Z","0.2.4":"2026-07-14T20:18:18.311Z","0.2.5":"2026-07-15T11:31:32.916Z","0.2.6":"2026-07-16T14:16:33.010Z","0.2.7":"2026-07-16T16:43:09.143Z","0.2.8":"2026-07-16T17:14:12.605Z","0.2.9":"2026-07-18T09:04:37.737Z","0.2.10":"2026-07-18T15:17:21.753Z","0.2.12":"2026-07-19T08:43:50.683Z","0.2.13":"2026-07-19T10:51:57.407Z","0.2.14":"2026-07-19T11:21:41.236Z","0.2.15":"2026-07-21T16:29:10.639Z","0.2.16":"2026-07-21T19:22:40.275Z","0.2.17":"2026-07-21T21:09:40.317Z","0.2.18":"2026-07-21T21:39:09.557Z","0.2.19":"2026-07-22T06:47:42.343Z","0.2.20":"2026-07-22T07:08:22.703Z","0.2.21":"2026-07-22T09:01:29.388Z","0.2.22":"2026-07-22T11:20:43.676Z","0.2.23":"2026-07-22T13:25:01.606Z","0.2.24":"2026-07-22T15:03:35.128Z","0.2.25":"2026-07-22T18:10:52.870Z","0.2.26":"2026-07-22T20:45:59.833Z","0.2.27":"2026-07-23T13:56:32.199Z","0.2.28":"2026-08-04T08:32:18.580Z","0.2.29":"2026-08-04T12:58:42.859Z","0.2.30":"2026-08-09T16:52:33.124Z","0.2.31":"2026-08-09T19:19:10.977Z","0.2.32":"2026-08-11T12:41:13.152Z","0.2.33":"2026-08-12T08:54:51.718Z","0.2.34":"2026-08-13T20:03:56.712Z","0.2.35":"2026-08-16T15:36:56.781Z","0.2.36":"2026-08-17T09:17:44.106Z","0.2.37":"2026-08-18T12:01:41.341Z","0.2.38":"2026-08-24T12:39:41.025Z","0.2.39":"2026-08-31T08:29:23.879Z","0.2.40":"2026-08-31T13:17:03.234Z","0.2.41":"2026-09-27T15:31:23.673Z"},"bugs":{"url":"https://github.com/iannuttall/seo/issues"},"author":{"name":"Ian Nuttall"},"license":"Apache-2.0","homepage":"https://seoskill.dev","keywords":["seo","search-console","google-analytics","keyword-research","competitor-analysis","crawler","cli","mcp"],"repository":{"url":"git+https://github.com/iannuttall/seo.git","type":"git"},"description":"The SEO command for AI agents. Audit sites and research search opportunities with local, evidence-backed reports.","maintainers":[{"name":"iannuttall","email":"npm@ian.is"}],"readme":"<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/brand/s-dark.svg\">\n    <img src=\"assets/brand/s.svg\" alt=\"SEO Skill\" width=\"144\">\n  </picture>\n</p>\n\n<h1 align=\"center\">SEO Skill</h1>\n\n<p align=\"center\">\n  The SEO command for AI agents. Audit sites, find search opportunities, research competitors, and verify the work from one local command and MCP server.\n</p>\n\n<p align=\"center\">\n  <a href=\"#quick-start\">Get started</a>\n  ·\n  <a href=\"https://seoskill.dev/features\">Features</a>\n  ·\n  <a href=\"https://seoskill.dev/features/mcp\">SEO MCP server</a>\n  ·\n  <a href=\"https://seoskill.dev/docs\">Documentation</a>\n  ·\n  <a href=\"https://www.npmjs.com/package/seo\">npm</a>\n  ·\n  <a href=\"https://github.com/iannuttall/seo/issues\">Questions</a>\n  ·\n  <a href=\"https://seoskill.dev/privacy\">Privacy</a>\n  ·\n  <a href=\"SECURITY.md\">Security</a>\n  ·\n  <a href=\"LICENSE\">License</a>\n  ·\n  <a href=\"AGENTS.md\">Agent notes</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/iannuttall/seo/actions/workflows/ci.yml\"><img alt=\"Checks\" src=\"https://img.shields.io/github/actions/workflow/status/iannuttall/seo/ci.yml?branch=main&label=checks&style=flat-square\"></a>\n  <a href=\"https://www.npmjs.com/package/seo\"><img alt=\"npm version\" src=\"https://img.shields.io/npm/v/seo?style=flat-square\"></a>\n  <a href=\"https://www.npmjs.com/package/seo\"><img alt=\"npm downloads\" src=\"https://img.shields.io/npm/dm/seo?style=flat-square\"></a>\n  <img alt=\"Node 22 or newer\" src=\"https://img.shields.io/badge/Node-22%2B-339933?style=flat-square\">\n  <img alt=\"TypeScript\" src=\"https://img.shields.io/badge/TypeScript-ready-3178c6?style=flat-square\">\n  <a href=\"LICENSE\"><img alt=\"Apache 2.0 license\" src=\"https://img.shields.io/badge/license-Apache--2.0-lightgrey?style=flat-square\"></a>\n</p>\n\nThe `seo` command turns crawl, Search Console, connected traffic analytics, and\noptional research-provider data into work you can inspect and ship. Find technical\nblockers, recover existing demand, research new keywords and competitors,\nreview programmatic page patterns, and catch regressions after a release.\n\n## Who this is for\n\n- People running their own sites who want a clear audit and a ranked list of\n  fixes, without learning a heavy dashboard.\n- AI agents that need real crawl, Search Console, traffic analytics, keyword,\n  result, domain, competitor, and link evidence through MCP and one packaged SEO\n  skill instead of screenshots or guesses.\n- Developers who want to embed the same report engine in a script, a CI job, or\n  a TypeScript app.\n\n## Quick start\n\nRequires Node 22 or newer.\n\n```sh\nnpm i -g seo\nseo start\nseo report\n```\n\nThe setup walks you through Google sign-in, your Search Console property, an\noptional traffic analytics connection, and a local project profile. Public\nreleases can include the shared Google app. If it is unavailable in your build,\nsetup guides you through adding your own desktop OAuth client.\n\nDataForSEO, Semrush, and Ahrefs are optional research providers built into the\nmain package. Connect one only when external result, keyword, domain,\ncompetitor, or link evidence would change the decision.\n\nThat is the normal path. The `seo` command is then available in every terminal,\nscript, CI job, and local MCP client on the machine.\n\nThe main report uses the evidence you have, explains what it could not check,\nand recommends a short list of follow-up commands. You can start with a local\ntechnical report before connecting Google: `seo report --url` crawls the site\nand returns findings and an action list with no sign-in at all.\n\nRunning `seo help` shows the shape of the tool:\n\n```txt\nRun SEO audits, find what needs fixing, and ship the changes with your agent.\n\nStart here\n  seo start                                Connect first-party data and save a project profile\n  seo report                               Run the main SEO report for the default project\n  seo report --site sc-domain:example.com  Run without a profile\n  seo report --url https://example.com     Start with a local technical report\n\nProjects\n  seo projects list  List saved project profiles\n  seo projects add   Create or update a project profile\n  seo sites          List Search Console properties\n  seo doctor         Check local auth and config\n\nAct on a report\n  seo refresh-priorities  Rank the next best SEO actions\n  seo quick-wins          Find ranking 4-10 low-CTR wins\n  seo second-page         Investigate URLs averaging positions 10-20\n  seo technical-watch     Crawl and index-monitor a site\n\nAgent and power tools\n  seo report --json    Run the main report as structured JSON\n  seo export diagnose  Export report data to CSV\n  seo mcp install      Install SEO tools into MCP clients\n  seo skill list       Show the packaged SEO skill\n  seo reports list     Discover every structured report\n\nUse `seo help <command>` or `seo <command> --help` for command help.\nUse `seo help all` for the longer command list.\n```\n\n## What you get\n\n- Find technical blockers across metadata, links, indexability, canonicals,\n  structured data, performance, security, mobile, international SEO, and\n  social previews.\n- Rank the work using affected URLs, rule severity, search visibility, and\n  analytics value instead of treating every warning equally.\n- See why a finding matters, what evidence supports it, how to fix it, and how\n  to verify the change.\n- Save and compare crawl reports without running the same crawl again.\n- Measure SEO changes with matched before and after Search Console windows.\n- Discover keyword ideas, compare market estimates, inspect current results,\n  and keep useful terms in local saved sets.\n- Find recurring search competitors, inspect their ranking pages, and filter\n  possible keyword gaps through Search Console data and existing provider\n  rankings.\n- Find repeatable Search Console searches and review planned terms, comparison\n  pairs or other useful combinations.\n- Find repeated page patterns on your site and competitor sites, then check\n  what information a useful new page would need.\n- Find location-specific Search Console demand and repeated local page patterns,\n  then add a few exact local result snapshots when the decision needs them.\n- Give scripts and agents deterministic JSON, Markdown, stable rule IDs, and a\n  compact local MCP surface.\n\n## How the reports stay honest\n\nThe point of a report is to be defensible, so the design keeps a few rules:\n\n- Observed evidence stays separate from derived findings and recommended\n  actions. You can always see the crawl row or provider row behind a claim.\n- Partial data is never reported as a zero. A capped, filtered, or sampled\n  source says so, and it cannot support a definitive all-clear.\n- Heuristics are labeled as heuristics. A convention or threshold is not\n  presented as a search-engine rule.\n- Each recommendation comes with a way to check that the fix worked, rather than\n  a promise about rankings or traffic.\n\n## Everyday use\n\n`seo start` can save a project profile, which is a local shortcut for a site,\nSearch Console property, traffic analytics connection, and brand terms. If you have one default\nproject, most commands need no flags.\n\n```sh\nseo report\nseo refresh-priorities\nseo quick-wins\nseo second-page\nseo technical-watch\n```\n\nUse `--project` when you have more than one:\n\n```sh\nseo report --project example\nseo projects list\n```\n\nYou can also work without a saved profile:\n\n```sh\nseo report --site sc-domain:example.com\nseo report --url https://example.com\nseo crawl https://example.com\nseo audit-page --url https://example.com/pricing\n```\n\n`seo report --url` crawls the site and saves technical evidence. It does not\npretend to know traffic, queries, or rankings until you add a Search Console\nproperty with `seo start`. If you have a Search Console performance download on\ndisk, point the same report at the folder or CSV with\n`--search-console-export`. The report reads the query and page tables, keeps\nthem separate from the crawl, and tells you which exported pages the crawl\ncould not reach. Large page inventories return stable pages; continue with\n`--inventory-page <number>` until `nextPage` is `null`.\n\nRun `seo help` for the short path or `seo help all` for the full command list.\n\n## Research keywords and competitors\n\nConnect a research provider when you need independent market estimates or\ncompetitor evidence. Each connection is local and separate from Google\nsign-in. The main package includes DataForSEO, Semrush, and Ahrefs. DataForSEO\nhas the broadest live coverage:\n\n```sh\nseo providers dataforseo connect\nseo providers dataforseo status --check\nseo providers dataforseo limits\n```\n\nCredentials use the system keychain when available, with a private local file\nfallback. Semrush Version 3 and Ahrefs API v3 use the same local credential\nboundary:\n\n```sh\nseo providers semrush connect\nseo providers semrush status --check\n\nseo providers ahrefs connect\nseo providers ahrefs status --check\nseo providers ahrefs limits\n```\n\nRead the [Semrush guide](https://seoskill.dev/docs/semrush) and\n[Ahrefs guide](https://seoskill.dev/docs/ahrefs) before running paid research.\nSupported reports record the applicable API units or USD cost, cache state,\nrequest limits and row counts. Cached results avoid repeating paid work during\ntheir retention window.\n\nUse the existing report catalog. There are no separate provider-named report\ncommands:\n\n```sh\nseo reports describe keyword-research --json\nseo reports describe competitive-opportunities --json\nseo reports describe domain-overview --json\nseo reports describe competitor-keyword-gap --json\nseo reports describe local-search-demand --json\nseo reports describe pseo-patterns --json\nseo reports describe pseo-opportunities --json\nseo reports describe ai-mention-research --json\nseo reports describe ai-prompt-observations --json\n\nseo reports run domain-overview \\\n  --params '{\"domain\":\"example.com\",\"countryCode\":\"GB\",\"languageCode\":\"en\"}' \\\n  --json\n```\n\nRanked-keyword exports work without provider API access. Pass one to four\nlocal DataForSEO, Semrush or Ahrefs files through the same report pipeline:\n\n```sh\nseo reports run competitor-keyword-gap \\\n  --params-file ./competitor-gap-run.json \\\n  --json\n```\n\nThe parameter file uses `researchFiles`. Each item records\n`dataset: \"ranked-keywords\"`, the local `file`, its `provider`, and the real\n`exportedAt` date. CSV, TSV, JSON, JSONL and NDJSON are supported. UTF-8 and\nUTF-16 CSV files are detected automatically, including Ahrefs downloads that\nuse tabs despite a `.csv` name. The output keeps the detected encoding and\ndelimiter, a SHA-256 hash, included fields, explicit column mapping, row counts,\nfiltered historical rows, invalid rows, duplicates and caps under\n`evidence.imports`. Add `columns` when an export uses unfamiliar headings.\nEach entry maps a canonical field such as `keyword`, `url`, `position` or\n`searchVolume` to the source heading. Imported files can feed `ranked-keywords`,\n`ranking-pages`, `serp-competitors` and `competitor-keyword-gap` without\nadding another command or MCP tool. The [research provider guide](https://seoskill.dev/docs/research-providers)\nhas the exact JSON format, market guidance and file limits.\n\nThe research flow now covers:\n\n- `competitive-opportunities` for turning a small topic set into a focused\n  keyword and competitor investigation order using current results, free\n  Domain Rating observations, and optional paid link summaries;\n- `keyword-research`, `keyword-metrics`, and `saved-keywords` for discovery,\n  estimates, and local persistence;\n- `serp-results` and `rank-tracking` for current or repeated exact market and\n  device-specific observations;\n- `domain-overview`, `ranked-keywords`, and `ranking-pages` for country-level\n  domain, term, page, and repeated path evidence;\n- `serp-competitors` for finding domains that recur across an explicit keyword\n  set without guessing whether they are a business, publisher, directory,\n  community, or marketplace;\n- `competitor-keyword-gap` for comparing up to three relevant domains with\n  Search Console themes, the site's provider-observed rankings, and\n  programmatic page patterns;\n- `local-search-demand` for matching explicit place names, nearby phrases, and\n  postal codes in Search Console, reviewing repeated local page\n  patterns, optionally joining Analytics geography by exact landing-page path,\n  and optionally adding up to three exact local result checks;\n- `pseo-patterns` for recognising repeatable query wording in Search Console\n  and checking planned terms, comparison pairs and other useful combinations,\n  including deliberate product sets that do not depend on search volume;\n- `pseo-opportunities` for deeper keyword, result-page, competitor-pattern, and\n  data research tied to existing page patterns and Search Console themes;\n- `link-evidence` for a current link summary, one representative backlink per\n  referring domain, and linked-target checks against saved crawl and Search\n  Console evidence;\n- `domain-rating` for one free, attributed Ahrefs observation of backlink\n  profile strength, kept separate from ranking and traffic evidence;\n- `ai-mention-research` for provider-indexed mentions, cited domains, and\n  question samples in one exact AI surface and market, with optional\n  Search Console overlap for a property you own;\n- `ai-prompt-observations` for a small fixed set of prompts across explicit\n  current ChatGPT, Claude, Gemini, or Perplexity models, with answers,\n  citations, compatible history, exact returned costs, and optional Search\n  Console context stored locally.\n\nProvider traffic, volume, difficulty, intent, visibility, and ranking history\nare estimates. Search Console remains the evidence for measured search\nperformance on a property you own. A live result snapshot remains the evidence\nfor one query, market, device, and observation time. Reports can combine these\nsources without blending their meanings or turning a missing row into zero.\nLocal query wording does not establish the searcher's physical location, and an\nobserved local pack does not establish that a particular listing appeared.\nProvider-indexed AI mentions are not live prompt observations. Each live answer\nis one sample under its exact prompt, requested and effective model, market\nlabel, settings, and collection time. Neither source proves referral traffic or\ntechnical eligibility. A missing target in one answer does not prove universal\nabsence. The requested model is the model you chose; the effective model is the\nmodel the provider reports actually running.\n\nRead the [research provider guide](https://seoskill.dev/docs/research-providers)\nfor setup, costs, caching, country-level limits, competitor classification, and\nprogrammatic data-source checks.\n\nTraffic analytics commands sit under their provider namespace. Google Analytics\nuses the account saved with the project, or the selected default Google account:\n\n```sh\nseo analytics google properties\nseo analytics google report --property 123456789 --dimensions landingPage --metrics sessions,totalUsers\n```\n\nYou can keep several Google logins on one machine. Run `seo auth login` again\nto add an account, then use `seo auth accounts` to list them. During `seo start`\nyou can select separate accounts for Search Console and Google Analytics.\nProject reports use those saved choices automatically.\n\nClicky is available through the first-party\n[Clicky provider package](https://github.com/iannuttall/seoskill-clicky-provider).\nIt supplies landing-page visits and Clicky analytics reports. Its README owns\nthe provider setup and service links. Install the package, then use `seo start`\nto attach its site ID to a project profile:\n\n```sh\nseo providers install @seoskill/clicky-provider\nseo providers connect clicky --account '{\"siteId\":\"123456789\"}'\nseo start\n```\n\nThe existing Clicky commands still work after the package is installed:\n\n```sh\nseo analytics clicky status --project example\nseo analytics clicky report --project example --start-date 2026-08-01 --end-date 2026-08-07\n```\n\nThe sitekey stays in the managed secret store. Agents and CI can set\n`SEO_CLICKY_SITEKEY`. Saved Clicky projects and sitekeys are reused after the\npackage move. Clicky landing-page visits can inform the main crawl and priority\nreports. Reports that need Google-specific conversion, attribution, or\ngeography fields still require Google Analytics.\n\nProviders can ship separate npm packages and give users one install command.\nThe command shows the exact version, publisher, repository, integrity, and code\nwarning before it installs anything. After installation, the provider appears\nin `seo providers list`, `seo start`, the CLI, and the MCP server. The main\npackage keeps profiles, secrets, cache, network and cost limits, report text,\nand evidence rules.\n\nThese first-party packages are public examples for people who want to build\nanother provider package:\n\n| Package | What it adds | Package links |\n| --- | --- | --- |\n| `@seoskill/clicky-provider` | Clicky landing-page visits and native Clicky analytics reports. | [GitHub and setup](https://github.com/iannuttall/seoskill-clicky-provider) · [npm](https://www.npmjs.com/package/@seoskill/clicky-provider) |\n| `@seoskill/serpbase-provider` | Live Google result snapshots and live rank tracking through SerpBase. | [GitHub and setup](https://github.com/iannuttall/seoskill-serpbase-provider) · [npm](https://www.npmjs.com/package/@seoskill/serpbase-provider) |\n\nThese packages use the same public SDK as third-party packages. Their source,\ntests, limits, release history, and security policy can be reviewed separately\nfrom the main package.\n\nA package can register either of these extension types:\n\n- A shared capability returns an existing evidence shape, such as\n  `landing-page-visits` or `serp-snapshot`. Compatible reports use it without\n  provider-specific core code.\n- An action supplies its own input and output JSON schemas. Agents discover it\n  with `seo providers describe <id> --json` and run it with\n  `seo providers run <id> <action> --params '<json>' --json`.\n\nThe command validates action input and output against the package schemas. A\nnew action does not need a core change. A new shared report shape still needs a\nnew SDK capability.\n\nA provider package uses the public `seo/provider-sdk` entry point:\n\n```ts\nimport type {\n  SeoProviderActivate,\n  SeoProviderRegistration,\n} from 'seo/provider-sdk'\n\nconst provider = {\n  id: 'example-analytics',\n  displayName: 'Example Analytics',\n  description: 'Add landing-page visit evidence.',\n  kinds: ['traffic-analytics'],\n  connection: {\n    fields: [\n      { id: 'siteId', label: 'Site ID', kind: 'account', required: true },\n      { id: 'apiKey', label: 'API key', kind: 'secret', required: true },\n    ],\n    async verify(connection, runtime) {\n      await runtime.requestJson({\n        operation: 'verify',\n        url: 'https://api.example.com/verify',\n        headers: {\n          authorization: `Bearer ${connection.credentials.apiKey}`,\n        },\n      })\n    },\n  },\n  capabilities: [\n    {\n      id: 'landing-page-visits',\n      async run(input, runtime) {\n        // Map the provider response to bounded path and visit rows here.\n        return {\n          metric: 'landing-page-visits',\n          rows: [],\n          returnedRows: 0,\n          retainedRowLimit: input.limit,\n          retainedRowLimitReached: false,\n          dataStatus: 'complete',\n          qualityWarnings: [],\n        }\n      },\n    },\n  ],\n} satisfies SeoProviderRegistration\n\nconst activate: SeoProviderActivate = (host) => host.registerProvider(provider)\nexport default activate\n```\n\nUse an action when the data does not match a shared capability:\n\n```ts\nconst provider = {\n  // Keep the connection fields and other provider details above.\n  capabilities: [],\n  actions: [\n    {\n      id: 'inspect-domain',\n      description: 'Return current domain evidence.',\n      inputSchema: {\n        type: 'object',\n        additionalProperties: false,\n        properties: { domain: { type: 'string' } },\n        required: ['domain'],\n      },\n      outputSchema: {\n        type: 'object',\n        properties: { rows: { type: 'array', items: { type: 'object' } } },\n        required: ['rows'],\n      },\n      async run(input, runtime) {\n        return runtime.requestJson({\n          operation: 'inspect-domain',\n          url: `https://api.example.com/domain/${input.params.domain}`,\n        })\n      },\n    },\n  ],\n} satisfies SeoProviderRegistration\n```\n\nThe agent reads both schemas through `seo providers describe` or\n`seo_describe_provider`. It can then run the action with `seo providers run` or\n`seo_run_provider` without a core change. `seo_list_providers` returns the\npackages that are installed on the same computer as the MCP server.\n\nThe package `package.json` declares the built entry point:\n\n```json\n{\n  \"seo\": {\n    \"apiVersion\": 1,\n    \"providers\": [\"./dist/index.js\"]\n  }\n}\n```\n\nProvider packages must bundle their runtime code and have no runtime dependency\ntree. Publish the package to npm and give users its install command. A change to\nthis repository is not required. The provider publisher owns its adapter,\ndocumentation, tests, security, and releases.\n\nBing Webmaster is optional. Connect it when you want Bing traffic trends,\ncrawl changes, and query and page opportunities beside your Google evidence:\n\n```sh\nseo providers bing connect\nseo providers bing report --project example\n```\n\nThe guided connection asks for the API key from Bing Webmaster Tools Settings,\nthen API Access. It validates the key, lists verified sites, matches one to the\nselected project when the hostname is unambiguous, and stores the key in the\nsystem keychain with a private local file fallback. Agents and CI can set\n`SEO_BING_API_KEY` and run the report without saving the key.\n\nThe report compares recent traffic periods, highlights crawl changes and\nreturns query and page lists to review. Bing's `inIndex` crawl statistic is a\nsite-level number, so check important URLs directly before treating them as\nindexed.\n\nReview referring links from Ahrefs, DataForSEO, Bing or a\nlocal export:\n\n```sh\nseo links --provider ahrefs --target example.com --json\nseo links --provider dataforseo --target example.com --json\nseo links --provider dataforseo --target example.com \\\n  --search-site sc-domain:example.com --json\nseo links --project example --json\nseo links --file ./links.csv --row-limit 10000 --json\n```\n\nThe Ahrefs and DataForSEO paths request one summary and a selected set of live\nrepresentative backlinks, one per referring domain by default. Ahrefs keeps\nestimated and actual API units in the evidence. DataForSEO keeps current\nendpoint prices, estimated and actual USD cost, and task ids. Both retain cache\nstate, provider filters and row counts. A cached repeat does not repeat paid\nwork during the retention window.\n\nWhen a matching saved crawl or Search Console property is available, the same\nreport checks linked target pages for observed error responses, redirects,\ncanonical conflicts and non-indexable states. Search Console metrics add\nsearch performance for matching pages.\nVerify the live target and the referring page before changing anything.\n\nCSV and JSONL imports stream from disk. Regular JSON arrays have a smaller\nfile limit to avoid a memory spike. Every result includes the number of rows\nread, rejected, deduplicated, omitted, or stopped by a limit. It is evidence\nfrom the selected source, not a complete backlink index. Provider rank and\nspam metrics keep their provider-specific names and scales. They are context,\nnot search-engine ranking factors or universal authority scores.\n\n## Create an HTML report for a client\n\nThe built-in renderer creates a standalone report when you need a predictable\nfile without asking an agent to design it:\n\n```sh\nseo report --project example --format html\nseo monthly-report --project example --format html\nseo report-narrative --project example --format html --view analyst\n```\n\nClient view keeps the presentation concise. Analyst view adds evidence coverage\nand unavailable sections. Use `--output ./report.html` to choose the file path.\nThe file contains its own CSS, works offline, prints cleanly, and is marked\n`noindex,nofollow`.\n\nAn agent can instead design its own report from the structured result:\n\n```sh\nseo report --project example --full --json > seo-report.json\n```\n\nAsk the agent to turn that evidence into one responsive, print-friendly HTML\nfile for the intended audience. It can choose the layout and visual style, but\nit must keep provider labels, reporting dates, data status, limitations, and\nverification steps visible. Missing or partial data must not become zero, and\nthe presentation must not invent forecasts, causes, scores, or conclusions.\nThe installed skill teaches agents this contract automatically.\n\n## Analyze crawler traffic in server logs\n\nStream a local NGINX or Apache-style combined access log without importing or\nretaining every raw request:\n\n```sh\nseo server-logs analyze --file ./access.log --json\nseo server-logs analyze --file ./access.jsonl --format jsonl --json\n```\n\nThe report groups observed search and AI crawler user agents by response class\nand path. You can limit the file size, rows, line size, unique paths and detail\nreturned. User-agent names can be spoofed, so the result describes the request\nstrings found in the log rather than verified crawler identity.\n\n## Notify IndexNow after a change\n\nGenerate a key file in the public asset directory for your site, then deploy\nit before sending notifications:\n\n```sh\nseo indexnow setup --site https://example.com --output ./public\nseo indexnow verify --site https://example.com\nseo indexnow submit --site https://example.com --url https://example.com/changed-page\n```\n\nUse `--dry-run --json` to validate a submission without notifying IndexNow.\nThe command accepts one URL, a comma-separated list, or a newline-delimited\nfile. A run is limited to 1,000 unique URLs, every URL must use the configured\nhost, and the public key file is checked before a live request. The local key\nmapping stays in the system keychain with a private file fallback. Agents and\nCI can set `SEO_INDEXNOW_KEY` for the current process instead.\n\nAn accepted IndexNow request confirms receipt only. It does not prove that a\nURL was crawled, indexed, ranked, or shown in search results.\n\n## Crawl a site\n\nFor a large or unfamiliar site, start with the sitemap health pass:\n\n```sh\nseo crawl --sitemap-url https://example.com/sitemap.xml --health --format pretty\n```\n\nThis reads the sitemap, then checks each listed URL for status, redirects,\nrobots decisions, network failures, and access blocks. It does not parse or\nrender page bodies, join Google data, check external links, or write page and\nrobots responses to the local cache. Requests begin one at a time and increase\nonly after clean responses.\n\nRun the full crawl second when the health evidence points to a problem, or when\nyou need metadata, canonicals, indexability, links, structured data, or page\ncontent:\n\n```sh\nseo crawl https://example.com --format pretty\n```\n\nSave it, export it, or compare it with an earlier crawl:\n\n```sh\nseo crawl https://example.com --save\nseo crawl https://example.com --format html --output report.html\nseo crawl-reports\nseo crawl-reports --compare latest --against previous\n```\n\nUseful crawl controls include `--max-pages`, `--max-depth`, `--include`,\n`--exclude`, `--no-sitemap`, `--no-external`, and `--fail-on` for CI. Every\nrequest uses the stable versioned identity\n`SEO-Skill/<version> (+https://seoskill.dev)`.\n\nIf a site denies or challenges that identity, the report keeps the HTTP status,\nprovider indicators, request ID when available, and practical access guidance.\nDo not allow requests based on User-Agent alone because it can be spoofed.\nScope any temporary exception to the audit machine source IP, required host or\npaths, and the exact blocking rule.\n\n## Use it in CI and scripts\n\nJSON mode never prompts. Pass the site or project explicitly in unattended\nruns.\n\n```sh\nseo report --project example --json\nseo crawl --sitemap-url https://example.com/sitemap.xml --health --format junit --output sitemap-health.xml --fail-on high\nseo crawl https://example.com --json --output crawl.json\n```\n\nReports keep observed data, derived findings, skipped sections, limits, and\nprovider errors separate so automation can make decisions without parsing\nterminal prose.\n\n`seo report --json` returns a compact summary, action queue, and crawl findings\nso an agent can choose its next call without loading every raw report.\nUse `--full` only when a script needs the complete report object.\n\nUse the action view when an agent will implement the findings:\n\n```sh\nseo report --project example --actions-only --json\nseo reports run audit-page --params '{\"url\":\"https://example.com\"}' --actions-only --json\n```\n\nIt puts stable `findings` and any bounded migration `inventories` near the top.\nCheck finding coverage and use each item's allowed outcomes. A fix carries an\nimplementation instruction. A review carries the evidence needed to decide\nwhether any change is justified. Verify changed items and rerun the originating\nreport. The MCP catalog exposes the same view through `seo_run_report` with\n`view: \"actions\"`.\n\nWhen a CI job needs Search Console or Google Analytics data, give it a Google service\naccount JSON key through its secret store. The service account needs access to\nthe exact properties it will query. This GitHub Actions step runs without a\nbrowser or a copied local token:\n\n```yaml\n- name: Run the SEO report\n  run: |\n    npm i -g seo\n    seo report --site sc-domain:example.com --json > seo-report.json\n  env:\n    SEO_GOOGLE_SERVICE_ACCOUNT_JSON: ${{ secrets.SEO_GOOGLE_SERVICE_ACCOUNT_JSON }}\n```\n\nThe [Google data guide](https://seoskill.dev/docs/google) covers Search\nConsole and Google Analytics permissions, mounted secret files, and how to check the active\nidentity safely.\n\nAgents can discover and run the same report catalog as MCP without starting a\nserver:\n\n```sh\nseo reports list --category crawl --json\nseo reports describe audit-page --json\nseo reports run audit-page --params '{\"url\":\"https://example.com\"}' --json\n```\n\nAlways describe a report before constructing its parameters. The CLI and MCP\nsurfaces read from the same registry, so their ids and JSON Schemas cannot\ndrift.\n\n## Use it with AI agents\n\nYour agent carries one short SEO skill, and the CLI and MCP server do the\nheavy lifting. The skill teaches an agent how to discover the full audit and\nresearch catalog at runtime, and the agent asks the CLI for the detail on each\ntool only when it is about to run it. You get the whole toolkit without fifty\nskill files sitting in the context window on every session.\n\n`seo start` offers to install the SEO skill during setup. If you skipped that\nstep or need to reinstall it later, run the packaged installer:\n\n```sh\nseo skill install\n```\n\nIf you also skipped the MCP step, install the local server into a client with\nbuilt-in setup:\n\n```sh\nseo mcp install\n```\n\nThe prompt detects installed clients. Scripts can choose one or more explicitly:\n\n```sh\nseo mcp install --codex\nseo mcp install --claude-code\nseo mcp install --cursor\nseo mcp install --claude-desktop\n```\n\nThe server works with any client that can start a local stdio MCP server.\nCodex, Claude Code, Claude Desktop, and Cursor have guided setup. Other MCP\nclients can start `seo mcp serve` through their local server configuration.\n\nYour client starts the server when it needs it. Run it directly only for manual\nconfiguration or testing:\n\n```sh\nseo mcp serve\n```\n\nThe repository ships one skill under `skills/seo`. It is a router: it teaches an\nagent to discover reports, describe one to load its depth at runtime, inspect\nthe evidence, and request a smaller follow-up instead of loading a giant result\ninto context. Per-report guidance lives in the registry and is fetched with\n`seo reports describe <id> --json`, so it never drifts from the skill.\n\nThe npm package includes the same file for local inspection:\n\n```sh\nseo skill list\nseo skill path seo\n```\n\nAgents can also discover the canonical skill from\n`https://seoskill.dev/.well-known/agent-skills/index.json`. The entry links to\nthe canonical skill instructions and includes a content digest for verification.\n\nSee [MCP and agents](https://seoskill.dev/docs/agents) for setup and tool\ndetails.\n\n## Use it as a library\n\nInstall the same unscoped package in any Node 22 or newer project:\n\n```sh\nnpm install seo\n```\n\nRun any public report by id with the same definition, input schema, and\nevidence used by the CLI and MCP server:\n\n```ts\nimport { describeReport, executeReport } from 'seo/mcp'\n\nconst description = describeReport('quick-wins')\nconst result = await executeReport('quick-wins', {\n  site: 'sc-domain:example.com',\n  days: 90,\n})\n\nconsole.log(description.inputSchema)\nconsole.log(result)\n```\n\nOr call typed analysis functions directly when your app already knows the job\nit needs to run:\n\n```ts\nimport { auditPage, crawlSite } from 'seo'\n\nconst page = await auditPage({\n  url: 'https://example.com/pricing',\n})\n\nconst health = await crawlSite({\n  url: 'https://example.com',\n  mode: 'sitemap',\n  strategy: 'health',\n  sitemapUrl: 'https://example.com/sitemap.xml',\n})\n\nconst crawl = await crawlSite({\n  url: 'https://example.com',\n  maxPages: 100,\n  maxDepth: 4,\n})\n\nconsole.log(page.issues)\nconsole.log(health.summary, health.access)\nconsole.log(crawl.summary, crawl.issueGroups)\n```\n\nThe main `seo` export contains the report, provider, crawler, storage, and\nrendering APIs. `seo/mcp` exposes report discovery, report execution, and the\nembeddable MCP server. See the [TypeScript library\nguide](https://seoskill.dev/docs/typescript) for structured error handling,\nlocal Google access, and more examples.\n\n## Local data and Google access\n\nGoogle OAuth tokens use your system keychain when it is available. On a\nheadless machine or a locked keychain, the CLI falls back to a private\n`0600` file in your user config directory. Project profiles, crawl reports, and\nprovider caches are also local. Use these commands to inspect or remove them:\n\n```sh\nseo privacy\nseo doctor\nseo auth logout --all\nseo reset\n```\n\n`seo auth status` shows the active storage mode. Power users can choose it with\n`seo auth storage --keychain` or `seo auth storage --file`.\n\nPower users can bring their own Google OAuth client or use a service account in\nCI. The [Google data guide](https://seoskill.dev/docs/google) covers both auth\npaths, including OAuth testing-mode limits.\n\n## Common questions\n\n### Does my site data stay on my machine?\n\nYes. Reports, project profiles, Google tokens, crawls, and caches stay in your\nlocal config directory. Local first does not mean offline. A command can\nrequest a site, connected Google or Bing account, research provider, Chrome UX\nReport, IndexNow, or the npm registry when the work needs it.\n\nOptional external enrichment can send selected Search Console query or derived\nseed text to the chosen research provider only when you explicitly enable it.\nIt does not send Google credentials, property IDs, Search Console metrics, or\nGoogle Analytics rows. Local provider file imports are not uploaded. Read the\n[privacy policy](https://seoskill.dev/privacy) for every network boundary and\nthe [telemetry page](https://seoskill.dev/telemetry) for the fixed anonymous\nusage-event schema and opt-out controls.\n\n### Do I need a Google API key?\n\nNo. `seo start` uses a normal Google sign-in for read-only Search Console and\nGoogle Analytics access. Public releases can include a shared desktop OAuth client, and if\nyour build does not have one, setup helps you add your own. You can also run a\nlocal technical crawl with no Google connection at all.\n\n### What does it cost?\n\nThe `seo` package is free and open source under Apache-2.0. It calls Google APIs\nyou already have access to, so the core crawl and Google workflows need no\nseparate subscription. Optional research providers can charge for API\nrequests. Their estimated and actual costs, local spend limits, cache state,\nand request bounds stay visible in each supported report.\n\n### How is this different from a paid SEO tool?\n\nA hosted SEO tool keeps your data on its servers and shows you a dashboard. This\nruns on your machine, works from your own crawl and Google data, and returns\nclear report data your agent can read and act on. Every finding shows the\nevidence behind it and a way to verify a fix, so you are not trusting a score\nyou cannot inspect.\n\n## Documentation\n\nQuestions, bug reports, and feature requests go through\n[GitHub Issues](https://github.com/iannuttall/seo/issues). Report suspected\nvulnerabilities privately through the process in [SECURITY.md](SECURITY.md).\n\n- [Getting started](https://seoskill.dev/docs/getting-started)\n- [CLI commands](https://seoskill.dev/docs/cli)\n- [Crawler](https://seoskill.dev/docs/crawler)\n- [Reports and data](https://seoskill.dev/docs/reports)\n- [Research providers](https://seoskill.dev/docs/research-providers)\n- [MCP and agents](https://seoskill.dev/docs/agents)\n- [AI-search evidence](https://seoskill.dev/docs/ai-search)\n- [Privacy policy](https://seoskill.dev/privacy)\n- [Anonymous telemetry](https://seoskill.dev/telemetry)\n- [Public usage stats](https://seoskill.dev/stats)\n- [Terms of use](https://seoskill.dev/terms)\n- [Security policy](https://seoskill.dev/security)\n- [Contributing](CONTRIBUTING.md)\n- [Trademark and brand policy](TRADEMARKS.md)\n\n## Develop locally\n\nMost users do not need the source checkout. If you want to contribute:\n\n```sh\ngit clone https://github.com/iannuttall/seo.git\ncd seo\npnpm install\npnpm build\nnode dist/cli.js start --dry-run\n```\n\nRun the full quality gate before opening a pull request:\n\n```sh\npnpm build\npnpm typecheck\npnpm test\npnpm lint\npnpm pack --dry-run\n```\n\nContributor architecture and report-quality rules live in [AGENTS.md](AGENTS.md).\n\n## License\n\nThe code is available under [Apache-2.0](LICENSE). Project names and artwork are\ncovered separately by the [trademark and brand policy](TRADEMARKS.md).\n","readmeFilename":"README.md","users":{"mib200":true,"rubiadias":true}}