seo 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PRIVACY.md +37 -8
- package/dist/cli.js +84 -80
- package/dist/cli.js.map +1 -1
- package/dist/{dist-BBszRLUG.js → dist-4Yam8ps7.js} +1 -1
- package/dist/dist-B_2zww72.js +427 -0
- package/dist/dist-B_2zww72.js.map +1 -0
- package/dist/{esm-Dmtr8qrP.js → esm-BmuxgZyN.js} +95 -188
- package/dist/{esm-Dmtr8qrP.js.map → esm-BmuxgZyN.js.map} +1 -1
- package/dist/index.d.ts +92 -406
- package/dist/index.js +1558 -646
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +0 -14
- package/dist/mcp.js +1130 -889
- package/dist/mcp.js.map +1 -1
- package/dist/provider-sdk.d.ts +0 -2
- package/dist/provider-sdk.js +1 -2
- package/package.json +6 -5
- package/site-kit/README.md +13 -0
- package/site-kit/guide/build.md +70 -0
- package/site-kit/guide/data.md +49 -0
- package/site-kit/guide/golden-page.md +50 -0
- package/site-kit/guide/grow.md +58 -0
- package/site-kit/guide/launch.md +55 -0
- package/site-kit/guide/market.md +57 -0
- package/site-kit/guide/plan.md +49 -0
- package/site-kit/guide/scale.md +41 -0
- package/site-kit/guide/setup.md +59 -0
- package/site-kit/guide/writing.md +55 -0
- package/site-kit/starter/.github/workflows/refresh-data.yml +88 -0
- package/site-kit/starter/.node-version +1 -0
- package/site-kit/starter/AGENTS.md +65 -0
- package/site-kit/starter/README.md +11 -0
- package/site-kit/starter/astro.config.mjs +31 -0
- package/site-kit/starter/gitignore +7 -0
- package/site-kit/starter/llms.config.mjs +38 -0
- package/site-kit/starter/package.json +31 -0
- package/site-kit/starter/pnpm-workspace.yaml +5 -0
- package/site-kit/starter/public/_headers +5 -0
- package/site-kit/starter/public/favicon.svg +1 -0
- package/site-kit/starter/public/fonts/InterLatinVF.woff2 +0 -0
- package/site-kit/starter/public/fonts/JetBrainsMonoLatinVF.woff2 +0 -0
- package/site-kit/starter/public/fonts/LICENSE-inter.txt +93 -0
- package/site-kit/starter/public/fonts/LICENSE-jetbrains-mono.txt +93 -0
- package/site-kit/starter/scripts/deploy.mjs +60 -0
- package/site-kit/starter/scripts/markdown-rewrites.mjs +33 -0
- package/site-kit/starter/scripts/refresh-data.mjs +60 -0
- package/site-kit/starter/scripts/validate-data.mjs +47 -0
- package/site-kit/starter/site.config.json +9 -0
- package/site-kit/starter/src/components/Breadcrumbs.astro +27 -0
- package/site-kit/starter/src/components/Button.astro +46 -0
- package/site-kit/starter/src/components/Card.astro +54 -0
- package/site-kit/starter/src/components/CodeBlock.astro +62 -0
- package/site-kit/starter/src/components/FactTable.astro +45 -0
- package/site-kit/starter/src/components/FaqAccordion.astro +143 -0
- package/site-kit/starter/src/components/Footer.astro +34 -0
- package/site-kit/starter/src/components/FormInput.astro +18 -0
- package/site-kit/starter/src/components/FormSelect.astro +34 -0
- package/site-kit/starter/src/components/Header.astro +17 -0
- package/site-kit/starter/src/components/HugeIcon.astro +36 -0
- package/site-kit/starter/src/components/Logo.astro +21 -0
- package/site-kit/starter/src/components/PageHeader.astro +33 -0
- package/site-kit/starter/src/components/SectionHeading.astro +18 -0
- package/site-kit/starter/src/components/ui/button.ts +51 -0
- package/site-kit/starter/src/data/parks.json +106 -0
- package/site-kit/starter/src/data/sources.json +11 -0
- package/site-kit/starter/src/integrations/og-images.ts +49 -0
- package/site-kit/starter/src/integrations/sitemaps.ts +104 -0
- package/site-kit/starter/src/layouts/Base.astro +69 -0
- package/site-kit/starter/src/lib/cn.ts +5 -0
- package/site-kit/starter/src/lib/narrative.ts +115 -0
- package/site-kit/starter/src/lib/og/card.ts +85 -0
- package/site-kit/starter/src/lib/og/path.ts +14 -0
- package/site-kit/starter/src/lib/og/render.ts +30 -0
- package/site-kit/starter/src/lib/parks.ts +84 -0
- package/site-kit/starter/src/lib/seo.ts +97 -0
- package/site-kit/starter/src/pages/404.astro +30 -0
- package/site-kit/starter/src/pages/about.astro +39 -0
- package/site-kit/starter/src/pages/index.astro +52 -0
- package/site-kit/starter/src/pages/parks/[slug].astro +95 -0
- package/site-kit/starter/src/pages/regions/[region].astro +58 -0
- package/site-kit/starter/src/pages/robots.txt.ts +16 -0
- package/site-kit/starter/src/site.ts +29 -0
- package/site-kit/starter/src/styles/globals.css +561 -0
- package/site-kit/starter/tsconfig.json +5 -0
- package/site-kit/starter/wrangler.jsonc +16 -0
- package/skills/seo/SKILL.md +19 -1
- package/dist/dist-7TxFytBp.js +0 -420
- package/dist/dist-7TxFytBp.js.map +0 -1
package/dist/mcp.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __seoCreateRequire } from 'node:module'; const require = __seoCreateRequire(import.meta.url);
|
|
2
|
-
import { i as __toESM, n as version, r as __commonJSMin, t as load } from "./esm-
|
|
2
|
+
import { i as __toESM, n as version, r as __commonJSMin, t as load } from "./esm-BmuxgZyN.js";
|
|
3
3
|
import { createHash, randomUUID, sign } from "node:crypto";
|
|
4
4
|
import { ZodOptional, z } from "zod";
|
|
5
5
|
import { arch, homedir, platform, tmpdir, totalmem } from "node:os";
|
|
@@ -32,7 +32,7 @@ import { ZodFirstPartyTypeKind } from "zod/v3";
|
|
|
32
32
|
import * as z4mini from "zod/v4-mini";
|
|
33
33
|
import * as z$1 from "zod/v4";
|
|
34
34
|
import process$1 from "node:process";
|
|
35
|
-
|
|
35
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js
|
|
36
36
|
function isZ4Schema(s) {
|
|
37
37
|
return !!s._zod;
|
|
38
38
|
}
|
|
@@ -154,8 +154,7 @@ function getLiteralValue(schema) {
|
|
|
154
154
|
const directValue = schema.value;
|
|
155
155
|
if (directValue !== void 0) return directValue;
|
|
156
156
|
}
|
|
157
|
-
|
|
158
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
|
|
157
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
|
|
159
158
|
const LATEST_PROTOCOL_VERSION = "2025-11-25";
|
|
160
159
|
const SUPPORTED_PROTOCOL_VERSIONS = [
|
|
161
160
|
LATEST_PROTOCOL_VERSION,
|
|
@@ -2100,8 +2099,7 @@ var UrlElicitationRequiredError = class extends McpError {
|
|
|
2100
2099
|
return this.data?.elicitations ?? [];
|
|
2101
2100
|
}
|
|
2102
2101
|
};
|
|
2103
|
-
|
|
2104
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
|
|
2102
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
|
|
2105
2103
|
/**
|
|
2106
2104
|
* Experimental task interfaces for MCP SDK.
|
|
2107
2105
|
* WARNING: These APIs are experimental and may change without notice.
|
|
@@ -2117,8 +2115,7 @@ var UrlElicitationRequiredError = class extends McpError {
|
|
|
2117
2115
|
function isTerminal(status) {
|
|
2118
2116
|
return status === "completed" || status === "failed" || status === "cancelled";
|
|
2119
2117
|
}
|
|
2120
|
-
|
|
2121
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/Options.js
|
|
2118
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/Options.js
|
|
2122
2119
|
const ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
|
|
2123
2120
|
const defaultOptions = {
|
|
2124
2121
|
name: void 0,
|
|
@@ -2151,8 +2148,7 @@ const getDefaultOptions = (options) => typeof options === "string" ? {
|
|
|
2151
2148
|
...defaultOptions,
|
|
2152
2149
|
...options
|
|
2153
2150
|
};
|
|
2154
|
-
|
|
2155
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/Refs.js
|
|
2151
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/Refs.js
|
|
2156
2152
|
const getRefs = (options) => {
|
|
2157
2153
|
const _options = getDefaultOptions(options);
|
|
2158
2154
|
const currentPath = _options.name !== void 0 ? [
|
|
@@ -2176,8 +2172,7 @@ const getRefs = (options) => {
|
|
|
2176
2172
|
}]))
|
|
2177
2173
|
};
|
|
2178
2174
|
};
|
|
2179
|
-
|
|
2180
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/errorMessages.js
|
|
2175
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/errorMessages.js
|
|
2181
2176
|
function addErrorMessage(res, key, errorMessage, refs) {
|
|
2182
2177
|
if (!refs?.errorMessages) return;
|
|
2183
2178
|
if (errorMessage) res.errorMessage = {
|
|
@@ -2189,15 +2184,13 @@ function setResponseValueAndErrors(res, key, value, errorMessage, refs) {
|
|
|
2189
2184
|
res[key] = value;
|
|
2190
2185
|
addErrorMessage(res, key, errorMessage, refs);
|
|
2191
2186
|
}
|
|
2192
|
-
|
|
2193
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js
|
|
2187
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js
|
|
2194
2188
|
const getRelativePath = (pathA, pathB) => {
|
|
2195
2189
|
let i = 0;
|
|
2196
2190
|
for (; i < pathA.length && i < pathB.length; i++) if (pathA[i] !== pathB[i]) break;
|
|
2197
2191
|
return [(pathA.length - i).toString(), ...pathB.slice(i)].join("/");
|
|
2198
2192
|
};
|
|
2199
|
-
|
|
2200
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/any.js
|
|
2193
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/any.js
|
|
2201
2194
|
function parseAnyDef(refs) {
|
|
2202
2195
|
if (refs.target !== "openAi") return {};
|
|
2203
2196
|
const anyDefinitionPath = [
|
|
@@ -2208,8 +2201,7 @@ function parseAnyDef(refs) {
|
|
|
2208
2201
|
refs.flags.hasReferencedOpenAiAnyType = true;
|
|
2209
2202
|
return { $ref: refs.$refStrategy === "relative" ? getRelativePath(anyDefinitionPath, refs.currentPath) : anyDefinitionPath.join("/") };
|
|
2210
2203
|
}
|
|
2211
|
-
|
|
2212
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/array.js
|
|
2204
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/array.js
|
|
2213
2205
|
function parseArrayDef(def, refs) {
|
|
2214
2206
|
const res = { type: "array" };
|
|
2215
2207
|
if (def.type?._def && def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) res.items = parseDef(def.type._def, {
|
|
@@ -2224,8 +2216,7 @@ function parseArrayDef(def, refs) {
|
|
|
2224
2216
|
}
|
|
2225
2217
|
return res;
|
|
2226
2218
|
}
|
|
2227
|
-
|
|
2228
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js
|
|
2219
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js
|
|
2229
2220
|
function parseBigintDef(def, refs) {
|
|
2230
2221
|
const res = {
|
|
2231
2222
|
type: "integer",
|
|
@@ -2255,23 +2246,19 @@ function parseBigintDef(def, refs) {
|
|
|
2255
2246
|
}
|
|
2256
2247
|
return res;
|
|
2257
2248
|
}
|
|
2258
|
-
|
|
2259
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js
|
|
2249
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js
|
|
2260
2250
|
function parseBooleanDef() {
|
|
2261
2251
|
return { type: "boolean" };
|
|
2262
2252
|
}
|
|
2263
|
-
|
|
2264
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js
|
|
2253
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js
|
|
2265
2254
|
function parseBrandedDef(_def, refs) {
|
|
2266
2255
|
return parseDef(_def.type._def, refs);
|
|
2267
2256
|
}
|
|
2268
|
-
|
|
2269
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js
|
|
2257
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js
|
|
2270
2258
|
const parseCatchDef = (def, refs) => {
|
|
2271
2259
|
return parseDef(def.innerType._def, refs);
|
|
2272
2260
|
};
|
|
2273
|
-
|
|
2274
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/date.js
|
|
2261
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/date.js
|
|
2275
2262
|
function parseDateDef(def, refs, overrideDateStrategy) {
|
|
2276
2263
|
const strategy = overrideDateStrategy ?? refs.dateStrategy;
|
|
2277
2264
|
if (Array.isArray(strategy)) return { anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)) };
|
|
@@ -2302,29 +2289,25 @@ const integerDateParser = (def, refs) => {
|
|
|
2302
2289
|
}
|
|
2303
2290
|
return res;
|
|
2304
2291
|
};
|
|
2305
|
-
|
|
2306
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/default.js
|
|
2292
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/default.js
|
|
2307
2293
|
function parseDefaultDef(_def, refs) {
|
|
2308
2294
|
return {
|
|
2309
2295
|
...parseDef(_def.innerType._def, refs),
|
|
2310
2296
|
default: _def.defaultValue()
|
|
2311
2297
|
};
|
|
2312
2298
|
}
|
|
2313
|
-
|
|
2314
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js
|
|
2299
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js
|
|
2315
2300
|
function parseEffectsDef(_def, refs) {
|
|
2316
2301
|
return refs.effectStrategy === "input" ? parseDef(_def.schema._def, refs) : parseAnyDef(refs);
|
|
2317
2302
|
}
|
|
2318
|
-
|
|
2319
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js
|
|
2303
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js
|
|
2320
2304
|
function parseEnumDef(def) {
|
|
2321
2305
|
return {
|
|
2322
2306
|
type: "string",
|
|
2323
2307
|
enum: Array.from(def.values)
|
|
2324
2308
|
};
|
|
2325
2309
|
}
|
|
2326
|
-
|
|
2327
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js
|
|
2310
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js
|
|
2328
2311
|
const isJsonSchema7AllOfType = (type) => {
|
|
2329
2312
|
if ("type" in type && type.type === "string") return false;
|
|
2330
2313
|
return "allOf" in type;
|
|
@@ -2365,8 +2348,7 @@ function parseIntersectionDef(def, refs) {
|
|
|
2365
2348
|
...unevaluatedProperties
|
|
2366
2349
|
} : void 0;
|
|
2367
2350
|
}
|
|
2368
|
-
|
|
2369
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js
|
|
2351
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js
|
|
2370
2352
|
function parseLiteralDef(def, refs) {
|
|
2371
2353
|
const parsedType = typeof def.value;
|
|
2372
2354
|
if (parsedType !== "bigint" && parsedType !== "number" && parsedType !== "boolean" && parsedType !== "string") return { type: Array.isArray(def.value) ? "array" : "object" };
|
|
@@ -2379,8 +2361,7 @@ function parseLiteralDef(def, refs) {
|
|
|
2379
2361
|
const: def.value
|
|
2380
2362
|
};
|
|
2381
2363
|
}
|
|
2382
|
-
|
|
2383
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/string.js
|
|
2364
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/string.js
|
|
2384
2365
|
let emojiRegex = void 0;
|
|
2385
2366
|
/**
|
|
2386
2367
|
* Generated from the regular expressions found here as of 2024-05-22:
|
|
@@ -2642,8 +2623,7 @@ function stringifyRegExpWithFlags(regex, refs) {
|
|
|
2642
2623
|
}
|
|
2643
2624
|
return pattern;
|
|
2644
2625
|
}
|
|
2645
|
-
|
|
2646
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/record.js
|
|
2626
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/record.js
|
|
2647
2627
|
function parseRecordDef(def, refs) {
|
|
2648
2628
|
if (refs.target === "openAi") console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");
|
|
2649
2629
|
if (refs.target === "openApi3" && def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) return {
|
|
@@ -2689,8 +2669,7 @@ function parseRecordDef(def, refs) {
|
|
|
2689
2669
|
}
|
|
2690
2670
|
return schema;
|
|
2691
2671
|
}
|
|
2692
|
-
|
|
2693
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/map.js
|
|
2672
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/map.js
|
|
2694
2673
|
function parseMapDef(def, refs) {
|
|
2695
2674
|
if (refs.mapStrategy === "record") return parseRecordDef(def, refs);
|
|
2696
2675
|
return {
|
|
@@ -2720,8 +2699,7 @@ function parseMapDef(def, refs) {
|
|
|
2720
2699
|
}
|
|
2721
2700
|
};
|
|
2722
2701
|
}
|
|
2723
|
-
|
|
2724
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js
|
|
2702
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js
|
|
2725
2703
|
function parseNativeEnumDef(def) {
|
|
2726
2704
|
const object = def.values;
|
|
2727
2705
|
const actualValues = Object.keys(def.values).filter((key) => {
|
|
@@ -2733,24 +2711,21 @@ function parseNativeEnumDef(def) {
|
|
|
2733
2711
|
enum: actualValues
|
|
2734
2712
|
};
|
|
2735
2713
|
}
|
|
2736
|
-
|
|
2737
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/never.js
|
|
2714
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/never.js
|
|
2738
2715
|
function parseNeverDef(refs) {
|
|
2739
2716
|
return refs.target === "openAi" ? void 0 : { not: parseAnyDef({
|
|
2740
2717
|
...refs,
|
|
2741
2718
|
currentPath: [...refs.currentPath, "not"]
|
|
2742
2719
|
}) };
|
|
2743
2720
|
}
|
|
2744
|
-
|
|
2745
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/null.js
|
|
2721
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/null.js
|
|
2746
2722
|
function parseNullDef(refs) {
|
|
2747
2723
|
return refs.target === "openApi3" ? {
|
|
2748
2724
|
enum: ["null"],
|
|
2749
2725
|
nullable: true
|
|
2750
2726
|
} : { type: "null" };
|
|
2751
2727
|
}
|
|
2752
|
-
|
|
2753
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/union.js
|
|
2728
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/union.js
|
|
2754
2729
|
const primitiveMappings = {
|
|
2755
2730
|
ZodString: "string",
|
|
2756
2731
|
ZodNumber: "number",
|
|
@@ -2805,8 +2780,7 @@ const asAnyOf = (def, refs) => {
|
|
|
2805
2780
|
})).filter((x) => !!x && (!refs.strictUnions || typeof x === "object" && Object.keys(x).length > 0));
|
|
2806
2781
|
return anyOf.length ? { anyOf } : void 0;
|
|
2807
2782
|
};
|
|
2808
|
-
|
|
2809
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js
|
|
2783
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js
|
|
2810
2784
|
function parseNullableDef(def, refs) {
|
|
2811
2785
|
if ([
|
|
2812
2786
|
"ZodString",
|
|
@@ -2845,8 +2819,7 @@ function parseNullableDef(def, refs) {
|
|
|
2845
2819
|
});
|
|
2846
2820
|
return base && { anyOf: [base, { type: "null" }] };
|
|
2847
2821
|
}
|
|
2848
|
-
|
|
2849
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/number.js
|
|
2822
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/number.js
|
|
2850
2823
|
function parseNumberDef(def, refs) {
|
|
2851
2824
|
const res = { type: "number" };
|
|
2852
2825
|
if (!def.checks) return res;
|
|
@@ -2877,8 +2850,7 @@ function parseNumberDef(def, refs) {
|
|
|
2877
2850
|
}
|
|
2878
2851
|
return res;
|
|
2879
2852
|
}
|
|
2880
|
-
|
|
2881
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/object.js
|
|
2853
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/object.js
|
|
2882
2854
|
function parseObjectDef(def, refs) {
|
|
2883
2855
|
const forceOptionalIntoNullable = refs.target === "openAi";
|
|
2884
2856
|
const result = {
|
|
@@ -2936,8 +2908,7 @@ function safeIsOptional(schema) {
|
|
|
2936
2908
|
return true;
|
|
2937
2909
|
}
|
|
2938
2910
|
}
|
|
2939
|
-
|
|
2940
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js
|
|
2911
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js
|
|
2941
2912
|
const parseOptionalDef = (def, refs) => {
|
|
2942
2913
|
if (refs.currentPath.toString() === refs.propertyPath?.toString()) return parseDef(def.innerType._def, refs);
|
|
2943
2914
|
const innerSchema = parseDef(def.innerType._def, {
|
|
@@ -2950,8 +2921,7 @@ const parseOptionalDef = (def, refs) => {
|
|
|
2950
2921
|
});
|
|
2951
2922
|
return innerSchema ? { anyOf: [{ not: parseAnyDef(refs) }, innerSchema] } : parseAnyDef(refs);
|
|
2952
2923
|
};
|
|
2953
|
-
|
|
2954
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js
|
|
2924
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js
|
|
2955
2925
|
const parsePipelineDef = (def, refs) => {
|
|
2956
2926
|
if (refs.pipeStrategy === "input") return parseDef(def.in._def, refs);
|
|
2957
2927
|
else if (refs.pipeStrategy === "output") return parseDef(def.out._def, refs);
|
|
@@ -2972,13 +2942,11 @@ const parsePipelineDef = (def, refs) => {
|
|
|
2972
2942
|
]
|
|
2973
2943
|
})].filter((x) => x !== void 0) };
|
|
2974
2944
|
};
|
|
2975
|
-
|
|
2976
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js
|
|
2945
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js
|
|
2977
2946
|
function parsePromiseDef(def, refs) {
|
|
2978
2947
|
return parseDef(def.type._def, refs);
|
|
2979
2948
|
}
|
|
2980
|
-
|
|
2981
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/set.js
|
|
2949
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/set.js
|
|
2982
2950
|
function parseSetDef(def, refs) {
|
|
2983
2951
|
const schema = {
|
|
2984
2952
|
type: "array",
|
|
@@ -2992,8 +2960,7 @@ function parseSetDef(def, refs) {
|
|
|
2992
2960
|
if (def.maxSize) setResponseValueAndErrors(schema, "maxItems", def.maxSize.value, def.maxSize.message, refs);
|
|
2993
2961
|
return schema;
|
|
2994
2962
|
}
|
|
2995
|
-
|
|
2996
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js
|
|
2963
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js
|
|
2997
2964
|
function parseTupleDef(def, refs) {
|
|
2998
2965
|
if (def.rest) return {
|
|
2999
2966
|
type: "array",
|
|
@@ -3025,23 +2992,19 @@ function parseTupleDef(def, refs) {
|
|
|
3025
2992
|
})).reduce((acc, x) => x === void 0 ? acc : [...acc, x], [])
|
|
3026
2993
|
};
|
|
3027
2994
|
}
|
|
3028
|
-
|
|
3029
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js
|
|
2995
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js
|
|
3030
2996
|
function parseUndefinedDef(refs) {
|
|
3031
2997
|
return { not: parseAnyDef(refs) };
|
|
3032
2998
|
}
|
|
3033
|
-
|
|
3034
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js
|
|
2999
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js
|
|
3035
3000
|
function parseUnknownDef(refs) {
|
|
3036
3001
|
return parseAnyDef(refs);
|
|
3037
3002
|
}
|
|
3038
|
-
|
|
3039
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js
|
|
3003
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js
|
|
3040
3004
|
const parseReadonlyDef = (def, refs) => {
|
|
3041
3005
|
return parseDef(def.innerType._def, refs);
|
|
3042
3006
|
};
|
|
3043
|
-
|
|
3044
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/selectParser.js
|
|
3007
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/selectParser.js
|
|
3045
3008
|
const selectParser = (def, typeName, refs) => {
|
|
3046
3009
|
switch (typeName) {
|
|
3047
3010
|
case ZodFirstPartyTypeKind.ZodString: return parseStringDef(def, refs);
|
|
@@ -3083,8 +3046,7 @@ const selectParser = (def, typeName, refs) => {
|
|
|
3083
3046
|
default: return ((_) => void 0)(typeName);
|
|
3084
3047
|
}
|
|
3085
3048
|
};
|
|
3086
|
-
|
|
3087
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parseDef.js
|
|
3049
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/parseDef.js
|
|
3088
3050
|
function parseDef(def, refs, forceResolution = false) {
|
|
3089
3051
|
const seenItem = refs.seen.get(def);
|
|
3090
3052
|
if (refs.override) {
|
|
@@ -3132,8 +3094,7 @@ const addMeta = (def, refs, jsonSchema) => {
|
|
|
3132
3094
|
}
|
|
3133
3095
|
return jsonSchema;
|
|
3134
3096
|
};
|
|
3135
|
-
|
|
3136
|
-
//#region node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js
|
|
3097
|
+
// node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.6.7/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js
|
|
3137
3098
|
const zodToJsonSchema = (schema, options) => {
|
|
3138
3099
|
const refs = getRefs(options);
|
|
3139
3100
|
let definitions = typeof options === "object" && options.definitions ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({
|
|
@@ -3195,8 +3156,7 @@ const zodToJsonSchema = (schema, options) => {
|
|
|
3195
3156
|
if (refs.target === "openAi" && ("anyOf" in combined || "oneOf" in combined || "allOf" in combined || "type" in combined && Array.isArray(combined.type))) console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");
|
|
3196
3157
|
return combined;
|
|
3197
3158
|
};
|
|
3198
|
-
|
|
3199
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
|
|
3159
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
|
|
3200
3160
|
function mapMiniTarget(t) {
|
|
3201
3161
|
if (!t) return "draft-7";
|
|
3202
3162
|
if (t === "jsonSchema7" || t === "draft-7") return "draft-7";
|
|
@@ -4092,8 +4052,7 @@ function mergeCapabilities(base, additional) {
|
|
|
4092
4052
|
}
|
|
4093
4053
|
return result;
|
|
4094
4054
|
}
|
|
4095
|
-
|
|
4096
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js
|
|
4055
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js
|
|
4097
4056
|
var require_code$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
4098
4057
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4099
4058
|
exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;
|
|
@@ -4227,8 +4186,7 @@ var require_code$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
4227
4186
|
}
|
|
4228
4187
|
exports.regexpCode = regexpCode;
|
|
4229
4188
|
}));
|
|
4230
|
-
|
|
4231
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.js
|
|
4189
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.js
|
|
4232
4190
|
var require_scope = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
4233
4191
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4234
4192
|
exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;
|
|
@@ -4364,8 +4322,7 @@ var require_scope = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
4364
4322
|
};
|
|
4365
4323
|
exports.ValueScope = ValueScope;
|
|
4366
4324
|
}));
|
|
4367
|
-
|
|
4368
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.js
|
|
4325
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.js
|
|
4369
4326
|
var require_codegen = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
4370
4327
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4371
4328
|
exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;
|
|
@@ -5033,8 +4990,7 @@ var require_codegen = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5033
4990
|
return x instanceof code_1.Name ? x : (0, code_1._)`(${x})`;
|
|
5034
4991
|
}
|
|
5035
4992
|
}));
|
|
5036
|
-
|
|
5037
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.js
|
|
4993
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.js
|
|
5038
4994
|
var require_util = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5039
4995
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5040
4996
|
exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;
|
|
@@ -5174,8 +5130,7 @@ var require_util = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5174
5130
|
}
|
|
5175
5131
|
exports.checkStrictMode = checkStrictMode;
|
|
5176
5132
|
}));
|
|
5177
|
-
|
|
5178
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/names.js
|
|
5133
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/names.js
|
|
5179
5134
|
var require_names = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5180
5135
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5181
5136
|
const codegen_1 = require_codegen();
|
|
@@ -5198,8 +5153,7 @@ var require_names = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5198
5153
|
jsonPart: new codegen_1.Name("jsonPart")
|
|
5199
5154
|
};
|
|
5200
5155
|
}));
|
|
5201
|
-
|
|
5202
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.js
|
|
5156
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.js
|
|
5203
5157
|
var require_errors = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5204
5158
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5205
5159
|
exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;
|
|
@@ -5294,8 +5248,7 @@ var require_errors = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5294
5248
|
if (propertyName) keyValues.push([E.propertyName, propertyName]);
|
|
5295
5249
|
}
|
|
5296
5250
|
}));
|
|
5297
|
-
|
|
5298
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/boolSchema.js
|
|
5251
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/boolSchema.js
|
|
5299
5252
|
var require_boolSchema = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5300
5253
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5301
5254
|
exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;
|
|
@@ -5336,8 +5289,7 @@ var require_boolSchema = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5336
5289
|
(0, errors_1.reportError)(cxt, boolError, void 0, overrideAllErrors);
|
|
5337
5290
|
}
|
|
5338
5291
|
}));
|
|
5339
|
-
|
|
5340
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.js
|
|
5292
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.js
|
|
5341
5293
|
var require_rules = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5342
5294
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5343
5295
|
exports.getRules = exports.isJSONType = void 0;
|
|
@@ -5394,8 +5346,7 @@ var require_rules = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5394
5346
|
}
|
|
5395
5347
|
exports.getRules = getRules;
|
|
5396
5348
|
}));
|
|
5397
|
-
|
|
5398
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/applicability.js
|
|
5349
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/applicability.js
|
|
5399
5350
|
var require_applicability = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5400
5351
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5401
5352
|
exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;
|
|
@@ -5414,8 +5365,7 @@ var require_applicability = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5414
5365
|
}
|
|
5415
5366
|
exports.shouldUseRule = shouldUseRule;
|
|
5416
5367
|
}));
|
|
5417
|
-
|
|
5418
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/dataType.js
|
|
5368
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/dataType.js
|
|
5419
5369
|
var require_dataType = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5420
5370
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5421
5371
|
exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;
|
|
@@ -5578,8 +5528,7 @@ var require_dataType = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5578
5528
|
};
|
|
5579
5529
|
}
|
|
5580
5530
|
}));
|
|
5581
|
-
|
|
5582
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/defaults.js
|
|
5531
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/defaults.js
|
|
5583
5532
|
var require_defaults = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5584
5533
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5585
5534
|
exports.assignDefaults = void 0;
|
|
@@ -5604,8 +5553,7 @@ var require_defaults = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5604
5553
|
gen.if(condition, (0, codegen_1._)`${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);
|
|
5605
5554
|
}
|
|
5606
5555
|
}));
|
|
5607
|
-
|
|
5608
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/code.js
|
|
5556
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/code.js
|
|
5609
5557
|
var require_code = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5610
5558
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5611
5559
|
exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;
|
|
@@ -5728,8 +5676,7 @@ var require_code = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5728
5676
|
}
|
|
5729
5677
|
exports.validateUnion = validateUnion;
|
|
5730
5678
|
}));
|
|
5731
|
-
|
|
5732
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/keyword.js
|
|
5679
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/keyword.js
|
|
5733
5680
|
var require_keyword = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5734
5681
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5735
5682
|
exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;
|
|
@@ -5834,8 +5781,7 @@ var require_keyword = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5834
5781
|
}
|
|
5835
5782
|
exports.validateKeywordUsage = validateKeywordUsage;
|
|
5836
5783
|
}));
|
|
5837
|
-
|
|
5838
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.js
|
|
5784
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.js
|
|
5839
5785
|
var require_subschema = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
5840
5786
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5841
5787
|
exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;
|
|
@@ -5901,8 +5847,7 @@ var require_subschema = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
5901
5847
|
}
|
|
5902
5848
|
exports.extendSubschemaMode = extendSubschemaMode;
|
|
5903
5849
|
}));
|
|
5904
|
-
|
|
5905
|
-
//#region node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js
|
|
5850
|
+
// node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js
|
|
5906
5851
|
var require_fast_deep_equal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
5907
5852
|
module.exports = function equal(a, b) {
|
|
5908
5853
|
if (a === b) return true;
|
|
@@ -5931,8 +5876,7 @@ var require_fast_deep_equal = /* @__PURE__ */ __commonJSMin(((exports, module) =
|
|
|
5931
5876
|
return a !== a && b !== b;
|
|
5932
5877
|
};
|
|
5933
5878
|
}));
|
|
5934
|
-
|
|
5935
|
-
//#region node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js
|
|
5879
|
+
// node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js
|
|
5936
5880
|
var require_json_schema_traverse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
5937
5881
|
var traverse = module.exports = function(schema, opts, cb) {
|
|
5938
5882
|
if (typeof opts == "function") {
|
|
@@ -6006,8 +5950,7 @@ var require_json_schema_traverse = /* @__PURE__ */ __commonJSMin(((exports, modu
|
|
|
6006
5950
|
return str.replace(/~/g, "~0").replace(/\//g, "~1");
|
|
6007
5951
|
}
|
|
6008
5952
|
}));
|
|
6009
|
-
|
|
6010
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.js
|
|
5953
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.js
|
|
6011
5954
|
var require_resolve = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
6012
5955
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6013
5956
|
exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = void 0;
|
|
@@ -6135,8 +6078,7 @@ var require_resolve = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
6135
6078
|
}
|
|
6136
6079
|
exports.getSchemaRefs = getSchemaRefs;
|
|
6137
6080
|
}));
|
|
6138
|
-
|
|
6139
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.js
|
|
6081
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.js
|
|
6140
6082
|
var require_validate = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
6141
6083
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6142
6084
|
exports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;
|
|
@@ -6554,8 +6496,7 @@ var require_validate = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
6554
6496
|
}
|
|
6555
6497
|
exports.getData = getData;
|
|
6556
6498
|
}));
|
|
6557
|
-
|
|
6558
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.js
|
|
6499
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.js
|
|
6559
6500
|
var require_validation_error = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
6560
6501
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6561
6502
|
var ValidationError = class extends Error {
|
|
@@ -6567,8 +6508,7 @@ var require_validation_error = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
6567
6508
|
};
|
|
6568
6509
|
exports.default = ValidationError;
|
|
6569
6510
|
}));
|
|
6570
|
-
|
|
6571
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.js
|
|
6511
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.js
|
|
6572
6512
|
var require_ref_error = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
6573
6513
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6574
6514
|
const resolve_1 = require_resolve();
|
|
@@ -6581,8 +6521,7 @@ var require_ref_error = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
6581
6521
|
};
|
|
6582
6522
|
exports.default = MissingRefError;
|
|
6583
6523
|
}));
|
|
6584
|
-
|
|
6585
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.js
|
|
6524
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.js
|
|
6586
6525
|
var require_compile = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
6587
6526
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6588
6527
|
exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;
|
|
@@ -6795,8 +6734,7 @@ var require_compile = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
6795
6734
|
if (env.schema !== env.root.schema) return env;
|
|
6796
6735
|
}
|
|
6797
6736
|
}));
|
|
6798
|
-
|
|
6799
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/data.json
|
|
6737
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/data.json
|
|
6800
6738
|
var require_data = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6801
6739
|
module.exports = {
|
|
6802
6740
|
"$id": "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",
|
|
@@ -6810,8 +6748,7 @@ var require_data = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
6810
6748
|
"additionalProperties": false
|
|
6811
6749
|
};
|
|
6812
6750
|
}));
|
|
6813
|
-
|
|
6814
|
-
//#region node_modules/.pnpm/fast-uri@3.1.9/node_modules/fast-uri/lib/utils.js
|
|
6751
|
+
// node_modules/.pnpm/fast-uri@3.1.9/node_modules/fast-uri/lib/utils.js
|
|
6815
6752
|
var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6816
6753
|
/** @type {(value: string) => boolean} */
|
|
6817
6754
|
const isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu);
|
|
@@ -7447,8 +7384,7 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
7447
7384
|
stringArrayToHexStripped
|
|
7448
7385
|
};
|
|
7449
7386
|
}));
|
|
7450
|
-
|
|
7451
|
-
//#region node_modules/.pnpm/fast-uri@3.1.9/node_modules/fast-uri/lib/schemes.js
|
|
7387
|
+
// node_modules/.pnpm/fast-uri@3.1.9/node_modules/fast-uri/lib/schemes.js
|
|
7452
7388
|
var require_schemes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
7453
7389
|
const { isUUID } = require_utils();
|
|
7454
7390
|
const URN_REG = /^([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-./:;=@]|%[\da-f]{2})+)$/iu;
|
|
@@ -7631,8 +7567,7 @@ var require_schemes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
7631
7567
|
getSchemeHandler
|
|
7632
7568
|
};
|
|
7633
7569
|
}));
|
|
7634
|
-
|
|
7635
|
-
//#region node_modules/.pnpm/fast-uri@3.1.9/node_modules/fast-uri/index.js
|
|
7570
|
+
// node_modules/.pnpm/fast-uri@3.1.9/node_modules/fast-uri/index.js
|
|
7636
7571
|
var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
7637
7572
|
const { normalizeIPv6, removeDotSegments, removeDotSegmentsRelative, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils();
|
|
7638
7573
|
const { SCHEMES, getSchemeHandler } = require_schemes();
|
|
@@ -8082,16 +8017,14 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
8082
8017
|
module.exports.default = fastUri;
|
|
8083
8018
|
module.exports.fastUri = fastUri;
|
|
8084
8019
|
}));
|
|
8085
|
-
|
|
8086
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/uri.js
|
|
8020
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/uri.js
|
|
8087
8021
|
var require_uri = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8088
8022
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8089
8023
|
const uri = require_fast_uri();
|
|
8090
8024
|
uri.code = "require(\"ajv/dist/runtime/uri\").default";
|
|
8091
8025
|
exports.default = uri;
|
|
8092
8026
|
}));
|
|
8093
|
-
|
|
8094
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.js
|
|
8027
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.js
|
|
8095
8028
|
var require_core$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8096
8029
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8097
8030
|
exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;
|
|
@@ -8659,8 +8592,7 @@ var require_core$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8659
8592
|
return { anyOf: [schema, $dataRef] };
|
|
8660
8593
|
}
|
|
8661
8594
|
}));
|
|
8662
|
-
|
|
8663
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/id.js
|
|
8595
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/id.js
|
|
8664
8596
|
var require_id = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8665
8597
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8666
8598
|
exports.default = {
|
|
@@ -8670,8 +8602,7 @@ var require_id = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8670
8602
|
}
|
|
8671
8603
|
};
|
|
8672
8604
|
}));
|
|
8673
|
-
|
|
8674
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/ref.js
|
|
8605
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/ref.js
|
|
8675
8606
|
var require_ref = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8676
8607
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8677
8608
|
exports.callRef = exports.getValidate = void 0;
|
|
@@ -8777,8 +8708,7 @@ var require_ref = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8777
8708
|
exports.callRef = callRef;
|
|
8778
8709
|
exports.default = def;
|
|
8779
8710
|
}));
|
|
8780
|
-
|
|
8781
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/index.js
|
|
8711
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/index.js
|
|
8782
8712
|
var require_core = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8783
8713
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8784
8714
|
const id_1 = require_id();
|
|
@@ -8794,8 +8724,7 @@ var require_core = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8794
8724
|
ref_1.default
|
|
8795
8725
|
];
|
|
8796
8726
|
}));
|
|
8797
|
-
|
|
8798
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js
|
|
8727
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js
|
|
8799
8728
|
var require_limitNumber = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8800
8729
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8801
8730
|
const codegen_1 = require_codegen();
|
|
@@ -8837,8 +8766,7 @@ var require_limitNumber = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8837
8766
|
}
|
|
8838
8767
|
};
|
|
8839
8768
|
}));
|
|
8840
|
-
|
|
8841
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js
|
|
8769
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js
|
|
8842
8770
|
var require_multipleOf = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8843
8771
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8844
8772
|
const codegen_1 = require_codegen();
|
|
@@ -8860,8 +8788,7 @@ var require_multipleOf = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8860
8788
|
}
|
|
8861
8789
|
};
|
|
8862
8790
|
}));
|
|
8863
|
-
|
|
8864
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/ucs2length.js
|
|
8791
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/ucs2length.js
|
|
8865
8792
|
var require_ucs2length = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8866
8793
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8867
8794
|
function ucs2length(str) {
|
|
@@ -8882,8 +8809,7 @@ var require_ucs2length = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8882
8809
|
exports.default = ucs2length;
|
|
8883
8810
|
ucs2length.code = "require(\"ajv/dist/runtime/ucs2length\").default";
|
|
8884
8811
|
}));
|
|
8885
|
-
|
|
8886
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js
|
|
8812
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js
|
|
8887
8813
|
var require_limitLength = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8888
8814
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8889
8815
|
const codegen_1 = require_codegen();
|
|
@@ -8909,8 +8835,7 @@ var require_limitLength = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8909
8835
|
}
|
|
8910
8836
|
};
|
|
8911
8837
|
}));
|
|
8912
|
-
|
|
8913
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.js
|
|
8838
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.js
|
|
8914
8839
|
var require_pattern = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8915
8840
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8916
8841
|
const code_1 = require_code();
|
|
@@ -8941,8 +8866,7 @@ var require_pattern = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8941
8866
|
}
|
|
8942
8867
|
};
|
|
8943
8868
|
}));
|
|
8944
|
-
|
|
8945
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js
|
|
8869
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js
|
|
8946
8870
|
var require_limitProperties = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8947
8871
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8948
8872
|
const codegen_1 = require_codegen();
|
|
@@ -8965,8 +8889,7 @@ var require_limitProperties = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
8965
8889
|
}
|
|
8966
8890
|
};
|
|
8967
8891
|
}));
|
|
8968
|
-
|
|
8969
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.js
|
|
8892
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.js
|
|
8970
8893
|
var require_required = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
8971
8894
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8972
8895
|
const code_1 = require_code();
|
|
@@ -9031,8 +8954,7 @@ var require_required = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9031
8954
|
}
|
|
9032
8955
|
};
|
|
9033
8956
|
}));
|
|
9034
|
-
|
|
9035
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js
|
|
8957
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js
|
|
9036
8958
|
var require_limitItems = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9037
8959
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9038
8960
|
const codegen_1 = require_codegen();
|
|
@@ -9055,16 +8977,14 @@ var require_limitItems = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9055
8977
|
}
|
|
9056
8978
|
};
|
|
9057
8979
|
}));
|
|
9058
|
-
|
|
9059
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/equal.js
|
|
8980
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/equal.js
|
|
9060
8981
|
var require_equal = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9061
8982
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9062
8983
|
const equal = require_fast_deep_equal();
|
|
9063
8984
|
equal.code = "require(\"ajv/dist/runtime/equal\").default";
|
|
9064
8985
|
exports.default = equal;
|
|
9065
8986
|
}));
|
|
9066
|
-
|
|
9067
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js
|
|
8987
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js
|
|
9068
8988
|
var require_uniqueItems = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9069
8989
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9070
8990
|
const dataType_1 = require_dataType();
|
|
@@ -9126,8 +9046,7 @@ var require_uniqueItems = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9126
9046
|
}
|
|
9127
9047
|
};
|
|
9128
9048
|
}));
|
|
9129
|
-
|
|
9130
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.js
|
|
9049
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.js
|
|
9131
9050
|
var require_const = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9132
9051
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9133
9052
|
const codegen_1 = require_codegen();
|
|
@@ -9147,8 +9066,7 @@ var require_const = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9147
9066
|
}
|
|
9148
9067
|
};
|
|
9149
9068
|
}));
|
|
9150
|
-
|
|
9151
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.js
|
|
9069
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.js
|
|
9152
9070
|
var require_enum = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9153
9071
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9154
9072
|
const codegen_1 = require_codegen();
|
|
@@ -9190,8 +9108,7 @@ var require_enum = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9190
9108
|
}
|
|
9191
9109
|
};
|
|
9192
9110
|
}));
|
|
9193
|
-
|
|
9194
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.js
|
|
9111
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.js
|
|
9195
9112
|
var require_validation = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9196
9113
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9197
9114
|
const limitNumber_1 = require_limitNumber();
|
|
@@ -9225,8 +9142,7 @@ var require_validation = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9225
9142
|
enum_1.default
|
|
9226
9143
|
];
|
|
9227
9144
|
}));
|
|
9228
|
-
|
|
9229
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js
|
|
9145
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js
|
|
9230
9146
|
var require_additionalItems = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9231
9147
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9232
9148
|
exports.validateAdditionalItems = void 0;
|
|
@@ -9277,8 +9193,7 @@ var require_additionalItems = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9277
9193
|
exports.validateAdditionalItems = validateAdditionalItems;
|
|
9278
9194
|
exports.default = def;
|
|
9279
9195
|
}));
|
|
9280
|
-
|
|
9281
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items.js
|
|
9196
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items.js
|
|
9282
9197
|
var require_items = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9283
9198
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9284
9199
|
exports.validateTuple = void 0;
|
|
@@ -9330,8 +9245,7 @@ var require_items = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9330
9245
|
exports.validateTuple = validateTuple;
|
|
9331
9246
|
exports.default = def;
|
|
9332
9247
|
}));
|
|
9333
|
-
|
|
9334
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js
|
|
9248
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js
|
|
9335
9249
|
var require_prefixItems = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9336
9250
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9337
9251
|
const items_1 = require_items();
|
|
@@ -9343,8 +9257,7 @@ var require_prefixItems = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9343
9257
|
code: (cxt) => (0, items_1.validateTuple)(cxt, "items")
|
|
9344
9258
|
};
|
|
9345
9259
|
}));
|
|
9346
|
-
|
|
9347
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js
|
|
9260
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js
|
|
9348
9261
|
var require_items2020 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9349
9262
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9350
9263
|
const codegen_1 = require_codegen();
|
|
@@ -9370,8 +9283,7 @@ var require_items2020 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9370
9283
|
}
|
|
9371
9284
|
};
|
|
9372
9285
|
}));
|
|
9373
|
-
|
|
9374
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.js
|
|
9286
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.js
|
|
9375
9287
|
var require_contains = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9376
9288
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9377
9289
|
const codegen_1 = require_codegen();
|
|
@@ -9454,8 +9366,7 @@ var require_contains = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9454
9366
|
}
|
|
9455
9367
|
};
|
|
9456
9368
|
}));
|
|
9457
|
-
|
|
9458
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js
|
|
9369
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js
|
|
9459
9370
|
var require_dependencies = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9460
9371
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9461
9372
|
exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;
|
|
@@ -9535,8 +9446,7 @@ var require_dependencies = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9535
9446
|
exports.validateSchemaDeps = validateSchemaDeps;
|
|
9536
9447
|
exports.default = def;
|
|
9537
9448
|
}));
|
|
9538
|
-
|
|
9539
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js
|
|
9449
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js
|
|
9540
9450
|
var require_propertyNames = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9541
9451
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9542
9452
|
const codegen_1 = require_codegen();
|
|
@@ -9571,8 +9481,7 @@ var require_propertyNames = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9571
9481
|
}
|
|
9572
9482
|
};
|
|
9573
9483
|
}));
|
|
9574
|
-
|
|
9575
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js
|
|
9484
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js
|
|
9576
9485
|
var require_additionalProperties = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9577
9486
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9578
9487
|
const code_1 = require_code();
|
|
@@ -9660,8 +9569,7 @@ var require_additionalProperties = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9660
9569
|
}
|
|
9661
9570
|
};
|
|
9662
9571
|
}));
|
|
9663
|
-
|
|
9664
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/properties.js
|
|
9572
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/properties.js
|
|
9665
9573
|
var require_properties = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9666
9574
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9667
9575
|
const validate_1 = require_validate();
|
|
@@ -9705,8 +9613,7 @@ var require_properties = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9705
9613
|
}
|
|
9706
9614
|
};
|
|
9707
9615
|
}));
|
|
9708
|
-
|
|
9709
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js
|
|
9616
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js
|
|
9710
9617
|
var require_patternProperties = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9711
9618
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9712
9619
|
const code_1 = require_code();
|
|
@@ -9760,8 +9667,7 @@ var require_patternProperties = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9760
9667
|
}
|
|
9761
9668
|
};
|
|
9762
9669
|
}));
|
|
9763
|
-
|
|
9764
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.js
|
|
9670
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.js
|
|
9765
9671
|
var require_not = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9766
9672
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9767
9673
|
const util_1 = require_util();
|
|
@@ -9787,8 +9693,7 @@ var require_not = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9787
9693
|
error: { message: "must NOT be valid" }
|
|
9788
9694
|
};
|
|
9789
9695
|
}));
|
|
9790
|
-
|
|
9791
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js
|
|
9696
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js
|
|
9792
9697
|
var require_anyOf = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9793
9698
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9794
9699
|
exports.default = {
|
|
@@ -9799,8 +9704,7 @@ var require_anyOf = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9799
9704
|
error: { message: "must match a schema in anyOf" }
|
|
9800
9705
|
};
|
|
9801
9706
|
}));
|
|
9802
|
-
|
|
9803
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js
|
|
9707
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js
|
|
9804
9708
|
var require_oneOf = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9805
9709
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9806
9710
|
const codegen_1 = require_codegen();
|
|
@@ -9845,8 +9749,7 @@ var require_oneOf = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9845
9749
|
}
|
|
9846
9750
|
};
|
|
9847
9751
|
}));
|
|
9848
|
-
|
|
9849
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js
|
|
9752
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js
|
|
9850
9753
|
var require_allOf = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9851
9754
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9852
9755
|
const util_1 = require_util();
|
|
@@ -9870,8 +9773,7 @@ var require_allOf = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9870
9773
|
}
|
|
9871
9774
|
};
|
|
9872
9775
|
}));
|
|
9873
|
-
|
|
9874
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.js
|
|
9776
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.js
|
|
9875
9777
|
var require_if = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9876
9778
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9877
9779
|
const codegen_1 = require_codegen();
|
|
@@ -9927,8 +9829,7 @@ var require_if = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9927
9829
|
}
|
|
9928
9830
|
exports.default = def;
|
|
9929
9831
|
}));
|
|
9930
|
-
|
|
9931
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js
|
|
9832
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js
|
|
9932
9833
|
var require_thenElse = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9933
9834
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9934
9835
|
const util_1 = require_util();
|
|
@@ -9940,8 +9841,7 @@ var require_thenElse = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9940
9841
|
}
|
|
9941
9842
|
};
|
|
9942
9843
|
}));
|
|
9943
|
-
|
|
9944
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.js
|
|
9844
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.js
|
|
9945
9845
|
var require_applicator = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9946
9846
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9947
9847
|
const additionalItems_1 = require_additionalItems();
|
|
@@ -9981,8 +9881,7 @@ var require_applicator = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
9981
9881
|
}
|
|
9982
9882
|
exports.default = getApplicator;
|
|
9983
9883
|
}));
|
|
9984
|
-
|
|
9985
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.js
|
|
9884
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.js
|
|
9986
9885
|
var require_format$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
9987
9886
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9988
9887
|
const codegen_1 = require_codegen();
|
|
@@ -10069,14 +9968,12 @@ var require_format$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
10069
9968
|
}
|
|
10070
9969
|
};
|
|
10071
9970
|
}));
|
|
10072
|
-
|
|
10073
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/index.js
|
|
9971
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/index.js
|
|
10074
9972
|
var require_format = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
10075
9973
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10076
9974
|
exports.default = [require_format$1().default];
|
|
10077
9975
|
}));
|
|
10078
|
-
|
|
10079
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/metadata.js
|
|
9976
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/metadata.js
|
|
10080
9977
|
var require_metadata = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
10081
9978
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10082
9979
|
exports.contentVocabulary = exports.metadataVocabulary = void 0;
|
|
@@ -10095,8 +9992,7 @@ var require_metadata = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
10095
9992
|
"contentSchema"
|
|
10096
9993
|
];
|
|
10097
9994
|
}));
|
|
10098
|
-
|
|
10099
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/draft7.js
|
|
9995
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/draft7.js
|
|
10100
9996
|
var require_draft7 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
10101
9997
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10102
9998
|
const core_1 = require_core();
|
|
@@ -10113,8 +10009,7 @@ var require_draft7 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
10113
10009
|
metadata_1.contentVocabulary
|
|
10114
10010
|
];
|
|
10115
10011
|
}));
|
|
10116
|
-
|
|
10117
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.js
|
|
10012
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.js
|
|
10118
10013
|
var require_types = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
10119
10014
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10120
10015
|
exports.DiscrError = void 0;
|
|
@@ -10124,8 +10019,7 @@ var require_types = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
10124
10019
|
DiscrError["Mapping"] = "mapping";
|
|
10125
10020
|
})(DiscrError || (exports.DiscrError = DiscrError = {}));
|
|
10126
10021
|
}));
|
|
10127
|
-
|
|
10128
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.js
|
|
10022
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.js
|
|
10129
10023
|
var require_discriminator = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
10130
10024
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10131
10025
|
const codegen_1 = require_codegen();
|
|
@@ -10217,8 +10111,7 @@ var require_discriminator = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
10217
10111
|
}
|
|
10218
10112
|
};
|
|
10219
10113
|
}));
|
|
10220
|
-
|
|
10221
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-draft-07.json
|
|
10114
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-draft-07.json
|
|
10222
10115
|
var require_json_schema_draft_07 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
10223
10116
|
module.exports = {
|
|
10224
10117
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
@@ -10355,8 +10248,7 @@ var require_json_schema_draft_07 = /* @__PURE__ */ __commonJSMin(((exports, modu
|
|
|
10355
10248
|
"default": true
|
|
10356
10249
|
};
|
|
10357
10250
|
}));
|
|
10358
|
-
|
|
10359
|
-
//#region node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/ajv.js
|
|
10251
|
+
// node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/ajv.js
|
|
10360
10252
|
var require_ajv = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
10361
10253
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10362
10254
|
exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = void 0;
|
|
@@ -10447,8 +10339,7 @@ var require_ajv = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
10447
10339
|
}
|
|
10448
10340
|
});
|
|
10449
10341
|
}));
|
|
10450
|
-
|
|
10451
|
-
//#region node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.20.0/node_modules/ajv-formats/dist/formats.js
|
|
10342
|
+
// node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.20.0/node_modules/ajv-formats/dist/formats.js
|
|
10452
10343
|
var require_formats = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
10453
10344
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10454
10345
|
exports.formatNames = exports.fastFormats = exports.fullFormats = void 0;
|
|
@@ -10635,8 +10526,7 @@ var require_formats = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
10635
10526
|
}
|
|
10636
10527
|
}
|
|
10637
10528
|
}));
|
|
10638
|
-
|
|
10639
|
-
//#region node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.20.0/node_modules/ajv-formats/dist/limit.js
|
|
10529
|
+
// node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.20.0/node_modules/ajv-formats/dist/limit.js
|
|
10640
10530
|
var require_limit = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
10641
10531
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10642
10532
|
exports.formatLimitDefinition = void 0;
|
|
@@ -10713,8 +10603,7 @@ var require_limit = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
10713
10603
|
};
|
|
10714
10604
|
exports.default = formatLimitPlugin;
|
|
10715
10605
|
}));
|
|
10716
|
-
|
|
10717
|
-
//#region node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.20.0/node_modules/ajv-formats/dist/index.js
|
|
10606
|
+
// node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.20.0/node_modules/ajv-formats/dist/index.js
|
|
10718
10607
|
var require_dist = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
10719
10608
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10720
10609
|
const formats_1 = require_formats();
|
|
@@ -10747,8 +10636,7 @@ var require_dist = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
10747
10636
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10748
10637
|
exports.default = formatsPlugin;
|
|
10749
10638
|
}));
|
|
10750
|
-
|
|
10751
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js
|
|
10639
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js
|
|
10752
10640
|
var import_ajv = /* @__PURE__ */ __toESM(require_ajv(), 1);
|
|
10753
10641
|
var import_dist = /* @__PURE__ */ __toESM(require_dist(), 1);
|
|
10754
10642
|
function createDefaultAjvInstance() {
|
|
@@ -10823,8 +10711,7 @@ var AjvJsonSchemaValidator = class {
|
|
|
10823
10711
|
};
|
|
10824
10712
|
}
|
|
10825
10713
|
};
|
|
10826
|
-
|
|
10827
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js
|
|
10714
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js
|
|
10828
10715
|
/**
|
|
10829
10716
|
* Experimental server task features for MCP SDK.
|
|
10830
10717
|
* WARNING: These APIs are experimental and may change without notice.
|
|
@@ -11041,8 +10928,7 @@ var ExperimentalServerTasks = class {
|
|
|
11041
10928
|
return this._server.cancelTask({ taskId }, options);
|
|
11042
10929
|
}
|
|
11043
10930
|
};
|
|
11044
|
-
|
|
11045
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js
|
|
10931
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js
|
|
11046
10932
|
/**
|
|
11047
10933
|
* Experimental task capability assertion helpers.
|
|
11048
10934
|
* WARNING: These APIs are experimental and may change without notice.
|
|
@@ -11086,8 +10972,7 @@ function assertClientRequestTaskCapability(requests, method, entityName) {
|
|
|
11086
10972
|
case "elicitation/create": if (!requests.elicitation?.create) throw new Error(`${entityName} does not support task creation for elicitation/create (required for ${method})`);
|
|
11087
10973
|
}
|
|
11088
10974
|
}
|
|
11089
|
-
|
|
11090
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
|
|
10975
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
|
|
11091
10976
|
/**
|
|
11092
10977
|
* An MCP server on top of a pluggable transport.
|
|
11093
10978
|
*
|
|
@@ -11409,8 +11294,7 @@ var Server = class extends Protocol {
|
|
|
11409
11294
|
return this.notification({ method: "notifications/prompts/list_changed" });
|
|
11410
11295
|
}
|
|
11411
11296
|
};
|
|
11412
|
-
|
|
11413
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js
|
|
11297
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js
|
|
11414
11298
|
const COMPLETABLE_SYMBOL = Symbol.for("mcp.completable");
|
|
11415
11299
|
/**
|
|
11416
11300
|
* Checks if a schema is completable (has completion metadata).
|
|
@@ -11428,8 +11312,7 @@ var McpZodTypeKind;
|
|
|
11428
11312
|
(function(McpZodTypeKind) {
|
|
11429
11313
|
McpZodTypeKind["Completable"] = "McpCompletable";
|
|
11430
11314
|
})(McpZodTypeKind || (McpZodTypeKind = {}));
|
|
11431
|
-
|
|
11432
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js
|
|
11315
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js
|
|
11433
11316
|
/**
|
|
11434
11317
|
* Tool name validation utilities according to SEP: Specify Format for Tool Names
|
|
11435
11318
|
*
|
|
@@ -11499,8 +11382,7 @@ function validateAndWarnToolName(name) {
|
|
|
11499
11382
|
issueToolNameWarning(name, result.warnings);
|
|
11500
11383
|
return result.isValid;
|
|
11501
11384
|
}
|
|
11502
|
-
|
|
11503
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js
|
|
11385
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js
|
|
11504
11386
|
/**
|
|
11505
11387
|
* Experimental McpServer task features for MCP SDK.
|
|
11506
11388
|
* WARNING: These APIs are experimental and may change without notice.
|
|
@@ -11530,8 +11412,7 @@ var ExperimentalMcpServerTasks = class {
|
|
|
11530
11412
|
return this._mcpServer._createRegisteredTool(name, config.title, config.description, config.inputSchema, config.outputSchema, config.annotations, execution, config._meta, handler);
|
|
11531
11413
|
}
|
|
11532
11414
|
};
|
|
11533
|
-
|
|
11534
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js
|
|
11415
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js
|
|
11535
11416
|
function toolInputElementCount(value, max) {
|
|
11536
11417
|
let count = 0;
|
|
11537
11418
|
const stack = [value];
|
|
@@ -12214,8 +12095,7 @@ function deserializeMessage(line) {
|
|
|
12214
12095
|
function serializeMessage(message) {
|
|
12215
12096
|
return JSON.stringify(message) + "\n";
|
|
12216
12097
|
}
|
|
12217
|
-
|
|
12218
|
-
//#region node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
|
|
12098
|
+
// node_modules/.pnpm/@modelcontextprotocol+sdk@1.32.1_zod@4.6.7/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
|
|
12219
12099
|
/**
|
|
12220
12100
|
* Server transport for stdio: this communicates with an MCP client by reading from the current process' stdin and writing to stdout.
|
|
12221
12101
|
*
|
|
@@ -12273,8 +12153,7 @@ var StdioServerTransport = class {
|
|
|
12273
12153
|
});
|
|
12274
12154
|
}
|
|
12275
12155
|
};
|
|
12276
|
-
|
|
12277
|
-
//#region packages/core/dist/analytics/providers.js
|
|
12156
|
+
// packages/core/dist/analytics/providers.js
|
|
12278
12157
|
const ANALYTICS_PROVIDER_DETAILS = {
|
|
12279
12158
|
google: {
|
|
12280
12159
|
label: "Google Analytics",
|
|
@@ -12295,8 +12174,7 @@ function analyticsProviderDetails(provider) {
|
|
|
12295
12174
|
function analyticsConnectionProviderId(connection) {
|
|
12296
12175
|
return connection.provider === "extension" ? connection.providerId : connection.provider;
|
|
12297
12176
|
}
|
|
12298
|
-
|
|
12299
|
-
//#region packages/core/dist/rules.js
|
|
12177
|
+
// packages/core/dist/rules.js
|
|
12300
12178
|
const RULE_DEFINITIONS = [
|
|
12301
12179
|
{
|
|
12302
12180
|
id: "missing_title",
|
|
@@ -13235,8 +13113,7 @@ function explainRule(ruleId) {
|
|
|
13235
13113
|
function recommendationForRule(ruleId) {
|
|
13236
13114
|
return explainRule(ruleId)?.recommendation ?? "fix";
|
|
13237
13115
|
}
|
|
13238
|
-
|
|
13239
|
-
//#region packages/core/dist/analyze/agent-report.js
|
|
13116
|
+
// packages/core/dist/analyze/agent-report.js
|
|
13240
13117
|
const ACTION_KEYS = /* @__PURE__ */ new Set([
|
|
13241
13118
|
"actions",
|
|
13242
13119
|
"findings",
|
|
@@ -13635,8 +13512,7 @@ function agentActionsView(report, options = {}) {
|
|
|
13635
13512
|
...Object.keys(retainedEvidence).length ? { retainedEvidence } : {}
|
|
13636
13513
|
};
|
|
13637
13514
|
}
|
|
13638
|
-
|
|
13639
|
-
//#region packages/core/dist/providers/errors.js
|
|
13515
|
+
// packages/core/dist/providers/errors.js
|
|
13640
13516
|
const PROVIDER_ERROR_CODES = {
|
|
13641
13517
|
configuration: "AUTH_CONFIG_REQUIRED",
|
|
13642
13518
|
authentication: "AUTH_CONFIG_REQUIRED",
|
|
@@ -13673,8 +13549,7 @@ var ProviderError = class extends Error {
|
|
|
13673
13549
|
};
|
|
13674
13550
|
}
|
|
13675
13551
|
};
|
|
13676
|
-
|
|
13677
|
-
//#region packages/core/dist/errors.js
|
|
13552
|
+
// packages/core/dist/errors.js
|
|
13678
13553
|
const errorMetadata = {
|
|
13679
13554
|
ACCESS_DENIED: {
|
|
13680
13555
|
exitCode: 4,
|
|
@@ -13800,8 +13675,7 @@ async function collectGa4AccountSummaries(fetchPage) {
|
|
|
13800
13675
|
}
|
|
13801
13676
|
throw new Error(`Google Analytics account summary discovery exceeded 20 pages.`);
|
|
13802
13677
|
}
|
|
13803
|
-
|
|
13804
|
-
//#region packages/core/dist/http/read-json.js
|
|
13678
|
+
// packages/core/dist/http/read-json.js
|
|
13805
13679
|
const GZIP = [31, 139];
|
|
13806
13680
|
async function gunzip(bytes) {
|
|
13807
13681
|
const stream = new Response(bytes).body?.pipeThrough(new DecompressionStream("gzip"));
|
|
@@ -13851,8 +13725,7 @@ async function readJson(response, label, options = {}) {
|
|
|
13851
13725
|
async function readJsonOrUndefined(response, label) {
|
|
13852
13726
|
return readJson(response, label).catch(() => void 0);
|
|
13853
13727
|
}
|
|
13854
|
-
|
|
13855
|
-
//#region packages/core/dist/google/api.js
|
|
13728
|
+
// packages/core/dist/google/api.js
|
|
13856
13729
|
var GoogleApiError = class extends SeoError {
|
|
13857
13730
|
status;
|
|
13858
13731
|
constructor(code, message, status) {
|
|
@@ -13874,6 +13747,13 @@ async function failure(response, label, subject, options) {
|
|
|
13874
13747
|
const detail = (await response.text().catch(() => "")).slice(0, 300);
|
|
13875
13748
|
const status = response.status;
|
|
13876
13749
|
const what = subject ? `${label} for ${subject}` : label;
|
|
13750
|
+
if (status === 400) {
|
|
13751
|
+
let reason = detail;
|
|
13752
|
+
try {
|
|
13753
|
+
reason = JSON.parse(detail).error?.message ?? detail;
|
|
13754
|
+
} catch {}
|
|
13755
|
+
return new GoogleApiError("INVALID_INPUT", `${label} rejected the request: ${reason}`.trim(), status);
|
|
13756
|
+
}
|
|
13877
13757
|
if (status === 401) return new GoogleApiError("AUTH_EXPIRED", `Google rejected the sign-in. ${options.signIn}`, status);
|
|
13878
13758
|
if (status === 403) return new GoogleApiError("ACCESS_DENIED", `Google denied access to ${what}. Check the Google account, its access to this property, and the granted scopes. ${detail}`.trim(), status);
|
|
13879
13759
|
if (status === 404) return new GoogleApiError("PROPERTY_NOT_FOUND", `Google could not find ${what}. Check the property and account access.`, status);
|
|
@@ -13974,8 +13854,7 @@ async function runAnalyticsReport(gfetch, propertyId, body, options) {
|
|
|
13974
13854
|
body
|
|
13975
13855
|
});
|
|
13976
13856
|
}
|
|
13977
|
-
|
|
13978
|
-
//#region packages/core/dist/bing/api.js
|
|
13857
|
+
// packages/core/dist/bing/api.js
|
|
13979
13858
|
const BASE = "https://ssl.bing.com/webmaster/api.svc/json";
|
|
13980
13859
|
const MAX_BYTES$4 = 8e6;
|
|
13981
13860
|
function bingCall(auth, options) {
|
|
@@ -14005,7 +13884,7 @@ function bingCall(auth, options) {
|
|
|
14005
13884
|
return (await readJson(response, "Bing Webmaster", { maxBytes: MAX_BYTES$4 })).d;
|
|
14006
13885
|
};
|
|
14007
13886
|
}
|
|
14008
|
-
function day$
|
|
13887
|
+
function day$3(value) {
|
|
14009
13888
|
if (typeof value !== "string") return null;
|
|
14010
13889
|
const legacy = /^\/Date\((-?\d+)(?:[+-]\d{4})?\)\/$/.exec(value);
|
|
14011
13890
|
const date = legacy ? new Date(Number(legacy[1])) : new Date(value);
|
|
@@ -14026,7 +13905,7 @@ async function bingTraffic(call, site) {
|
|
|
14026
13905
|
const rows = [];
|
|
14027
13906
|
let invalidRows = 0;
|
|
14028
13907
|
for (const row of list$2(await call("GetRankAndTrafficStats", { siteUrl: site }), "traffic list")) {
|
|
14029
|
-
const date = day$
|
|
13908
|
+
const date = day$3(row.Date);
|
|
14030
13909
|
const clicks = count$3(row.Clicks);
|
|
14031
13910
|
const impressions = count$3(row.Impressions);
|
|
14032
13911
|
if (!date || clicks === null || impressions === null) {
|
|
@@ -14049,7 +13928,7 @@ async function keyed(call, method, params) {
|
|
|
14049
13928
|
const rows = [];
|
|
14050
13929
|
let invalidRows = 0;
|
|
14051
13930
|
for (const row of list$2(await call(method, params), "row list")) {
|
|
14052
|
-
const date = day$
|
|
13931
|
+
const date = day$3(row.Date);
|
|
14053
13932
|
const key = typeof row.Query === "string" ? row.Query.trim() : "";
|
|
14054
13933
|
const clicks = count$3(row.Clicks);
|
|
14055
13934
|
const impressions = count$3(row.Impressions);
|
|
@@ -14086,8 +13965,7 @@ function bingSiteFor(sites, target) {
|
|
|
14086
13965
|
if (!wanted) return null;
|
|
14087
13966
|
return sites.filter((site) => host(site.url) === wanted).sort((a, b) => Number(b.verified) - Number(a.verified) || Number(b.url.startsWith("https://")) - Number(a.url.startsWith("https://")) || a.url.localeCompare(b.url, "en"))[0] ?? null;
|
|
14088
13967
|
}
|
|
14089
|
-
|
|
14090
|
-
//#region packages/core/dist/gsc/dates.js
|
|
13968
|
+
// packages/core/dist/gsc/dates.js
|
|
14091
13969
|
const GSC_TIME_ZONE = "America/Los_Angeles";
|
|
14092
13970
|
function dateInTimeZone(now, timeZone) {
|
|
14093
13971
|
const parts = Object.fromEntries(new Intl.DateTimeFormat("en-US", {
|
|
@@ -14115,8 +13993,7 @@ function finalGscDateRange(days = 28, now = /* @__PURE__ */ new Date()) {
|
|
|
14115
13993
|
endDate
|
|
14116
13994
|
};
|
|
14117
13995
|
}
|
|
14118
|
-
|
|
14119
|
-
//#region packages/core/dist/analyze/site-diagnostics/quick-wins-report-input.js
|
|
13996
|
+
// packages/core/dist/analyze/site-diagnostics/quick-wins-report-input.js
|
|
14120
13997
|
function integerOption$1(input) {
|
|
14121
13998
|
if (input.value === void 0) return input.fallback;
|
|
14122
13999
|
if (!Number.isInteger(input.value) || input.value < input.minimum || input.value > input.maximum) throw new SeoError("INVALID_INPUT", `${input.label} must be a whole number between ${input.minimum} and ${input.maximum}.`);
|
|
@@ -14142,8 +14019,7 @@ function explicitDateRange(input, maximumDays) {
|
|
|
14142
14019
|
days
|
|
14143
14020
|
};
|
|
14144
14021
|
}
|
|
14145
|
-
|
|
14146
|
-
//#region packages/core/dist/analyze/site-diagnostics/decay-report-input.js
|
|
14022
|
+
// packages/core/dist/analyze/site-diagnostics/decay-report-input.js
|
|
14147
14023
|
function decayNumberOption(input) {
|
|
14148
14024
|
const value = input.value ?? input.fallback;
|
|
14149
14025
|
if (!Number.isFinite(value) || value < input.minimum || value > input.maximum) throw new SeoError("INVALID_INPUT", `${input.label} must be between ${input.minimum} and ${input.maximum}.`);
|
|
@@ -14199,8 +14075,7 @@ function decayComparisonRange(current, comparison = "previous-period") {
|
|
|
14199
14075
|
endDate
|
|
14200
14076
|
};
|
|
14201
14077
|
}
|
|
14202
|
-
|
|
14203
|
-
//#region packages/core/dist/updates/ranking-history.js
|
|
14078
|
+
// packages/core/dist/updates/ranking-history.js
|
|
14204
14079
|
const RANKING_HISTORY = [
|
|
14205
14080
|
{
|
|
14206
14081
|
id: "XhUDXP7A67iHCD2kmbVu",
|
|
@@ -14455,8 +14330,7 @@ const RANKING_HISTORY = [
|
|
|
14455
14330
|
external_desc: "November 2021 spam update"
|
|
14456
14331
|
}
|
|
14457
14332
|
];
|
|
14458
|
-
|
|
14459
|
-
//#region packages/core/dist/updates/search-updates.js
|
|
14333
|
+
// packages/core/dist/updates/search-updates.js
|
|
14460
14334
|
function classifyUpdate(name, product) {
|
|
14461
14335
|
const lower = `${name} ${product}`.toLowerCase();
|
|
14462
14336
|
if (lower.includes("core")) return "core";
|
|
@@ -14505,8 +14379,7 @@ function findOverlappingSearchUpdates(input) {
|
|
|
14505
14379
|
return updateStart <= windowEnd && updateEnd >= windowStart;
|
|
14506
14380
|
});
|
|
14507
14381
|
}
|
|
14508
|
-
|
|
14509
|
-
//#region packages/core/dist/commands/types.js
|
|
14382
|
+
// packages/core/dist/commands/types.js
|
|
14510
14383
|
var CommandError = class extends Error {
|
|
14511
14384
|
code;
|
|
14512
14385
|
constructor(code, message) {
|
|
@@ -14514,8 +14387,7 @@ var CommandError = class extends Error {
|
|
|
14514
14387
|
this.code = code;
|
|
14515
14388
|
}
|
|
14516
14389
|
};
|
|
14517
|
-
|
|
14518
|
-
//#region packages/core/dist/commands/shared.js
|
|
14390
|
+
// packages/core/dist/commands/shared.js
|
|
14519
14391
|
const FACTS_ONLY = "These are facts from Search Console, not instructions.";
|
|
14520
14392
|
const ADVICE_KEYS = /^(recommendations?|actions?|advice|suggested[A-Z]\w*|nextSteps?)$/;
|
|
14521
14393
|
function factsOnly(value) {
|
|
@@ -14651,8 +14523,7 @@ function matchProperty(names, site) {
|
|
|
14651
14523
|
}
|
|
14652
14524
|
}).filter((entry) => entry !== null && schemes.includes(entry.url.protocol) && bare(entry.url.hostname) === host && `${url.pathname}/`.startsWith(entry.url.pathname)).sort((a, b) => b.url.pathname.length - a.url.pathname.length || schemes.indexOf(a.url.protocol) - schemes.indexOf(b.url.protocol) || Number(b.url.hostname === url.hostname) - Number(a.url.hostname === url.hostname) || a.name.localeCompare(b.name))[0]?.name ?? null;
|
|
14653
14525
|
}
|
|
14654
|
-
|
|
14655
|
-
//#region packages/core/dist/commands/present.js
|
|
14526
|
+
// packages/core/dist/commands/present.js
|
|
14656
14527
|
const LIST_KEYS = [
|
|
14657
14528
|
"items",
|
|
14658
14529
|
"rows",
|
|
@@ -14721,7 +14592,7 @@ const METRIC_COLUMNS = [
|
|
|
14721
14592
|
"score",
|
|
14722
14593
|
"priority.score"
|
|
14723
14594
|
];
|
|
14724
|
-
const SUMMARY_ROWS$
|
|
14595
|
+
const SUMMARY_ROWS$3 = 10;
|
|
14725
14596
|
const CELL_MAX = 80;
|
|
14726
14597
|
const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
14727
14598
|
const isPrimitive = (value) => value === null || [
|
|
@@ -14880,7 +14751,7 @@ function presentReport(input) {
|
|
|
14880
14751
|
}
|
|
14881
14752
|
};
|
|
14882
14753
|
}
|
|
14883
|
-
const shown = flat.slice(0, Math.min(input.limit, SUMMARY_ROWS$
|
|
14754
|
+
const shown = flat.slice(0, Math.min(input.limit, SUMMARY_ROWS$3));
|
|
14884
14755
|
const columns = columnsFor(flat, 8);
|
|
14885
14756
|
return {
|
|
14886
14757
|
text: [
|
|
@@ -14915,8 +14786,7 @@ function preview(report, origin, rows) {
|
|
|
14915
14786
|
text: table$1(flat.slice(0, rows), columnsFor(flat, 6), origin)
|
|
14916
14787
|
};
|
|
14917
14788
|
}
|
|
14918
|
-
|
|
14919
|
-
//#region packages/core/dist/commands/sites.js
|
|
14789
|
+
// packages/core/dist/commands/sites.js
|
|
14920
14790
|
async function readableSites(google, signIn) {
|
|
14921
14791
|
return (await listSearchConsoleSites(google, { signIn })).filter((entry) => entry.permissionLevel !== "siteUnverifiedUser").map((entry) => ({
|
|
14922
14792
|
siteUrl: entry.siteUrl,
|
|
@@ -14990,8 +14860,7 @@ async function runSites(input) {
|
|
|
14990
14860
|
}
|
|
14991
14861
|
};
|
|
14992
14862
|
}
|
|
14993
|
-
|
|
14994
|
-
//#region packages/core/dist/commands/linked.js
|
|
14863
|
+
// packages/core/dist/commands/linked.js
|
|
14995
14864
|
const MAX_ROWS$2 = 1e5;
|
|
14996
14865
|
const PERMISSION_RANK = {
|
|
14997
14866
|
siteOwner: 0,
|
|
@@ -15094,8 +14963,7 @@ var LinkedAccounts = class {
|
|
|
15094
14963
|
});
|
|
15095
14964
|
}
|
|
15096
14965
|
};
|
|
15097
|
-
|
|
15098
|
-
//#region packages/core/dist/paths.js
|
|
14966
|
+
// packages/core/dist/paths.js
|
|
15099
14967
|
let memoizedPaths;
|
|
15100
14968
|
function defaultConfigDir(input) {
|
|
15101
14969
|
if (input.platform === "win32") return join(input.env.APPDATA ?? join(input.home, "AppData", "Roaming"), "seo", "Config");
|
|
@@ -15183,8 +15051,7 @@ function ensureSeoCliDirs() {
|
|
|
15183
15051
|
});
|
|
15184
15052
|
return paths;
|
|
15185
15053
|
}
|
|
15186
|
-
|
|
15187
|
-
//#region packages/core/dist/storage/files.js
|
|
15054
|
+
// packages/core/dist/storage/files.js
|
|
15188
15055
|
function ensureParentDir(path, mode = 448) {
|
|
15189
15056
|
mkdirSync(dirname(path), {
|
|
15190
15057
|
recursive: true,
|
|
@@ -15215,8 +15082,7 @@ function safeRemove(path) {
|
|
|
15215
15082
|
force: true
|
|
15216
15083
|
});
|
|
15217
15084
|
}
|
|
15218
|
-
|
|
15219
|
-
//#region packages/core/dist/telemetry-failures.js
|
|
15085
|
+
// packages/core/dist/telemetry-failures.js
|
|
15220
15086
|
const TELEMETRY_ERROR_CATEGORIES = [
|
|
15221
15087
|
"auth",
|
|
15222
15088
|
"crawl_timeout",
|
|
@@ -15466,11 +15332,9 @@ function agentFromClientName(name) {
|
|
|
15466
15332
|
if (value.includes("codex") || value.includes("openai")) return "codex";
|
|
15467
15333
|
return "unknown";
|
|
15468
15334
|
}
|
|
15469
|
-
|
|
15470
|
-
//#region packages/core/dist/version.js
|
|
15335
|
+
// packages/core/dist/version.js
|
|
15471
15336
|
const SEO_VERSION = version;
|
|
15472
|
-
|
|
15473
|
-
//#region packages/core/dist/telemetry.js
|
|
15337
|
+
// packages/core/dist/telemetry.js
|
|
15474
15338
|
const TELEMETRY_TIMEOUT_MS = 2e3;
|
|
15475
15339
|
const TELEMETRY_REPORTS = [
|
|
15476
15340
|
"affected-urls",
|
|
@@ -15770,8 +15634,7 @@ function telemetryFailureInput(error) {
|
|
|
15770
15634
|
};
|
|
15771
15635
|
return classifyTelemetryFailure(error);
|
|
15772
15636
|
}
|
|
15773
|
-
|
|
15774
|
-
//#region packages/core/dist/cloud.js
|
|
15637
|
+
// packages/core/dist/cloud.js
|
|
15775
15638
|
const CLOUD_URL = "https://seoskill.dev";
|
|
15776
15639
|
const EARLY = 6e4;
|
|
15777
15640
|
const linkFile = () => join(getSeoCliPaths().configDir, "cloud.json");
|
|
@@ -15872,8 +15735,7 @@ async function cloudBing() {
|
|
|
15872
15735
|
async function cloudKeys() {
|
|
15873
15736
|
return (await cloudCredentials()).keys;
|
|
15874
15737
|
}
|
|
15875
|
-
|
|
15876
|
-
//#region packages/core/dist/types/auth.js
|
|
15738
|
+
// packages/core/dist/types/auth.js
|
|
15877
15739
|
const tokenSchema = z.object({
|
|
15878
15740
|
provider: z.literal("google"),
|
|
15879
15741
|
account_email: z.string().email().max(320),
|
|
@@ -15902,8 +15764,7 @@ const tokenStoreSchema = z.object({
|
|
|
15902
15764
|
message: "The active Google account must exist in accounts."
|
|
15903
15765
|
});
|
|
15904
15766
|
});
|
|
15905
|
-
|
|
15906
|
-
//#region packages/core/dist/providers/contracts.js
|
|
15767
|
+
// packages/core/dist/providers/contracts.js
|
|
15907
15768
|
const providerIdSchema = z.string().min(1).max(64).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/u);
|
|
15908
15769
|
z.enum([
|
|
15909
15770
|
"keyword-metrics",
|
|
@@ -15921,8 +15782,7 @@ z.enum([
|
|
|
15921
15782
|
"ai-mentions",
|
|
15922
15783
|
"ai-prompt-observation"
|
|
15923
15784
|
]);
|
|
15924
|
-
|
|
15925
|
-
//#region packages/core/dist/types/config.js
|
|
15785
|
+
// packages/core/dist/types/config.js
|
|
15926
15786
|
const providerPreferenceSchema = z.enum(["cheap", "authoritative"]);
|
|
15927
15787
|
z.enum(["google", "clicky"]);
|
|
15928
15788
|
const analyticsExtensionIdSchema = z.string().min(1).max(64).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/u);
|
|
@@ -15975,8 +15835,7 @@ async function setKeyringPassword(service, account, password) {
|
|
|
15975
15835
|
async function deleteKeyringPassword(service, account) {
|
|
15976
15836
|
return (await resolveKeyring()).deletePassword(service, account);
|
|
15977
15837
|
}
|
|
15978
|
-
|
|
15979
|
-
//#region packages/core/dist/storage/config.js
|
|
15838
|
+
// packages/core/dist/storage/config.js
|
|
15980
15839
|
const KEYRING_SERVICE$1 = "seo";
|
|
15981
15840
|
const PRIVATE_FILE_MODE$1 = 384;
|
|
15982
15841
|
function tightenConfigPermissions(path) {
|
|
@@ -16131,8 +15990,7 @@ function readOauthClient() {
|
|
|
16131
15990
|
const raw = readJsonFile(getSeoCliPaths().oauthClientFile);
|
|
16132
15991
|
return raw?.clientId && raw?.clientSecret ? raw : void 0;
|
|
16133
15992
|
}
|
|
16134
|
-
|
|
16135
|
-
//#region packages/core/dist/storage/lock.js
|
|
15993
|
+
// packages/core/dist/storage/lock.js
|
|
16136
15994
|
async function withFileLock(path, task) {
|
|
16137
15995
|
ensureParentDir(path);
|
|
16138
15996
|
const fastLocks = process.env.SEO_LOCK_FAST === "1";
|
|
@@ -16161,14 +16019,12 @@ async function withFileLock(path, task) {
|
|
|
16161
16019
|
await release();
|
|
16162
16020
|
}
|
|
16163
16021
|
}
|
|
16164
|
-
|
|
16165
|
-
//#region packages/core/dist/gsc/shared-client.generated.js
|
|
16022
|
+
// packages/core/dist/gsc/shared-client.generated.js
|
|
16166
16023
|
const SHARED_OAUTH_CLIENT = {
|
|
16167
16024
|
clientId: "548418788053-q7p964rqvjiv8ooamciprku6bpu34u9d.apps.googleusercontent.com",
|
|
16168
16025
|
clientSecret: "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"
|
|
16169
16026
|
};
|
|
16170
|
-
|
|
16171
|
-
//#region packages/core/dist/gsc/auth/client-config.js
|
|
16027
|
+
// packages/core/dist/gsc/auth/client-config.js
|
|
16172
16028
|
function getAuthModeStatus() {
|
|
16173
16029
|
const byo = readOauthClient();
|
|
16174
16030
|
return {
|
|
@@ -16200,8 +16056,7 @@ function getClientConfig(source) {
|
|
|
16200
16056
|
function missingOAuthClientMessage(source) {
|
|
16201
16057
|
return source === "shared" ? "The stored Google login uses the shared seo app, but this build is missing that OAuth client. Report this package issue at https://github.com/iannuttall/seo/issues, or use `seo auth setup-client` with your own desktop OAuth client." : "The stored Google login uses a BYO OAuth client that is no longer configured. Restore the same client with `seo auth setup-client`, or run `seo auth logout` before signing in with a different client.";
|
|
16202
16058
|
}
|
|
16203
|
-
|
|
16204
|
-
//#region packages/core/dist/gsc/auth/types.js
|
|
16059
|
+
// packages/core/dist/gsc/auth/types.js
|
|
16205
16060
|
const GOOGLE_READONLY_SCOPES = ["https://www.googleapis.com/auth/webmasters.readonly", "https://www.googleapis.com/auth/analytics.readonly"];
|
|
16206
16061
|
const GOOGLE_READONLY_SCOPE_LABELS = {
|
|
16207
16062
|
"https://www.googleapis.com/auth/webmasters.readonly": "Search Console",
|
|
@@ -16216,8 +16071,7 @@ function missingGoogleReadonlyScopes(scope) {
|
|
|
16216
16071
|
"openid",
|
|
16217
16072
|
"email"
|
|
16218
16073
|
].join(" ");
|
|
16219
|
-
|
|
16220
|
-
//#region packages/core/dist/gsc/auth/service-account.js
|
|
16074
|
+
// packages/core/dist/gsc/auth/service-account.js
|
|
16221
16075
|
const GOOGLE_TOKEN_ENDPOINT$1 = "https://oauth2.googleapis.com/token";
|
|
16222
16076
|
const TOKEN_BUFFER_MS = 6e4;
|
|
16223
16077
|
function authConfigError(message) {
|
|
@@ -16363,8 +16217,7 @@ var ServiceAccountAccessTokenClient = class {
|
|
|
16363
16217
|
return this.token.value;
|
|
16364
16218
|
}
|
|
16365
16219
|
};
|
|
16366
|
-
|
|
16367
|
-
//#region packages/core/dist/gsc/auth/token-endpoint.js
|
|
16220
|
+
// packages/core/dist/gsc/auth/token-endpoint.js
|
|
16368
16221
|
const GOOGLE_TOKEN_ENDPOINT = "https://oauth2.googleapis.com/token";
|
|
16369
16222
|
var GoogleTokenEndpointError = class extends Error {
|
|
16370
16223
|
status;
|
|
@@ -16399,8 +16252,7 @@ async function requestGoogleAccessToken(input, fetchImpl = fetch) {
|
|
|
16399
16252
|
refreshToken: payload.refresh_token
|
|
16400
16253
|
};
|
|
16401
16254
|
}
|
|
16402
|
-
|
|
16403
|
-
//#region packages/core/dist/gsc/auth/authorized-client.js
|
|
16255
|
+
// packages/core/dist/gsc/auth/authorized-client.js
|
|
16404
16256
|
const REFRESH_BUFFER_MS = 6e4;
|
|
16405
16257
|
function authRequired(accountEmail) {
|
|
16406
16258
|
return new SeoError("AUTH_REQUIRED", accountEmail ? `Google account ${accountEmail} is not connected. Run \`seo auth login\` first.` : notSignedIn());
|
|
@@ -16521,8 +16373,7 @@ async function createGoogleAccessTokenClient(accountEmail) {
|
|
|
16521
16373
|
tokens
|
|
16522
16374
|
};
|
|
16523
16375
|
}
|
|
16524
|
-
|
|
16525
|
-
//#region packages/core/dist/gsc/client/fetch.js
|
|
16376
|
+
// packages/core/dist/gsc/client/fetch.js
|
|
16526
16377
|
async function authedFetch(client, url, init) {
|
|
16527
16378
|
const accessToken = await client.getAccessToken();
|
|
16528
16379
|
if (!accessToken) throw new SeoError("AUTH_EXPIRED", "Could not obtain a Google access token. Run `seo auth login` again.");
|
|
@@ -16543,8 +16394,7 @@ function googleFetchFor(client) {
|
|
|
16543
16394
|
return (url, init) => authedFetch(client, url, init);
|
|
16544
16395
|
}
|
|
16545
16396
|
const LOCAL_SIGN_IN = { signIn: "Run `seo auth login` again." };
|
|
16546
|
-
|
|
16547
|
-
//#region packages/core/dist/storage/cache-maintenance.js
|
|
16397
|
+
// packages/core/dist/storage/cache-maintenance.js
|
|
16548
16398
|
const MEBIBYTE$1 = 1048576;
|
|
16549
16399
|
const CACHE_MAX_AGE_MS = 2592e6;
|
|
16550
16400
|
const CACHE_LIMITS = {
|
|
@@ -16720,8 +16570,7 @@ function runCacheMaintenance(database, options = {}) {
|
|
|
16720
16570
|
compaction
|
|
16721
16571
|
};
|
|
16722
16572
|
}
|
|
16723
|
-
|
|
16724
|
-
//#region packages/core/dist/storage/sqlite.js
|
|
16573
|
+
// packages/core/dist/storage/sqlite.js
|
|
16725
16574
|
function withoutDriverMetadata(row) {
|
|
16726
16575
|
if (!row || typeof row !== "object" || Array.isArray(row)) return row;
|
|
16727
16576
|
const { _metadata: _driverMetadata, ...data } = row;
|
|
@@ -16766,8 +16615,7 @@ var SqliteDatabase = class {
|
|
|
16766
16615
|
return this;
|
|
16767
16616
|
}
|
|
16768
16617
|
};
|
|
16769
|
-
|
|
16770
|
-
//#region packages/core/dist/storage/database.js
|
|
16618
|
+
// packages/core/dist/storage/database.js
|
|
16771
16619
|
const PRIVATE_DATABASE_FILE_MODE = 384;
|
|
16772
16620
|
const DATABASE_FILE_SUFFIXES = [
|
|
16773
16621
|
"",
|
|
@@ -16994,8 +16842,7 @@ function hashKey(parts) {
|
|
|
16994
16842
|
const json = JSON.stringify(parts);
|
|
16995
16843
|
return Buffer.from(json).toString("base64url");
|
|
16996
16844
|
}
|
|
16997
|
-
|
|
16998
|
-
//#region packages/core/dist/ga4/client.js
|
|
16845
|
+
// packages/core/dist/ga4/client.js
|
|
16999
16846
|
function ga4RequestCanUseCache(body) {
|
|
17000
16847
|
return body.dateRanges.every((range) => /^\d{4}-\d{2}-\d{2}$/.test(range.startDate) && /^\d{4}-\d{2}-\d{2}$/.test(range.endDate));
|
|
17001
16848
|
}
|
|
@@ -17048,8 +16895,7 @@ function ga4ReportQualityWarnings(result, label = "Google Analytics report") {
|
|
|
17048
16895
|
})) warnings.push(`${label} was sampled by Google Analytics.`);
|
|
17049
16896
|
return warnings;
|
|
17050
16897
|
}
|
|
17051
|
-
|
|
17052
|
-
//#region packages/core/dist/analyze/ai-referrals-sources.js
|
|
16898
|
+
// packages/core/dist/analyze/ai-referrals-sources.js
|
|
17053
16899
|
const AI_REFERRAL_SOURCES_VERSION = "ai-referral-sources@1";
|
|
17054
16900
|
const AI_REFERRAL_SOURCES = [
|
|
17055
16901
|
{
|
|
@@ -17135,8 +16981,7 @@ function aiReferralSourceForValue(value) {
|
|
|
17135
16981
|
if (!hostname) return void 0;
|
|
17136
16982
|
return AI_REFERRAL_SOURCES.find((source) => source.domains.some((domain) => matchesDomain(hostname, domain)));
|
|
17137
16983
|
}
|
|
17138
|
-
|
|
17139
|
-
//#region packages/core/dist/analyze/ai-referrals-analysis.js
|
|
16984
|
+
// packages/core/dist/analyze/ai-referrals-analysis.js
|
|
17140
16985
|
function compareText$17(left, right) {
|
|
17141
16986
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
17142
16987
|
}
|
|
@@ -17308,13 +17153,12 @@ function analyzeAiReferralRows(input) {
|
|
|
17308
17153
|
]
|
|
17309
17154
|
};
|
|
17310
17155
|
}
|
|
17311
|
-
|
|
17312
|
-
|
|
17313
|
-
const PAGE_SIZE$4 = 25e3;
|
|
17156
|
+
// packages/core/dist/analyze/ai-referrals-query.js
|
|
17157
|
+
const PAGE_SIZE$5 = 25e3;
|
|
17314
17158
|
async function fetchAiReferralRows(input) {
|
|
17315
|
-
const pageSize = input.pageSize ?? PAGE_SIZE$
|
|
17159
|
+
const pageSize = input.pageSize ?? PAGE_SIZE$5;
|
|
17316
17160
|
if (!Number.isInteger(input.maxRows) || input.maxRows < 1) throw new Error("maxRows must be a positive whole number.");
|
|
17317
|
-
if (!Number.isInteger(pageSize) || pageSize < 1 || pageSize > PAGE_SIZE$
|
|
17161
|
+
if (!Number.isInteger(pageSize) || pageSize < 1 || pageSize > PAGE_SIZE$5) throw new Error(`pageSize must be a whole number between 1 and ${PAGE_SIZE$5}.`);
|
|
17318
17162
|
const rows = [];
|
|
17319
17163
|
const warnings = /* @__PURE__ */ new Set();
|
|
17320
17164
|
const retainedKeys = /* @__PURE__ */ new Set();
|
|
@@ -17384,8 +17228,7 @@ function sessionSourceInListFilter(values) {
|
|
|
17384
17228
|
}
|
|
17385
17229
|
} };
|
|
17386
17230
|
}
|
|
17387
|
-
|
|
17388
|
-
//#region packages/core/dist/analyze/ai-referrals.js
|
|
17231
|
+
// packages/core/dist/analyze/ai-referrals.js
|
|
17389
17232
|
const DEFAULT_MAX_ROWS$1 = 1e5;
|
|
17390
17233
|
const MAX_ROWS$1 = 1e5;
|
|
17391
17234
|
const DEFAULT_RESULT_LIMIT = 25;
|
|
@@ -17562,8 +17405,7 @@ async function aiReferralsReport(input, dependencies = {}) {
|
|
|
17562
17405
|
totalUsersEvidence
|
|
17563
17406
|
});
|
|
17564
17407
|
}
|
|
17565
|
-
|
|
17566
|
-
//#region packages/core/dist/robots-directives.js
|
|
17408
|
+
// packages/core/dist/robots-directives.js
|
|
17567
17409
|
function normalizedDirective(value) {
|
|
17568
17410
|
const directive = value.trim().toLowerCase().split(/\s+/)[0];
|
|
17569
17411
|
if (directive === "none") return ["noindex", "nofollow"];
|
|
@@ -17765,8 +17607,7 @@ function resolveStreamedSegments($) {
|
|
|
17765
17607
|
function hasNextAppRouterPayload($) {
|
|
17766
17608
|
return $("script:not([src])").toArray().some((script) => $(script).text().includes("self.__next_f"));
|
|
17767
17609
|
}
|
|
17768
|
-
|
|
17769
|
-
//#region packages/core/dist/extract/canonical.js
|
|
17610
|
+
// packages/core/dist/extract/canonical.js
|
|
17770
17611
|
function headerValue$4(headers, name) {
|
|
17771
17612
|
const lower = name.toLowerCase();
|
|
17772
17613
|
return Object.entries(headers).find(([key]) => key.toLowerCase() === lower)?.[1];
|
|
@@ -17915,11 +17756,10 @@ function extractHttpCanonicalEvidence(headers, baseUrl) {
|
|
|
17915
17756
|
function extractCanonicalEvidence($, headers, baseUrl) {
|
|
17916
17757
|
return evidenceFromCandidates([...htmlCandidates($, baseUrl), ...headerCandidates(headers, baseUrl)]);
|
|
17917
17758
|
}
|
|
17918
|
-
|
|
17919
|
-
//#region packages/core/dist/extract/content-sketch.js
|
|
17759
|
+
// packages/core/dist/extract/content-sketch.js
|
|
17920
17760
|
const SHINGLE_SIZE = 5;
|
|
17921
17761
|
const MAX_HASHES = 32;
|
|
17922
|
-
function words$
|
|
17762
|
+
function words$3(value) {
|
|
17923
17763
|
return value.normalize("NFKC").toLocaleLowerCase("en").match(/[\p{L}\p{N}]+/gu) ?? [];
|
|
17924
17764
|
}
|
|
17925
17765
|
function sampleIndexes(total, limit) {
|
|
@@ -17930,7 +17770,7 @@ function digest(value) {
|
|
|
17930
17770
|
return createHash("sha256").update(value).digest("hex").slice(0, 16);
|
|
17931
17771
|
}
|
|
17932
17772
|
function contentSketch(value) {
|
|
17933
|
-
const tokens = words$
|
|
17773
|
+
const tokens = words$3(value);
|
|
17934
17774
|
const hashes = sampleIndexes(Math.max(0, tokens.length - SHINGLE_SIZE + 1), MAX_HASHES).map((index) => digest(tokens.slice(index, index + SHINGLE_SIZE).join(" ")));
|
|
17935
17775
|
return {
|
|
17936
17776
|
version: 1,
|
|
@@ -17940,8 +17780,7 @@ function contentSketch(value) {
|
|
|
17940
17780
|
hashes
|
|
17941
17781
|
};
|
|
17942
17782
|
}
|
|
17943
|
-
|
|
17944
|
-
//#region packages/core/dist/extract/main-content.js
|
|
17783
|
+
// packages/core/dist/extract/main-content.js
|
|
17945
17784
|
function parseDocument$1(html) {
|
|
17946
17785
|
const { document } = parseHTML(html);
|
|
17947
17786
|
if (document.documentElement?.localName === "html") return document;
|
|
@@ -18067,8 +17906,7 @@ async function extractMainMarkdown(fetchResult) {
|
|
|
18067
17906
|
truncated: true
|
|
18068
17907
|
};
|
|
18069
17908
|
}
|
|
18070
|
-
|
|
18071
|
-
//#region packages/core/dist/extract/google-rich-results.js
|
|
17909
|
+
// packages/core/dist/extract/google-rich-results.js
|
|
18072
17910
|
const SUPPORTED_TYPES = /* @__PURE__ */ new Set([
|
|
18073
17911
|
"Article",
|
|
18074
17912
|
"BlogPosting",
|
|
@@ -18345,8 +18183,7 @@ function selectGoogleRichResultAssessments(assessments, limit = 50) {
|
|
|
18345
18183
|
}
|
|
18346
18184
|
};
|
|
18347
18185
|
}
|
|
18348
|
-
|
|
18349
|
-
//#region packages/core/dist/extract/structured-data.js
|
|
18186
|
+
// packages/core/dist/extract/structured-data.js
|
|
18350
18187
|
function schemaTypeFromIri(value) {
|
|
18351
18188
|
try {
|
|
18352
18189
|
const iri = new URL(value);
|
|
@@ -18583,8 +18420,7 @@ function extractStructuredData($, baseUrl, options = {}) {
|
|
|
18583
18420
|
hasDate: parsed.hasDate || $("[itemprop~=\"datePublished\"], [itemprop~=\"dateModified\"], [property~=\"datePublished\"], [property~=\"dateModified\"]").toArray().some((element) => isValidStructuredDate($(element).attr("content") ?? $(element).attr("datetime") ?? $(element).text()))
|
|
18584
18421
|
};
|
|
18585
18422
|
}
|
|
18586
|
-
|
|
18587
|
-
//#region packages/core/dist/extract/page-extractor.js
|
|
18423
|
+
// packages/core/dist/extract/page-extractor.js
|
|
18588
18424
|
function metaRefresh($, finalUrl) {
|
|
18589
18425
|
for (const element of $("meta[http-equiv]").toArray()) {
|
|
18590
18426
|
if ($(element).attr("http-equiv")?.trim().toLowerCase() !== "refresh") continue;
|
|
@@ -19002,8 +18838,7 @@ async function extractPage(fetchResult, extractor = "defuddle", dependencies = {
|
|
|
19002
18838
|
]
|
|
19003
18839
|
};
|
|
19004
18840
|
}
|
|
19005
|
-
|
|
19006
|
-
//#region packages/core/dist/fetch/crawler-identity.js
|
|
18841
|
+
// packages/core/dist/fetch/crawler-identity.js
|
|
19007
18842
|
const SEO_CRAWLER_TOKEN = "SEO-Skill";
|
|
19008
18843
|
const SEO_CRAWLER_USER_AGENT = `${SEO_CRAWLER_TOKEN}/${SEO_VERSION} (+https://seoskill.dev)`;
|
|
19009
18844
|
const SEO_CRAWLER_IDENTITY = {
|
|
@@ -19013,8 +18848,7 @@ const SEO_CRAWLER_IDENTITY = {
|
|
|
19013
18848
|
userAgent: SEO_CRAWLER_USER_AGENT,
|
|
19014
18849
|
documentationUrl: "https://seoskill.dev/docs/crawler/"
|
|
19015
18850
|
};
|
|
19016
|
-
|
|
19017
|
-
//#region packages/core/dist/fetch/access-block.js
|
|
18851
|
+
// packages/core/dist/fetch/access-block.js
|
|
19018
18852
|
const CLOUDFLARE_SKIP_DOCS = "https://developers.cloudflare.com/waf/custom-rules/skip/";
|
|
19019
18853
|
function isHeadersLike(headers) {
|
|
19020
18854
|
return "get" in headers && typeof headers.get === "function";
|
|
@@ -19084,8 +18918,7 @@ function detectAccessBlock(input) {
|
|
|
19084
18918
|
}
|
|
19085
18919
|
};
|
|
19086
18920
|
}
|
|
19087
|
-
|
|
19088
|
-
//#region packages/core/dist/fetch/http-client.js
|
|
18921
|
+
// packages/core/dist/fetch/http-client.js
|
|
19089
18922
|
var ResponseSizeLimitError = class extends Error {
|
|
19090
18923
|
maxBytes;
|
|
19091
18924
|
constructor(maxBytes, label = "Response") {
|
|
@@ -19150,8 +18983,7 @@ async function readBoundedResponseText(response, maxBytes, label = "Response") {
|
|
|
19150
18983
|
}
|
|
19151
18984
|
return Buffer.concat(chunks, total).toString("utf8");
|
|
19152
18985
|
}
|
|
19153
|
-
|
|
19154
|
-
//#region packages/core/dist/fetch/page-fetcher/rate-controls.js
|
|
18986
|
+
// packages/core/dist/fetch/page-fetcher/rate-controls.js
|
|
19155
18987
|
const HOST_QUEUES = /* @__PURE__ */ new Map();
|
|
19156
18988
|
const HOST_HEALTH = /* @__PURE__ */ new Map();
|
|
19157
18989
|
var OriginBackpressureError = class extends Error {
|
|
@@ -19296,8 +19128,7 @@ function recordHostFetch(input) {
|
|
|
19296
19128
|
}
|
|
19297
19129
|
return snapshotForHost(input.host);
|
|
19298
19130
|
}
|
|
19299
|
-
|
|
19300
|
-
//#region packages/core/dist/fetch/page-fetcher/redirects.js
|
|
19131
|
+
// packages/core/dist/fetch/page-fetcher/redirects.js
|
|
19301
19132
|
async function fetchWithRedirectChain(url, signal) {
|
|
19302
19133
|
const redirectChain = [];
|
|
19303
19134
|
let currentUrl = url;
|
|
@@ -19322,8 +19153,7 @@ async function fetchWithRedirectChain(url, signal) {
|
|
|
19322
19153
|
}
|
|
19323
19154
|
throw new Error(`Too many redirects for ${url}`);
|
|
19324
19155
|
}
|
|
19325
|
-
|
|
19326
|
-
//#region packages/core/dist/fetch/page-fetcher/robots.js
|
|
19156
|
+
// packages/core/dist/fetch/page-fetcher/robots.js
|
|
19327
19157
|
const MAX_ROBOTS_RESPONSE_BYTES = 1048576;
|
|
19328
19158
|
var RobotsAccessError = class extends Error {
|
|
19329
19159
|
reason;
|
|
@@ -19474,8 +19304,7 @@ function createRobotsSession(input = {}) {
|
|
|
19474
19304
|
}
|
|
19475
19305
|
};
|
|
19476
19306
|
}
|
|
19477
|
-
|
|
19478
|
-
//#region packages/core/dist/fetch/page-fetcher/robots-evidence.js
|
|
19307
|
+
// packages/core/dist/fetch/page-fetcher/robots-evidence.js
|
|
19479
19308
|
function pageRobotsEvidence(robots) {
|
|
19480
19309
|
return {
|
|
19481
19310
|
url: robots.url,
|
|
@@ -19496,8 +19325,7 @@ function diagnosticRobotsEvidence(robots) {
|
|
|
19496
19325
|
error: robots.error
|
|
19497
19326
|
};
|
|
19498
19327
|
}
|
|
19499
|
-
|
|
19500
|
-
//#region packages/core/dist/fetch/page-fetcher/plain.js
|
|
19328
|
+
// packages/core/dist/fetch/page-fetcher/plain.js
|
|
19501
19329
|
const MAX_PAGE_RESPONSE_BYTES = 5242880;
|
|
19502
19330
|
function encodePageFetchCacheEvidence(result) {
|
|
19503
19331
|
return JSON.stringify({
|
|
@@ -19639,8 +19467,7 @@ async function fetchPlain(url, refresh = false, timeoutMs = 2e4, rate, signal, r
|
|
|
19639
19467
|
});
|
|
19640
19468
|
return result;
|
|
19641
19469
|
}
|
|
19642
|
-
|
|
19643
|
-
//#region packages/core/dist/fetch/page-fetcher/browser-path.js
|
|
19470
|
+
// packages/core/dist/fetch/page-fetcher/browser-path.js
|
|
19644
19471
|
const PLAYWRIGHT_CORE_VERSION = "1.61.1";
|
|
19645
19472
|
function systemBrowserCandidates(input) {
|
|
19646
19473
|
const macApplications = ["/Applications", join(input.homeDirectory, "Applications")];
|
|
@@ -19738,8 +19565,7 @@ function browserUnavailableMessage(resolution) {
|
|
|
19738
19565
|
"Set SEO_BROWSER_EXECUTABLE_PATH to use a managed browser executable."
|
|
19739
19566
|
].join(" ");
|
|
19740
19567
|
}
|
|
19741
|
-
|
|
19742
|
-
//#region packages/core/dist/fetch/page-fetcher/rendered.js
|
|
19568
|
+
// packages/core/dist/fetch/page-fetcher/rendered.js
|
|
19743
19569
|
const DEFAULT_RENDER_TIMEOUT_MS = 2e4;
|
|
19744
19570
|
const NETWORK_IDLE_TIMEOUT_MS = 3e3;
|
|
19745
19571
|
const MAX_RENDER_CONTEXTS = 4;
|
|
@@ -19969,8 +19795,7 @@ function looksLikeSpa(html) {
|
|
|
19969
19795
|
const lower = html.toLowerCase();
|
|
19970
19796
|
return /<div[^>]+id="root"[^>]*>\s*<\/div>/.test(lower) || /<div[^>]+id="__next"[^>]*>\s*<\/div>/.test(lower) || /<app-root[^>]*>\s*<\/app-root>/.test(lower) || /enable javascript/i.test(lower);
|
|
19971
19797
|
}
|
|
19972
|
-
|
|
19973
|
-
//#region packages/core/dist/fetch/page-fetcher/rendering-difference.js
|
|
19798
|
+
// packages/core/dist/fetch/page-fetcher/rendering-difference.js
|
|
19974
19799
|
const MAX_HEADINGS = 50;
|
|
19975
19800
|
const MAX_TEXT_VALUE_LENGTH = 500;
|
|
19976
19801
|
function safeText(value) {
|
|
@@ -20075,8 +19900,7 @@ function renderingDocumentDifference(raw, rendered) {
|
|
|
20075
19900
|
].filter((field) => JSON.stringify(rawDocument[field]) !== JSON.stringify(renderedDocument[field]))
|
|
20076
19901
|
};
|
|
20077
19902
|
}
|
|
20078
|
-
|
|
20079
|
-
//#region packages/core/dist/fetch/page-fetcher/status-probe.js
|
|
19903
|
+
// packages/core/dist/fetch/page-fetcher/status-probe.js
|
|
20080
19904
|
async function statusProbe(url, opts) {
|
|
20081
19905
|
const startedAt = Date.now();
|
|
20082
19906
|
const host = new URL(url).host;
|
|
@@ -20154,8 +19978,7 @@ async function fetchPageStatus(url, opts = {}) {
|
|
|
20154
19978
|
const rate = normalizeRateControls(opts.rate);
|
|
20155
19979
|
return await queueForHost(new URL(url).host, rate).add(() => statusProbe(url, opts));
|
|
20156
19980
|
}
|
|
20157
|
-
|
|
20158
|
-
//#region packages/core/dist/fetch/page-fetcher.js
|
|
19981
|
+
// packages/core/dist/fetch/page-fetcher.js
|
|
20159
19982
|
function normalizeJavaScriptRenderingMode(input) {
|
|
20160
19983
|
if (input === true) return "on";
|
|
20161
19984
|
if (input === false) return "off";
|
|
@@ -20232,8 +20055,7 @@ async function fetchPage(url, opts = {}, dependencies = {}) {
|
|
|
20232
20055
|
}
|
|
20233
20056
|
});
|
|
20234
20057
|
}
|
|
20235
|
-
|
|
20236
|
-
//#region packages/core/dist/gsc/property-url.js
|
|
20058
|
+
// packages/core/dist/gsc/property-url.js
|
|
20237
20059
|
function invalid(message) {
|
|
20238
20060
|
throw new SeoError("INVALID_INPUT", message);
|
|
20239
20061
|
}
|
|
@@ -20426,8 +20248,7 @@ function finalizeUrlInspectionQuota(input) {
|
|
|
20426
20248
|
WHERE credential_key = ? AND property_site_url = ? AND quota_date = ?`).run(dailyExhausted ? 1 : 0, consumed, row.count, input.outcome === "released" ? row.count : 0, exhausted ? 1 : 0, (input.blockedUntil ?? new Date(input.reservation.resetAt)).getTime(), exhausted ? 1 : 0, now.getTime(), now.getTime(), input.reservation.credentialKey, input.reservation.property, input.reservation.quotaDate);
|
|
20427
20249
|
}).immediate();
|
|
20428
20250
|
}
|
|
20429
|
-
|
|
20430
|
-
//#region packages/core/dist/gsc/client/inspection.js
|
|
20251
|
+
// packages/core/dist/gsc/client/inspection.js
|
|
20431
20252
|
function credentialKey(input) {
|
|
20432
20253
|
return createHash("sha256").update(`${input.clientId}\n${input.accountEmail.toLowerCase()}`).digest("base64url");
|
|
20433
20254
|
}
|
|
@@ -20512,8 +20333,7 @@ async function inspectUrl(input) {
|
|
|
20512
20333
|
if (!response.ok) throw inspectionResponseError(response, input);
|
|
20513
20334
|
return await readJson(response, "URL Inspection");
|
|
20514
20335
|
}
|
|
20515
|
-
|
|
20516
|
-
//#region packages/core/dist/gsc/client/search-analytics.js
|
|
20336
|
+
// packages/core/dist/gsc/client/search-analytics.js
|
|
20517
20337
|
function searchDateRange(days) {
|
|
20518
20338
|
return finalGscDateRange(days);
|
|
20519
20339
|
}
|
|
@@ -20679,8 +20499,7 @@ async function queryPagesTopQueriesBatch(site, pageUrls, range = 28) {
|
|
|
20679
20499
|
retainedRowLimitReached: result.rowsFetched >= retainedRowLimit
|
|
20680
20500
|
};
|
|
20681
20501
|
}
|
|
20682
|
-
|
|
20683
|
-
//#region packages/core/dist/gsc/client/sites.js
|
|
20502
|
+
// packages/core/dist/gsc/client/sites.js
|
|
20684
20503
|
async function listSites$1(_refresh = false, accountEmail) {
|
|
20685
20504
|
const entries = !accountEmail && cloudLinked() ? await allCloudSites() : await listSearchConsoleSites(googleFetchFor((await getAuthorized(accountEmail)).client), LOCAL_SIGN_IN);
|
|
20686
20505
|
writeToCache((database) => {
|
|
@@ -20699,8 +20518,7 @@ async function allCloudSites() {
|
|
|
20699
20518
|
}
|
|
20700
20519
|
return [...best.values()];
|
|
20701
20520
|
}
|
|
20702
|
-
|
|
20703
|
-
//#region packages/core/dist/analyze/page-technical-signals.js
|
|
20521
|
+
// packages/core/dist/analyze/page-technical-signals.js
|
|
20704
20522
|
function normalizePageUrl(value) {
|
|
20705
20523
|
try {
|
|
20706
20524
|
const parsed = new URL(value);
|
|
@@ -20862,8 +20680,7 @@ function estimateSerpTitleWidth(title) {
|
|
|
20862
20680
|
fallbackGraphemes: fallbackGraphemes.slice(0, 10)
|
|
20863
20681
|
};
|
|
20864
20682
|
}
|
|
20865
|
-
|
|
20866
|
-
//#region packages/core/dist/analyze/audit-page.js
|
|
20683
|
+
// packages/core/dist/analyze/audit-page.js
|
|
20867
20684
|
const defaultDependencies$12 = {
|
|
20868
20685
|
fetchPage,
|
|
20869
20686
|
queryPageMetrics,
|
|
@@ -21012,8 +20829,7 @@ async function auditPage(input, dependencies = defaultDependencies$12) {
|
|
|
21012
20829
|
report.recommendations = buildRecommendations(report);
|
|
21013
20830
|
return report;
|
|
21014
20831
|
}
|
|
21015
|
-
|
|
21016
|
-
//#region packages/core/dist/analyze/content-coverage-analysis.js
|
|
20832
|
+
// packages/core/dist/analyze/content-coverage-analysis.js
|
|
21017
20833
|
const STOPWORDS = /* @__PURE__ */ new Set([
|
|
21018
20834
|
"a",
|
|
21019
20835
|
"an",
|
|
@@ -21239,8 +21055,7 @@ async function verifyQueryContentWith(input) {
|
|
|
21239
21055
|
};
|
|
21240
21056
|
}
|
|
21241
21057
|
}
|
|
21242
|
-
|
|
21243
|
-
//#region packages/core/dist/analyze/content-coverage.js
|
|
21058
|
+
// packages/core/dist/analyze/content-coverage.js
|
|
21244
21059
|
function verifyQueryContent(input) {
|
|
21245
21060
|
return verifyQueryContentWith({
|
|
21246
21061
|
...input,
|
|
@@ -21248,8 +21063,7 @@ function verifyQueryContent(input) {
|
|
|
21248
21063
|
extract: input.extract ?? extractPage
|
|
21249
21064
|
});
|
|
21250
21065
|
}
|
|
21251
|
-
|
|
21252
|
-
//#region packages/core/dist/brand.js
|
|
21066
|
+
// packages/core/dist/brand.js
|
|
21253
21067
|
const COUNTRY_CODE_SECOND_LEVELS = /* @__PURE__ */ new Set([
|
|
21254
21068
|
"ac",
|
|
21255
21069
|
"co",
|
|
@@ -21357,8 +21171,7 @@ function shouldExcludeBrandQuery(input) {
|
|
|
21357
21171
|
const terms = input.brandTerms?.length ? input.brandTerms : deriveBrandTerms({ siteUrl: input.siteUrl });
|
|
21358
21172
|
return isBrandQuery(input.query, terms);
|
|
21359
21173
|
}
|
|
21360
|
-
|
|
21361
|
-
//#region packages/core/dist/analyze/shared.js
|
|
21174
|
+
// packages/core/dist/analyze/shared.js
|
|
21362
21175
|
const CTR_BASELINE = {
|
|
21363
21176
|
1: .27,
|
|
21364
21177
|
2: .15,
|
|
@@ -21393,8 +21206,7 @@ function jaccard(a, b) {
|
|
|
21393
21206
|
function defaultDateRange(days = 28, now = /* @__PURE__ */ new Date()) {
|
|
21394
21207
|
return finalGscDateRange(days, now);
|
|
21395
21208
|
}
|
|
21396
|
-
|
|
21397
|
-
//#region packages/core/dist/analyze/opportunity-primitives.js
|
|
21209
|
+
// packages/core/dist/analyze/opportunity-primitives.js
|
|
21398
21210
|
const MIN_BENCHMARK_URL_IMPRESSIONS = 30;
|
|
21399
21211
|
const MIN_BENCHMARK_IMPRESSIONS = 1e3;
|
|
21400
21212
|
const MIN_BENCHMARK_URL_SAMPLES = 5;
|
|
@@ -21764,8 +21576,7 @@ function createCtrBenchmarkContext(rows, options = {}) {
|
|
|
21764
21576
|
diagnostics
|
|
21765
21577
|
};
|
|
21766
21578
|
}
|
|
21767
|
-
|
|
21768
|
-
//#region packages/core/dist/analyze/page-opportunities-evidence.js
|
|
21579
|
+
// packages/core/dist/analyze/page-opportunities-evidence.js
|
|
21769
21580
|
function verificationFor(input) {
|
|
21770
21581
|
const signals = pageTechnicalSignals(input);
|
|
21771
21582
|
if (signals.length > 0) return {
|
|
@@ -21830,8 +21641,7 @@ function benchmarkDetails$2(benchmark, excludedTargetRows) {
|
|
|
21830
21641
|
excludedTargetRows
|
|
21831
21642
|
};
|
|
21832
21643
|
}
|
|
21833
|
-
|
|
21834
|
-
//#region packages/core/dist/analyze/query-quality.js
|
|
21644
|
+
// packages/core/dist/analyze/query-quality.js
|
|
21835
21645
|
function hasLetter(value) {
|
|
21836
21646
|
return /\p{L}/u.test(value);
|
|
21837
21647
|
}
|
|
@@ -22102,8 +21912,7 @@ function countQueryFlags(items) {
|
|
|
22102
21912
|
flaggedRows
|
|
22103
21913
|
};
|
|
22104
21914
|
}
|
|
22105
|
-
|
|
22106
|
-
//#region packages/core/dist/analyze/page-opportunities-selection.js
|
|
21915
|
+
// packages/core/dist/analyze/page-opportunities-selection.js
|
|
22107
21916
|
const DEFAULT_MIN_IMPRESSIONS$1 = 10;
|
|
22108
21917
|
const DEFAULT_LIMIT$3 = 25;
|
|
22109
21918
|
const MAX_LIMIT$3 = 100;
|
|
@@ -22196,8 +22005,7 @@ function selectBenchmarkRows$1(input) {
|
|
|
22196
22005
|
});
|
|
22197
22006
|
});
|
|
22198
22007
|
}
|
|
22199
|
-
|
|
22200
|
-
//#region packages/core/dist/analyze/page-opportunities-analysis.js
|
|
22008
|
+
// packages/core/dist/analyze/page-opportunities-analysis.js
|
|
22201
22009
|
function compareText$16(left, right) {
|
|
22202
22010
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
22203
22011
|
}
|
|
@@ -22296,8 +22104,7 @@ function analyzePageOpportunitiesFromRows(input) {
|
|
|
22296
22104
|
}
|
|
22297
22105
|
};
|
|
22298
22106
|
}
|
|
22299
|
-
|
|
22300
|
-
//#region packages/core/dist/analyze/page-opportunities-presentation.js
|
|
22107
|
+
// packages/core/dist/analyze/page-opportunities-presentation.js
|
|
22301
22108
|
const actionPriority = new Map([
|
|
22302
22109
|
"technical-check",
|
|
22303
22110
|
"content-gap",
|
|
@@ -22361,8 +22168,7 @@ function pageOpportunityRecommendations(analysis) {
|
|
|
22361
22168
|
if (gaps >= 3) recommendations.push(`Group the ${gaps} verified content gaps into useful sections rather than adding one thin paragraph per query.`);
|
|
22362
22169
|
return recommendations;
|
|
22363
22170
|
}
|
|
22364
|
-
|
|
22365
|
-
//#region packages/core/dist/analyze/page-opportunities.js
|
|
22171
|
+
// packages/core/dist/analyze/page-opportunities.js
|
|
22366
22172
|
const MAX_BENCHMARK_ROWS = 1e5;
|
|
22367
22173
|
const defaultDependencies$11 = {
|
|
22368
22174
|
searchAnalytics: querySearchAnalytics,
|
|
@@ -22563,8 +22369,7 @@ async function pageOpportunitiesReport(input, dependencies = defaultDependencies
|
|
|
22563
22369
|
recommendations: pageOpportunityRecommendations(analysis)
|
|
22564
22370
|
};
|
|
22565
22371
|
}
|
|
22566
|
-
|
|
22567
|
-
//#region packages/core/dist/analyze/content-optimization.js
|
|
22372
|
+
// packages/core/dist/analyze/content-optimization.js
|
|
22568
22373
|
function intentFor(query) {
|
|
22569
22374
|
const value = query.toLowerCase();
|
|
22570
22375
|
if (/\b(vs|versus|alternative|alternatives|compare|comparison|best)\b/.test(value)) return "comparison";
|
|
@@ -22712,8 +22517,7 @@ function contentOptimizationFromPageOpportunities(sourceReport) {
|
|
|
22712
22517
|
async function contentOptimizationReport(input) {
|
|
22713
22518
|
return contentOptimizationFromPageOpportunities(await pageOpportunitiesReport(input));
|
|
22714
22519
|
}
|
|
22715
|
-
|
|
22716
|
-
//#region packages/core/dist/analyze/crawler/page-eligibility.js
|
|
22520
|
+
// packages/core/dist/analyze/crawler/page-eligibility.js
|
|
22717
22521
|
function comparableUrl(value) {
|
|
22718
22522
|
if (!value) return void 0;
|
|
22719
22523
|
try {
|
|
@@ -22740,8 +22544,7 @@ function isAuditableHtmlPage(page) {
|
|
|
22740
22544
|
const contentAuditAllowed = page.contentAuditAllowed ?? (!page.blocked && page.robotsTxt?.allowed !== false);
|
|
22741
22545
|
return isSuccessfulResponse(page) && isHtmlPage(page) && !isRedirectedPage(page) && contentAuditAllowed;
|
|
22742
22546
|
}
|
|
22743
|
-
|
|
22744
|
-
//#region packages/core/dist/analyze/crawler/audit.js
|
|
22547
|
+
// packages/core/dist/analyze/crawler/audit.js
|
|
22745
22548
|
function sameUrl(a, b) {
|
|
22746
22549
|
if (!a || !b) return false;
|
|
22747
22550
|
try {
|
|
@@ -23215,8 +23018,7 @@ function auditCrawlPages(pages, opts = {}) {
|
|
|
23215
23018
|
}
|
|
23216
23019
|
return issues;
|
|
23217
23020
|
}
|
|
23218
|
-
|
|
23219
|
-
//#region packages/core/dist/analyze/crawler/crawl-skip-reasons.js
|
|
23021
|
+
// packages/core/dist/analyze/crawler/crawl-skip-reasons.js
|
|
23220
23022
|
const CRAWL_SKIP_REASONS = [
|
|
23221
23023
|
"asset-url",
|
|
23222
23024
|
"configured-exclusion",
|
|
@@ -23291,8 +23093,7 @@ function crawlSkipReasonCountsFromRecord(input = {}) {
|
|
|
23291
23093
|
count
|
|
23292
23094
|
})) }).skipReasons;
|
|
23293
23095
|
}
|
|
23294
|
-
|
|
23295
|
-
//#region packages/core/dist/analyze/crawler/top-fixes.js
|
|
23096
|
+
// packages/core/dist/analyze/crawler/top-fixes.js
|
|
23296
23097
|
const SEVERITY_SCORE = {
|
|
23297
23098
|
high: 5e3,
|
|
23298
23099
|
medium: 1200,
|
|
@@ -23443,8 +23244,7 @@ function reviewObservations(report, filters = {}) {
|
|
|
23443
23244
|
recommendation: "review"
|
|
23444
23245
|
});
|
|
23445
23246
|
}
|
|
23446
|
-
|
|
23447
|
-
//#region packages/core/dist/analyze/crawler/report.js
|
|
23247
|
+
// packages/core/dist/analyze/crawler/report.js
|
|
23448
23248
|
const MAX_CRAWL_PAGES = 1e4;
|
|
23449
23249
|
const MAX_CRAWL_CONCURRENCY = 16;
|
|
23450
23250
|
const MAX_CRAWL_TIMEOUT_MS = 12e4;
|
|
@@ -23850,8 +23650,7 @@ function createCrawlReport(input) {
|
|
|
23850
23650
|
caveats: sanitizeMessages(input.caveats).sort(compareText$15)
|
|
23851
23651
|
};
|
|
23852
23652
|
}
|
|
23853
|
-
|
|
23854
|
-
//#region packages/core/dist/analyze/crawler/site-checks-schema.js
|
|
23653
|
+
// packages/core/dist/analyze/crawler/site-checks-schema.js
|
|
23855
23654
|
const crawlSiteChecksSchema = z.object({ soft404: z.object({
|
|
23856
23655
|
status: z.enum([
|
|
23857
23656
|
"pass",
|
|
@@ -23869,8 +23668,7 @@ const crawlSiteChecksSchema = z.object({ soft404: z.object({
|
|
|
23869
23668
|
probeLimit: z.number().int().positive(),
|
|
23870
23669
|
complete: z.boolean()
|
|
23871
23670
|
}) });
|
|
23872
|
-
|
|
23873
|
-
//#region packages/core/dist/analyze/crawler/site-crawl-ai-schema.js
|
|
23671
|
+
// packages/core/dist/analyze/crawler/site-crawl-ai-schema.js
|
|
23874
23672
|
const crawlAiAvailabilitySchema = z.enum([
|
|
23875
23673
|
"available",
|
|
23876
23674
|
"absent",
|
|
@@ -23955,8 +23753,7 @@ const crawlAiSignalsSchema = z.object({
|
|
|
23955
23753
|
contentSignal: z.string().optional()
|
|
23956
23754
|
}).optional()
|
|
23957
23755
|
});
|
|
23958
|
-
|
|
23959
|
-
//#region packages/core/dist/analyze/crawler/schemas.js
|
|
23756
|
+
// packages/core/dist/analyze/crawler/schemas.js
|
|
23960
23757
|
const crawlerRuleSeveritySchema = z.enum([
|
|
23961
23758
|
"low",
|
|
23962
23759
|
"medium",
|
|
@@ -24899,8 +24696,7 @@ const crawlReportSchema = z.discriminatedUnion("requestEvidenceStatus", [
|
|
|
24899
24696
|
})
|
|
24900
24697
|
]);
|
|
24901
24698
|
z.toJSONSchema(crawlReportSchema), z.toJSONSchema(crawlIssueGroupSchema), z.toJSONSchema(crawlTopFixSchema), z.toJSONSchema(crawlerRuleInfoSchema), z.toJSONSchema(crawlRequestObservationSchema), z.toJSONSchema(crawlPageSnapshotSchema);
|
|
24902
|
-
|
|
24903
|
-
//#region packages/core/dist/analyze/crawler/agent-ready.js
|
|
24699
|
+
// packages/core/dist/analyze/crawler/agent-ready.js
|
|
24904
24700
|
function needsSignIn(page) {
|
|
24905
24701
|
return page.status === 401 || page.status === 403 || Boolean(page.softAuthenticationGate);
|
|
24906
24702
|
}
|
|
@@ -24951,8 +24747,7 @@ function agentReadyIssues(input) {
|
|
|
24951
24747
|
}
|
|
24952
24748
|
return issues;
|
|
24953
24749
|
}
|
|
24954
|
-
|
|
24955
|
-
//#region packages/core/dist/analyze/crawler/crawl-caveats.js
|
|
24750
|
+
// packages/core/dist/analyze/crawler/crawl-caveats.js
|
|
24956
24751
|
function crawlCaveats(input) {
|
|
24957
24752
|
const caveats = input.cancelled ? ["Crawl cancelled before all queued URLs finished."] : input.pageLimitReached ? [`Stopped after reaching maxPages (${input.maxPages}).`] : [];
|
|
24958
24753
|
if (input.queueSafetySkippedUrls > 0) caveats.push(input.queueSafetyInventoryCapped ? `Left at least ${input.queueSafetySkippedUrls} unique eligible same-origin URLs unqueued to keep this crawl bounded. The excluded-URL inventory reached its reporting cap. Increase --max-pages to inspect more.` : `Left ${input.queueSafetySkippedUrls} unique eligible same-origin URLs unqueued to keep this crawl bounded. Increase --max-pages to inspect more.`);
|
|
@@ -24960,8 +24755,7 @@ function crawlCaveats(input) {
|
|
|
24960
24755
|
if (input.memoryPressureSkippedUrls > 0) caveats.push(`Left ${input.memoryPressureSkippedUrls} eligible URL${input.memoryPressureSkippedUrls === 1 ? "" : "s"} unchecked after the local memory safety limit was reached. Start with --health or lower --max-pages.`);
|
|
24961
24756
|
return caveats;
|
|
24962
24757
|
}
|
|
24963
|
-
|
|
24964
|
-
//#region packages/core/dist/analyze/crawler/crawl-control.js
|
|
24758
|
+
// packages/core/dist/analyze/crawler/crawl-control.js
|
|
24965
24759
|
const CRAWL_CANCELLED = Symbol("crawl-cancelled");
|
|
24966
24760
|
function abortController(input) {
|
|
24967
24761
|
const controller = new AbortController();
|
|
@@ -24983,8 +24777,7 @@ function cancellationRace(signal) {
|
|
|
24983
24777
|
signal.addEventListener("abort", () => resolve(CRAWL_CANCELLED), { once: true });
|
|
24984
24778
|
});
|
|
24985
24779
|
}
|
|
24986
|
-
|
|
24987
|
-
//#region packages/core/dist/analyze/crawler/crawl-memory.js
|
|
24780
|
+
// packages/core/dist/analyze/crawler/crawl-memory.js
|
|
24988
24781
|
const MEBIBYTE = 1048576;
|
|
24989
24782
|
const MIN_CRAWL_MEMORY_LIMIT = 384 * MEBIBYTE;
|
|
24990
24783
|
const MAX_CRAWL_MEMORY_LIMIT = 640 * MEBIBYTE;
|
|
@@ -25003,8 +24796,7 @@ function crawlRssLimitBytes(totalMemoryBytes) {
|
|
|
25003
24796
|
function crawlMemoryPressure(input) {
|
|
25004
24797
|
return input.memoryUsage.heapUsed + input.memoryUsage.external >= crawlMemoryLimitBytes(input.totalMemoryBytes) || input.memoryUsage.rss >= crawlRssLimitBytes(input.totalMemoryBytes);
|
|
25005
24798
|
}
|
|
25006
|
-
|
|
25007
|
-
//#region packages/core/dist/analyze/crawler/crawl-url-queue.js
|
|
24799
|
+
// packages/core/dist/analyze/crawler/crawl-url-queue.js
|
|
25008
24800
|
function before(left, right) {
|
|
25009
24801
|
return left.depth < right.depth || left.depth === right.depth && left.url < right.url;
|
|
25010
24802
|
}
|
|
@@ -25083,8 +24875,7 @@ var CrawlUrlQueue = class {
|
|
|
25083
24875
|
}
|
|
25084
24876
|
}
|
|
25085
24877
|
};
|
|
25086
|
-
|
|
25087
|
-
//#region packages/core/dist/analyze/crawler/external-link-checks.js
|
|
24878
|
+
// packages/core/dist/analyze/crawler/external-link-checks.js
|
|
25088
24879
|
const EXTERNAL_LINK_SELECTION_LIMIT = 200;
|
|
25089
24880
|
const EXTERNAL_LINK_STATES = [
|
|
25090
24881
|
"available",
|
|
@@ -25272,8 +25063,7 @@ async function verifyExternalLinks(input) {
|
|
|
25272
25063
|
warnings
|
|
25273
25064
|
};
|
|
25274
25065
|
}
|
|
25275
|
-
|
|
25276
|
-
//#region packages/core/dist/analyze/crawler/link-graph.js
|
|
25066
|
+
// packages/core/dist/analyze/crawler/link-graph.js
|
|
25277
25067
|
function resolveFetchedAlias(url, aliases) {
|
|
25278
25068
|
const visited = /* @__PURE__ */ new Set();
|
|
25279
25069
|
let current = url;
|
|
@@ -25293,8 +25083,7 @@ function resolveLinkCountAliases(counts, aliases) {
|
|
|
25293
25083
|
}
|
|
25294
25084
|
return resolved;
|
|
25295
25085
|
}
|
|
25296
|
-
|
|
25297
|
-
//#region packages/core/dist/analyze/crawler/request-evidence.js
|
|
25086
|
+
// packages/core/dist/analyze/crawler/request-evidence.js
|
|
25298
25087
|
function observationFromPage(requestedUrl, page) {
|
|
25299
25088
|
const observation = {
|
|
25300
25089
|
requestedUrl,
|
|
@@ -25317,8 +25106,7 @@ function observationFromPage(requestedUrl, page) {
|
|
|
25317
25106
|
extraction: page.extractionStatus ?? "complete"
|
|
25318
25107
|
};
|
|
25319
25108
|
}
|
|
25320
|
-
|
|
25321
|
-
//#region packages/core/dist/analyze/crawler/site-checks.js
|
|
25109
|
+
// packages/core/dist/analyze/crawler/site-checks.js
|
|
25322
25110
|
const PROBE_COUNT = 2;
|
|
25323
25111
|
function probeUrls(startUrl) {
|
|
25324
25112
|
const origin = new URL(startUrl).origin;
|
|
@@ -25386,8 +25174,7 @@ async function collectCrawlSiteChecks(input) {
|
|
|
25386
25174
|
}]
|
|
25387
25175
|
};
|
|
25388
25176
|
}
|
|
25389
|
-
|
|
25390
|
-
//#region packages/core/dist/analyze/crawler/site-crawl-ai-signals.js
|
|
25177
|
+
// packages/core/dist/analyze/crawler/site-crawl-ai-signals.js
|
|
25391
25178
|
const MAX_AUXILIARY_RESPONSE_BYTES = 2097152;
|
|
25392
25179
|
const LLMS_LINK_LIMIT = 20;
|
|
25393
25180
|
const AI_BOTS = [
|
|
@@ -25681,8 +25468,7 @@ function linkRelations(header) {
|
|
|
25681
25468
|
for (const match of (header ?? "").matchAll(/rel\s*=\s*"?([^";,]+)"?/gi)) for (const value of (match[1] ?? "").trim().toLowerCase().split(/\s+/)) if (value) relations.add(value);
|
|
25682
25469
|
return [...relations].sort();
|
|
25683
25470
|
}
|
|
25684
|
-
|
|
25685
|
-
//#region packages/core/dist/analyze/crawler/site-crawl-providers.js
|
|
25471
|
+
// packages/core/dist/analyze/crawler/site-crawl-providers.js
|
|
25686
25472
|
function crawlMetricsWindow(now) {
|
|
25687
25473
|
return {
|
|
25688
25474
|
...defaultDateRange$1(28, now),
|
|
@@ -25878,8 +25664,7 @@ async function joinSearchMetrics(input) {
|
|
|
25878
25664
|
...warning ? { warning } : {}
|
|
25879
25665
|
};
|
|
25880
25666
|
}
|
|
25881
|
-
|
|
25882
|
-
//#region packages/core/dist/analyze/crawler/site-crawl-data-sources.js
|
|
25667
|
+
// packages/core/dist/analyze/crawler/site-crawl-data-sources.js
|
|
25883
25668
|
function crawlProviderLimits(input) {
|
|
25884
25669
|
const normalize = (value, fallback, label) => {
|
|
25885
25670
|
const limit = value ?? fallback;
|
|
@@ -25949,8 +25734,7 @@ async function crawlDataSources(input) {
|
|
|
25949
25734
|
});
|
|
25950
25735
|
return dataSources;
|
|
25951
25736
|
}
|
|
25952
|
-
|
|
25953
|
-
//#region packages/core/dist/analyze/monitoring/crawl-page.js
|
|
25737
|
+
// packages/core/dist/analyze/monitoring/crawl-page.js
|
|
25954
25738
|
function resolvedUrl(href, base) {
|
|
25955
25739
|
if (!href) return void 0;
|
|
25956
25740
|
try {
|
|
@@ -26144,6 +25928,9 @@ async function crawlOne(url, opts = {}) {
|
|
|
26144
25928
|
warning: `${url}: ${message}`
|
|
26145
25929
|
};
|
|
26146
25930
|
}
|
|
25931
|
+
return snapshotFetchedPage(url, fetched);
|
|
25932
|
+
}
|
|
25933
|
+
async function snapshotFetchedPage(url, fetched) {
|
|
26147
25934
|
const contentType = headerValue(fetched.headers, "content-type");
|
|
26148
25935
|
if (fetched.diagnostics.accessBlock) {
|
|
26149
25936
|
const page = unextractedPage(fetched, contentType);
|
|
@@ -26346,8 +26133,7 @@ async function crawlStatusOnly(url, opts = {}) {
|
|
|
26346
26133
|
};
|
|
26347
26134
|
}
|
|
26348
26135
|
}
|
|
26349
|
-
|
|
26350
|
-
//#region packages/core/dist/analyze/monitoring/sitemaps.js
|
|
26136
|
+
// packages/core/dist/analyze/monitoring/sitemaps.js
|
|
26351
26137
|
const INVALID_LOC_SAMPLE_LIMIT = 10;
|
|
26352
26138
|
const LASTMOD_SAMPLE_LIMIT = 10;
|
|
26353
26139
|
const MAX_SITEMAP_BYTES = 52428800;
|
|
@@ -26758,8 +26544,7 @@ async function fetchSitemapUrls(input) {
|
|
|
26758
26544
|
warnings
|
|
26759
26545
|
};
|
|
26760
26546
|
}
|
|
26761
|
-
|
|
26762
|
-
//#region packages/core/dist/providers/cache.js
|
|
26547
|
+
// packages/core/dist/providers/cache.js
|
|
26763
26548
|
function stableValue(value) {
|
|
26764
26549
|
if (Array.isArray(value)) return value.map(stableValue);
|
|
26765
26550
|
if (!value || typeof value !== "object") return value;
|
|
@@ -26845,8 +26630,7 @@ function writeProviderCache(key, input, options = {}) {
|
|
|
26845
26630
|
taskIds: normalizedTaskIds
|
|
26846
26631
|
};
|
|
26847
26632
|
}
|
|
26848
|
-
|
|
26849
|
-
//#region packages/core/dist/storage/provider-secrets.js
|
|
26633
|
+
// packages/core/dist/storage/provider-secrets.js
|
|
26850
26634
|
const KEYRING_SERVICE = "seo";
|
|
26851
26635
|
const PRIVATE_FILE_MODE = 384;
|
|
26852
26636
|
const PROVIDER_SECRET_NAMES = {
|
|
@@ -26876,7 +26660,7 @@ function tightenFilePermissions(path) {
|
|
|
26876
26660
|
if (error.code !== "ENOENT") throw error;
|
|
26877
26661
|
}
|
|
26878
26662
|
}
|
|
26879
|
-
function readFile$
|
|
26663
|
+
function readFile$2() {
|
|
26880
26664
|
const path = getSeoCliPaths().providerSecretsFile;
|
|
26881
26665
|
tightenFilePermissions(path);
|
|
26882
26666
|
const raw = readJsonFile(path);
|
|
@@ -26897,7 +26681,7 @@ function writeFile$1(file) {
|
|
|
26897
26681
|
writeJsonAtomic(path, file, PRIVATE_FILE_MODE);
|
|
26898
26682
|
}
|
|
26899
26683
|
function deleteFileSecret(name) {
|
|
26900
|
-
const file = readFile$
|
|
26684
|
+
const file = readFile$2();
|
|
26901
26685
|
if (!(name in file.secrets)) return;
|
|
26902
26686
|
delete file.secrets[name];
|
|
26903
26687
|
writeFile$1(file);
|
|
@@ -26916,7 +26700,7 @@ async function readProviderSecret(input) {
|
|
|
26916
26700
|
source: "keychain"
|
|
26917
26701
|
};
|
|
26918
26702
|
} catch {}
|
|
26919
|
-
const value = readFile$
|
|
26703
|
+
const value = readFile$2().secrets[input.name];
|
|
26920
26704
|
return value ? {
|
|
26921
26705
|
value,
|
|
26922
26706
|
source: "file"
|
|
@@ -26930,7 +26714,7 @@ async function writeProviderSecret(name, value) {
|
|
|
26930
26714
|
deleteFileSecret(name);
|
|
26931
26715
|
return "keychain";
|
|
26932
26716
|
} catch {}
|
|
26933
|
-
const file = readFile$
|
|
26717
|
+
const file = readFile$2();
|
|
26934
26718
|
file.secrets[name] = normalized;
|
|
26935
26719
|
writeFile$1(file);
|
|
26936
26720
|
return "file";
|
|
@@ -26946,8 +26730,7 @@ async function deleteProviderSecret(name) {
|
|
|
26946
26730
|
if (keyringError && stored?.source === "keychain") throw new Error("The saved provider credential could not be removed from the system keychain. Unlock the keychain and try again.", { cause: keyringError });
|
|
26947
26731
|
deleteFileSecret(name);
|
|
26948
26732
|
}
|
|
26949
|
-
|
|
26950
|
-
//#region packages/core/dist/clicky/credentials.js
|
|
26733
|
+
// packages/core/dist/clicky/credentials.js
|
|
26951
26734
|
const CLICKY_SITEKEY_ENV = "SEO_CLICKY_SITEKEY";
|
|
26952
26735
|
const CLICKY_SITE_KEYS_SECRET = PROVIDER_SECRET_NAMES.clickySiteKeys;
|
|
26953
26736
|
const storedSiteKeysSchema = z.object({
|
|
@@ -27007,8 +26790,7 @@ async function readClickySiteKey(siteIdValue, input = {}) {
|
|
|
27007
26790
|
source: stored.source
|
|
27008
26791
|
} : void 0;
|
|
27009
26792
|
}
|
|
27010
|
-
|
|
27011
|
-
//#region packages/core/dist/provider-extensions/contracts.js
|
|
26793
|
+
// packages/core/dist/provider-extensions/contracts.js
|
|
27012
26794
|
const identifierPattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
|
|
27013
26795
|
const packageNamePattern = /^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/u;
|
|
27014
26796
|
const exactVersionPattern = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u;
|
|
@@ -27159,8 +26941,7 @@ const providerRegistrationSchema = z.object({
|
|
|
27159
26941
|
actionIds.add(action.id);
|
|
27160
26942
|
}
|
|
27161
26943
|
});
|
|
27162
|
-
|
|
27163
|
-
//#region packages/core/dist/provider-extensions/credentials.js
|
|
26944
|
+
// packages/core/dist/provider-extensions/credentials.js
|
|
27164
26945
|
const storedCredentialsSchema = z.object({
|
|
27165
26946
|
version: z.literal(1),
|
|
27166
26947
|
providers: z.record(providerExtensionIdSchema, z.record(z.string().length(64).regex(/^[a-f0-9]+$/u), z.record(z.string().min(1).max(64), z.string().min(1).max(4096))))
|
|
@@ -27205,8 +26986,7 @@ async function readProviderExtensionCredentials(input) {
|
|
|
27205
26986
|
}
|
|
27206
26987
|
return credentials;
|
|
27207
26988
|
}
|
|
27208
|
-
|
|
27209
|
-
//#region packages/core/dist/providers/transport.js
|
|
26989
|
+
// packages/core/dist/providers/transport.js
|
|
27210
26990
|
function schemaIssueSummary(error) {
|
|
27211
26991
|
const issues = error.issues.slice(0, 3).map((issue) => {
|
|
27212
26992
|
return `${issue.path.flatMap((segment) => {
|
|
@@ -27323,8 +27103,7 @@ async function providerRequestJson(input) {
|
|
|
27323
27103
|
}
|
|
27324
27104
|
return parsed.data;
|
|
27325
27105
|
}
|
|
27326
|
-
|
|
27327
|
-
//#region packages/core/dist/provider-extensions/registry.js
|
|
27106
|
+
// packages/core/dist/provider-extensions/registry.js
|
|
27328
27107
|
var ProviderExtensionRegistry = class {
|
|
27329
27108
|
#providers = /* @__PURE__ */ new Map();
|
|
27330
27109
|
hostFor(input) {
|
|
@@ -27357,8 +27136,7 @@ var ProviderExtensionRegistry = class {
|
|
|
27357
27136
|
return [...this.#providers.values()].sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0);
|
|
27358
27137
|
}
|
|
27359
27138
|
};
|
|
27360
|
-
|
|
27361
|
-
//#region packages/core/dist/provider-extensions/store.js
|
|
27139
|
+
// packages/core/dist/provider-extensions/store.js
|
|
27362
27140
|
function emptyStore() {
|
|
27363
27141
|
return {
|
|
27364
27142
|
schemaVersion: 1,
|
|
@@ -27373,8 +27151,7 @@ function readInstalledProviderPackages() {
|
|
|
27373
27151
|
if (!parsed.success) throw new Error("Installed provider package records are invalid. Run `seo providers doctor` for details.");
|
|
27374
27152
|
return parsed.data;
|
|
27375
27153
|
}
|
|
27376
|
-
|
|
27377
|
-
//#region packages/core/dist/provider-extensions/loader.js
|
|
27154
|
+
// packages/core/dist/provider-extensions/loader.js
|
|
27378
27155
|
const installedPackageJsonSchema = z.object({
|
|
27379
27156
|
name: z.string(),
|
|
27380
27157
|
version: z.string(),
|
|
@@ -27453,8 +27230,7 @@ async function loadInstalledProviderExtensions(options = {}) {
|
|
|
27453
27230
|
failures
|
|
27454
27231
|
};
|
|
27455
27232
|
}
|
|
27456
|
-
|
|
27457
|
-
//#region packages/core/dist/provider-extensions/runtime.js
|
|
27233
|
+
// packages/core/dist/provider-extensions/runtime.js
|
|
27458
27234
|
const DEFAULT_MAX_REQUESTS = 8;
|
|
27459
27235
|
const MAX_RESPONSE_BYTES$1 = 10485760;
|
|
27460
27236
|
const MAX_REQUEST_BODY_BYTES = 65536;
|
|
@@ -27512,8 +27288,7 @@ function runtimeForProvider(provider, options = {}) {
|
|
|
27512
27288
|
}
|
|
27513
27289
|
};
|
|
27514
27290
|
}
|
|
27515
|
-
|
|
27516
|
-
//#region packages/core/dist/provider-extensions/analytics.js
|
|
27291
|
+
// packages/core/dist/provider-extensions/analytics.js
|
|
27517
27292
|
const CACHE_TTL_MS$1 = 864e5;
|
|
27518
27293
|
const landingPageResultSchema = z.object({
|
|
27519
27294
|
metric: z.literal("landing-page-visits"),
|
|
@@ -27591,8 +27366,7 @@ async function runAnalyticsProviderLandingPages(input) {
|
|
|
27591
27366
|
});
|
|
27592
27367
|
return parsed;
|
|
27593
27368
|
}
|
|
27594
|
-
|
|
27595
|
-
//#region packages/core/dist/analyze/workflows/analytics-value.js
|
|
27369
|
+
// packages/core/dist/analyze/workflows/analytics-value.js
|
|
27596
27370
|
const defaultDependencies$10 = {
|
|
27597
27371
|
runGa4Report,
|
|
27598
27372
|
analyticsLandingPages: runAnalyticsProviderLandingPages
|
|
@@ -27819,8 +27593,7 @@ async function fetchLandingPageValues(input, dependencies = defaultDependencies$
|
|
|
27819
27593
|
}
|
|
27820
27594
|
}[connection.provider](connection);
|
|
27821
27595
|
}
|
|
27822
|
-
|
|
27823
|
-
//#region packages/core/dist/analyze/crawler/site-crawl-dependencies.js
|
|
27596
|
+
// packages/core/dist/analyze/crawler/site-crawl-dependencies.js
|
|
27824
27597
|
function resolveCrawlSiteDependencies(dependencies = {}) {
|
|
27825
27598
|
const hasInjectedPerPageSearchProvider = Boolean(dependencies.queryPageMetrics || dependencies.queryPageTopQuery);
|
|
27826
27599
|
const hasInjectedLegacyBulkSearchProvider = Boolean(dependencies.queryPagesMetrics || dependencies.queryPagesTopQueries);
|
|
@@ -27845,8 +27618,7 @@ function resolveCrawlSiteDependencies(dependencies = {}) {
|
|
|
27845
27618
|
totalMemory: dependencies.totalMemory ?? totalmem
|
|
27846
27619
|
};
|
|
27847
27620
|
}
|
|
27848
|
-
|
|
27849
|
-
//#region packages/core/dist/analyze/crawler/sitemap-discovery.js
|
|
27621
|
+
// packages/core/dist/analyze/crawler/sitemap-discovery.js
|
|
27850
27622
|
const MAX_SITEMAP_ROOTS = 20;
|
|
27851
27623
|
function isSameOrigin(url, origin) {
|
|
27852
27624
|
try {
|
|
@@ -27934,8 +27706,7 @@ async function sitemapSeeds(input) {
|
|
|
27934
27706
|
}
|
|
27935
27707
|
};
|
|
27936
27708
|
}
|
|
27937
|
-
|
|
27938
|
-
//#region packages/core/dist/analyze/crawler/site-crawl.js
|
|
27709
|
+
// packages/core/dist/analyze/crawler/site-crawl.js
|
|
27939
27710
|
function normalizeUrl$1(value, base) {
|
|
27940
27711
|
try {
|
|
27941
27712
|
const url = base ? new URL(value, base) : new URL(value);
|
|
@@ -28539,8 +28310,7 @@ async function crawlSite(input, dependencies) {
|
|
|
28539
28310
|
await renderer?.close();
|
|
28540
28311
|
}
|
|
28541
28312
|
}
|
|
28542
|
-
|
|
28543
|
-
//#region packages/core/dist/brand-evidence.js
|
|
28313
|
+
// packages/core/dist/brand-evidence.js
|
|
28544
28314
|
const NAVIGATIONAL_STEM_THRESHOLDS = {
|
|
28545
28315
|
maximumPosition: 2,
|
|
28546
28316
|
minimumCtr: .2,
|
|
@@ -28672,8 +28442,7 @@ function resolveReportBrandTerms(input) {
|
|
|
28672
28442
|
heuristic: true
|
|
28673
28443
|
};
|
|
28674
28444
|
}
|
|
28675
|
-
|
|
28676
|
-
//#region packages/core/dist/analyze/min-impressions-policy.js
|
|
28445
|
+
// packages/core/dist/analyze/min-impressions-policy.js
|
|
28677
28446
|
const POSITION_MIN_IMPRESSIONS_SCALE = {
|
|
28678
28447
|
share: 2e-4,
|
|
28679
28448
|
floor: 10,
|
|
@@ -28725,8 +28494,7 @@ function minImpressionsCaveat(input) {
|
|
|
28725
28494
|
const oneIn = Math.round(1 / policy.scale.share).toLocaleString("en-US");
|
|
28726
28495
|
return `Minimum impressions per query/page row: ${policy.effective}, scaled from ${policy.basisImpressions} retained impressions (1 in ${oneIn}, between ${policy.scale.floor} and ${policy.scale.ceiling}); ${below}. This scaling is a heuristic.`;
|
|
28727
28496
|
}
|
|
28728
|
-
|
|
28729
|
-
//#region packages/core/dist/analyze/page-fragments.js
|
|
28497
|
+
// packages/core/dist/analyze/page-fragments.js
|
|
28730
28498
|
function compareCodepoints(left, right) {
|
|
28731
28499
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
28732
28500
|
}
|
|
@@ -28802,8 +28570,7 @@ function collapseFragmentPageRows(rows, options = {}) {
|
|
|
28802
28570
|
}
|
|
28803
28571
|
};
|
|
28804
28572
|
}
|
|
28805
|
-
|
|
28806
|
-
//#region packages/core/dist/analyze/site-ctr-curve.js
|
|
28573
|
+
// packages/core/dist/analyze/site-ctr-curve.js
|
|
28807
28574
|
const SITE_CTR_CURVE_FALLBACK_SOURCE = "builtin_position_ctr_curve_v1";
|
|
28808
28575
|
const SITE_CTR_CURVE_METHOD = {
|
|
28809
28576
|
method: "position_bucket_url_p75_v2",
|
|
@@ -28932,8 +28699,7 @@ function createSiteCtrCurve(rows) {
|
|
|
28932
28699
|
fallbackSource: SITE_CTR_CURVE_FALLBACK_SOURCE
|
|
28933
28700
|
});
|
|
28934
28701
|
}
|
|
28935
|
-
|
|
28936
|
-
//#region packages/core/dist/analyze/ctr-underperformers-analysis.js
|
|
28702
|
+
// packages/core/dist/analyze/ctr-underperformers-analysis.js
|
|
28937
28703
|
const CTR_MAX_MIN_IMPRESSIONS = 1e9;
|
|
28938
28704
|
function compareText$12(left, right) {
|
|
28939
28705
|
const leftPoints = [...left].map((value) => value.codePointAt(0) ?? 0);
|
|
@@ -29069,8 +28835,7 @@ function analyzeCtrUnderperformersFromRows(input) {
|
|
|
29069
28835
|
benchmarkByPosition: benchmarkContext.byPosition
|
|
29070
28836
|
};
|
|
29071
28837
|
}
|
|
29072
|
-
|
|
29073
|
-
//#region packages/core/dist/analyze/ctr-underperformers-report.js
|
|
28838
|
+
// packages/core/dist/analyze/ctr-underperformers-report.js
|
|
29074
28839
|
const MAX_GSC_ROWS$3 = 1e5;
|
|
29075
28840
|
const DEFAULT_DAYS$3 = 28;
|
|
29076
28841
|
const MAX_DAYS$2 = 548;
|
|
@@ -29204,8 +28969,7 @@ async function ctrUnderperformersReportWith(input, dependencies) {
|
|
|
29204
28969
|
] : dataStatus === "partial" ? ["No CTR-only action is recommended from the validated retained rows. Refresh or inspect the provider evidence before treating this as an all-clear."] : ["No CTR-only action is recommended from this report. Use striking-distance or page-opportunities if you want more growth ideas."]
|
|
29205
28970
|
};
|
|
29206
28971
|
}
|
|
29207
|
-
|
|
29208
|
-
//#region packages/core/dist/analyze/ctr-underperformers.js
|
|
28972
|
+
// packages/core/dist/analyze/ctr-underperformers.js
|
|
29209
28973
|
const defaultDependencies$9 = {
|
|
29210
28974
|
searchAnalytics: querySearchAnalytics,
|
|
29211
28975
|
now: () => /* @__PURE__ */ new Date()
|
|
@@ -29213,16 +28977,14 @@ const defaultDependencies$9 = {
|
|
|
29213
28977
|
function ctrUnderperformersReport(input, dependencies = defaultDependencies$9) {
|
|
29214
28978
|
return ctrUnderperformersReportWith(input, dependencies);
|
|
29215
28979
|
}
|
|
29216
|
-
|
|
29217
|
-
//#region packages/core/dist/phrasing.js
|
|
28980
|
+
// packages/core/dist/phrasing.js
|
|
29218
28981
|
function plural$6(count, singular, pluralLabel = `${singular}s`) {
|
|
29219
28982
|
return count === 1 ? singular : pluralLabel;
|
|
29220
28983
|
}
|
|
29221
28984
|
function countLabel(count, singular, pluralLabel = `${singular}s`) {
|
|
29222
28985
|
return `${count.toLocaleString("en-GB")} ${plural$6(count, singular, pluralLabel)}`;
|
|
29223
28986
|
}
|
|
29224
|
-
|
|
29225
|
-
//#region packages/core/dist/analyze/diagnosis-priorities.js
|
|
28987
|
+
// packages/core/dist/analyze/diagnosis-priorities.js
|
|
29226
28988
|
function topDelta(report) {
|
|
29227
28989
|
const top = report.items[0];
|
|
29228
28990
|
if (!top) return "No segment movement found.";
|
|
@@ -29280,8 +29042,7 @@ function buildDiagnosisPriorities(input) {
|
|
|
29280
29042
|
}
|
|
29281
29043
|
return priorities.slice(0, 6);
|
|
29282
29044
|
}
|
|
29283
|
-
|
|
29284
|
-
//#region packages/core/dist/analyze/diagnosis-status.js
|
|
29045
|
+
// packages/core/dist/analyze/diagnosis-status.js
|
|
29285
29046
|
function diagnosisPartialReasons(report) {
|
|
29286
29047
|
const skippedSections = new Set(report.skippedSections?.map((section) => section.section));
|
|
29287
29048
|
const segmentReasons = [
|
|
@@ -29333,8 +29094,7 @@ function diagnosisDataStatus(input) {
|
|
|
29333
29094
|
if (input.criticalStatuses.length > 0 && input.criticalStatuses.every((status) => status === "skipped")) return "unavailable";
|
|
29334
29095
|
return input.skippedSections || input.partialReasons ? "partial" : "complete";
|
|
29335
29096
|
}
|
|
29336
|
-
|
|
29337
|
-
//#region packages/core/dist/analyze/segment-impact-rows.js
|
|
29097
|
+
// packages/core/dist/analyze/segment-impact-rows.js
|
|
29338
29098
|
function fixed(value) {
|
|
29339
29099
|
return Number(value.toFixed(3));
|
|
29340
29100
|
}
|
|
@@ -29427,8 +29187,7 @@ function compareRetainedSegmentRows(input) {
|
|
|
29427
29187
|
unmatched
|
|
29428
29188
|
};
|
|
29429
29189
|
}
|
|
29430
|
-
|
|
29431
|
-
//#region packages/core/dist/analyze/segment-impact-analysis.js
|
|
29190
|
+
// packages/core/dist/analyze/segment-impact-analysis.js
|
|
29432
29191
|
function verdict$4(input) {
|
|
29433
29192
|
if (input.status === "empty") return "Search Console returned no retained segment rows for either window.";
|
|
29434
29193
|
if (!input.matchedRows) return "No segment was retained in both windows, so no movement delta was inferred.";
|
|
@@ -29539,8 +29298,7 @@ function analyzeSegmentRows(input) {
|
|
|
29539
29298
|
]
|
|
29540
29299
|
};
|
|
29541
29300
|
}
|
|
29542
|
-
|
|
29543
|
-
//#region packages/core/dist/analyze/segment-impact-input.js
|
|
29301
|
+
// packages/core/dist/analyze/segment-impact-input.js
|
|
29544
29302
|
const DAY_MS$1 = 864e5;
|
|
29545
29303
|
const MAX_WINDOW_DAYS = 240;
|
|
29546
29304
|
function subtractDays(value, days) {
|
|
@@ -29584,8 +29342,7 @@ function resolveSegmentRanges(input) {
|
|
|
29584
29342
|
function validateSegmentSite(site) {
|
|
29585
29343
|
if (!site.trim()) throw new SeoError("INVALID_INPUT", "site must not be empty.");
|
|
29586
29344
|
}
|
|
29587
|
-
|
|
29588
|
-
//#region packages/core/dist/analyze/segment-impact-fallback.js
|
|
29345
|
+
// packages/core/dist/analyze/segment-impact-fallback.js
|
|
29589
29346
|
function unavailableSegmentImpactReport(input) {
|
|
29590
29347
|
const days = segmentRangeDays(input.after);
|
|
29591
29348
|
const before = segmentComparisonRange(input.after, days);
|
|
@@ -29664,8 +29421,7 @@ function unavailableSegmentImpactReport(input) {
|
|
|
29664
29421
|
caveats: ["No segment movement conclusion was produced because the provider evidence was unavailable."]
|
|
29665
29422
|
};
|
|
29666
29423
|
}
|
|
29667
|
-
|
|
29668
|
-
//#region packages/core/dist/analyze/segment-impact.js
|
|
29424
|
+
// packages/core/dist/analyze/segment-impact.js
|
|
29669
29425
|
const DEFAULT_MAX_ROWS = 1e5;
|
|
29670
29426
|
const defaultDependencies$8 = {
|
|
29671
29427
|
searchAnalytics: querySearchAnalytics,
|
|
@@ -29738,8 +29494,7 @@ async function segmentImpact(input, dependencies = defaultDependencies$8) {
|
|
|
29738
29494
|
generatedAt: now.toISOString()
|
|
29739
29495
|
});
|
|
29740
29496
|
}
|
|
29741
|
-
|
|
29742
|
-
//#region packages/core/dist/imports/records.js
|
|
29497
|
+
// packages/core/dist/imports/records.js
|
|
29743
29498
|
const DEFAULT_IMPORT_STREAM_BYTES = 5e7;
|
|
29744
29499
|
async function importFile(input) {
|
|
29745
29500
|
const path = resolve(input.file);
|
|
@@ -30559,8 +30314,7 @@ async function importResearchRows(source, now = /* @__PURE__ */ new Date()) {
|
|
|
30559
30314
|
warnings
|
|
30560
30315
|
};
|
|
30561
30316
|
}
|
|
30562
|
-
|
|
30563
|
-
//#region packages/core/dist/providers/imports/research-provider.js
|
|
30317
|
+
// packages/core/dist/providers/imports/research-provider.js
|
|
30564
30318
|
function compareText$9(left, right) {
|
|
30565
30319
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
30566
30320
|
}
|
|
@@ -30601,8 +30355,7 @@ async function combineResearchRows(sources, now = /* @__PURE__ */ new Date()) {
|
|
|
30601
30355
|
warnings
|
|
30602
30356
|
};
|
|
30603
30357
|
}
|
|
30604
|
-
|
|
30605
|
-
//#region packages/core/dist/analyze/page-patterns.js
|
|
30358
|
+
// packages/core/dist/analyze/page-patterns.js
|
|
30606
30359
|
const LOCAL_QUERY_TERMS = [
|
|
30607
30360
|
"near me",
|
|
30608
30361
|
"today",
|
|
@@ -30773,8 +30526,7 @@ function dominantTemplateFamily(rows) {
|
|
|
30773
30526
|
share: top.count / rows.length
|
|
30774
30527
|
};
|
|
30775
30528
|
}
|
|
30776
|
-
|
|
30777
|
-
//#region packages/core/dist/analyze/site-diagnostics/cannibal-analysis-primitives.js
|
|
30529
|
+
// packages/core/dist/analyze/site-diagnostics/cannibal-analysis-primitives.js
|
|
30778
30530
|
function compareCannibalText(left, right) {
|
|
30779
30531
|
const leftPoints = [...left].map((value) => value.codePointAt(0) ?? 0);
|
|
30780
30532
|
const rightPoints = [...right].map((value) => value.codePointAt(0) ?? 0);
|
|
@@ -30819,8 +30571,7 @@ function addCannibalRow(group, url, row) {
|
|
|
30819
30571
|
position: weightedPosition / impressions
|
|
30820
30572
|
});
|
|
30821
30573
|
}
|
|
30822
|
-
|
|
30823
|
-
//#region packages/core/dist/analyze/site-diagnostics/cannibal-item.js
|
|
30574
|
+
// packages/core/dist/analyze/site-diagnostics/cannibal-item.js
|
|
30824
30575
|
function cannibalReviewContext(query, rows) {
|
|
30825
30576
|
const context = [];
|
|
30826
30577
|
if (isQuotedQuery(query)) context.push("quoted-query");
|
|
@@ -30898,8 +30649,7 @@ function createCannibalItem(input) {
|
|
|
30898
30649
|
function compareCannibalItems(left, right) {
|
|
30899
30650
|
return right.priority.score - left.priority.score || right.priority.demandImpressions - left.priority.demandImpressions || compareCannibalText(left.query, right.query);
|
|
30900
30651
|
}
|
|
30901
|
-
|
|
30902
|
-
//#region packages/core/dist/analyze/site-diagnostics/cannibal-import.js
|
|
30652
|
+
// packages/core/dist/analyze/site-diagnostics/cannibal-import.js
|
|
30903
30653
|
const MAX_SUPPRESSIONS$1 = 100;
|
|
30904
30654
|
function siteScope(site) {
|
|
30905
30655
|
const withoutScDomain = site.trim().replace(/^sc-domain:/iu, "");
|
|
@@ -31177,8 +30927,7 @@ async function cannibalImportReport(input, dependencies = {}) {
|
|
|
31177
30927
|
recommendations: analysis.items.length ? ["Review the highest-volume candidates first. Confirm whether the URLs serve the same intent and inspect technical state before changing canonicals, redirects, or content.", "Run this report against Search Console for the same site to confirm real query exposure before consolidating URLs."] : partialEvidence ? ["No multi-URL action is recommended from the retained imported rows. Inspect or re-export the provider data before treating this result as an all-clear."] : ["No multi-URL action is recommended from the retained imported rows."]
|
|
31178
30928
|
};
|
|
31179
30929
|
}
|
|
31180
|
-
|
|
31181
|
-
//#region packages/core/dist/storage/ledger.js
|
|
30930
|
+
// packages/core/dist/storage/ledger.js
|
|
31182
30931
|
var SessionLedger = class {
|
|
31183
30932
|
entries = /* @__PURE__ */ new Map();
|
|
31184
30933
|
gscCalls = 0;
|
|
@@ -31208,8 +30957,7 @@ var SessionLedger = class {
|
|
|
31208
30957
|
return providerBits.join(" · ");
|
|
31209
30958
|
}
|
|
31210
30959
|
};
|
|
31211
|
-
|
|
31212
|
-
//#region packages/core/dist/analyze/site-diagnostics/cannibal-analysis.js
|
|
30960
|
+
// packages/core/dist/analyze/site-diagnostics/cannibal-analysis.js
|
|
31213
30961
|
const MINIMUM_PAGE_SHARE = .1;
|
|
31214
30962
|
const MINIMUM_PAGE_IMPRESSIONS = 10;
|
|
31215
30963
|
const MAXIMUM_DOMINANT_SHARE = .8;
|
|
@@ -31371,8 +31119,17 @@ function analyzeCannibalRows(input) {
|
|
|
31371
31119
|
templates: summarizeTemplates(returnedItems.flatMap((item) => item.pages))
|
|
31372
31120
|
};
|
|
31373
31121
|
}
|
|
31374
|
-
|
|
31375
|
-
|
|
31122
|
+
/**
|
|
31123
|
+
* Empty, partial, filtered or complete. Partial evidence (a possibly capped
|
|
31124
|
+
* source, invalid rows, or a candidate with no query-level demand row) never
|
|
31125
|
+
* becomes filtered, so it cannot read as an all-clear.
|
|
31126
|
+
*/
|
|
31127
|
+
function cannibalDataStatus(selection, possiblyTruncated) {
|
|
31128
|
+
if (selection.sourceRows === 0) return "empty";
|
|
31129
|
+
if (possiblyTruncated || selection.invalidRows + selection.propertyInvalidRows > 0 || selection.missingPropertyQueries > 0) return "partial";
|
|
31130
|
+
return selection.eligibleClusters === 0 ? "filtered" : "complete";
|
|
31131
|
+
}
|
|
31132
|
+
// packages/core/dist/analyze/site-diagnostics/cannibal-report.js
|
|
31376
31133
|
const MAX_GSC_ROWS$2 = 1e5;
|
|
31377
31134
|
function verdict$3(input) {
|
|
31378
31135
|
if (input.status === "empty") return "Search Console returned no retained query/page rows for this window.";
|
|
@@ -31441,7 +31198,7 @@ async function cannibalReportWith(input, dependencies) {
|
|
|
31441
31198
|
const possiblyTruncated = pageTruncated || propertyTruncated;
|
|
31442
31199
|
const partialValidation = analysis.selection.invalidRows + analysis.selection.propertyInvalidRows > 0;
|
|
31443
31200
|
const completeness = possiblyTruncated && partialValidation ? "partial-and-possibly-truncated" : possiblyTruncated ? "possibly-truncated" : partialValidation ? "partial" : "complete";
|
|
31444
|
-
const dataStatus = analysis.selection
|
|
31201
|
+
const dataStatus = cannibalDataStatus(analysis.selection, possiblyTruncated);
|
|
31445
31202
|
return {
|
|
31446
31203
|
schemaVersion: 1,
|
|
31447
31204
|
dataSource: "search-console-api",
|
|
@@ -31525,8 +31282,7 @@ async function cannibalReportWith(input, dependencies) {
|
|
|
31525
31282
|
ledgerSummary: ledger.summary()
|
|
31526
31283
|
};
|
|
31527
31284
|
}
|
|
31528
|
-
|
|
31529
|
-
//#region packages/core/dist/analyze/site-diagnostics/cannibal.js
|
|
31285
|
+
// packages/core/dist/analyze/site-diagnostics/cannibal.js
|
|
31530
31286
|
const defaultDependencies$7 = {
|
|
31531
31287
|
searchAnalytics: querySearchAnalytics,
|
|
31532
31288
|
now: () => /* @__PURE__ */ new Date()
|
|
@@ -31551,8 +31307,7 @@ async function cannibalReport(input, dependencies = defaultDependencies$7) {
|
|
|
31551
31307
|
}
|
|
31552
31308
|
return cannibalReportWith(input, dependencies);
|
|
31553
31309
|
}
|
|
31554
|
-
|
|
31555
|
-
//#region packages/core/dist/analyze/site-diagnostics/decay-analysis-primitives.js
|
|
31310
|
+
// packages/core/dist/analyze/site-diagnostics/decay-analysis-primitives.js
|
|
31556
31311
|
function compareDecayText(left, right) {
|
|
31557
31312
|
const leftPoints = [...left].map((value) => value.codePointAt(0) ?? 0);
|
|
31558
31313
|
const rightPoints = [...right].map((value) => value.codePointAt(0) ?? 0);
|
|
@@ -31691,8 +31446,7 @@ function boundedDecayNumber(value, fallback, min, max) {
|
|
|
31691
31446
|
if (value === void 0 || !Number.isFinite(value)) return fallback;
|
|
31692
31447
|
return Math.min(max, Math.max(min, value));
|
|
31693
31448
|
}
|
|
31694
|
-
|
|
31695
|
-
//#region packages/core/dist/analyze/site-diagnostics/decay-analysis.js
|
|
31449
|
+
// packages/core/dist/analyze/site-diagnostics/decay-analysis.js
|
|
31696
31450
|
function analyzeDecay(input) {
|
|
31697
31451
|
const minDropPct = boundedDecayNumber(input.minDropPct, 20, 0, 100);
|
|
31698
31452
|
const minPreviousClicks = boundedDecayNumber(input.minPreviousClicks, 2, 0, 1e9);
|
|
@@ -31815,8 +31569,7 @@ function analyzeDecay(input) {
|
|
|
31815
31569
|
templates: summarizeTemplates(returned)
|
|
31816
31570
|
};
|
|
31817
31571
|
}
|
|
31818
|
-
|
|
31819
|
-
//#region packages/core/dist/analyze/site-diagnostics/decaying-report.js
|
|
31572
|
+
// packages/core/dist/analyze/site-diagnostics/decaying-report.js
|
|
31820
31573
|
const MAX_GSC_ROWS$1 = 1e5;
|
|
31821
31574
|
function verdict$2(report) {
|
|
31822
31575
|
if (report.dataStatus === "empty") return "Search Console returned no retained query/page rows for either comparison window.";
|
|
@@ -31987,8 +31740,7 @@ async function decayingReportWith(input, dependencies) {
|
|
|
31987
31740
|
]
|
|
31988
31741
|
};
|
|
31989
31742
|
}
|
|
31990
|
-
|
|
31991
|
-
//#region packages/core/dist/analyze/site-diagnostics/decaying.js
|
|
31743
|
+
// packages/core/dist/analyze/site-diagnostics/decaying.js
|
|
31992
31744
|
const defaultDependencies$6 = {
|
|
31993
31745
|
searchAnalytics: querySearchAnalytics,
|
|
31994
31746
|
now: () => /* @__PURE__ */ new Date()
|
|
@@ -31996,8 +31748,7 @@ const defaultDependencies$6 = {
|
|
|
31996
31748
|
function decayingReport(input, dependencies = defaultDependencies$6) {
|
|
31997
31749
|
return decayingReportWith(input, dependencies);
|
|
31998
31750
|
}
|
|
31999
|
-
|
|
32000
|
-
//#region packages/core/dist/analyze/site-diagnostics/quick-win-groups.js
|
|
31751
|
+
// packages/core/dist/analyze/site-diagnostics/quick-win-groups.js
|
|
32001
31752
|
function normalizedQuery(value) {
|
|
32002
31753
|
return value.normalize("NFKC").toLocaleLowerCase("und").replace(/\s+/gu, " ").trim();
|
|
32003
31754
|
}
|
|
@@ -32042,8 +31793,7 @@ function groupQuickWins(items) {
|
|
|
32042
31793
|
return group;
|
|
32043
31794
|
}).filter((group) => group !== void 0).sort((left, right) => right.totalEstimatedCtrClickShortfall - left.totalEstimatedCtrClickShortfall || right.totalImpressions - left.totalImpressions || compareText$8(left.id, right.id));
|
|
32044
31795
|
}
|
|
32045
|
-
|
|
32046
|
-
//#region packages/core/dist/analyze/site-diagnostics/quick-wins-analysis-primitives.js
|
|
31796
|
+
// packages/core/dist/analyze/site-diagnostics/quick-wins-analysis-primitives.js
|
|
32047
31797
|
function boundedInteger$3(value, fallback, minimum, maximum) {
|
|
32048
31798
|
if (value === void 0 || !Number.isFinite(value)) return fallback;
|
|
32049
31799
|
return Math.min(maximum, Math.max(minimum, Math.floor(value)));
|
|
@@ -32143,8 +31893,7 @@ function compareQuickWinItems(left, right) {
|
|
|
32143
31893
|
function roundedSum(values) {
|
|
32144
31894
|
return Number(values.reduce((sum, value) => sum + value, 0).toFixed(2));
|
|
32145
31895
|
}
|
|
32146
|
-
|
|
32147
|
-
//#region packages/core/dist/analyze/site-diagnostics/quick-wins-analysis.js
|
|
31896
|
+
// packages/core/dist/analyze/site-diagnostics/quick-wins-analysis.js
|
|
32148
31897
|
const MAX_MIN_IMPRESSIONS$2 = 1e9;
|
|
32149
31898
|
const DEFAULT_LIMIT$2 = 25;
|
|
32150
31899
|
const MAX_LIMIT$2 = 100;
|
|
@@ -32251,8 +32000,7 @@ function analyzeQuickWinsFromRows(input) {
|
|
|
32251
32000
|
benchmarkByPosition: benchmarkContext.byPosition
|
|
32252
32001
|
};
|
|
32253
32002
|
}
|
|
32254
|
-
|
|
32255
|
-
//#region packages/core/dist/analyze/site-diagnostics/quick-wins-templates.js
|
|
32003
|
+
// packages/core/dist/analyze/site-diagnostics/quick-wins-templates.js
|
|
32256
32004
|
function compareText$6(left, right) {
|
|
32257
32005
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
32258
32006
|
}
|
|
@@ -32301,8 +32049,7 @@ function quickWinTemplateSummaries(items) {
|
|
|
32301
32049
|
sampleUrls: [...item.urls].sort(compareText$6).slice(0, 3)
|
|
32302
32050
|
})).sort((left, right) => right.urlCount - left.urlCount || right.rowCount - left.rowCount || compareText$6(left.id, right.id)).slice(0, 5);
|
|
32303
32051
|
}
|
|
32304
|
-
|
|
32305
|
-
//#region packages/core/dist/analyze/site-diagnostics/quick-wins-report.js
|
|
32052
|
+
// packages/core/dist/analyze/site-diagnostics/quick-wins-report.js
|
|
32306
32053
|
const DEFAULT_DAYS$2 = 28;
|
|
32307
32054
|
const MAX_DAYS$1 = 548;
|
|
32308
32055
|
const DEFAULT_VERIFY_LIMIT$1 = 5;
|
|
@@ -32488,8 +32235,7 @@ async function quickWinsReportWith(input, dependencies) {
|
|
|
32488
32235
|
warnings
|
|
32489
32236
|
};
|
|
32490
32237
|
}
|
|
32491
|
-
|
|
32492
|
-
//#region packages/core/dist/analyze/site-diagnostics/quick-wins.js
|
|
32238
|
+
// packages/core/dist/analyze/site-diagnostics/quick-wins.js
|
|
32493
32239
|
const defaultDependencies$5 = {
|
|
32494
32240
|
searchAnalytics: querySearchAnalytics,
|
|
32495
32241
|
fetch: fetchPage,
|
|
@@ -32499,8 +32245,7 @@ const defaultDependencies$5 = {
|
|
|
32499
32245
|
function quickWinsReport(input, dependencies = defaultDependencies$5) {
|
|
32500
32246
|
return quickWinsReportWith(input, dependencies);
|
|
32501
32247
|
}
|
|
32502
|
-
|
|
32503
|
-
//#region packages/core/dist/analyze/striking-distance-analysis-primitives.js
|
|
32248
|
+
// packages/core/dist/analyze/striking-distance-analysis-primitives.js
|
|
32504
32249
|
function compareText$5(left, right) {
|
|
32505
32250
|
const leftPoints = [...left].map((character) => character.codePointAt(0) ?? 0);
|
|
32506
32251
|
const rightPoints = [...right].map((character) => character.codePointAt(0) ?? 0);
|
|
@@ -32607,8 +32352,7 @@ function groupStrikingDistanceItems(items) {
|
|
|
32607
32352
|
};
|
|
32608
32353
|
}).filter((group) => group !== void 0).sort((left, right) => right.totalImpressions - left.totalImpressions || right.uniqueUrls - left.uniqueUrls || compareText$5(left.id, right.id));
|
|
32609
32354
|
}
|
|
32610
|
-
|
|
32611
|
-
//#region packages/core/dist/analyze/striking-distance-analysis.js
|
|
32355
|
+
// packages/core/dist/analyze/striking-distance-analysis.js
|
|
32612
32356
|
const MAX_MIN_IMPRESSIONS$1 = 1e9;
|
|
32613
32357
|
const DEFAULT_LIMIT$1 = 25;
|
|
32614
32358
|
const MAX_LIMIT$1 = 100;
|
|
@@ -32747,8 +32491,7 @@ function analyzeStrikingDistanceRows(input) {
|
|
|
32747
32491
|
items
|
|
32748
32492
|
};
|
|
32749
32493
|
}
|
|
32750
|
-
|
|
32751
|
-
//#region packages/core/dist/analyze/striking-distance-report.js
|
|
32494
|
+
// packages/core/dist/analyze/striking-distance-report.js
|
|
32752
32495
|
const DEFAULT_DAYS$1 = 28;
|
|
32753
32496
|
const MAX_DAYS = 548;
|
|
32754
32497
|
const DEFAULT_VERIFY_LIMIT = 5;
|
|
@@ -32903,8 +32646,7 @@ async function strikingDistanceWith(input, dependencies) {
|
|
|
32903
32646
|
recommendations: analysis.groups.length ? analysis.groups.slice(0, 5).map((group) => group.recommendation.action) : ["No action is recommended from this report. Lower the minimum impressions or widen the date window if you need long-tail inspection."]
|
|
32904
32647
|
};
|
|
32905
32648
|
}
|
|
32906
|
-
|
|
32907
|
-
//#region packages/core/dist/analyze/striking-distance.js
|
|
32649
|
+
// packages/core/dist/analyze/striking-distance.js
|
|
32908
32650
|
const defaultDependencies$4 = {
|
|
32909
32651
|
searchAnalytics: querySearchAnalytics,
|
|
32910
32652
|
verifyContent: verifyQueryContent,
|
|
@@ -32913,8 +32655,7 @@ const defaultDependencies$4 = {
|
|
|
32913
32655
|
function strikingDistance(input, dependencies = defaultDependencies$4) {
|
|
32914
32656
|
return strikingDistanceWith(input, dependencies);
|
|
32915
32657
|
}
|
|
32916
|
-
|
|
32917
|
-
//#region packages/core/dist/updates/search-status.js
|
|
32658
|
+
// packages/core/dist/updates/search-status.js
|
|
32918
32659
|
const INCIDENTS_URL = "https://status.search.google.com/incidents.json";
|
|
32919
32660
|
async function fetchSearchStatusIncidents() {
|
|
32920
32661
|
const response = await fetch$1(INCIDENTS_URL, { signal: AbortSignal.timeout(8e3) });
|
|
@@ -32924,8 +32665,7 @@ async function fetchSearchStatusIncidents() {
|
|
|
32924
32665
|
async function listSearchUpdates(input = {}) {
|
|
32925
32666
|
return searchUpdatesFromIncidents(withRankingHistory(await fetchSearchStatusIncidents()), input);
|
|
32926
32667
|
}
|
|
32927
|
-
|
|
32928
|
-
//#region packages/core/dist/analyze/traffic-anomaly-analysis.js
|
|
32668
|
+
// packages/core/dist/analyze/traffic-anomaly-analysis.js
|
|
32929
32669
|
/** The step-change heuristic and its thresholds, returned with the report. */
|
|
32930
32670
|
const STEP_CHANGE_RULES = {
|
|
32931
32671
|
method: "best-split",
|
|
@@ -33281,8 +33021,7 @@ function analyzeTrafficAnomalyRows(input) {
|
|
|
33281
33021
|
}
|
|
33282
33022
|
};
|
|
33283
33023
|
}
|
|
33284
|
-
|
|
33285
|
-
//#region packages/core/dist/analyze/traffic-anomaly-report.js
|
|
33024
|
+
// packages/core/dist/analyze/traffic-anomaly-report.js
|
|
33286
33025
|
async function trafficAnomalyWith(input, dependencies) {
|
|
33287
33026
|
const days = input.days ?? 90;
|
|
33288
33027
|
const recentDays = input.recentDays ?? 7;
|
|
@@ -33325,8 +33064,7 @@ async function trafficAnomalyWith(input, dependencies) {
|
|
|
33325
33064
|
detection: analyzed.detection
|
|
33326
33065
|
};
|
|
33327
33066
|
}
|
|
33328
|
-
|
|
33329
|
-
//#region packages/core/dist/analyze/traffic-anomaly.js
|
|
33067
|
+
// packages/core/dist/analyze/traffic-anomaly.js
|
|
33330
33068
|
const defaultDependencies$3 = {
|
|
33331
33069
|
searchAnalytics: querySearchAnalytics,
|
|
33332
33070
|
now: () => /* @__PURE__ */ new Date()
|
|
@@ -33373,8 +33111,7 @@ async function updateCorrelation(input) {
|
|
|
33373
33111
|
})
|
|
33374
33112
|
};
|
|
33375
33113
|
}
|
|
33376
|
-
|
|
33377
|
-
//#region packages/core/dist/analyze/diagnose-property.js
|
|
33114
|
+
// packages/core/dist/analyze/diagnose-property.js
|
|
33378
33115
|
function errorReason(error) {
|
|
33379
33116
|
return error instanceof Error ? error.message : String(error);
|
|
33380
33117
|
}
|
|
@@ -33910,8 +33647,7 @@ async function diagnoseProperty(input, dependencies = {}) {
|
|
|
33910
33647
|
quickWins
|
|
33911
33648
|
};
|
|
33912
33649
|
}
|
|
33913
|
-
|
|
33914
|
-
//#region packages/core/dist/decision-model.js
|
|
33650
|
+
// packages/core/dist/decision-model.js
|
|
33915
33651
|
var DecisionModelError = class extends Error {
|
|
33916
33652
|
kind;
|
|
33917
33653
|
retryAfterMs;
|
|
@@ -34064,8 +33800,7 @@ var DecisionRunner = class {
|
|
|
34064
33800
|
return null;
|
|
34065
33801
|
}
|
|
34066
33802
|
};
|
|
34067
|
-
|
|
34068
|
-
//#region packages/core/dist/analyze/internal-links-index.js
|
|
33803
|
+
// packages/core/dist/analyze/internal-links-index.js
|
|
34069
33804
|
const PAGE_TERMS = 300;
|
|
34070
33805
|
const VECTOR_TERMS = 100;
|
|
34071
33806
|
var SiteIndex = class {
|
|
@@ -34192,7 +33927,7 @@ const GENERIC_ANCHORS = /^(click here|here|read more|learn more|more|this|this p
|
|
|
34192
33927
|
function normalise(value) {
|
|
34193
33928
|
return value.normalize("NFKD").replace(/\p{Diacritic}/gu, "").normalize("NFC").replace(/([\p{L}\p{N}])[’'`]([\p{L}\p{N}])/gu, "$1$2").toLowerCase().replace(/&/g, " and ").replace(/[^\p{L}\p{N}]+/gu, " ").replace(/\s+/g, " ").trim();
|
|
34194
33929
|
}
|
|
34195
|
-
const words$
|
|
33930
|
+
const words$2 = (value) => normalise(value).split(" ").filter(Boolean);
|
|
34196
33931
|
const FUNCTION_WORDS = new Set("a an and are as at be but by for from has have how if in into is it its of on or that the their then there these they this to was we were what when where which who why will with you your our can do does not just more most also than too very about after before over under again all any each other some such no nor only own same so up out off one two both every few several many much should would could because while since although though until unless whether however".split(" "));
|
|
34197
33932
|
const NOT_PLURAL = /* @__PURE__ */ new Set([
|
|
34198
33933
|
"always",
|
|
@@ -34253,7 +33988,7 @@ function stem(word) {
|
|
|
34253
33988
|
if (one.length > 6 && one.endsWith("ing")) return one.slice(0, -3);
|
|
34254
33989
|
return one;
|
|
34255
33990
|
}
|
|
34256
|
-
const terms = (text) => words$
|
|
33991
|
+
const terms = (text) => words$2(text).filter((word) => word.length > 1 && !FUNCTION_WORDS.has(word) && !/^\d+$/.test(word)).map(stem);
|
|
34257
33992
|
const slugWords = (url) => {
|
|
34258
33993
|
try {
|
|
34259
33994
|
return new URL(url).pathname.split(/[/._-]+/).filter(Boolean).join(" ");
|
|
@@ -34539,8 +34274,7 @@ function placementPage(input) {
|
|
|
34539
34274
|
sentences: pageSentences(input.html)
|
|
34540
34275
|
};
|
|
34541
34276
|
}
|
|
34542
|
-
|
|
34543
|
-
//#region packages/core/dist/analyze/internal-links-crawl.js
|
|
34277
|
+
// packages/core/dist/analyze/internal-links-crawl.js
|
|
34544
34278
|
const MAX_MAX_PAGES = 5e3;
|
|
34545
34279
|
const FETCH_CONCURRENCY = 6;
|
|
34546
34280
|
const MAX_CRAWL_DELAY_SECONDS = 10;
|
|
@@ -34911,8 +34645,7 @@ async function crawl(input, robots, sentences, renderer, warnings) {
|
|
|
34911
34645
|
warnings
|
|
34912
34646
|
};
|
|
34913
34647
|
}
|
|
34914
|
-
|
|
34915
|
-
//#region packages/core/dist/analyze/internal-links-judge.js
|
|
34648
|
+
// packages/core/dist/analyze/internal-links-judge.js
|
|
34916
34649
|
const PAGE_TYPES = {
|
|
34917
34650
|
pillar_guide: "A long, broad guide that covers a whole topic and would naturally link out to many narrower pages",
|
|
34918
34651
|
support_article: "A focused article, post, tutorial, or explainer about one narrower subject",
|
|
@@ -35136,8 +34869,7 @@ function decideWithoutModel(placement, similarity) {
|
|
|
35136
34869
|
anchor: placement.anchors.find((option) => option.sentence === sentence?.id)?.text ?? null
|
|
35137
34870
|
};
|
|
35138
34871
|
}
|
|
35139
|
-
|
|
35140
|
-
//#region packages/core/dist/analyze/internal-links-report.js
|
|
34872
|
+
// packages/core/dist/analyze/internal-links-report.js
|
|
35141
34873
|
const DAY$1 = 864e5;
|
|
35142
34874
|
const ISO_DAY = /^\d{4}-\d{2}-\d{2}$/;
|
|
35143
34875
|
function internalLinksReportRange(input, fallbackDays, now) {
|
|
@@ -35165,8 +34897,7 @@ function internalLinksVerdict(report) {
|
|
|
35165
34897
|
const capped = report.crawl.capReached ? ` The crawl stopped at its limit of ${report.crawl.pageLimit} pages, so pages beyond it were not checked.` : "";
|
|
35166
34898
|
return `${judged} ${scope}${counts.heldBack ? `; ${counts.heldBack} held back by the evidence floors` : ""}.${capped}`;
|
|
35167
34899
|
}
|
|
35168
|
-
|
|
35169
|
-
//#region packages/core/dist/analyze/internal-links.js
|
|
34900
|
+
// packages/core/dist/analyze/internal-links.js
|
|
35170
34901
|
const GSC_DAYS = 90;
|
|
35171
34902
|
const MAX_GSC_ROWS = 1e5;
|
|
35172
34903
|
const MAX_PAGES_PER_QUERY = 25;
|
|
@@ -35675,8 +35406,7 @@ function caveats$1(report) {
|
|
|
35675
35406
|
"Similarity, sentence match and anchors are text heuristics, and a model probability is a judgement of reader value. None of them predicts rankings or traffic."
|
|
35676
35407
|
];
|
|
35677
35408
|
}
|
|
35678
|
-
|
|
35679
|
-
//#region packages/core/dist/analyze/url-templates.js
|
|
35409
|
+
// packages/core/dist/analyze/url-templates.js
|
|
35680
35410
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
35681
35411
|
const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
35682
35412
|
function compareText$4(left, right) {
|
|
@@ -35805,8 +35535,7 @@ function clusterPseoTemplates(urls, opts = {}) {
|
|
|
35805
35535
|
sampleUrls: clusterUrls.sort(compareText$4).slice(0, sampleSize)
|
|
35806
35536
|
})).filter((cluster) => cluster.shape.variableSegments.length > 0 && cluster.urlCount >= minUrls && cluster.share >= minShare).sort((a, b) => b.urlCount - a.urlCount || compareText$4(a.signature, b.signature)).slice(0, opts.limit ?? 50);
|
|
35807
35537
|
}
|
|
35808
|
-
|
|
35809
|
-
//#region packages/core/dist/analyze/monitoring/index-coverage.js
|
|
35538
|
+
// packages/core/dist/analyze/monitoring/index-coverage.js
|
|
35810
35539
|
const DEFAULT_ITEMS_PER_SECTION = 100;
|
|
35811
35540
|
const MAX_ITEMS_PER_SECTION = 1e3;
|
|
35812
35541
|
const DEFAULT_TEMPLATE_LIMIT = 50;
|
|
@@ -36149,8 +35878,7 @@ function analyzeIndexCoverageSignals(input) {
|
|
|
36149
35878
|
})
|
|
36150
35879
|
};
|
|
36151
35880
|
}
|
|
36152
|
-
|
|
36153
|
-
//#region packages/core/dist/analyze/monitoring/index-coverage-report.js
|
|
35881
|
+
// packages/core/dist/analyze/monitoring/index-coverage-report.js
|
|
36154
35882
|
const MAX_SITEMAP_DOCUMENTS = 20;
|
|
36155
35883
|
const MAX_SEARCH_ROWS = 25e4;
|
|
36156
35884
|
const MAX_SITEMAP_URLS = 25e4;
|
|
@@ -36280,8 +36008,7 @@ async function indexCoverageSignals(input, dependencies = defaultDependencies$1)
|
|
|
36280
36008
|
}
|
|
36281
36009
|
};
|
|
36282
36010
|
}
|
|
36283
|
-
|
|
36284
|
-
//#region packages/core/dist/analyze/monitoring/redirect-trace.js
|
|
36011
|
+
// packages/core/dist/analyze/monitoring/redirect-trace.js
|
|
36285
36012
|
function resolveNextUrl(location, baseUrl) {
|
|
36286
36013
|
try {
|
|
36287
36014
|
const next = new URL(location, baseUrl);
|
|
@@ -36383,8 +36110,7 @@ async function redirectTrace(input) {
|
|
|
36383
36110
|
warnings
|
|
36384
36111
|
};
|
|
36385
36112
|
}
|
|
36386
|
-
|
|
36387
|
-
//#region packages/core/dist/analyze/monitoring/link-recover.js
|
|
36113
|
+
// packages/core/dist/analyze/monitoring/link-recover.js
|
|
36388
36114
|
function primaryIssue(issues) {
|
|
36389
36115
|
return [
|
|
36390
36116
|
"final-5xx",
|
|
@@ -36521,8 +36247,7 @@ async function linkRecover(input) {
|
|
|
36521
36247
|
warnings: [...new Set(warnings)].slice(0, 50)
|
|
36522
36248
|
};
|
|
36523
36249
|
}
|
|
36524
|
-
|
|
36525
|
-
//#region packages/core/dist/analyze/performance-analysis.js
|
|
36250
|
+
// packages/core/dist/analyze/performance-analysis.js
|
|
36526
36251
|
const FIELD_THRESHOLDS = {
|
|
36527
36252
|
CLS: {
|
|
36528
36253
|
good: .1,
|
|
@@ -36730,8 +36455,7 @@ function performanceActions(report) {
|
|
|
36730
36455
|
});
|
|
36731
36456
|
return actions;
|
|
36732
36457
|
}
|
|
36733
|
-
|
|
36734
|
-
//#region packages/core/dist/analyze/performance-crux.js
|
|
36458
|
+
// packages/core/dist/analyze/performance-crux.js
|
|
36735
36459
|
const CRUX_METRICS = [
|
|
36736
36460
|
"cumulative_layout_shift",
|
|
36737
36461
|
"interaction_to_next_paint",
|
|
@@ -36860,8 +36584,7 @@ async function fetchCruxFieldData(input) {
|
|
|
36860
36584
|
};
|
|
36861
36585
|
}
|
|
36862
36586
|
}
|
|
36863
|
-
|
|
36864
|
-
//#region packages/core/dist/analyze/performance-lighthouse.js
|
|
36587
|
+
// packages/core/dist/analyze/performance-lighthouse.js
|
|
36865
36588
|
const execFileAsync$1 = promisify(execFile);
|
|
36866
36589
|
const INSIGHT_BYTE_BUDGET = 24e3;
|
|
36867
36590
|
function compactRecord(value) {
|
|
@@ -37052,8 +36775,7 @@ async function runLighthouse(input) {
|
|
|
37052
36775
|
}
|
|
37053
36776
|
return report;
|
|
37054
36777
|
}
|
|
37055
|
-
|
|
37056
|
-
//#region packages/core/dist/analyze/performance.js
|
|
36778
|
+
// packages/core/dist/analyze/performance.js
|
|
37057
36779
|
const CACHE_TTL_MS = 864e5;
|
|
37058
36780
|
function reportId$1(input) {
|
|
37059
36781
|
return `perf_${createHash("sha256").update(JSON.stringify({
|
|
@@ -37243,8 +36965,7 @@ async function performanceAudit(input) {
|
|
|
37243
36965
|
})) cacheSet(report, now.getTime());
|
|
37244
36966
|
return report;
|
|
37245
36967
|
}
|
|
37246
|
-
|
|
37247
|
-
//#region packages/core/dist/analyze/query-cluster-primitives.js
|
|
36968
|
+
// packages/core/dist/analyze/query-cluster-primitives.js
|
|
37248
36969
|
const CLUSTER_THRESHOLD = .5;
|
|
37249
36970
|
const MAX_TOKEN_BUCKET = 250;
|
|
37250
36971
|
const MAX_TOKEN_SHARE = .08;
|
|
@@ -37357,8 +37078,7 @@ function* iterateQueryClusters(rows) {
|
|
|
37357
37078
|
yield group;
|
|
37358
37079
|
}
|
|
37359
37080
|
}
|
|
37360
|
-
|
|
37361
|
-
//#region packages/core/dist/analyze/query-cluster-analysis.js
|
|
37081
|
+
// packages/core/dist/analyze/query-cluster-analysis.js
|
|
37362
37082
|
function quotedLabel(label) {
|
|
37363
37083
|
return label.includes("\"") ? `'${label}'` : `"${label}"`;
|
|
37364
37084
|
}
|
|
@@ -37578,8 +37298,7 @@ function analyzeQueryClustersFromRows(input) {
|
|
|
37578
37298
|
limit
|
|
37579
37299
|
};
|
|
37580
37300
|
}
|
|
37581
|
-
|
|
37582
|
-
//#region packages/core/dist/analyze/query-cluster.js
|
|
37301
|
+
// packages/core/dist/analyze/query-cluster.js
|
|
37583
37302
|
function* retainedQueryClusterRows(input) {
|
|
37584
37303
|
for (const row of input.rows) {
|
|
37585
37304
|
const query = row.keys[0] ?? "";
|
|
@@ -37686,15 +37405,13 @@ function buildQueryClusterReportFromRows(input) {
|
|
|
37686
37405
|
recommendations: clusters.filter((cluster) => cluster.recommendation).slice(0, 5).map((cluster) => cluster.recommendation ?? "")
|
|
37687
37406
|
};
|
|
37688
37407
|
}
|
|
37689
|
-
|
|
37690
|
-
//#region packages/core/dist/analyze/reports/dates.js
|
|
37408
|
+
// packages/core/dist/analyze/reports/dates.js
|
|
37691
37409
|
function rangeDays(range) {
|
|
37692
37410
|
const start = Date.parse(`${range.startDate}T00:00:00Z`);
|
|
37693
37411
|
const end = Date.parse(`${range.endDate}T00:00:00Z`);
|
|
37694
37412
|
return Math.floor((end - start) / 864e5) + 1;
|
|
37695
37413
|
}
|
|
37696
|
-
|
|
37697
|
-
//#region packages/core/dist/analyze/reports/markdown.js
|
|
37414
|
+
// packages/core/dist/analyze/reports/markdown.js
|
|
37698
37415
|
function renderMarkdown(report) {
|
|
37699
37416
|
const lines = [
|
|
37700
37417
|
`# SEO report: ${report.site}`,
|
|
@@ -37718,8 +37435,7 @@ function renderMarkdown(report) {
|
|
|
37718
37435
|
for (const priority of report.priorities) lines.push(`- ${priority.title} (${priority.confidence}): ${priority.action}`);
|
|
37719
37436
|
return lines.join("\n");
|
|
37720
37437
|
}
|
|
37721
|
-
|
|
37722
|
-
//#region packages/core/dist/analyze/reports/sections.js
|
|
37438
|
+
// packages/core/dist/analyze/reports/sections.js
|
|
37723
37439
|
function skippedReason(report, section) {
|
|
37724
37440
|
return report.skippedSections?.find((item) => item.section === section)?.reason;
|
|
37725
37441
|
}
|
|
@@ -37854,8 +37570,7 @@ function contentOpportunityBullets(report) {
|
|
|
37854
37570
|
if (!bullets.length) bullets.push("No material content opportunity stood out in this window. Keep monitoring, but do not force content edits from this report alone.");
|
|
37855
37571
|
return bullets;
|
|
37856
37572
|
}
|
|
37857
|
-
|
|
37858
|
-
//#region packages/core/dist/analyze/reports/narrative.js
|
|
37573
|
+
// packages/core/dist/analyze/reports/narrative.js
|
|
37859
37574
|
function reportCaveats(input) {
|
|
37860
37575
|
return [
|
|
37861
37576
|
`Date window: ${input.period.startDate} to ${input.period.endDate}.`,
|
|
@@ -37937,8 +37652,7 @@ async function reportNarrative(input) {
|
|
|
37937
37652
|
markdown: renderMarkdown(report)
|
|
37938
37653
|
};
|
|
37939
37654
|
}
|
|
37940
|
-
|
|
37941
|
-
//#region packages/core/dist/analyze/second-page-analysis.js
|
|
37655
|
+
// packages/core/dist/analyze/second-page-analysis.js
|
|
37942
37656
|
const DEFAULT_MIN_IMPRESSIONS = 50;
|
|
37943
37657
|
const MAX_MIN_IMPRESSIONS = 1e9;
|
|
37944
37658
|
const DEFAULT_LIMIT = 10;
|
|
@@ -38142,8 +37856,7 @@ function analyzeSecondPageRows(input) {
|
|
|
38142
37856
|
items
|
|
38143
37857
|
};
|
|
38144
37858
|
}
|
|
38145
|
-
|
|
38146
|
-
//#region packages/core/dist/analyze/second-page-report.js
|
|
37859
|
+
// packages/core/dist/analyze/second-page-report.js
|
|
38147
37860
|
const MAX_SOURCE_ROWS = 1e5;
|
|
38148
37861
|
function integerOption(input) {
|
|
38149
37862
|
if (input.value === void 0) return input.fallback;
|
|
@@ -38360,8 +38073,7 @@ async function secondPageWith(input, dependencies) {
|
|
|
38360
38073
|
warnings: uniqueWarnings(warnings)
|
|
38361
38074
|
};
|
|
38362
38075
|
}
|
|
38363
|
-
|
|
38364
|
-
//#region packages/core/dist/analyze/second-page.js
|
|
38076
|
+
// packages/core/dist/analyze/second-page.js
|
|
38365
38077
|
const defaultDependencies = {
|
|
38366
38078
|
searchAnalytics: querySearchAnalytics,
|
|
38367
38079
|
fetch: fetchPage,
|
|
@@ -38371,8 +38083,7 @@ const defaultDependencies = {
|
|
|
38371
38083
|
function secondPage(input, dependencies = defaultDependencies) {
|
|
38372
38084
|
return secondPageWith(input, dependencies);
|
|
38373
38085
|
}
|
|
38374
|
-
|
|
38375
|
-
//#region packages/core/dist/analyze/workflows/priority-scoring.js
|
|
38086
|
+
// packages/core/dist/analyze/workflows/priority-scoring.js
|
|
38376
38087
|
const SOURCE_WEIGHT = {
|
|
38377
38088
|
decay: 1.25,
|
|
38378
38089
|
"quick-win": 1.15,
|
|
@@ -38441,8 +38152,7 @@ function scorePriority(input) {
|
|
|
38441
38152
|
final: Number(final.toFixed(2))
|
|
38442
38153
|
};
|
|
38443
38154
|
}
|
|
38444
|
-
|
|
38445
|
-
//#region packages/core/dist/analyze/workflows/report.js
|
|
38155
|
+
// packages/core/dist/analyze/workflows/report.js
|
|
38446
38156
|
function workflowReport(input) {
|
|
38447
38157
|
return {
|
|
38448
38158
|
workflow: input.workflow,
|
|
@@ -38454,8 +38164,7 @@ function workflowReport(input) {
|
|
|
38454
38164
|
output: input.output
|
|
38455
38165
|
};
|
|
38456
38166
|
}
|
|
38457
|
-
|
|
38458
|
-
//#region packages/core/dist/analyze/workflows/diagnose-property.js
|
|
38167
|
+
// packages/core/dist/analyze/workflows/diagnose-property.js
|
|
38459
38168
|
async function diagnosePropertyWorkflow(input) {
|
|
38460
38169
|
const narrative = await reportNarrative(input);
|
|
38461
38170
|
const skippedCount = narrative.diagnosis.skippedSections?.length ?? 0;
|
|
@@ -38477,8 +38186,7 @@ async function diagnosePropertyWorkflow(input) {
|
|
|
38477
38186
|
output: { narrative }
|
|
38478
38187
|
});
|
|
38479
38188
|
}
|
|
38480
|
-
|
|
38481
|
-
//#region packages/core/dist/markdown.js
|
|
38189
|
+
// packages/core/dist/markdown.js
|
|
38482
38190
|
function tableCell(value) {
|
|
38483
38191
|
return String(value ?? "-").replaceAll("\n", " ").replaceAll("|", "\\|");
|
|
38484
38192
|
}
|
|
@@ -38505,8 +38213,7 @@ function renderPresentationTablesMarkdown(tables) {
|
|
|
38505
38213
|
];
|
|
38506
38214
|
});
|
|
38507
38215
|
}
|
|
38508
|
-
|
|
38509
|
-
//#region packages/core/dist/analyze/workflows/presentation.js
|
|
38216
|
+
// packages/core/dist/analyze/workflows/presentation.js
|
|
38510
38217
|
function isRecord(value) {
|
|
38511
38218
|
return typeof value === "object" && value !== null;
|
|
38512
38219
|
}
|
|
@@ -38641,8 +38348,7 @@ function workflowPresentation(report, options = {}) {
|
|
|
38641
38348
|
}] : []
|
|
38642
38349
|
};
|
|
38643
38350
|
}
|
|
38644
|
-
|
|
38645
|
-
//#region packages/core/dist/analyze/workflows/markdown.js
|
|
38351
|
+
// packages/core/dist/analyze/workflows/markdown.js
|
|
38646
38352
|
function renderWorkflowMarkdown(report, options = {}) {
|
|
38647
38353
|
const presentation = workflowPresentation(report, options);
|
|
38648
38354
|
return [
|
|
@@ -38656,8 +38362,7 @@ function renderWorkflowMarkdown(report, options = {}) {
|
|
|
38656
38362
|
...renderPresentationTablesMarkdown(presentation.tables)
|
|
38657
38363
|
].join("\n").trim();
|
|
38658
38364
|
}
|
|
38659
|
-
|
|
38660
|
-
//#region packages/core/dist/analyze/workflows/priority-grouping.js
|
|
38365
|
+
// packages/core/dist/analyze/workflows/priority-grouping.js
|
|
38661
38366
|
const GROUPABLE_SOURCES = /* @__PURE__ */ new Set(["quick-win", "striking-distance"]);
|
|
38662
38367
|
function queueTemplateFamilyId(template) {
|
|
38663
38368
|
if (!template) return "no-template";
|
|
@@ -38753,8 +38458,7 @@ function groupBy(items, keyFor) {
|
|
|
38753
38458
|
function groupPriorityQueue(items) {
|
|
38754
38459
|
return groupBy(groupBy(items, targetGroupKey), groupKey).sort((a, b) => b.score - a.score);
|
|
38755
38460
|
}
|
|
38756
|
-
|
|
38757
|
-
//#region packages/core/dist/analyze/workflows/refresh-priorities.js
|
|
38461
|
+
// packages/core/dist/analyze/workflows/refresh-priorities.js
|
|
38758
38462
|
function templateCount(input) {
|
|
38759
38463
|
const template = input.templates?.find((item) => item.id === input.id);
|
|
38760
38464
|
return template?.urlCount ?? template?.count;
|
|
@@ -38961,8 +38665,7 @@ async function refreshPrioritiesWorkflow(input) {
|
|
|
38961
38665
|
}
|
|
38962
38666
|
});
|
|
38963
38667
|
}
|
|
38964
|
-
|
|
38965
|
-
//#region packages/core/dist/analyze/workflows/segments.js
|
|
38668
|
+
// packages/core/dist/analyze/workflows/segments.js
|
|
38966
38669
|
function compareText$1(left, right) {
|
|
38967
38670
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
38968
38671
|
}
|
|
@@ -38990,8 +38693,7 @@ function splitSegments(report) {
|
|
|
38990
38693
|
losers
|
|
38991
38694
|
};
|
|
38992
38695
|
}
|
|
38993
|
-
|
|
38994
|
-
//#region packages/core/dist/analyze/workflows/update-postmortem.js
|
|
38696
|
+
// packages/core/dist/analyze/workflows/update-postmortem.js
|
|
38995
38697
|
function formatMagnitude(value) {
|
|
38996
38698
|
return Math.abs(value).toLocaleString("en-GB");
|
|
38997
38699
|
}
|
|
@@ -39263,8 +38965,7 @@ async function updatePostmortemWorkflow(input, dependencies = {}) {
|
|
|
39263
38965
|
}
|
|
39264
38966
|
});
|
|
39265
38967
|
}
|
|
39266
|
-
|
|
39267
|
-
//#region packages/core/dist/clicky/api.js
|
|
38968
|
+
// packages/core/dist/clicky/api.js
|
|
39268
38969
|
const ENDPOINT$1 = "https://api.clicky.com/api/stats/4";
|
|
39269
38970
|
const MAX_BYTES$3 = 5e6;
|
|
39270
38971
|
var ClickyError = class extends Error {
|
|
@@ -39318,8 +39019,7 @@ async function clickyDomain(site) {
|
|
|
39318
39019
|
return null;
|
|
39319
39020
|
}
|
|
39320
39021
|
}
|
|
39321
|
-
|
|
39322
|
-
//#region packages/core/dist/analyze/ai-queries.js
|
|
39022
|
+
// packages/core/dist/analyze/ai-queries.js
|
|
39323
39023
|
const RULES = [
|
|
39324
39024
|
["agent_prompt", "^(search the web for|browse the web|find sources)|do not invent|return the [0-9]+ most relevant|include source urls|context: location|do not include location|question: |reply only with|the model you are using"],
|
|
39325
39025
|
["tracker", "\\. ?my location is |\\?\\. ?my( |$)|^evaluate the .+ on "],
|
|
@@ -39361,7 +39061,7 @@ function aiQueryKind(query) {
|
|
|
39361
39061
|
return MATCHERS.find(([, pattern]) => pattern.test(text))?.[0] ?? null;
|
|
39362
39062
|
}
|
|
39363
39063
|
const STOP = new Set("the and for with that this what which who how why when where are is was can does do did you your our from about into than then them they their there have has had will would should could not but its it’s me my i am of to in on at by or an as be if so".split(" "));
|
|
39364
|
-
function words(query) {
|
|
39064
|
+
function words$1(query) {
|
|
39365
39065
|
return new Set(query.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter((word) => word.length >= 3 && !STOP.has(word)).map((word) => word.length > 4 && word.endsWith("s") ? word.slice(0, -1) : word));
|
|
39366
39066
|
}
|
|
39367
39067
|
const SAME_QUESTION = .6;
|
|
@@ -39404,7 +39104,7 @@ async function aiQueriesReport(input, searchAnalytics) {
|
|
|
39404
39104
|
const rows = [...matched.rows].sort((a, b) => b.impressions - a.impressions || String(a.keys[0]).localeCompare(String(b.keys[0])) || String(a.keys[1]).localeCompare(String(b.keys[1])));
|
|
39405
39105
|
const usage = /* @__PURE__ */ new Map();
|
|
39406
39106
|
const unique = new Set(rows.map((row) => String(row.keys[0] ?? "")));
|
|
39407
|
-
for (const query of unique) for (const word of words(query)) usage.set(word, (usage.get(word) ?? 0) + 1);
|
|
39107
|
+
for (const query of unique) for (const word of words$1(query)) usage.set(word, (usage.get(word) ?? 0) + 1);
|
|
39408
39108
|
const weight = (word) => Math.log((unique.size + 1) / (usage.get(word) ?? 1));
|
|
39409
39109
|
const groups = [];
|
|
39410
39110
|
const byWord = /* @__PURE__ */ new Map();
|
|
@@ -39424,7 +39124,7 @@ async function aiQueriesReport(input, searchAnalytics) {
|
|
|
39424
39124
|
continue;
|
|
39425
39125
|
}
|
|
39426
39126
|
const text = query.trim().toLowerCase();
|
|
39427
|
-
const own = words(query);
|
|
39127
|
+
const own = words$1(query);
|
|
39428
39128
|
let group = byText.get(text);
|
|
39429
39129
|
if (!group) {
|
|
39430
39130
|
let checked = 0;
|
|
@@ -39539,8 +39239,7 @@ async function aiQueriesReport(input, searchAnalytics) {
|
|
|
39539
39239
|
]
|
|
39540
39240
|
};
|
|
39541
39241
|
}
|
|
39542
|
-
|
|
39543
|
-
//#region packages/core/dist/commands/research-providers.js
|
|
39242
|
+
// packages/core/dist/commands/research-providers.js
|
|
39544
39243
|
function need(headers, provider) {
|
|
39545
39244
|
const values = provider === "dataforseo" ? [headers.get("x-dataforseo-login"), headers.get("x-dataforseo-password")] : [headers.get("x-ahrefs-key")];
|
|
39546
39245
|
if (values.some((value) => !value)) throw new CommandError("NO_KEY", `No ${provider} key. Hosted MCP: save it at https://seoskill.dev/account#keys. CLI and local MCP: run \`seo login\` to use the account's keys, or \`seo providers ${provider} connect\`.`);
|
|
@@ -40132,8 +39831,7 @@ async function runAiAnswers(input, headers, deps, more) {
|
|
|
40132
39831
|
}
|
|
40133
39832
|
};
|
|
40134
39833
|
}
|
|
40135
|
-
|
|
40136
|
-
//#region packages/core/dist/commands/analytics.js
|
|
39834
|
+
// packages/core/dist/commands/analytics.js
|
|
40137
39835
|
async function analyticsSignIn(accounts, property, signIn) {
|
|
40138
39836
|
const only = accounts.length === 1 ? accounts[0] : void 0;
|
|
40139
39837
|
if (only) return only.google;
|
|
@@ -40195,8 +39893,7 @@ async function runAnalyticsRows(input, google, options) {
|
|
|
40195
39893
|
}
|
|
40196
39894
|
};
|
|
40197
39895
|
}
|
|
40198
|
-
|
|
40199
|
-
//#region packages/core/dist/ga4/matching.js
|
|
39896
|
+
// packages/core/dist/ga4/matching.js
|
|
40200
39897
|
function hostnameFromUrl(value) {
|
|
40201
39898
|
try {
|
|
40202
39899
|
const url = new URL(value);
|
|
@@ -40233,8 +39930,7 @@ function matchGa4WebStreams(site, candidates) {
|
|
|
40233
39930
|
}];
|
|
40234
39931
|
});
|
|
40235
39932
|
}
|
|
40236
|
-
|
|
40237
|
-
//#region packages/core/dist/commands/analytics-site.js
|
|
39933
|
+
// packages/core/dist/commands/analytics-site.js
|
|
40238
39934
|
const STREAM_CHECKS = 30;
|
|
40239
39935
|
const AT_ONCE = 5;
|
|
40240
39936
|
const TIED = 3;
|
|
@@ -40540,10 +40236,9 @@ async function analyticsBeside(access, site, range, before, pages) {
|
|
|
40540
40236
|
};
|
|
40541
40237
|
}
|
|
40542
40238
|
}
|
|
40543
|
-
|
|
40544
|
-
//#region packages/core/dist/commands/audit.js
|
|
40239
|
+
// packages/core/dist/commands/audit.js
|
|
40545
40240
|
const AUDIT_SECTION = "weekly-audit";
|
|
40546
|
-
const AUDIT_SECTION_TEXT = "What the weekly crawl of the site found (broken and redirected internal links, missing or duplicate titles, descriptions and H1s, noindex, canonicals to another page, sitemap URLs that do not return 200, thin pages), with what is new, back or resolved since the crawl before. Only for sites added to the weekly site audit beta.";
|
|
40241
|
+
const AUDIT_SECTION_TEXT = "What the weekly crawl of the site found (broken and redirected internal links, missing or duplicate titles, descriptions and H1s, noindex, canonicals to another page, sitemap URLs that do not return 200, thin pages, tags that JavaScript changes), with what is new, back or resolved since the crawl before. Only for sites added to the weekly site audit beta.";
|
|
40547
40242
|
const AUDIT_RULES = {
|
|
40548
40243
|
link_to_error: "Internal links to a page that returns an error",
|
|
40549
40244
|
link_to_redirect: "Internal links to a redirect",
|
|
@@ -40556,25 +40251,37 @@ const AUDIT_RULES = {
|
|
|
40556
40251
|
canonical_elsewhere: "Pages whose canonical is another URL",
|
|
40557
40252
|
sitemap_url_not_ok: "Sitemap URLs that do not return 200",
|
|
40558
40253
|
sitemap_page_unlinked: "Sitemap pages no crawled page links to (heuristic: the crawl may not reach every page)",
|
|
40559
|
-
thin_page: "Pages under 100 words (heuristic)"
|
|
40254
|
+
thin_page: "Pages under 100 words (heuristic)",
|
|
40255
|
+
js_changed_tags: "Pages whose raw HTML has another title, canonical or robots tag than the page after JavaScript runs"
|
|
40560
40256
|
};
|
|
40561
|
-
const PAGE_SIZE$
|
|
40562
|
-
const SUMMARY_ROWS$
|
|
40563
|
-
const day$
|
|
40564
|
-
function relative$
|
|
40257
|
+
const PAGE_SIZE$3 = 50;
|
|
40258
|
+
const SUMMARY_ROWS$2 = 20;
|
|
40259
|
+
const day$2 = (ms) => new Date(ms).toISOString().slice(0, 10);
|
|
40260
|
+
function relative$3(value, origin) {
|
|
40565
40261
|
return origin && value.startsWith(origin) ? value.slice(origin.length) || "/" : value;
|
|
40566
40262
|
}
|
|
40567
40263
|
function evidence(finding, origin) {
|
|
40568
40264
|
const details = JSON.parse(finding.details);
|
|
40569
40265
|
const parts = [];
|
|
40570
40266
|
if (typeof details.status === "number") parts.push(`${details.status}`);
|
|
40571
|
-
if (typeof details.location === "string") parts.push(`to ${relative$
|
|
40572
|
-
if (typeof details.canonical === "string") parts.push(`canonical ${relative$
|
|
40267
|
+
if (typeof details.location === "string") parts.push(`to ${relative$3(details.location, origin)}`);
|
|
40268
|
+
if (typeof details.canonical === "string") parts.push(`canonical ${relative$3(details.canonical, origin)}`);
|
|
40573
40269
|
if (typeof details.words === "number") parts.push(`${details.words} words`);
|
|
40270
|
+
if (details.raw && typeof details.raw === "object") {
|
|
40271
|
+
const raw = details.raw;
|
|
40272
|
+
for (const key of [
|
|
40273
|
+
"title",
|
|
40274
|
+
"canonical",
|
|
40275
|
+
"robots"
|
|
40276
|
+
]) if (key in raw) {
|
|
40277
|
+
const value = raw[key];
|
|
40278
|
+
parts.push(`raw ${key} ${typeof value === "string" ? key === "canonical" ? relative$3(value, origin) : value : "none"}`);
|
|
40279
|
+
}
|
|
40280
|
+
}
|
|
40574
40281
|
const linking = typeof details.linking_pages === "number";
|
|
40575
40282
|
const count = linking ? details.linking_pages : details.pages;
|
|
40576
40283
|
if (typeof count === "number") {
|
|
40577
|
-
const shown = (Array.isArray(details.examples) ? details.examples.map((url) => relative$
|
|
40284
|
+
const shown = (Array.isArray(details.examples) ? details.examples.map((url) => relative$3(url, origin)) : []).slice(0, 3);
|
|
40578
40285
|
const noun = `${linking ? "linking page" : "page"}${count === 1 ? "" : "s"}`;
|
|
40579
40286
|
parts.push(`${count} ${noun}${shown.length ? ` (${shown.join(", ")}${count > shown.length ? ", and more" : ""})` : ""}`);
|
|
40580
40287
|
}
|
|
@@ -40584,13 +40291,13 @@ function state(finding, since) {
|
|
|
40584
40291
|
if (finding.state === "resolved") return "resolved";
|
|
40585
40292
|
if (finding.reopened_at && finding.reopened_at >= since) return "back";
|
|
40586
40293
|
if (finding.first_seen_at >= since) return "new";
|
|
40587
|
-
return `open since ${day$
|
|
40294
|
+
return `open since ${day$2(finding.first_seen_at)}`;
|
|
40588
40295
|
}
|
|
40589
40296
|
function table(rows, origin, since) {
|
|
40590
40297
|
return ["state | finding | subject | evidence", ...rows.map((finding) => [
|
|
40591
40298
|
state(finding, since),
|
|
40592
40299
|
finding.rule,
|
|
40593
|
-
relative$
|
|
40300
|
+
relative$3(finding.subject, origin),
|
|
40594
40301
|
evidence(finding, origin)
|
|
40595
40302
|
].join(" | "))].join("\n");
|
|
40596
40303
|
}
|
|
@@ -40601,6 +40308,14 @@ function ordered(findings, since) {
|
|
|
40601
40308
|
};
|
|
40602
40309
|
return [...findings].sort((a, b) => rank(a) - rank(b) || a.rule.localeCompare(b.rule) || (a.subject < b.subject ? -1 : a.subject > b.subject ? 1 : 0));
|
|
40603
40310
|
}
|
|
40311
|
+
function renderingText(rendering) {
|
|
40312
|
+
if (!rendering) return null;
|
|
40313
|
+
const pages = (n) => n === 1 ? "1 page" : `${n} pages`;
|
|
40314
|
+
if (rendering.mode === "on") return `JavaScript changed what some pages show, so the crawl rendered the parts of the site that need it (${pages(rendering.rendered)} rendered${rendering.failed ? `; ${pages(rendering.failed)} could not be rendered, so ${rendering.failed === 1 ? "it is" : "they are"} left out of the tag and text checks` : ""}).`;
|
|
40315
|
+
if (rendering.mode === "off") return "JavaScript did not change the pages checked, so the crawl read raw HTML.";
|
|
40316
|
+
if (rendering.mode === "unavailable") return "JavaScript rendering failed on the pages checked, so the crawl read raw HTML. If the site builds its pages with JavaScript, titles, canonicals and links may be missing here.";
|
|
40317
|
+
return rendering.failed && !rendering.rendered ? "JavaScript rendering failed, so the crawl read raw HTML." : null;
|
|
40318
|
+
}
|
|
40604
40319
|
function runAuditReport(input, snapshot, call) {
|
|
40605
40320
|
const site = input.site;
|
|
40606
40321
|
const detail = input.detail ?? "summary";
|
|
@@ -40647,9 +40362,10 @@ function runAuditReport(input, snapshot, call) {
|
|
|
40647
40362
|
const pages = summary.pages;
|
|
40648
40363
|
const coverage = summary.complete ? `${pages.fetched} pages, the whole site the crawl could reach` : summary.status === "failed" ? `${pages.fetched} pages before the crawl stopped on errors, so it is partial` : `${pages.fetched} pages; it stopped at the 5,000-page limit${pages.links_past_cap ? ` with ${pages.links_past_cap} more links past it` : ""}, so it is partial`;
|
|
40649
40364
|
const head = [
|
|
40650
|
-
`Weekly site audit of ${site}, crawled ${day$
|
|
40651
|
-
previous ? `Since the crawl of ${day$
|
|
40652
|
-
summary.
|
|
40365
|
+
`Weekly site audit of ${site}, crawled ${day$2(snapshot.finished_at)}: ${coverage}.${pages.blocked ? ` ${pages.blocked === 1 ? "1 URL" : `${pages.blocked} URLs`} blocked by robots.txt ${pages.blocked === 1 ? "was" : "were"} not fetched.` : ""}`,
|
|
40366
|
+
previous ? `Since the crawl of ${day$2(previous.finished_at)}: ${summary.findings.new} new, ${summary.findings.reopened} back, ${summary.findings.resolved} resolved. ${summary.findings.open} open now.` : `This is the first crawl, so every finding is new: ${summary.findings.open} open.`,
|
|
40367
|
+
renderingText(summary.rendering),
|
|
40368
|
+
summary.findings.resolution === "crawled-pages-only" ? summary.complete ? "Because some pages could not be rendered, a finding counts as resolved only when this crawl rendered its page; a finding not seen here is not an all-clear." : "Because the crawl is partial, a finding counts as resolved only when this crawl fetched its page again; a finding not seen here is not an all-clear." : null,
|
|
40653
40369
|
summary.findings.capped_rules.length ? `Capped at 1,000 findings each, so these counts are lower bounds: ${summary.findings.capped_rules.join(", ")}.` : null,
|
|
40654
40370
|
running
|
|
40655
40371
|
].filter(Boolean).join("\n");
|
|
@@ -40659,8 +40375,8 @@ function runAuditReport(input, snapshot, call) {
|
|
|
40659
40375
|
"change | url | date | reason now | top page",
|
|
40660
40376
|
...index.rows.map((row) => [
|
|
40661
40377
|
row.change === "dropped" ? "dropped out" : "back in",
|
|
40662
|
-
relative$
|
|
40663
|
-
day$
|
|
40378
|
+
relative$3(row.url, origin),
|
|
40379
|
+
day$2(row.at),
|
|
40664
40380
|
row.coverage ?? "",
|
|
40665
40381
|
row.top ? "yes" : "no"
|
|
40666
40382
|
].join(" | ")),
|
|
@@ -40668,7 +40384,7 @@ function runAuditReport(input, snapshot, call) {
|
|
|
40668
40384
|
].filter(Boolean).join("\n") : null;
|
|
40669
40385
|
if (detail === "rows") {
|
|
40670
40386
|
const offset = input.offset ?? 0;
|
|
40671
|
-
const slice = findings.slice(offset, offset + PAGE_SIZE$
|
|
40387
|
+
const slice = findings.slice(offset, offset + PAGE_SIZE$3);
|
|
40672
40388
|
const end = offset + slice.length;
|
|
40673
40389
|
return {
|
|
40674
40390
|
text: [
|
|
@@ -40702,7 +40418,7 @@ function runAuditReport(input, snapshot, call) {
|
|
|
40702
40418
|
head,
|
|
40703
40419
|
indexText,
|
|
40704
40420
|
byRule.length ? ["finding | open | what it is", ...byRule.map(([rule, count]) => `${rule} | ${count} | ${AUDIT_RULES[rule] ?? rule}`)].join("\n") : "No findings in this crawl.",
|
|
40705
|
-
fresh.length ? `New, back or resolved this week, 1 to ${Math.min(SUMMARY_ROWS$
|
|
40421
|
+
fresh.length ? `New, back or resolved this week, 1 to ${Math.min(SUMMARY_ROWS$2, fresh.length)} of ${fresh.length}:\n${table(fresh.slice(0, SUMMARY_ROWS$2), origin, since)}` : previous ? "Nothing new, back or resolved since the crawl before." : null,
|
|
40706
40422
|
changes.compared ? `Between the two crawls: ${changes.new_urls} new URLs, ${changes.gone_urls} gone, ${changes.status_changed} changed status, ${changes.title_changed} changed title.` : null,
|
|
40707
40423
|
`More: ${call("report", {
|
|
40708
40424
|
site,
|
|
@@ -40716,7 +40432,7 @@ function runAuditReport(input, snapshot, call) {
|
|
|
40716
40432
|
site,
|
|
40717
40433
|
finished_at: snapshot.finished_at,
|
|
40718
40434
|
summary,
|
|
40719
|
-
fresh: fresh.slice(0, SUMMARY_ROWS$
|
|
40435
|
+
fresh: fresh.slice(0, SUMMARY_ROWS$2)
|
|
40720
40436
|
}
|
|
40721
40437
|
};
|
|
40722
40438
|
}
|
|
@@ -40724,12 +40440,12 @@ function auditPreview(snapshot) {
|
|
|
40724
40440
|
if (!snapshot?.summary || snapshot.finished_at === null) return snapshot ? "The first weekly crawl has not finished." : null;
|
|
40725
40441
|
const { findings } = snapshot.summary;
|
|
40726
40442
|
const index = snapshot.index_changes;
|
|
40727
|
-
return `${index && (index.dropped || index.returned) ? `${index.dropped} URLs dropped out of Google's index this week and ${index.returned} came back. ` : ""}Last crawl ${day$
|
|
40443
|
+
return `${index && (index.dropped || index.returned) ? `${index.dropped} URLs dropped out of Google's index this week and ${index.returned} came back. ` : ""}Last crawl ${day$2(snapshot.finished_at)}: ${findings.open} open findings, ${findings.new + findings.reopened} new or back, ${findings.resolved} resolved.`;
|
|
40728
40444
|
}
|
|
40729
40445
|
const WEEK_MS = 6048e5;
|
|
40730
|
-
const day = (ms) => ms === null ? "" : new Date(ms).toISOString().slice(0, 10);
|
|
40446
|
+
const day$1 = (ms) => ms === null ? "" : new Date(ms).toISOString().slice(0, 10);
|
|
40731
40447
|
const count$2 = (value) => value.toLocaleString("en-US");
|
|
40732
|
-
function relative$
|
|
40448
|
+
function relative$2(value, origin) {
|
|
40733
40449
|
if (!value) return "";
|
|
40734
40450
|
return origin && value.startsWith(origin) ? value.slice(origin.length) || "/" : value;
|
|
40735
40451
|
}
|
|
@@ -40743,15 +40459,15 @@ function rowsTable(rows, checks) {
|
|
|
40743
40459
|
const since = checks.as_of - WEEK_MS;
|
|
40744
40460
|
const changed = (row) => row.changed_at !== null && row.changed_at > since;
|
|
40745
40461
|
return ["url | index change | reason now | before | changed | checked | clicks (28 days before) | in_sitemap | google_canonical | error", ...rows.map((row) => [
|
|
40746
|
-
relative$
|
|
40747
|
-
row.transition && row.transition_at !== null && row.transition_at > since ? `${row.transition === "dropped" ? "dropped out" : "back in"} ${day(row.transition_at)}` : "",
|
|
40462
|
+
relative$2(row.url, checks.origin),
|
|
40463
|
+
row.transition && row.transition_at !== null && row.transition_at > since ? `${row.transition === "dropped" ? "dropped out" : "back in"} ${day$1(row.transition_at)}` : "",
|
|
40748
40464
|
row.coverage ?? (row.checked_at === null ? "not checked yet" : ""),
|
|
40749
40465
|
changed(row) ? row.prev_coverage ?? "" : "",
|
|
40750
|
-
changed(row) ? day(row.changed_at) : "",
|
|
40751
|
-
day(row.checked_at),
|
|
40466
|
+
changed(row) ? day$1(row.changed_at) : "",
|
|
40467
|
+
day$1(row.checked_at),
|
|
40752
40468
|
`${count$2(row.clicks)} (${count$2(row.previous_clicks)})${row.lost ? " lost" : ""}`,
|
|
40753
40469
|
row.in_sitemap ? "yes" : "no",
|
|
40754
|
-
row.google_canonical && row.google_canonical !== row.url ? relative$
|
|
40470
|
+
row.google_canonical && row.google_canonical !== row.url ? relative$2(row.google_canonical, checks.origin) : "",
|
|
40755
40471
|
row.error ?? ""
|
|
40756
40472
|
].join(" | "))].join("\n");
|
|
40757
40473
|
}
|
|
@@ -40833,8 +40549,7 @@ function runAuditChecks(input, checks, call) {
|
|
|
40833
40549
|
}
|
|
40834
40550
|
};
|
|
40835
40551
|
}
|
|
40836
|
-
|
|
40837
|
-
//#region packages/core/dist/commands/bing.js
|
|
40552
|
+
// packages/core/dist/commands/bing.js
|
|
40838
40553
|
const BING_LIMITS = ["Bing and Google count clicks, impressions and positions their own way. Their numbers sit side by side here and are never added together.", "Bing lists only its top queries and pages, grouped by week. A query or page missing from Bing’s list is unknown, not zero."];
|
|
40839
40554
|
const CLI_LINK = "If you have a shell, link the CLI to the same account once: run `npx -y seo login`, show the person the link it prints, and after they approve it run `npx -y seo login` again. `npx -y seo` commands then use the same Google accounts, Bing and keys.";
|
|
40840
40555
|
const LOCAL_BING = `Bing blocks the hosted server, so Bing data comes from the CLI on a machine. ${CLI_LINK} Connect Bing on the account page if it is not connected, then run \`npx -y seo report --site <site> --section bing --json\`.`;
|
|
@@ -41150,8 +40865,7 @@ function bingOverviewText(report, heading, origin, rowsPerList) {
|
|
|
41150
40865
|
`Limits:\n${report.caveats.map((line) => `- ${line}`).join("\n")}`
|
|
41151
40866
|
].filter(Boolean).join("\n\n");
|
|
41152
40867
|
}
|
|
41153
|
-
|
|
41154
|
-
//#region packages/core/dist/commands/clicky.js
|
|
40868
|
+
// packages/core/dist/commands/clicky.js
|
|
41155
40869
|
const CLICKY_KEY_PREFIX = "x-clicky-";
|
|
41156
40870
|
function clickySites(keys) {
|
|
41157
40871
|
const sites = [];
|
|
@@ -41305,8 +41019,7 @@ async function runClickyRows(input, keys, options) {
|
|
|
41305
41019
|
}
|
|
41306
41020
|
};
|
|
41307
41021
|
}
|
|
41308
|
-
|
|
41309
|
-
//#region packages/core/dist/commands/domain-rating.js
|
|
41022
|
+
// packages/core/dist/commands/domain-rating.js
|
|
41310
41023
|
const DR_ATTRIBUTION = "domain_rating: Domain Rating by Ahrefs (https://ahrefs.com/).";
|
|
41311
41024
|
const ENDPOINT = "https://api.ahrefs.com/v3/public/domain-rating-free";
|
|
41312
41025
|
const MAX_DOMAINS = 25;
|
|
@@ -41755,10 +41468,9 @@ function indexingText(site, run, page, origin, askMore, now) {
|
|
|
41755
41468
|
if (!page.summary && more) lines.push(`More rows: ${page.more(end)}.`);
|
|
41756
41469
|
return lines;
|
|
41757
41470
|
}
|
|
41758
|
-
|
|
41759
|
-
|
|
41760
|
-
const
|
|
41761
|
-
const PAGE_SIZE$1 = 50;
|
|
41471
|
+
// packages/core/dist/commands/internal-links.js
|
|
41472
|
+
const SUMMARY_ROWS$1 = 10;
|
|
41473
|
+
const PAGE_SIZE$2 = 50;
|
|
41762
41474
|
function rows(report, from, size) {
|
|
41763
41475
|
return report.items.slice(from, from + size).map((item) => ({
|
|
41764
41476
|
source: item.source,
|
|
@@ -41789,7 +41501,7 @@ function internalLinksText(report, options) {
|
|
|
41789
41501
|
"sentence"
|
|
41790
41502
|
];
|
|
41791
41503
|
if (options.detail === "rows") {
|
|
41792
|
-
const page = rows(report, options.offset, PAGE_SIZE$
|
|
41504
|
+
const page = rows(report, options.offset, PAGE_SIZE$2);
|
|
41793
41505
|
const end = options.offset + page.length;
|
|
41794
41506
|
return [
|
|
41795
41507
|
`Internal links · ${report.mode === "url" ? report.targetUrl : report.site} · ${report.dataStatus}`,
|
|
@@ -41800,7 +41512,7 @@ function internalLinksText(report, options) {
|
|
|
41800
41512
|
}
|
|
41801
41513
|
const s = report.summary;
|
|
41802
41514
|
const judge = report.judge;
|
|
41803
|
-
const shown = rows(report, 0, SUMMARY_ROWS);
|
|
41515
|
+
const shown = rows(report, 0, SUMMARY_ROWS$1);
|
|
41804
41516
|
const held = Object.entries(report.heldBack.reasons).map(([reason, count]) => `${reason} ${count}`).join(", ");
|
|
41805
41517
|
return [
|
|
41806
41518
|
`Internal links · ${report.mode === "url" ? report.targetUrl : report.site} · ${report.dataStatus}`,
|
|
@@ -41814,8 +41526,441 @@ function internalLinksText(report, options) {
|
|
|
41814
41526
|
`More: ${shown.length < report.items.length ? `${options.more("rows", shown.length)} for more links, or ` : ""}${options.more("full")} for every field.${report.next ? ` Next: ${report.next}` : ""}`
|
|
41815
41527
|
].filter(Boolean).join("\n\n");
|
|
41816
41528
|
}
|
|
41817
|
-
|
|
41818
|
-
|
|
41529
|
+
// packages/core/dist/commands/issues.js
|
|
41530
|
+
const ISSUES_SECTION = "issues";
|
|
41531
|
+
const ISSUES_SECTION_TEXT = "A list kept for the site between sessions: issues the striking-distance, low-ctr and quick-wins checks found (and the weekly crawl and Google index checks for an audited site), each with its id, the latest check and what the person marked it (open, fixed or ignored). Asking for it runs those checks again. To mark issues, add mark and issues instead of section. The hosted server keeps the list only for sites in the weekly site audit; for any other site it returns the list as JSON for the agent to save and pass back as saved.";
|
|
41532
|
+
const ISSUE_MARKS = [
|
|
41533
|
+
"open",
|
|
41534
|
+
"fixed",
|
|
41535
|
+
"ignored"
|
|
41536
|
+
];
|
|
41537
|
+
const SAVED_MAX = 6e5;
|
|
41538
|
+
const SUBJECT_MAX = 300;
|
|
41539
|
+
const EVIDENCE_MAX = 200;
|
|
41540
|
+
const PAGE_SIZE$1 = 50;
|
|
41541
|
+
const SUMMARY_ROWS = 20;
|
|
41542
|
+
const SEARCH_CHECKS = [
|
|
41543
|
+
"striking-distance",
|
|
41544
|
+
"low-ctr",
|
|
41545
|
+
"quick-wins"
|
|
41546
|
+
];
|
|
41547
|
+
function issueId(kind, subject) {
|
|
41548
|
+
let hash = 2166136261;
|
|
41549
|
+
for (const char of `${kind}\n${subject}`) {
|
|
41550
|
+
hash ^= char.codePointAt(0) ?? 0;
|
|
41551
|
+
hash = Math.imul(hash, 16777619) >>> 0;
|
|
41552
|
+
}
|
|
41553
|
+
return hash.toString(16).padStart(8, "0");
|
|
41554
|
+
}
|
|
41555
|
+
const clip = (value, max) => value.length > max ? `${value.slice(0, max - 1)}…` : value;
|
|
41556
|
+
const num = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
41557
|
+
const pctText = (value) => {
|
|
41558
|
+
const n = num(value);
|
|
41559
|
+
return n === null ? null : `${Math.round(n * 1e3) / 10}%`;
|
|
41560
|
+
};
|
|
41561
|
+
function searchEvidence(item) {
|
|
41562
|
+
const position = num(item.position);
|
|
41563
|
+
const ctr = pctText(item.actualCtr ?? item.ctr);
|
|
41564
|
+
const expected = pctText(item.expectedCtr ?? item.targetCtr);
|
|
41565
|
+
return [
|
|
41566
|
+
position === null ? null : `position ${Math.round(position * 10) / 10}`,
|
|
41567
|
+
num(item.impressions) === null ? null : `${item.impressions} impressions`,
|
|
41568
|
+
num(item.clicks) === null ? null : `${item.clicks} clicks`,
|
|
41569
|
+
ctr ? `CTR ${ctr}${expected ? ` against ${expected} expected` : ""}` : null
|
|
41570
|
+
].filter(Boolean).join(", ");
|
|
41571
|
+
}
|
|
41572
|
+
function searchComplete(report) {
|
|
41573
|
+
const status = report.dataStatus;
|
|
41574
|
+
if (status === "partial" || status === "unavailable") return `data ${status}`;
|
|
41575
|
+
if (report.source?.possiblyTruncated) return "Search Console rows possibly cut short";
|
|
41576
|
+
const selection = report.selection ?? {};
|
|
41577
|
+
const limited = Object.entries(selection).find(([key, value]) => key.startsWith("limited") && Number(value) > 0);
|
|
41578
|
+
if (limited) return `capped, ${limited[1]} more rows not returned`;
|
|
41579
|
+
return null;
|
|
41580
|
+
}
|
|
41581
|
+
function searchRun(kind, report) {
|
|
41582
|
+
const base = {
|
|
41583
|
+
kind,
|
|
41584
|
+
covers: (k) => k === kind
|
|
41585
|
+
};
|
|
41586
|
+
if (report instanceof Error) return {
|
|
41587
|
+
...base,
|
|
41588
|
+
found: [],
|
|
41589
|
+
complete: false,
|
|
41590
|
+
addLimit: 0,
|
|
41591
|
+
status: `${kind}: could not run (${clip(report.message, 120)})`
|
|
41592
|
+
};
|
|
41593
|
+
const found = (report.items ?? []).filter((item) => typeof item.query === "string" && typeof item.url === "string").map((item) => ({
|
|
41594
|
+
kind,
|
|
41595
|
+
issue: {
|
|
41596
|
+
subject: `"${item.query}" on ${item.url}`,
|
|
41597
|
+
evidence: searchEvidence(item)
|
|
41598
|
+
}
|
|
41599
|
+
}));
|
|
41600
|
+
const short = searchComplete(report);
|
|
41601
|
+
return {
|
|
41602
|
+
...base,
|
|
41603
|
+
found,
|
|
41604
|
+
complete: !short,
|
|
41605
|
+
addLimit: 10,
|
|
41606
|
+
status: `${kind}: ${found.length} ${found.length === 1 ? "row" : "rows"}${short ? ` (${short}, so an issue it did not return is not checked)` : ""}`
|
|
41607
|
+
};
|
|
41608
|
+
}
|
|
41609
|
+
function auditEvidence(details) {
|
|
41610
|
+
try {
|
|
41611
|
+
const parsed = JSON.parse(details);
|
|
41612
|
+
return Object.entries(parsed).filter(([, value]) => ["string", "number"].includes(typeof value)).map(([key, value]) => `${key} ${value}`).join(", ");
|
|
41613
|
+
} catch {
|
|
41614
|
+
return "";
|
|
41615
|
+
}
|
|
41616
|
+
}
|
|
41617
|
+
const AUDIT_KIND = "weekly-audit:";
|
|
41618
|
+
const INDEX_KIND = "index-drop";
|
|
41619
|
+
function auditRuns(snapshot) {
|
|
41620
|
+
const crawl = (k) => k.startsWith(AUDIT_KIND);
|
|
41621
|
+
const index = (k) => k === INDEX_KIND;
|
|
41622
|
+
if (snapshot === void 0) return [];
|
|
41623
|
+
const summary = snapshot?.summary;
|
|
41624
|
+
if (!snapshot || !summary || snapshot.finished_at === null) {
|
|
41625
|
+
const why = snapshot ? "the first crawl has not finished" : "the site is not in the weekly site audit";
|
|
41626
|
+
return [{
|
|
41627
|
+
kind: "weekly-audit",
|
|
41628
|
+
covers: crawl,
|
|
41629
|
+
found: [],
|
|
41630
|
+
complete: false,
|
|
41631
|
+
addLimit: 0,
|
|
41632
|
+
status: `weekly-audit: not checked, ${why}`
|
|
41633
|
+
}, {
|
|
41634
|
+
kind: INDEX_KIND,
|
|
41635
|
+
covers: index,
|
|
41636
|
+
found: [],
|
|
41637
|
+
complete: false,
|
|
41638
|
+
addLimit: 0,
|
|
41639
|
+
status: `${INDEX_KIND}: not checked, ${why}`
|
|
41640
|
+
}];
|
|
41641
|
+
}
|
|
41642
|
+
const open = snapshot.findings.filter((f) => f.state === "open");
|
|
41643
|
+
const gone = new Set(snapshot.findings.filter((f) => f.state === "resolved").map((f) => issueId(`${AUDIT_KIND}${f.rule}`, f.subject)));
|
|
41644
|
+
const capped = new Set(summary.findings.capped_rules.map((rule) => `${AUDIT_KIND}${rule}`));
|
|
41645
|
+
const complete = summary.complete && summary.findings.resolution === "all";
|
|
41646
|
+
const day = new Date(snapshot.finished_at).toISOString().slice(0, 10);
|
|
41647
|
+
const runs = [{
|
|
41648
|
+
kind: "weekly-audit",
|
|
41649
|
+
covers: crawl,
|
|
41650
|
+
found: open.map((f) => ({
|
|
41651
|
+
kind: `${AUDIT_KIND}${f.rule}`,
|
|
41652
|
+
issue: {
|
|
41653
|
+
subject: f.subject,
|
|
41654
|
+
evidence: auditEvidence(f.details)
|
|
41655
|
+
}
|
|
41656
|
+
})),
|
|
41657
|
+
complete,
|
|
41658
|
+
addLimit: 50,
|
|
41659
|
+
gone,
|
|
41660
|
+
partialKinds: capped,
|
|
41661
|
+
status: `weekly-audit: crawl of ${day}, ${open.length} open findings${complete ? "" : " (partial crawl, so a finding it did not see again is not checked)"}${capped.size ? `; capped rules, not checked when absent: ${[...capped].map((k) => k.slice(13)).join(", ")}` : ""}`
|
|
41662
|
+
}];
|
|
41663
|
+
const changes = snapshot.index_changes;
|
|
41664
|
+
if (changes) {
|
|
41665
|
+
const dropped = changes.rows.filter((row) => row.change === "dropped");
|
|
41666
|
+
runs.push({
|
|
41667
|
+
kind: INDEX_KIND,
|
|
41668
|
+
covers: index,
|
|
41669
|
+
found: dropped.map((row) => ({
|
|
41670
|
+
kind: INDEX_KIND,
|
|
41671
|
+
issue: {
|
|
41672
|
+
subject: row.url,
|
|
41673
|
+
evidence: `dropped out ${new Date(row.at).toISOString().slice(0, 10)}${row.coverage ? `, ${row.coverage}` : ""}${row.top ? ", top page" : ""}`
|
|
41674
|
+
}
|
|
41675
|
+
})),
|
|
41676
|
+
complete: false,
|
|
41677
|
+
addLimit: dropped.length,
|
|
41678
|
+
gone: new Set(changes.rows.filter((row) => row.change === "returned").map((row) => issueId(INDEX_KIND, row.url))),
|
|
41679
|
+
status: `${INDEX_KIND}: ${changes.dropped} dropped out of Google's index and ${changes.returned} came back in the last 7 days${changes.rows.length < changes.dropped + changes.returned ? `, ${changes.rows.length} rows read` : ""}`
|
|
41680
|
+
});
|
|
41681
|
+
}
|
|
41682
|
+
return runs;
|
|
41683
|
+
}
|
|
41684
|
+
function mergeIssues(stored, runs, now) {
|
|
41685
|
+
const byId = new Map(stored.map((issue) => [issue.id, { ...issue }]));
|
|
41686
|
+
for (const run of runs) {
|
|
41687
|
+
const seenIds = /* @__PURE__ */ new Set();
|
|
41688
|
+
let added = 0;
|
|
41689
|
+
for (const { kind, issue } of run.found) {
|
|
41690
|
+
const id = issueId(kind, issue.subject);
|
|
41691
|
+
if (seenIds.has(id)) continue;
|
|
41692
|
+
seenIds.add(id);
|
|
41693
|
+
const evidence = clip(issue.evidence, EVIDENCE_MAX);
|
|
41694
|
+
const existing = byId.get(id);
|
|
41695
|
+
if (existing) {
|
|
41696
|
+
Object.assign(existing, {
|
|
41697
|
+
evidence,
|
|
41698
|
+
last_found: now,
|
|
41699
|
+
seen: "found",
|
|
41700
|
+
checked_at: now
|
|
41701
|
+
});
|
|
41702
|
+
continue;
|
|
41703
|
+
}
|
|
41704
|
+
if (added >= run.addLimit) continue;
|
|
41705
|
+
added += 1;
|
|
41706
|
+
byId.set(id, {
|
|
41707
|
+
id,
|
|
41708
|
+
kind,
|
|
41709
|
+
subject: clip(issue.subject, SUBJECT_MAX),
|
|
41710
|
+
evidence,
|
|
41711
|
+
mark: "open",
|
|
41712
|
+
marked_at: null,
|
|
41713
|
+
note: null,
|
|
41714
|
+
first_found: now,
|
|
41715
|
+
last_found: now,
|
|
41716
|
+
seen: "found",
|
|
41717
|
+
checked_at: now
|
|
41718
|
+
});
|
|
41719
|
+
}
|
|
41720
|
+
for (const issue of byId.values()) {
|
|
41721
|
+
if (!run.covers(issue.kind) || seenIds.has(issue.id)) continue;
|
|
41722
|
+
if (run.gone?.has(issue.id)) Object.assign(issue, {
|
|
41723
|
+
seen: "not-found",
|
|
41724
|
+
checked_at: now
|
|
41725
|
+
});
|
|
41726
|
+
else if (run.complete && !run.partialKinds?.has(issue.kind)) Object.assign(issue, {
|
|
41727
|
+
seen: "not-found",
|
|
41728
|
+
checked_at: now
|
|
41729
|
+
});
|
|
41730
|
+
else issue.seen = "not-checked";
|
|
41731
|
+
}
|
|
41732
|
+
}
|
|
41733
|
+
return prune([...byId.values()]);
|
|
41734
|
+
}
|
|
41735
|
+
function prune(issues) {
|
|
41736
|
+
if (issues.length <= 500) return sortIssues(issues);
|
|
41737
|
+
return sortIssues([...issues].sort((a, b) => Number(b.mark !== "open") - Number(a.mark !== "open") || (b.last_found ?? "").localeCompare(a.last_found ?? "") || a.id.localeCompare(b.id)).slice(0, 500));
|
|
41738
|
+
}
|
|
41739
|
+
const MARK_ORDER = {
|
|
41740
|
+
open: 0,
|
|
41741
|
+
fixed: 1,
|
|
41742
|
+
ignored: 2
|
|
41743
|
+
};
|
|
41744
|
+
const SEEN_ORDER = {
|
|
41745
|
+
found: 0,
|
|
41746
|
+
"not-checked": 1,
|
|
41747
|
+
"not-found": 2
|
|
41748
|
+
};
|
|
41749
|
+
function sortIssues(issues) {
|
|
41750
|
+
return [...issues].sort((a, b) => MARK_ORDER[a.mark] - MARK_ORDER[b.mark] || SEEN_ORDER[a.seen] - SEEN_ORDER[b.seen] || a.kind.localeCompare(b.kind) || (a.subject < b.subject ? -1 : a.subject > b.subject ? 1 : 0) || a.id.localeCompare(b.id));
|
|
41751
|
+
}
|
|
41752
|
+
const day = (iso) => iso ? iso.slice(0, 10) : "";
|
|
41753
|
+
function relative$1(subject, origin) {
|
|
41754
|
+
return subject.split(origin).join("") || subject;
|
|
41755
|
+
}
|
|
41756
|
+
function issuesTable(rows, origin) {
|
|
41757
|
+
return ["id | mark | latest check | kind | subject | evidence when last found | first found", ...rows.map((issue) => [
|
|
41758
|
+
issue.id,
|
|
41759
|
+
issue.mark === "open" ? "open" : `${issue.mark} ${day(issue.marked_at)}${issue.note ? ` (${issue.note})` : ""}`,
|
|
41760
|
+
issue.seen === "not-checked" ? `not checked${issue.checked_at ? `, last ${day(issue.checked_at)}` : ""}` : `${issue.seen === "found" ? "found" : "not found"} ${day(issue.checked_at)}`,
|
|
41761
|
+
issue.kind,
|
|
41762
|
+
relative$1(issue.subject, origin),
|
|
41763
|
+
issue.evidence,
|
|
41764
|
+
day(issue.first_found)
|
|
41765
|
+
].join(" | "))].join("\n");
|
|
41766
|
+
}
|
|
41767
|
+
function counts(issues) {
|
|
41768
|
+
const by = (mark) => issues.filter((i) => i.mark === mark).length;
|
|
41769
|
+
return {
|
|
41770
|
+
open: by("open"),
|
|
41771
|
+
fixed: by("fixed"),
|
|
41772
|
+
ignored: by("ignored")
|
|
41773
|
+
};
|
|
41774
|
+
}
|
|
41775
|
+
function issuesPreview(issues, call, site) {
|
|
41776
|
+
const more = `${call("report", {
|
|
41777
|
+
site,
|
|
41778
|
+
section: ISSUES_SECTION
|
|
41779
|
+
})} checks again and lists them.`;
|
|
41780
|
+
if (!issues) return `This server is not storing an issues list for this site. ${call("report", {
|
|
41781
|
+
site,
|
|
41782
|
+
section: ISSUES_SECTION
|
|
41783
|
+
})} checks and returns the list to save.`;
|
|
41784
|
+
if (!issues.length) return `No issues kept for this site yet. ${more}`;
|
|
41785
|
+
const c = counts(issues);
|
|
41786
|
+
return `${issues.length} issues kept: ${c.open} open, ${c.fixed} fixed, ${c.ignored} ignored, as of the last check. ${more}`;
|
|
41787
|
+
}
|
|
41788
|
+
const SEEN = /* @__PURE__ */ new Set([
|
|
41789
|
+
"found",
|
|
41790
|
+
"not-found",
|
|
41791
|
+
"not-checked"
|
|
41792
|
+
]);
|
|
41793
|
+
const optionalText = (value) => value === null || value === void 0 || typeof value === "string";
|
|
41794
|
+
function parseSaved(text, site) {
|
|
41795
|
+
const bad = (why) => new CommandError("INVALID_INPUT", `saved is not a saved issues list: ${why}. Pass the JSON the issues section returned, {"version":1,"sites":{"${site}":[...]}}, unchanged. Nothing was changed.`);
|
|
41796
|
+
let file;
|
|
41797
|
+
try {
|
|
41798
|
+
file = JSON.parse(text);
|
|
41799
|
+
} catch {
|
|
41800
|
+
throw bad("it is not JSON");
|
|
41801
|
+
}
|
|
41802
|
+
const { version, sites } = file ?? {};
|
|
41803
|
+
if (version !== 1 || !sites || typeof sites !== "object") throw bad("it needs version 1 and sites");
|
|
41804
|
+
const list = sites[site];
|
|
41805
|
+
if (list === void 0) throw bad(`it has no list for ${site} (it has ${Object.keys(sites).join(", ") || "none"})`);
|
|
41806
|
+
if (!Array.isArray(list)) throw bad(`sites["${site}"] is not a list`);
|
|
41807
|
+
if (list.length > 500) throw bad(`it has more than 500`);
|
|
41808
|
+
return list.map((entry, index) => {
|
|
41809
|
+
const issue = entry ?? {};
|
|
41810
|
+
if (!(typeof issue.id === "string" && /^[0-9a-f]{8}$/.test(issue.id) && typeof issue.kind === "string" && typeof issue.subject === "string" && ISSUE_MARKS.includes(issue.mark) && typeof issue.first_found === "string" && [
|
|
41811
|
+
"evidence",
|
|
41812
|
+
"marked_at",
|
|
41813
|
+
"note",
|
|
41814
|
+
"last_found",
|
|
41815
|
+
"checked_at"
|
|
41816
|
+
].every((key) => optionalText(issue[key])) && (issue.seen === void 0 || SEEN.has(issue.seen)))) throw bad(`issue ${index + 1} is not in the saved shape`);
|
|
41817
|
+
return {
|
|
41818
|
+
id: issue.id,
|
|
41819
|
+
kind: clip(issue.kind, 100),
|
|
41820
|
+
subject: clip(issue.subject, SUBJECT_MAX),
|
|
41821
|
+
evidence: clip(issue.evidence ?? "", EVIDENCE_MAX),
|
|
41822
|
+
mark: issue.mark,
|
|
41823
|
+
marked_at: issue.marked_at ?? null,
|
|
41824
|
+
note: issue.note ? clip(issue.note, 300) : null,
|
|
41825
|
+
first_found: issue.first_found,
|
|
41826
|
+
last_found: issue.last_found ?? null,
|
|
41827
|
+
seen: issue.seen ?? "not-checked",
|
|
41828
|
+
checked_at: issue.checked_at ?? null
|
|
41829
|
+
};
|
|
41830
|
+
});
|
|
41831
|
+
}
|
|
41832
|
+
const asFile = (site, issues) => ({
|
|
41833
|
+
version: 1,
|
|
41834
|
+
sites: { [site]: issues }
|
|
41835
|
+
});
|
|
41836
|
+
function saveText(site, issues, call) {
|
|
41837
|
+
return [`This server is not storing this list for ${site}: the hosted server keeps it only for sites in the weekly site audit. Save the JSON below in a file in the person's project, such as .seo/issues.json, replacing the old one. Next time, pass the file's contents as saved (${call("report", {
|
|
41838
|
+
site,
|
|
41839
|
+
section: ISSUES_SECTION,
|
|
41840
|
+
saved: "<file contents>"
|
|
41841
|
+
})}, or with mark and issues), so marks, notes and first-found dates carry over. Without saved, the list starts again.`, `\`\`\`json\n${JSON.stringify(asFile(site, issues))}\n\`\`\``].join("\n");
|
|
41842
|
+
}
|
|
41843
|
+
async function startingList(site, saved, deps) {
|
|
41844
|
+
const kept = deps.issues ? await deps.issues.read(site) : null;
|
|
41845
|
+
if (kept) return {
|
|
41846
|
+
issues: kept,
|
|
41847
|
+
stored: true,
|
|
41848
|
+
note: saved ? "saved was not used: this surface keeps the list itself." : null
|
|
41849
|
+
};
|
|
41850
|
+
return {
|
|
41851
|
+
issues: saved ? parseSaved(saved, site) : [],
|
|
41852
|
+
stored: false,
|
|
41853
|
+
note: saved ? null : "No saved list was passed, so this is a new list."
|
|
41854
|
+
};
|
|
41855
|
+
}
|
|
41856
|
+
async function runIssues(input, deps, build) {
|
|
41857
|
+
const { site } = input;
|
|
41858
|
+
const now = (deps.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
|
|
41859
|
+
const range = dateWindow(input, 28);
|
|
41860
|
+
const start = await startingList(site, input.saved, deps);
|
|
41861
|
+
const [snapshot, ...search] = await Promise.all([deps.audit ? deps.audit.snapshot(site) : Promise.resolve(void 0), ...SEARCH_CHECKS.map((kind) => build(kind, range).catch((error) => error instanceof Error ? error : new Error(String(error))))]);
|
|
41862
|
+
const runs = [...SEARCH_CHECKS.map((kind, i) => searchRun(kind, search[i])), ...auditRuns(snapshot)];
|
|
41863
|
+
const issues = mergeIssues(start.issues, runs, now);
|
|
41864
|
+
if (start.stored) await deps.issues?.write(site, issues);
|
|
41865
|
+
return issuesResult(input, issues, runs, range, deps.call, start);
|
|
41866
|
+
}
|
|
41867
|
+
function issuesResult(input, issues, runs, range, call, start) {
|
|
41868
|
+
const { site } = input;
|
|
41869
|
+
const detail = input.detail ?? "summary";
|
|
41870
|
+
const origin = originOf(site);
|
|
41871
|
+
if (detail === "full") {
|
|
41872
|
+
const file = asFile(site, issues);
|
|
41873
|
+
return {
|
|
41874
|
+
text: JSON.stringify(file),
|
|
41875
|
+
data: file
|
|
41876
|
+
};
|
|
41877
|
+
}
|
|
41878
|
+
const c = counts(issues);
|
|
41879
|
+
const stillFound = issues.filter((i) => i.mark === "fixed" && i.seen === "found");
|
|
41880
|
+
const head = [
|
|
41881
|
+
`Issues ${start.stored ? "kept" : "listed"} for ${site}: ${issues.length} (${c.open} open, ${c.fixed} fixed, ${c.ignored} ignored). Search checks ${range.startDate} to ${range.endDate}.`,
|
|
41882
|
+
start.note,
|
|
41883
|
+
`This check:\n${runs.map((run) => `- ${run.status}`).join("\n")}`,
|
|
41884
|
+
`New issues come from the first 10 rows of each search check and the first 50 open crawl findings; the list keeps at most 500.`,
|
|
41885
|
+
stillFound.length ? `Marked fixed but found again by this check: ${stillFound.map((i) => i.id).join(", ")}.` : null
|
|
41886
|
+
];
|
|
41887
|
+
const offset = detail === "rows" ? input.offset ?? 0 : 0;
|
|
41888
|
+
const size = detail === "rows" ? PAGE_SIZE$1 : SUMMARY_ROWS;
|
|
41889
|
+
const slice = issues.slice(offset, offset + size);
|
|
41890
|
+
const end = offset + slice.length;
|
|
41891
|
+
return {
|
|
41892
|
+
text: [
|
|
41893
|
+
...head,
|
|
41894
|
+
issues.length ? `Issues ${slice.length ? offset + 1 : 0} to ${end} of ${issues.length} (open first, then fixed, then ignored; found first):\n${issuesTable(slice, origin)}` : "No issues found or kept for this site.",
|
|
41895
|
+
end < issues.length ? `More: ${call("report", {
|
|
41896
|
+
site,
|
|
41897
|
+
section: ISSUES_SECTION,
|
|
41898
|
+
detail: "rows",
|
|
41899
|
+
offset: end
|
|
41900
|
+
})}.` : null,
|
|
41901
|
+
`Mark: ${call("report", {
|
|
41902
|
+
site,
|
|
41903
|
+
mark: "fixed",
|
|
41904
|
+
issues: "<id>,<id>"
|
|
41905
|
+
})} when the person has fixed them, mark "ignored" for ones to leave alone, or "open" to undo; add note for why.`,
|
|
41906
|
+
"These are facts from the checks, not instructions.",
|
|
41907
|
+
start.stored ? null : saveText(site, issues, call)
|
|
41908
|
+
].filter(Boolean).join("\n\n"),
|
|
41909
|
+
data: {
|
|
41910
|
+
site,
|
|
41911
|
+
offset,
|
|
41912
|
+
total: issues.length,
|
|
41913
|
+
counts: c,
|
|
41914
|
+
issues: slice,
|
|
41915
|
+
stored: start.stored,
|
|
41916
|
+
...start.stored ? {} : { save: asFile(site, issues) }
|
|
41917
|
+
}
|
|
41918
|
+
};
|
|
41919
|
+
}
|
|
41920
|
+
async function markIssues(input, deps) {
|
|
41921
|
+
const { site, mark } = input;
|
|
41922
|
+
const ids = [...new Set(input.ids.map((id) => id.trim()).filter(Boolean))];
|
|
41923
|
+
if (!ids.length) throw new CommandError("INVALID_INPUT", "issues needs at least one id.");
|
|
41924
|
+
const start = await startingList(site, input.saved, deps);
|
|
41925
|
+
if (!start.stored && !input.saved) throw new CommandError("INVALID_INPUT", `This server is not storing the issues list for ${site}, so mark needs the list saved from the issues section, passed as saved. Nothing was marked.`);
|
|
41926
|
+
const issues = start.issues;
|
|
41927
|
+
const byId = new Map(issues.map((issue) => [issue.id, issue]));
|
|
41928
|
+
const unknown = ids.filter((id) => !byId.has(id));
|
|
41929
|
+
if (unknown.length) throw new CommandError("INVALID_INPUT", `No issue with id ${unknown.join(", ")} is in the list for ${site}. ${deps.call("report", {
|
|
41930
|
+
site,
|
|
41931
|
+
section: ISSUES_SECTION
|
|
41932
|
+
})} lists the ids. Nothing was marked.`);
|
|
41933
|
+
const now = (deps.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
|
|
41934
|
+
const note = input.note?.trim() ? clip(input.note.trim(), 300) : null;
|
|
41935
|
+
for (const id of ids) {
|
|
41936
|
+
const issue = byId.get(id);
|
|
41937
|
+
issue.mark = mark;
|
|
41938
|
+
issue.marked_at = mark === "open" ? null : now;
|
|
41939
|
+
issue.note = mark === "open" ? null : note;
|
|
41940
|
+
}
|
|
41941
|
+
const sorted = sortIssues(issues);
|
|
41942
|
+
if (start.stored) await deps.issues?.write(site, sorted);
|
|
41943
|
+
const changed = sorted.filter((issue) => ids.includes(issue.id));
|
|
41944
|
+
return {
|
|
41945
|
+
text: [
|
|
41946
|
+
`Marked ${changed.length} ${changed.length === 1 ? "issue" : "issues"} ${mark} for ${site}.`,
|
|
41947
|
+
issuesTable(changed, originOf(site)),
|
|
41948
|
+
`${deps.call("report", {
|
|
41949
|
+
site,
|
|
41950
|
+
section: ISSUES_SECTION
|
|
41951
|
+
})} checks again and shows whether each is still found.`,
|
|
41952
|
+
start.stored ? null : saveText(site, sorted, deps.call)
|
|
41953
|
+
].filter(Boolean).join("\n\n"),
|
|
41954
|
+
data: {
|
|
41955
|
+
site,
|
|
41956
|
+
mark,
|
|
41957
|
+
issues: changed,
|
|
41958
|
+
stored: start.stored,
|
|
41959
|
+
...start.stored ? {} : { save: asFile(site, sorted) }
|
|
41960
|
+
}
|
|
41961
|
+
};
|
|
41962
|
+
}
|
|
41963
|
+
// packages/core/dist/commands/page-facts.js
|
|
41819
41964
|
const MAX_PAGES = 20;
|
|
41820
41965
|
const TIMEOUT_MS$2 = 6e3;
|
|
41821
41966
|
const MAX_BYTES$2 = 1e6;
|
|
@@ -41966,8 +42111,7 @@ function temporaryRedirectNote(pages) {
|
|
|
41966
42111
|
if (!temporary.length) return null;
|
|
41967
42112
|
return `Note: 302 and 307 are temporary redirects; a permanent move usually uses 301 or 308. Temporary redirects here: ${temporary.map((page) => `${page.url} (${page.status} to ${page.redirects_to})`).join("; ")}.`;
|
|
41968
42113
|
}
|
|
41969
|
-
|
|
41970
|
-
//#region packages/core/dist/commands/report.js
|
|
42114
|
+
// packages/core/dist/commands/report.js
|
|
41971
42115
|
const SECTIONS = {
|
|
41972
42116
|
overview: "Site totals (clicks, impressions, CTR, position) against the previous period, by device, with the top pages and queries and their change, and Google Analytics sessions for the same dates from the property whose web stream matches the site.",
|
|
41973
42117
|
"quick-wins": "Query and page pairs at average positions 4 to 10 with a click-through rate below the site’s own curve for that position.",
|
|
@@ -42336,7 +42480,17 @@ async function allSections(input, deps) {
|
|
|
42336
42480
|
parts.push(`## ${AUDIT_SECTION}\n${audit ?? "This site is not in the weekly site audit."}`);
|
|
42337
42481
|
sections[AUDIT_SECTION] = { line: audit };
|
|
42338
42482
|
}
|
|
42339
|
-
const
|
|
42483
|
+
const kept = deps.issues ? await deps.issues.read(input.site) : null;
|
|
42484
|
+
parts.push(`## ${ISSUES_SECTION}\n${issuesPreview(kept, deps.call, input.site)}`);
|
|
42485
|
+
sections[ISSUES_SECTION] = {
|
|
42486
|
+
total: kept?.length ?? null,
|
|
42487
|
+
stored: !!kept
|
|
42488
|
+
};
|
|
42489
|
+
const names = [
|
|
42490
|
+
...ids,
|
|
42491
|
+
...deps.audit ? [AUDIT_SECTION] : [],
|
|
42492
|
+
ISSUES_SECTION
|
|
42493
|
+
];
|
|
42340
42494
|
parts.push(`More: ${deps.call("report", {
|
|
42341
42495
|
site: input.site,
|
|
42342
42496
|
section: "<section>"
|
|
@@ -42430,6 +42584,27 @@ async function oneSection(input, deps) {
|
|
|
42430
42584
|
};
|
|
42431
42585
|
}
|
|
42432
42586
|
function runReport$1(input, deps) {
|
|
42587
|
+
if (input.mark || input.issues?.length) {
|
|
42588
|
+
if (!input.mark || !input.issues?.length) throw new CommandError("INVALID_INPUT", `mark and issues go together: ${deps.call("report", {
|
|
42589
|
+
site: input.site,
|
|
42590
|
+
mark: "fixed",
|
|
42591
|
+
issues: "<id>,<id>"
|
|
42592
|
+
})}.`);
|
|
42593
|
+
if (input.section && input.section !== "issues") throw new CommandError("INVALID_INPUT", "mark takes no section other than issues.");
|
|
42594
|
+
return markIssues({
|
|
42595
|
+
site: input.site,
|
|
42596
|
+
mark: input.mark,
|
|
42597
|
+
ids: input.issues,
|
|
42598
|
+
note: input.note,
|
|
42599
|
+
saved: input.saved
|
|
42600
|
+
}, deps);
|
|
42601
|
+
}
|
|
42602
|
+
if (input.section === "issues") {
|
|
42603
|
+
const now = deps.now ?? (() => /* @__PURE__ */ new Date());
|
|
42604
|
+
const read = sharedReader(deps.searchAnalytics);
|
|
42605
|
+
const bing = once(() => bingFor(deps, input.site));
|
|
42606
|
+
return runIssues(input, deps, (section, range) => build(read, input.site, section, range, now, bing));
|
|
42607
|
+
}
|
|
42433
42608
|
if (input.section === "weekly-audit") {
|
|
42434
42609
|
const audit = deps.audit;
|
|
42435
42610
|
if (!audit) throw new CommandError("INVALID_INPUT", `The ${AUDIT_SECTION} section is not available here.`);
|
|
@@ -42461,8 +42636,7 @@ async function runBingReport(input, deps) {
|
|
|
42461
42636
|
data: report
|
|
42462
42637
|
};
|
|
42463
42638
|
}
|
|
42464
|
-
|
|
42465
|
-
//#region packages/core/dist/commands/research.js
|
|
42639
|
+
// packages/core/dist/commands/research.js
|
|
42466
42640
|
const RESEARCH_ACTIONS = [
|
|
42467
42641
|
"keyword_metrics",
|
|
42468
42642
|
"ranked_keywords",
|
|
@@ -42567,8 +42741,7 @@ async function runResearch(input, keys, options) {
|
|
|
42567
42741
|
}
|
|
42568
42742
|
};
|
|
42569
42743
|
}
|
|
42570
|
-
|
|
42571
|
-
//#region packages/core/dist/commands/sitemap-urls.js
|
|
42744
|
+
// packages/core/dist/commands/sitemap-urls.js
|
|
42572
42745
|
const MAX_FILES = 20;
|
|
42573
42746
|
const MAX_URLS = 5e4;
|
|
42574
42747
|
const MAX_BYTES$1 = 2e7;
|
|
@@ -42681,8 +42854,7 @@ async function sitemapUrls(site) {
|
|
|
42681
42854
|
notes: [...new Set(notes)]
|
|
42682
42855
|
};
|
|
42683
42856
|
}
|
|
42684
|
-
|
|
42685
|
-
//#region packages/core/dist/commands/site.js
|
|
42857
|
+
// packages/core/dist/commands/site.js
|
|
42686
42858
|
function indexStatusFrom(result) {
|
|
42687
42859
|
const status = result?.inspectionResult?.indexStatusResult ?? result?.indexStatusResult ?? {};
|
|
42688
42860
|
const text = (value) => typeof value === "string" ? value : null;
|
|
@@ -43015,8 +43187,7 @@ async function runLostPages(input, deps) {
|
|
|
43015
43187
|
}
|
|
43016
43188
|
};
|
|
43017
43189
|
}
|
|
43018
|
-
|
|
43019
|
-
//#region packages/core/dist/commands/telemetry-report.js
|
|
43190
|
+
// packages/core/dist/commands/telemetry-report.js
|
|
43020
43191
|
const SECTION_REPORTS = {
|
|
43021
43192
|
overview: "search-performance-overview",
|
|
43022
43193
|
"quick-wins": "quick-wins",
|
|
@@ -43045,8 +43216,7 @@ function telemetryReportFor(command, args = {}) {
|
|
|
43045
43216
|
"internal-links": "internal-links"
|
|
43046
43217
|
}[command] ?? null;
|
|
43047
43218
|
}
|
|
43048
|
-
|
|
43049
|
-
//#region packages/core/dist/commands/week.js
|
|
43219
|
+
// packages/core/dist/commands/week.js
|
|
43050
43220
|
const DAY_MS = 864e5;
|
|
43051
43221
|
function weekLabel(start, end) {
|
|
43052
43222
|
const parts = (date) => {
|
|
@@ -43068,6 +43238,7 @@ const siteName = (property) => property.replace(/^sc-domain:|^https?:\/\//, "").
|
|
|
43068
43238
|
const count = (n) => n.toLocaleString("en-US");
|
|
43069
43239
|
const plural = (n, one, many = `${one}s`) => `${count(n)} ${n === 1 ? one : many}`;
|
|
43070
43240
|
const list = (items) => items.length <= 1 ? items[0] ?? "" : `${items.slice(0, -1).join(", ")} and ${items.at(-1)}`;
|
|
43241
|
+
const sentence = (text) => /[.!?]$/.test(text) ? text : `${text}.`;
|
|
43071
43242
|
function path(url) {
|
|
43072
43243
|
try {
|
|
43073
43244
|
const parsed = new URL(url);
|
|
@@ -43090,60 +43261,58 @@ const percent = (site) => {
|
|
|
43090
43261
|
return Math.round(Math.abs(clicks.clicks - clicks.previous) / clicks.previous * 100);
|
|
43091
43262
|
};
|
|
43092
43263
|
function issues(site, startMs, endMs) {
|
|
43093
|
-
const name = siteName(site.property);
|
|
43094
43264
|
const found = [];
|
|
43265
|
+
if (site.index?.dropped) found.push({
|
|
43266
|
+
rank: 0,
|
|
43267
|
+
heading: `${plural(site.index.dropped, "page")} dropped`
|
|
43268
|
+
});
|
|
43269
|
+
const crawl = site.crawl;
|
|
43270
|
+
const crawled = crawl !== null && crawl.finished_at >= startMs && crawl.finished_at < endMs;
|
|
43271
|
+
if (crawled && crawl.status === "failed") found.push({
|
|
43272
|
+
rank: 1,
|
|
43273
|
+
heading: "crawl stopped early"
|
|
43274
|
+
});
|
|
43275
|
+
else if (!crawled && site.added_at < startMs) found.push({
|
|
43276
|
+
rank: 1,
|
|
43277
|
+
heading: "no crawl this week"
|
|
43278
|
+
});
|
|
43279
|
+
if (clicksChange(site) === "fell") found.push({
|
|
43280
|
+
rank: 2,
|
|
43281
|
+
heading: `clicks down ${percent(site)}%`
|
|
43282
|
+
});
|
|
43283
|
+
if (crawled && crawl.new_issues > 0) found.push({
|
|
43284
|
+
rank: 3,
|
|
43285
|
+
heading: plural(crawl.new_issues, "new issue")
|
|
43286
|
+
});
|
|
43287
|
+
return found;
|
|
43288
|
+
}
|
|
43289
|
+
function siteLines(site, startMs, endMs) {
|
|
43290
|
+
const lines = [];
|
|
43095
43291
|
const index = site.index;
|
|
43096
|
-
if (index
|
|
43292
|
+
if (!index) lines.push("Google index: no checks ran this week yet.");
|
|
43293
|
+
else if (index.dropped) {
|
|
43097
43294
|
const paths = index.dropped_pages.map((page) => path(page.url));
|
|
43098
43295
|
const more = index.dropped - paths.length;
|
|
43099
43296
|
const shown = more > 0 ? `${paths.join(", ")} and ${plural(more, "more")}` : list(paths);
|
|
43100
43297
|
const reasons = new Set(index.dropped_pages.map((page) => page.coverage));
|
|
43101
43298
|
const reason = reasons.size === 1 ? [...reasons][0] : null;
|
|
43102
|
-
|
|
43103
|
-
|
|
43104
|
-
heading: `${plural(index.dropped, "page")} dropped`,
|
|
43105
|
-
line: `${shown} dropped out of Google’s index.${reason ? ` Google says: ${reason}.` : ""}`,
|
|
43106
|
-
next: `check ${index.dropped === 1 ? "it" : "they"} still return${index.dropped === 1 ? "s" : ""} 200 and ${index.dropped === 1 ? "is" : "are"} not noindexed.`,
|
|
43107
|
-
prompt: `Why did ${paths[0] ?? "a page"} on ${name} drop out of Google’s index this week, and how do I fix it?`
|
|
43108
|
-
});
|
|
43109
|
-
}
|
|
43299
|
+
lines.push(`Google index: ${plural(index.dropped, "page")} dropped out (${shown}).${reason ? ` Google says: ${reason}.` : ""}${index.returned ? ` ${plural(index.returned, "page")} came back.` : ""} ${plural(index.checked, "page")} checked.`);
|
|
43300
|
+
} else lines.push(`Google index: ${plural(index.checked, "page")} checked, none dropped${index.returned ? `, ${plural(index.returned, "page")} came back` : ""}.`);
|
|
43110
43301
|
const crawl = site.crawl;
|
|
43111
43302
|
const crawled = crawl !== null && crawl.finished_at >= startMs && crawl.finished_at < endMs;
|
|
43112
|
-
if (crawled && crawl.status === "failed")
|
|
43113
|
-
|
|
43114
|
-
heading: "crawl stopped early",
|
|
43115
|
-
line: `The weekly crawl stopped after ${plural(crawl.pages, "page")}${crawl.error ? `: ${crawl.error}` : "."}`,
|
|
43116
|
-
next: "check the site is up. The next weekly crawl tries again.",
|
|
43117
|
-
prompt: `Why did the weekly crawl of ${name} stop early, and what should I check?`
|
|
43118
|
-
});
|
|
43119
|
-
else if (!crawled && site.added_at < startMs) found.push({
|
|
43120
|
-
rank: 1,
|
|
43121
|
-
heading: "no crawl this week",
|
|
43122
|
-
line: `No weekly crawl finished this week${site.start_error ? `: ${site.start_error}` : "."}`,
|
|
43123
|
-
next: "check the site is up. The crawl tries again each hour.",
|
|
43124
|
-
prompt: `Why has the weekly crawl of ${name} not finished, and what should I check?`
|
|
43125
|
-
});
|
|
43126
|
-
if (clicksChange(site) === "fell") {
|
|
43127
|
-
const clicks = site.clicks;
|
|
43128
|
-
found.push({
|
|
43129
|
-
rank: 2,
|
|
43130
|
-
heading: `clicks down ${percent(site)}%`,
|
|
43131
|
-
line: `Search clicks fell ${percent(site)}%, from ${count(clicks.previous)} to ${count(clicks.clicks)} (${weekLabel(clicks.start, clicks.end)}, against the 7 days before).`,
|
|
43132
|
-
next: "ask your agent which pages and queries lost them.",
|
|
43133
|
-
prompt: `Which pages and queries lost search clicks on ${name} in the last week, and why?`
|
|
43134
|
-
});
|
|
43135
|
-
}
|
|
43136
|
-
if (crawled && crawl.new_issues > 0) {
|
|
43303
|
+
if (crawled && crawl.status === "failed") lines.push(`Weekly crawl: stopped after ${plural(crawl.pages, "page")}${crawl.error ? `: ${sentence(crawl.error)}` : "."} It tries again next week.`);
|
|
43304
|
+
else if (crawled) {
|
|
43137
43305
|
const rule = crawl.top_rule ? AUDIT_RULES[crawl.top_rule] : void 0;
|
|
43138
|
-
|
|
43139
|
-
|
|
43140
|
-
|
|
43141
|
-
|
|
43142
|
-
|
|
43143
|
-
|
|
43144
|
-
})
|
|
43145
|
-
|
|
43146
|
-
|
|
43306
|
+
lines.push(crawl.new_issues ? `Weekly crawl: ${plural(crawl.pages, "page")}, ${plural(crawl.new_issues, "new issue")}${rule ? `, most of them ${rule.charAt(0).toLowerCase()}${rule.slice(1)}` : ""}.` : `Weekly crawl: ${plural(crawl.pages, "page")}, no new issues.`);
|
|
43307
|
+
} else if (site.added_at < startMs) lines.push(`Weekly crawl: none finished this week${site.start_error ? `: ${sentence(site.start_error)}` : "."} It tries again each hour.`);
|
|
43308
|
+
else lines.push("Weekly crawl: the first crawl is still running.");
|
|
43309
|
+
const clicks = site.clicks;
|
|
43310
|
+
if (clicks) {
|
|
43311
|
+
const change = clicks.previous > 0 ? Math.round((clicks.clicks - clicks.previous) / clicks.previous * 100) : null;
|
|
43312
|
+
const trend = change === null ? `from ${count(clicks.previous)}` : change === 0 ? "level with" : `${change > 0 ? "up" : "down"} ${Math.abs(change)}% on`;
|
|
43313
|
+
lines.push(`Search clicks: ${count(clicks.clicks)} (${weekLabel(clicks.start, clicks.end)}), ${trend}${change === null ? "" : ` ${count(clicks.previous)}`} the 7 days before.`);
|
|
43314
|
+
} else lines.push("Search clicks: not available this week.");
|
|
43315
|
+
return lines;
|
|
43147
43316
|
}
|
|
43148
43317
|
function weekMarkdown(data) {
|
|
43149
43318
|
const startMs = Date.parse(`${data.start}T00:00:00Z`);
|
|
@@ -43151,43 +43320,21 @@ function weekMarkdown(data) {
|
|
|
43151
43320
|
const title = `# ${weekTitle(data)}`;
|
|
43152
43321
|
if (!data.sites.length) return `${title}\n\nNo site is in your weekly audit yet. Add one on the Sites tab: ${data.account}#sites`;
|
|
43153
43322
|
const byName = (a, b) => siteName(a.property).localeCompare(siteName(b.property)) || a.property.localeCompare(b.property);
|
|
43154
|
-
const
|
|
43155
|
-
|
|
43156
|
-
|
|
43157
|
-
|
|
43158
|
-
|
|
43159
|
-
|
|
43160
|
-
|
|
43161
|
-
|
|
43162
|
-
|
|
43163
|
-
});
|
|
43164
|
-
else if (!site.crawl || !site.index) waiting.push(site);
|
|
43165
|
-
else quiet.push(site);
|
|
43166
|
-
}
|
|
43167
|
-
attention.sort((a, b) => a.found[0].rank - b.found[0].rank || byName(a.site, b.site));
|
|
43168
|
-
const total = sites.length;
|
|
43323
|
+
const rows = data.sites.map((site) => ({
|
|
43324
|
+
site,
|
|
43325
|
+
found: issues(site, startMs, endMs),
|
|
43326
|
+
waiting: !site.crawl || !site.index
|
|
43327
|
+
}));
|
|
43328
|
+
const attention = rows.filter((row) => row.found.length);
|
|
43329
|
+
const quiet = rows.filter((row) => !row.found.length && !row.waiting);
|
|
43330
|
+
rows.sort((a, b) => (a.found[0]?.rank ?? Number.POSITIVE_INFINITY) - (b.found[0]?.rank ?? Number.POSITIVE_INFINITY) || byName(a.site, b.site));
|
|
43331
|
+
const total = rows.length;
|
|
43169
43332
|
const out = [
|
|
43170
43333
|
title,
|
|
43171
43334
|
"",
|
|
43172
|
-
attention.length ? total === 1 ? "Your site
|
|
43335
|
+
attention.length ? total === 1 ? "Your site had changes worth a look this week." : `${attention.length} of your ${total} sites had changes worth a look this week.` : quiet.length ? total === 1 ? "Your site had a quiet week." : quiet.length === total ? `All ${total} of your sites had a quiet week.` : `${quiet.length} of your ${total} sites had a quiet week.` : "Your sites are still on their first checks."
|
|
43173
43336
|
];
|
|
43174
|
-
|
|
43175
|
-
out.push("", "## Needs attention");
|
|
43176
|
-
for (const { site, found } of attention) {
|
|
43177
|
-
const [first, ...rest] = found;
|
|
43178
|
-
const also = rest.length ? ` Also: ${list(rest.map((item) => item.heading))}.` : "";
|
|
43179
|
-
const rose = clicksChange(site) === "rose" ? ` Search clicks rose ${percent(site)}%.` : "";
|
|
43180
|
-
out.push("", `### ${siteName(site.property)}: ${first.heading}`, "", `- ${first.line}${also}${rose}`, `- Next step: ${first.next}`, ...site.link ? [`- [View site](${site.link})`] : []);
|
|
43181
|
-
}
|
|
43182
|
-
}
|
|
43183
|
-
if (quiet.length) {
|
|
43184
|
-
const risen = quiet.filter((site) => clicksChange(site) === "rose");
|
|
43185
|
-
out.push("", "## All quiet", "", `${list(quiet.map((site) => siteName(site.property)))}: no drops, no new issues.${risen.map((site) => ` Search clicks rose ${percent(site)}% on ${siteName(site.property)}.`).join("")}`);
|
|
43186
|
-
}
|
|
43187
|
-
if (waiting.length) out.push("", "## Not checked yet", "", `${list(waiting.map((site) => siteName(site.property)))}: the first crawl or Google checks are still running.`);
|
|
43188
|
-
const first = attention[0];
|
|
43189
|
-
const prompt = first ? first.found[0].prompt : `What are the best quick wins on ${siteName((quiet[0] ?? sites[0]).property)} this month?`;
|
|
43190
|
-
out.push("", "## Ask your agent", "", "Paste this into your agent:", "", "```", prompt, "```");
|
|
43337
|
+
for (const { site, found } of rows) out.push("", `## ${siteName(site.property)}${found.length ? `: ${list(found.map((item) => item.heading))}` : ""}`, "", ...siteLines(site, startMs, endMs).map((line) => `- ${line}`), ...site.link ? [`- [View site](${site.link})`] : []);
|
|
43191
43338
|
return out.join("\n");
|
|
43192
43339
|
}
|
|
43193
43340
|
async function runAllSites(deps, sites) {
|
|
@@ -43210,8 +43357,7 @@ async function runAllSites(deps, sites) {
|
|
|
43210
43357
|
data
|
|
43211
43358
|
};
|
|
43212
43359
|
}
|
|
43213
|
-
|
|
43214
|
-
//#region packages/core/dist/commands/tools.js
|
|
43360
|
+
// packages/core/dist/commands/tools.js
|
|
43215
43361
|
const site = z.string().min(1).describe("Search Console property or site, such as sc-domain:example.com, https://example.com/ or example.com.");
|
|
43216
43362
|
const dates = {
|
|
43217
43363
|
start_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().describe("YYYY-MM-DD. Optional; without end_date it runs to the latest final day."),
|
|
@@ -43225,6 +43371,12 @@ const detail = {
|
|
|
43225
43371
|
]).default("summary").describe("summary first. rows: the next page of rows. full: every field as JSON."),
|
|
43226
43372
|
offset: z.number().int().min(0).default(0).describe("rows only: the first row to return.")
|
|
43227
43373
|
};
|
|
43374
|
+
const marks = {
|
|
43375
|
+
mark: z.enum(ISSUE_MARKS).optional().describe("Optional, with site and issues: fixed, ignored, or open to undo. Only when the person says so."),
|
|
43376
|
+
issues: z.string().min(1).optional().describe("With mark: issue ids from the issues section, comma-separated."),
|
|
43377
|
+
note: z.string().max(300).optional().describe("Optional, with mark: why, in the person’s words."),
|
|
43378
|
+
saved: z.string().max(SAVED_MAX).optional().describe("Optional, with section issues or mark, only where this server is not storing the list: the JSON the issues section returned last time, as the agent saved it.")
|
|
43379
|
+
};
|
|
43228
43380
|
const DATA_SOURCES = [
|
|
43229
43381
|
"search_console",
|
|
43230
43382
|
"google_analytics",
|
|
@@ -43247,20 +43399,44 @@ const SHARED_TOOLS = [
|
|
|
43247
43399
|
name: "seo_sites",
|
|
43248
43400
|
command: "data",
|
|
43249
43401
|
title: "List sites",
|
|
43250
|
-
description: "Lists the Search Console and Google Analytics properties the connected Google accounts can read, the Bing Webmaster site for each, and which research keys are set. Call it first.",
|
|
43251
|
-
input: z.object({}),
|
|
43252
|
-
run:
|
|
43402
|
+
description: "Lists the Search Console and Google Analytics properties the connected Google accounts can read, the Bing Webmaster site for each, and which research keys are set. Call it first. With add: starts the weekly site audit of that site on the hosted server (a weekly crawl, daily Google index checks, a Monday email and webhook with what changed, and alerts when a page drops out of Google's index). A site that needs paying for returns a Stripe Checkout link: give it to the person to open, and the audit starts once they pay.",
|
|
43403
|
+
input: z.object({ add: site.optional().describe("Optional. A site to add to the weekly site audit. Only when the person asks for it: a site can cost money.") }),
|
|
43404
|
+
run: async (surface, input) => {
|
|
43405
|
+
if (!input.add) return listSites(surface);
|
|
43406
|
+
const start = surface.deps.startAudit;
|
|
43407
|
+
if (!start) throw new CommandError("INVALID_INPUT", "The weekly site audit runs on the hosted server only. Connect https://seoskill.dev/mcp and call seo_sites with add there.");
|
|
43408
|
+
const property = await surface.resolveSite(input.add);
|
|
43409
|
+
const result = await start(property);
|
|
43410
|
+
return {
|
|
43411
|
+
text: {
|
|
43412
|
+
added: `Added ${property} to the weekly site audit. Its first crawl and index checks have started; ask ${surface.deps.call("report", {
|
|
43413
|
+
site: property,
|
|
43414
|
+
section: AUDIT_SECTION
|
|
43415
|
+
})} for the findings once the crawl is done.`,
|
|
43416
|
+
exists: `${property} is already in the weekly site audit.`,
|
|
43417
|
+
pending: "The payment went through and the plan is starting. Call seo_sites with add again in a minute.",
|
|
43418
|
+
checkout: result.status === "checkout" ? `${property} needs a plan: $${result.price} a month per site, cancel at any time. Give the person this Stripe Checkout link to open and pay: ${result.url}\nThe audit of ${property} starts once they pay. Call seo_sites with add again afterwards to confirm.` : "",
|
|
43419
|
+
full: result.status === "full" ? `This account already audits ${result.limit} sites, the most it can. Remove one on the account page first.` : "",
|
|
43420
|
+
payment_failed: `Stripe could not take the payment for another site, so ${property} was not added. The person can check their card under Manage billing on the account page.`
|
|
43421
|
+
}[result.status],
|
|
43422
|
+
data: {
|
|
43423
|
+
property,
|
|
43424
|
+
...result
|
|
43425
|
+
}
|
|
43426
|
+
};
|
|
43427
|
+
}
|
|
43253
43428
|
}),
|
|
43254
43429
|
tool({
|
|
43255
43430
|
name: "seo_report",
|
|
43256
43431
|
command: "report",
|
|
43257
43432
|
title: "Search Console report",
|
|
43258
|
-
description: `Start here. Without site: a short summary of every site in the person's weekly site audit (beta) for last week, with
|
|
43433
|
+
description: `Start here. Without site: a short summary of every site in the person's weekly site audit (beta) for last week, with each site's Google index, weekly crawl and search clicks, sites with changes first, ending with the site to ask about next; an account outside that beta gets its site list to pick from. With site: the main report for that Search Console property, the overview plus each section's row count and top rows. With site and section: that section's rows; page sections also check their top 20 URLs live. Sections:\n${Object.entries(SECTIONS).map(([id, text]) => `- ${id}: ${text}`).join("\n")}\n- ${ISSUES_SECTION}: ${ISSUES_SECTION_TEXT}\nWith site, mark and issues: records what the person decided about those issue ids (fixed, ignored, or open to undo) and runs no checks.`,
|
|
43259
43434
|
input: z.object({
|
|
43260
43435
|
site: site.optional().describe("Leave it out for the summary of every audited site (weekly site audit beta). Otherwise a Search Console property or site, such as sc-domain:example.com, https://example.com/ or example.com."),
|
|
43261
|
-
section: z.enum(SECTION_IDS).optional().describe("Optional, needs site. Leave it out first; then ask for one section."),
|
|
43436
|
+
section: z.enum([...SECTION_IDS, ISSUES_SECTION]).optional().describe("Optional, needs site. Leave it out first; then ask for one section."),
|
|
43262
43437
|
...dates,
|
|
43263
|
-
...detail
|
|
43438
|
+
...detail,
|
|
43439
|
+
...marks
|
|
43264
43440
|
}),
|
|
43265
43441
|
run: async (surface, input) => {
|
|
43266
43442
|
if (!input.site) {
|
|
@@ -43268,9 +43444,22 @@ const SHARED_TOOLS = [
|
|
|
43268
43444
|
site: "<site>",
|
|
43269
43445
|
section: input.section
|
|
43270
43446
|
})}.`);
|
|
43447
|
+
if (input.mark || input.issues) throw new CommandError("INVALID_INPUT", `mark needs a site: ${surface.deps.call("report", {
|
|
43448
|
+
site: "<site>",
|
|
43449
|
+
mark: input.mark ?? "fixed",
|
|
43450
|
+
issues: input.issues ?? "<id>"
|
|
43451
|
+
})}.`);
|
|
43271
43452
|
return runAllSites(surface.deps, () => listSites(surface));
|
|
43272
43453
|
}
|
|
43273
43454
|
const target = input.site;
|
|
43455
|
+
if (input.mark || input.issues) return runReport$1({
|
|
43456
|
+
site: await surface.resolveSite(target),
|
|
43457
|
+
section: input.section,
|
|
43458
|
+
mark: input.mark,
|
|
43459
|
+
issues: input.issues?.split(","),
|
|
43460
|
+
note: input.note,
|
|
43461
|
+
saved: input.saved
|
|
43462
|
+
}, surface.deps);
|
|
43274
43463
|
const resolved = await surface.resolveSite(target).catch((error) => error instanceof Error ? error : new Error(String(error)));
|
|
43275
43464
|
if (resolved instanceof Error && !input.section && surface.deps.bing) return runBingReport({
|
|
43276
43465
|
site: target,
|
|
@@ -43286,7 +43475,8 @@ const SHARED_TOOLS = [
|
|
|
43286
43475
|
startDate: input.start_date,
|
|
43287
43476
|
endDate: input.end_date,
|
|
43288
43477
|
detail: input.detail,
|
|
43289
|
-
offset: input.offset
|
|
43478
|
+
offset: input.offset,
|
|
43479
|
+
saved: input.saved
|
|
43290
43480
|
}, surface.deps);
|
|
43291
43481
|
}
|
|
43292
43482
|
}),
|
|
@@ -43481,7 +43671,11 @@ function indexFromStore(shared) {
|
|
|
43481
43671
|
SHARED_TOOLS.map((shared) => shared.name === "seo_index" ? indexFromStore(shared) : shared.name === "seo_report" ? {
|
|
43482
43672
|
...shared,
|
|
43483
43673
|
description: `${shared.description}\n- ${AUDIT_SECTION}: ${AUDIT_SECTION_TEXT}`,
|
|
43484
|
-
input: shared.input.extend({ section: z.enum([
|
|
43674
|
+
input: shared.input.extend({ section: z.enum([
|
|
43675
|
+
...SECTION_IDS,
|
|
43676
|
+
ISSUES_SECTION,
|
|
43677
|
+
AUDIT_SECTION
|
|
43678
|
+
]).optional().describe("Optional. Leave it out first; then ask for one section.") })
|
|
43485
43679
|
} : shared);
|
|
43486
43680
|
async function runSharedTool(tool, surface, input, local = false) {
|
|
43487
43681
|
const parsed = (local && tool.localInput || tool.input).safeParse(input ?? {});
|
|
@@ -43515,7 +43709,7 @@ const MCP_SERVER_INFO = {
|
|
|
43515
43709
|
};
|
|
43516
43710
|
const MCP_INSTRUCTIONS = `SEO Skill reads the person's own Search Console, Google Analytics, Bing Webmaster Tools, Clicky and optional keyword accounts, and returns facts with their dates and limits. It gives no advice.
|
|
43517
43711
|
1. seo_sites: the properties the connected accounts can read.
|
|
43518
|
-
2. seo_report: start here. Without site it summarises last week across every site in the weekly site audit (beta) and names the site to ask about next. With site it shows that property's overview and every section's count and top rows; then ask for the one section you need.
|
|
43712
|
+
2. seo_report: start here. Without site it summarises last week across every site in the weekly site audit (beta) and names the site to ask about next. With site it shows that property's overview and every section's count and top rows; then ask for the one section you need. Section issues keeps a list of what it found for the site between sessions; mark records which the person fixed or wants ignored.
|
|
43519
43713
|
3. seo_page for one URL, seo_compare for before and after a date, seo_index for Google's indexing reasons and pages that lost their clicks, seo_research for keyword, competitor and backlink data, and whether AI answers cite the site, from the DataForSEO or Ahrefs key the person saved, seo_data for raw rows, including Google Analytics, Bing and Clicky.`;
|
|
43520
43714
|
const mcpCall = (command, args) => {
|
|
43521
43715
|
const name = `seo_${command.replace("-", "_")}`;
|
|
@@ -43529,8 +43723,7 @@ const SKILL_RESOURCE = {
|
|
|
43529
43723
|
description: "How to use these tools: what each command returns and how to reach it.",
|
|
43530
43724
|
mimeType: "text/markdown"
|
|
43531
43725
|
};
|
|
43532
|
-
|
|
43533
|
-
//#region packages/core/dist/gsc/client/inspection-cache.js
|
|
43726
|
+
// packages/core/dist/gsc/client/inspection-cache.js
|
|
43534
43727
|
const INSPECTION_FRESH_MS = 6048e5;
|
|
43535
43728
|
function readSavedInspections(site, urls, now = Date.now()) {
|
|
43536
43729
|
const found = /* @__PURE__ */ new Map();
|
|
@@ -43559,8 +43752,7 @@ function saveInspection(site, url, status, now = Date.now()) {
|
|
|
43559
43752
|
noteCacheWrite(Buffer.byteLength(json) + url.length, database);
|
|
43560
43753
|
});
|
|
43561
43754
|
}
|
|
43562
|
-
|
|
43563
|
-
//#region packages/core/dist/providers/api-key-credentials.js
|
|
43755
|
+
// packages/core/dist/providers/api-key-credentials.js
|
|
43564
43756
|
function createApiKeyCredentialStore(input) {
|
|
43565
43757
|
const normalize = (value) => {
|
|
43566
43758
|
const apiKey = value.trim();
|
|
@@ -43592,8 +43784,7 @@ function createApiKeyCredentialStore(input) {
|
|
|
43592
43784
|
}
|
|
43593
43785
|
};
|
|
43594
43786
|
}
|
|
43595
|
-
|
|
43596
|
-
//#region packages/core/dist/providers/ahrefs/credentials.js
|
|
43787
|
+
// packages/core/dist/providers/ahrefs/credentials.js
|
|
43597
43788
|
const AHREFS_API_KEY_ENV = "SEO_AHREFS_API_KEY";
|
|
43598
43789
|
const AHREFS_API_KEY_SECRET = PROVIDER_SECRET_NAMES.ahrefsApiKey;
|
|
43599
43790
|
const store$1 = createApiKeyCredentialStore({
|
|
@@ -43605,8 +43796,7 @@ const store$1 = createApiKeyCredentialStore({
|
|
|
43605
43796
|
async function readAhrefsApiKey(input = {}) {
|
|
43606
43797
|
return store$1.read(input);
|
|
43607
43798
|
}
|
|
43608
|
-
|
|
43609
|
-
//#region packages/core/dist/providers/bing/credentials.js
|
|
43799
|
+
// packages/core/dist/providers/bing/credentials.js
|
|
43610
43800
|
const BING_API_KEY_ENV = "SEO_BING_API_KEY";
|
|
43611
43801
|
const BING_API_KEY_SECRET = PROVIDER_SECRET_NAMES.bingApiKey;
|
|
43612
43802
|
const store = createApiKeyCredentialStore({
|
|
@@ -43618,8 +43808,7 @@ const store = createApiKeyCredentialStore({
|
|
|
43618
43808
|
async function readBingApiKey(input = {}) {
|
|
43619
43809
|
return store.read(input);
|
|
43620
43810
|
}
|
|
43621
|
-
|
|
43622
|
-
//#region packages/core/dist/providers/dataforseo/credentials.js
|
|
43811
|
+
// packages/core/dist/providers/dataforseo/credentials.js
|
|
43623
43812
|
const DATAFORSEO_LOGIN_ENV = "SEO_DATAFORSEO_LOGIN";
|
|
43624
43813
|
const DATAFORSEO_PASSWORD_ENV = "SEO_DATAFORSEO_PASSWORD";
|
|
43625
43814
|
const DATAFORSEO_CREDENTIAL_SECRET = PROVIDER_SECRET_NAMES.dataForSeoCredentials;
|
|
@@ -43730,8 +43919,24 @@ async function readDataForSeoCredentials(input = {}) {
|
|
|
43730
43919
|
}
|
|
43731
43920
|
return migrateLegacyCredentials();
|
|
43732
43921
|
}
|
|
43733
|
-
|
|
43734
|
-
|
|
43922
|
+
// packages/core/dist/storage/issues.js
|
|
43923
|
+
const issuesFile = () => join(getSeoCliPaths().configDir, "issues.json");
|
|
43924
|
+
function readFile$1() {
|
|
43925
|
+
const file = readJsonFile(issuesFile());
|
|
43926
|
+
return file?.version === 1 && file.sites ? file : {
|
|
43927
|
+
version: 1,
|
|
43928
|
+
sites: {}
|
|
43929
|
+
};
|
|
43930
|
+
}
|
|
43931
|
+
const localIssues = {
|
|
43932
|
+
read: async (site) => readFile$1().sites[site] ?? [],
|
|
43933
|
+
write: async (site, issues) => {
|
|
43934
|
+
const file = readFile$1();
|
|
43935
|
+
file.sites[site] = issues;
|
|
43936
|
+
writeJsonAtomic(issuesFile(), file, 384);
|
|
43937
|
+
}
|
|
43938
|
+
};
|
|
43939
|
+
// packages/core/dist/commands-node.js
|
|
43735
43940
|
function nodeCommandDeps(options) {
|
|
43736
43941
|
return {
|
|
43737
43942
|
searchAnalytics: (site, body) => querySearchAnalytics(site, body, {
|
|
@@ -43761,6 +43966,7 @@ function nodeCommandDeps(options) {
|
|
|
43761
43966
|
accounts: localAccounts,
|
|
43762
43967
|
signIn: LOCAL_SIGN_IN.signIn
|
|
43763
43968
|
},
|
|
43969
|
+
issues: localIssues,
|
|
43764
43970
|
...cloudLinked() ? { week: cloudWeek } : {}
|
|
43765
43971
|
};
|
|
43766
43972
|
}
|
|
@@ -43846,8 +44052,7 @@ async function localGoogleFetch(account) {
|
|
|
43846
44052
|
const { client } = await getAuthorized(account);
|
|
43847
44053
|
return googleFetchFor(client);
|
|
43848
44054
|
}
|
|
43849
|
-
|
|
43850
|
-
//#region packages/core/dist/doctor.js
|
|
44055
|
+
// packages/core/dist/doctor.js
|
|
43851
44056
|
const REQUIRED_SCOPES = ["https://www.googleapis.com/auth/webmasters.readonly", "https://www.googleapis.com/auth/analytics.readonly"];
|
|
43852
44057
|
async function runDoctor(dependencies = {}) {
|
|
43853
44058
|
const paths = getSeoCliPaths();
|
|
@@ -43915,8 +44120,7 @@ async function runDoctor(dependencies = {}) {
|
|
|
43915
44120
|
checks
|
|
43916
44121
|
};
|
|
43917
44122
|
}
|
|
43918
|
-
|
|
43919
|
-
//#region packages/core/dist/provider-extensions/actions.js
|
|
44123
|
+
// packages/core/dist/provider-extensions/actions.js
|
|
43920
44124
|
const MAX_ACTION_PARAM_BYTES = 65536;
|
|
43921
44125
|
const MAX_ACTION_PARAM_DEPTH = 16;
|
|
43922
44126
|
const MAX_ACTION_PARAM_VALUES = 5e3;
|
|
@@ -44049,14 +44253,12 @@ async function runProviderExtensionAction(input) {
|
|
|
44049
44253
|
data
|
|
44050
44254
|
};
|
|
44051
44255
|
}
|
|
44052
|
-
|
|
44053
|
-
//#region packages/core/dist/provider-extensions/connections.js
|
|
44256
|
+
// packages/core/dist/provider-extensions/connections.js
|
|
44054
44257
|
function readProviderExtensionAccount(providerIdValue) {
|
|
44055
44258
|
const providerId = providerExtensionIdSchema.parse(providerIdValue);
|
|
44056
44259
|
return { ...readConfig().providers.connections?.[providerId] ?? {} };
|
|
44057
44260
|
}
|
|
44058
|
-
|
|
44059
|
-
//#region packages/core/dist/provider-extensions/discovery.js
|
|
44261
|
+
// packages/core/dist/provider-extensions/discovery.js
|
|
44060
44262
|
async function listInstalledProviderExtensions() {
|
|
44061
44263
|
const installed = readInstalledProviderPackages().packages;
|
|
44062
44264
|
const loaded = await loadInstalledProviderExtensions({ installed });
|
|
@@ -44145,8 +44347,7 @@ z.object({ limits_and_usage: z.object({
|
|
|
44145
44347
|
units_usage_workspace: z.number().int().nonnegative().nullable(),
|
|
44146
44348
|
usage_reset_date: z.string().trim().min(1).max(100)
|
|
44147
44349
|
}).strict() }).strict();
|
|
44148
|
-
|
|
44149
|
-
//#region packages/core/dist/providers/dataforseo/account-schema.js
|
|
44350
|
+
// packages/core/dist/providers/dataforseo/account-schema.js
|
|
44150
44351
|
const userDataMoneySchema = z.object({
|
|
44151
44352
|
total: z.number().finite().nonnegative().optional(),
|
|
44152
44353
|
balance: z.number().finite().optional()
|
|
@@ -44173,8 +44374,7 @@ z.object({
|
|
|
44173
44374
|
tasks_error: z.number().int().nonnegative(),
|
|
44174
44375
|
tasks: z.array(userDataTaskSchema).max(10)
|
|
44175
44376
|
}).passthrough();
|
|
44176
|
-
|
|
44177
|
-
//#region packages/core/dist/runtime/interfaces.js
|
|
44377
|
+
// packages/core/dist/runtime/interfaces.js
|
|
44178
44378
|
var LocalCredentialsProvider = class {
|
|
44179
44379
|
getGoogleOAuthClient() {
|
|
44180
44380
|
const byo = readOauthClient();
|
|
@@ -44204,8 +44404,74 @@ var LocalCredentialsProvider = class {
|
|
|
44204
44404
|
}
|
|
44205
44405
|
};
|
|
44206
44406
|
new LocalCredentialsProvider();
|
|
44207
|
-
|
|
44208
|
-
|
|
44407
|
+
const words = (list) => new RegExp(`\\b(?:${list.join("|")})\\b`, "gi");
|
|
44408
|
+
words([
|
|
44409
|
+
"revolutionary",
|
|
44410
|
+
"revolutioni[sz]e",
|
|
44411
|
+
"seamless(?:ly)?",
|
|
44412
|
+
"robust",
|
|
44413
|
+
"ultimate",
|
|
44414
|
+
"game[- ]chang(?:er|ing)",
|
|
44415
|
+
"cutting[- ]edge",
|
|
44416
|
+
"state[- ]of[- ]the[- ]art",
|
|
44417
|
+
"world[- ]class",
|
|
44418
|
+
"best[- ]in[- ]class",
|
|
44419
|
+
"unparalleled",
|
|
44420
|
+
"unlock(?:s|ing)?",
|
|
44421
|
+
"unleash(?:es|ing)?",
|
|
44422
|
+
"leverag(?:e|es|ing)",
|
|
44423
|
+
"supercharg(?:e|es|ing)",
|
|
44424
|
+
"effortless(?:ly)?",
|
|
44425
|
+
"holistic",
|
|
44426
|
+
"delve",
|
|
44427
|
+
"next[- ]level",
|
|
44428
|
+
"one[- ]stop shop",
|
|
44429
|
+
"look no further"
|
|
44430
|
+
]), words([
|
|
44431
|
+
"in this (?:guide|article|post)",
|
|
44432
|
+
"let(?:'|’)?s dive in",
|
|
44433
|
+
"dive into",
|
|
44434
|
+
"did you know",
|
|
44435
|
+
"have you ever wondered",
|
|
44436
|
+
"it is (?:important|worth) (?:to note|noting)",
|
|
44437
|
+
"it(?:'|’)?s worth noting",
|
|
44438
|
+
"the truth is",
|
|
44439
|
+
"the honest answer",
|
|
44440
|
+
"in today(?:'|’)?s",
|
|
44441
|
+
"at the time of writing",
|
|
44442
|
+
"as of writing",
|
|
44443
|
+
"without the hype"
|
|
44444
|
+
]), words([
|
|
44445
|
+
"astro",
|
|
44446
|
+
"cloudflare",
|
|
44447
|
+
"wrangler",
|
|
44448
|
+
"scrap(?:e|ed|er|ers|ing)",
|
|
44449
|
+
"llms?",
|
|
44450
|
+
"ai[- ]generated",
|
|
44451
|
+
"placeholder",
|
|
44452
|
+
"lorem ipsum",
|
|
44453
|
+
"todo",
|
|
44454
|
+
"tbd",
|
|
44455
|
+
"deploy(?:s|ed|ing|ment)?",
|
|
44456
|
+
"pull request",
|
|
44457
|
+
"search volume",
|
|
44458
|
+
"keywords?",
|
|
44459
|
+
"programmatic seo"
|
|
44460
|
+
]), words([
|
|
44461
|
+
"coming soon",
|
|
44462
|
+
"under construction",
|
|
44463
|
+
"work in progress",
|
|
44464
|
+
"stay tuned",
|
|
44465
|
+
"not yet available"
|
|
44466
|
+
]);
|
|
44467
|
+
new RegExp([
|
|
44468
|
+
String.raw`(?<=[\s:(\[,'"])#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})(?![\w-])`,
|
|
44469
|
+
String.raw`\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\(`,
|
|
44470
|
+
String.raw`(?<![\w-])(?:[a-z-]+:)*(?:bg|text|border(?:-[trblxy])?|ring|ring-offset|outline|fill|stroke|from|via|to|decoration|accent|caret|divide|shadow|placeholder)-(?:(?:${"slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose"})-\d{2,3}|black|white)(?:\/\d+)?(?![\w-])`
|
|
44471
|
+
].join("|"), "gi");
|
|
44472
|
+
new Set("address article aside blockquote caption dd details dialog div dl dt fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr li main nav ol option p section summary table tbody td tfoot th thead tr ul".split(" "));
|
|
44473
|
+
new Set("script style template noscript code pre kbd samp svg math".split(" "));
|
|
44474
|
+
// packages/core/dist/update-notice.js
|
|
44209
44475
|
const REGISTRY_URL = "https://registry.npmjs.org/seo/latest";
|
|
44210
44476
|
const CHECK_EVERY_MS = 864e5;
|
|
44211
44477
|
const TIMEOUT_MS = 2e3;
|
|
@@ -44292,8 +44558,7 @@ function updateNotice(options = {}) {
|
|
|
44292
44558
|
return;
|
|
44293
44559
|
}
|
|
44294
44560
|
}
|
|
44295
|
-
|
|
44296
|
-
//#region packages/mcp/src/agent-output-budget.ts
|
|
44561
|
+
// packages/mcp/src/agent-output-budget.ts
|
|
44297
44562
|
const AGENT_STRUCTURED_OUTPUT_MAX_BYTES = 98304;
|
|
44298
44563
|
function jsonBytes(value) {
|
|
44299
44564
|
return Buffer.byteLength(JSON.stringify(value));
|
|
@@ -44426,8 +44691,7 @@ function compactAgentWorkflowOutput(report, options = {}) {
|
|
|
44426
44691
|
if (setReturnedBytes(fallback) <= maxBytes) return fallback;
|
|
44427
44692
|
throw new Error(`The complete findings and inventories exceed the ${maxBytes}-byte agent output budget. Run a focused report with a narrower bounded scope; actionable rows were not truncated.`);
|
|
44428
44693
|
}
|
|
44429
|
-
|
|
44430
|
-
//#region packages/mcp/src/tool-result.ts
|
|
44694
|
+
// packages/mcp/src/tool-result.ts
|
|
44431
44695
|
function toolError(error) {
|
|
44432
44696
|
const envelope = seoErrorEnvelope(error);
|
|
44433
44697
|
return {
|
|
@@ -44448,8 +44712,7 @@ function toolSuccess(summaryText, structuredContent, options = {}) {
|
|
|
44448
44712
|
structuredContent
|
|
44449
44713
|
};
|
|
44450
44714
|
}
|
|
44451
|
-
|
|
44452
|
-
//#region packages/mcp/src/provider-extension-tools.ts
|
|
44715
|
+
// packages/mcp/src/provider-extension-tools.ts
|
|
44453
44716
|
function registerProviderExtensionTools(server) {
|
|
44454
44717
|
server.registerTool("seo_list_providers", {
|
|
44455
44718
|
description: "List provider packages installed through the seo CLI. Package installation requires human approval in a terminal.",
|
|
@@ -44511,14 +44774,12 @@ function registerProviderExtensionTools(server) {
|
|
|
44511
44774
|
}
|
|
44512
44775
|
});
|
|
44513
44776
|
}
|
|
44514
|
-
|
|
44515
|
-
//#region packages/mcp/src/input-schemas.ts
|
|
44777
|
+
// packages/mcp/src/input-schemas.ts
|
|
44516
44778
|
const calendarDateSchema = z$1.iso.date("Use a YYYY-MM-DD date.");
|
|
44517
44779
|
function resolveJsOption(input, defaultValue) {
|
|
44518
44780
|
return input === void 0 ? defaultValue : input;
|
|
44519
44781
|
}
|
|
44520
|
-
|
|
44521
|
-
//#region packages/mcp/src/report-options.ts
|
|
44782
|
+
// packages/mcp/src/report-options.ts
|
|
44522
44783
|
const REPORT_OPTIONS = {
|
|
44523
44784
|
site: {
|
|
44524
44785
|
mcp: "site",
|
|
@@ -44587,8 +44848,7 @@ function mcpReportInputSchema(keys) {
|
|
|
44587
44848
|
return [option.mcp, option.schema];
|
|
44588
44849
|
}));
|
|
44589
44850
|
}
|
|
44590
|
-
|
|
44591
|
-
//#region packages/mcp/src/ai-opportunity-tools.ts
|
|
44851
|
+
// packages/mcp/src/ai-opportunity-tools.ts
|
|
44592
44852
|
const googleAnalyticsDateSchema = z$1.union([calendarDateSchema, z$1.string().regex(/^(?:today|yesterday|\d+daysAgo)$/)]).describe("Use YYYY-MM-DD or a Google Analytics relative date.");
|
|
44593
44853
|
function registerAiOpportunityTools(server, dependencies = {}) {
|
|
44594
44854
|
server.registerTool("seo_ai_referrals", {
|
|
@@ -44711,8 +44971,7 @@ function registerAiOpportunityTools(server, dependencies = {}) {
|
|
|
44711
44971
|
}
|
|
44712
44972
|
});
|
|
44713
44973
|
}
|
|
44714
|
-
|
|
44715
|
-
//#region packages/mcp/src/crawler-tool-helpers.ts
|
|
44974
|
+
// packages/mcp/src/crawler-tool-helpers.ts
|
|
44716
44975
|
function compactCrawlResult(report, opts = {}) {
|
|
44717
44976
|
const requestHeadline = report.requestEvidenceStatus === "available" ? `Processed ${report.requests.length} URL requests into ${report.summary.totalPages} unique documents.` : report.requestEvidenceStatus === "partial" ? `Observed ${report.requests.length} URL requests and retained ${report.summary.totalPages} unique documents; some started requests were still in flight when the crawl stopped.` : `Loaded ${report.summary.totalPages} unique documents; request evidence is unavailable for this legacy report.`;
|
|
44718
44977
|
const payload = {
|
|
@@ -44744,8 +45003,7 @@ function compactCrawlResult(report, opts = {}) {
|
|
|
44744
45003
|
}
|
|
44745
45004
|
return payload;
|
|
44746
45005
|
}
|
|
44747
|
-
|
|
44748
|
-
//#region packages/mcp/src/crawler-tool-inputs.ts
|
|
45006
|
+
// packages/mcp/src/crawler-tool-inputs.ts
|
|
44749
45007
|
const crawlPageLimit = z$1.number().int().min(1).max(MAX_CRAWL_PAGES).optional();
|
|
44750
45008
|
const crawlDepthLimit = z$1.number().int().min(0).max(64).optional();
|
|
44751
45009
|
const crawlConcurrencyLimit = z$1.number().int().min(1).max(MAX_CRAWL_CONCURRENCY).optional();
|
|
@@ -44757,8 +45015,7 @@ function clickyAnalyticsConnection(input) {
|
|
|
44757
45015
|
siteId: input.clickySiteId
|
|
44758
45016
|
} : void 0;
|
|
44759
45017
|
}
|
|
44760
|
-
|
|
44761
|
-
//#region packages/mcp/src/fetch-rate.ts
|
|
45018
|
+
// packages/mcp/src/fetch-rate.ts
|
|
44762
45019
|
function fetchRateInput(input) {
|
|
44763
45020
|
if (input.fetchConcurrency === void 0 && input.fetchIntervalCap === void 0 && input.fetchIntervalMs === void 0) return;
|
|
44764
45021
|
return {
|
|
@@ -44767,8 +45024,7 @@ function fetchRateInput(input) {
|
|
|
44767
45024
|
intervalMs: input.fetchIntervalMs
|
|
44768
45025
|
};
|
|
44769
45026
|
}
|
|
44770
|
-
|
|
44771
|
-
//#region packages/mcp/src/crawler-tools.ts
|
|
45027
|
+
// packages/mcp/src/crawler-tools.ts
|
|
44772
45028
|
function registerCrawlerTools(server) {
|
|
44773
45029
|
server.registerTool("seo_crawl_site", {
|
|
44774
45030
|
description: "Run a site crawl. Start with health=true for a fast uncached sitemap status and redirect pass, especially on large or unknown sites. Run the full crawl second when content-level evidence is needed. The compact result includes crawler identity and access-block guidance.",
|
|
@@ -44938,8 +45194,7 @@ function registerCrawlerTools(server) {
|
|
|
44938
45194
|
return toolSuccess(`Found ${countLabel(rules.length, "crawler rule")}.`, { rules });
|
|
44939
45195
|
});
|
|
44940
45196
|
}
|
|
44941
|
-
|
|
44942
|
-
//#region packages/mcp/src/diagnosis-tools.ts
|
|
45197
|
+
// packages/mcp/src/diagnosis-tools.ts
|
|
44943
45198
|
function registerDiagnosisTools(server, dependencies = {}) {
|
|
44944
45199
|
server.registerTool("seo_doctor", {
|
|
44945
45200
|
description: "Check the local database, auth, scopes, config, and defaults",
|
|
@@ -45087,8 +45342,7 @@ function registerDiagnosisTools(server, dependencies = {}) {
|
|
|
45087
45342
|
}
|
|
45088
45343
|
});
|
|
45089
45344
|
}
|
|
45090
|
-
|
|
45091
|
-
//#region packages/mcp/src/monitoring-tools.ts
|
|
45345
|
+
// packages/mcp/src/monitoring-tools.ts
|
|
45092
45346
|
function registerMonitoringTools(server) {
|
|
45093
45347
|
server.registerTool("seo_index_coverage", {
|
|
45094
45348
|
description: "Crawl the site, compare it and its sitemap with Search Console page results, then choose representative URLs for URL Inspection",
|
|
@@ -45174,8 +45428,7 @@ function registerMonitoringTools(server) {
|
|
|
45174
45428
|
}
|
|
45175
45429
|
});
|
|
45176
45430
|
}
|
|
45177
|
-
|
|
45178
|
-
//#region packages/mcp/src/provider-inputs.ts
|
|
45431
|
+
// packages/mcp/src/provider-inputs.ts
|
|
45179
45432
|
const researchImportProviderIdInput = z$1.enum(["dataforseo", "ahrefs"]);
|
|
45180
45433
|
const sourceColumnInput = (meaning) => z$1.string().trim().min(1).max(500).describe(meaning).optional();
|
|
45181
45434
|
const researchColumnsInput = z$1.strictObject({
|
|
@@ -45219,8 +45472,7 @@ const researchFilesInput = z$1.array(z$1.strictObject({
|
|
|
45219
45472
|
rowLimit: z$1.number().int().min(1).max(1e5).optional(),
|
|
45220
45473
|
columns: researchColumnsInput.optional()
|
|
45221
45474
|
})).min(1).max(4).describe("One to four local ranked-keyword exports from the same provider and market.");
|
|
45222
|
-
|
|
45223
|
-
//#region packages/mcp/src/opportunity-tools.ts
|
|
45475
|
+
// packages/mcp/src/opportunity-tools.ts
|
|
45224
45476
|
function registerOpportunityTools(server, dependencies = {}) {
|
|
45225
45477
|
server.registerTool("seo_cannibal", {
|
|
45226
45478
|
description: "Find multi-URL query exposure candidates for intent and technical review",
|
|
@@ -46131,8 +46383,7 @@ const REPORT_DEPTH = {
|
|
|
46131
46383
|
}]
|
|
46132
46384
|
}
|
|
46133
46385
|
};
|
|
46134
|
-
|
|
46135
|
-
//#region packages/mcp/src/report-guidance.ts
|
|
46386
|
+
// packages/mcp/src/report-guidance.ts
|
|
46136
46387
|
const REPORT_GUIDANCE = {
|
|
46137
46388
|
"ai-referrals": {
|
|
46138
46389
|
name: "AI referral traffic",
|
|
@@ -46344,8 +46595,7 @@ function getReportGuidance(id) {
|
|
|
46344
46595
|
...depth
|
|
46345
46596
|
};
|
|
46346
46597
|
}
|
|
46347
|
-
|
|
46348
|
-
//#region packages/mcp/src/report-tools/audit-page.ts
|
|
46598
|
+
// packages/mcp/src/report-tools/audit-page.ts
|
|
46349
46599
|
function registerAuditPageTool(server) {
|
|
46350
46600
|
server.registerTool("seo_audit_page", {
|
|
46351
46601
|
description: "Run a single-page technical and content audit",
|
|
@@ -46369,8 +46619,7 @@ function registerAuditPageTool(server) {
|
|
|
46369
46619
|
}
|
|
46370
46620
|
});
|
|
46371
46621
|
}
|
|
46372
|
-
|
|
46373
|
-
//#region packages/mcp/src/report-tools/input.ts
|
|
46622
|
+
// packages/mcp/src/report-tools/input.ts
|
|
46374
46623
|
const reportFetchInputSchema = mcpReportInputSchema([
|
|
46375
46624
|
"verifyContent",
|
|
46376
46625
|
"verifyLimit",
|
|
@@ -46393,8 +46642,7 @@ function reportFetchOptions(input) {
|
|
|
46393
46642
|
refresh: input.refresh
|
|
46394
46643
|
};
|
|
46395
46644
|
}
|
|
46396
|
-
|
|
46397
|
-
//#region packages/mcp/src/report-tools/second-page.ts
|
|
46645
|
+
// packages/mcp/src/report-tools/second-page.ts
|
|
46398
46646
|
function registerSecondPageTool(server) {
|
|
46399
46647
|
server.registerTool("seo_second_page", {
|
|
46400
46648
|
description: "Find URLs with GSC average position above 10 through 20 and return evidence-grounded investigation prompts",
|
|
@@ -46433,14 +46681,12 @@ function registerSecondPageTool(server) {
|
|
|
46433
46681
|
}
|
|
46434
46682
|
});
|
|
46435
46683
|
}
|
|
46436
|
-
|
|
46437
|
-
//#region packages/mcp/src/report-tools.ts
|
|
46684
|
+
// packages/mcp/src/report-tools.ts
|
|
46438
46685
|
function registerReportTools(server) {
|
|
46439
46686
|
registerAuditPageTool(server);
|
|
46440
46687
|
registerSecondPageTool(server);
|
|
46441
46688
|
}
|
|
46442
|
-
|
|
46443
|
-
//#region packages/mcp/src/workflow-tools.ts
|
|
46689
|
+
// packages/mcp/src/workflow-tools.ts
|
|
46444
46690
|
function workflowSuccess(result) {
|
|
46445
46691
|
const presentation = workflowPresentation(result);
|
|
46446
46692
|
const structured = compactAgentWorkflowOutput({
|
|
@@ -46535,8 +46781,7 @@ function registerWorkflowTools(server) {
|
|
|
46535
46781
|
}
|
|
46536
46782
|
});
|
|
46537
46783
|
}
|
|
46538
|
-
|
|
46539
|
-
//#region packages/mcp/src/report-registry.ts
|
|
46784
|
+
// packages/mcp/src/report-registry.ts
|
|
46540
46785
|
const REPORT_CATEGORIES = [
|
|
46541
46786
|
"ai-search",
|
|
46542
46787
|
"crawl",
|
|
@@ -46704,8 +46949,7 @@ function listReportDefinitions(category) {
|
|
|
46704
46949
|
function getReportDefinition(id) {
|
|
46705
46950
|
return definitionsById.get(id);
|
|
46706
46951
|
}
|
|
46707
|
-
|
|
46708
|
-
//#region packages/mcp/src/reports.ts
|
|
46952
|
+
// packages/mcp/src/reports.ts
|
|
46709
46953
|
function validationMessage(error) {
|
|
46710
46954
|
return error.issues.map((issue) => {
|
|
46711
46955
|
return `${issue.path.length > 0 ? issue.path.join(".") : "input"}: ${issue.message}`;
|
|
@@ -46833,8 +47077,7 @@ async function runReport(id, params = {}, options = {}) {
|
|
|
46833
47077
|
return toolError(error);
|
|
46834
47078
|
}
|
|
46835
47079
|
}
|
|
46836
|
-
|
|
46837
|
-
//#region packages/mcp/src/shared-tools.ts
|
|
47080
|
+
// packages/mcp/src/shared-tools.ts
|
|
46838
47081
|
const readOnly = {
|
|
46839
47082
|
readOnlyHint: true,
|
|
46840
47083
|
destructiveHint: false,
|
|
@@ -46946,8 +47189,7 @@ function registerSharedTools(server, options = {}) {
|
|
|
46946
47189
|
}
|
|
46947
47190
|
}));
|
|
46948
47191
|
}
|
|
46949
|
-
|
|
46950
|
-
//#region packages/mcp/src/index.ts
|
|
47192
|
+
// packages/mcp/src/index.ts
|
|
46951
47193
|
function readSkill() {
|
|
46952
47194
|
for (const path of ["../skills/seo/SKILL.md", "../../../skills/seo/SKILL.md"]) try {
|
|
46953
47195
|
return readFileSync(new URL(path, import.meta.url), "utf8");
|
|
@@ -46992,7 +47234,6 @@ async function startMcpServer(opts = {}) {
|
|
|
46992
47234
|
await server.connect(transport);
|
|
46993
47235
|
updateNotice();
|
|
46994
47236
|
}
|
|
46995
|
-
//#endregion
|
|
46996
47237
|
export { AGENT_STRUCTURED_OUTPUT_MAX_BYTES, REPORT_CATEGORIES, compactAgentWorkflowOutput, createServer, describeReport, executeReport, listReports, runReport, startMcpServer };
|
|
46997
47238
|
|
|
46998
47239
|
//# sourceMappingURL=mcp.js.map
|