@canonry/canonry 7.70.0 → 7.71.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/README.md +0 -5
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +2 -1
- package/assets/assets/{AgentSetupPage-BSHWZvRa.js → AgentSetupPage-DexQKsfX.js} +1 -1
- package/assets/assets/{AuditHistoryPanel-CkOJ_9_W.js → AuditHistoryPanel-C0tKUYig.js} +1 -1
- package/assets/assets/{BacklinksPage-DrWQ2idL.js → BacklinksPage-CXKsDXhy.js} +1 -1
- package/assets/assets/{HistoryPage-XQL_fdA9.js → HistoryPage-D1UkPELF.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-Z7HN9XvJ.js → MeasurementPropertyPage-CsSUHpB7.js} +1 -1
- package/assets/assets/ProjectPage-DVQora-C.js +9 -0
- package/assets/assets/{RunsPage-DDlvUciW.js → RunsPage-CnPgX-bf.js} +1 -1
- package/assets/assets/{SettingsPage-CajGcfAQ.js → SettingsPage-DfiH_eyL.js} +1 -1
- package/assets/assets/SiteHealthSection-BTfTcF_w.js +2 -0
- package/assets/assets/{ToneBadge-enK5ryht.js → ToneBadge-aGjnkfBI.js} +1 -1
- package/assets/assets/{TrafficPage-BlRi6C8Y.js → TrafficPage-DIa6lxo2.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-DiUYQhDR.js → TrafficSourceDetailPage-BTFJ4JkC.js} +1 -1
- package/assets/assets/{account-context-gUhEyKww.js → account-context-RobEwj-E.js} +1 -1
- package/assets/assets/{card-BPDsfFv5.js → card-BLjXAqaV.js} +1 -1
- package/assets/assets/{extract-error-message-YbSa8SSn.js → extract-error-message-BnVETQ_r.js} +1 -1
- package/assets/assets/{format-helpers-B-WHGMGn.js → format-helpers-2INiLwsz.js} +1 -1
- package/assets/assets/{index-CONZUwQB.css → index-Yn3nIj4B.css} +1 -1
- package/assets/assets/{index-CigLVn5A.js → index-zdoJudA4.js} +19 -19
- package/assets/assets/{query-client-DScmA_aM.js → query-client-BMplcUQL.js} +1 -1
- package/assets/assets/react-query-BYjj2p2M.js +1 -0
- package/assets/assets/{react-sigma_core.esm.min-CtveVGNY.js → react-sigma_core.esm.min-CerNhJzW.js} +1 -1
- package/assets/assets/{service--FVsrK0Z.js → service-DM_6LxOl.js} +1 -1
- package/assets/index.html +8 -8
- package/dist/{ads-UTME46NF.js → ads-P75E4E3Q.js} +3 -3
- package/dist/{agent-PYDTNLR4.js → agent-WKTCTJL7.js} +7 -7
- package/dist/{agent-ask-NA4QFFM6.js → agent-ask-CI4I5UER.js} +3 -3
- package/dist/{agent-conversations-3S56EX4U.js → agent-conversations-2LXN6PC5.js} +3 -3
- package/dist/{agent-memory-D2RT5TVJ.js → agent-memory-STJUYUEI.js} +3 -3
- package/dist/{agent-providers-5C2DRUR3.js → agent-providers-HRQCKR57.js} +3 -3
- package/dist/{agent-transcript-SY5BZPO3.js → agent-transcript-SMNVT5UA.js} +3 -3
- package/dist/{analytics-GUENANBB.js → analytics-GZRA5LS4.js} +3 -3
- package/dist/{apply-R5K6RGEH.js → apply-QXMZGXAY.js} +3 -3
- package/dist/{backfill-B2EXGQCW.js → backfill-3VVYI6XX.js} +9 -9
- package/dist/{backlinks-X55GUIQL.js → backlinks-VUTZFYJY.js} +3 -3
- package/dist/{bing-5NTEC247.js → bing-DKYPVXU4.js} +3 -3
- package/dist/{bootstrap-UDEEVI4Z.js → bootstrap-3CMHZS6G.js} +10 -10
- package/dist/{cdp-WWVZ6IBS.js → cdp-XP4RGCA6.js} +7 -7
- package/dist/{chunk-PJYXLC3D.js → chunk-2G3J62KV.js} +1 -1
- package/dist/{chunk-6RI7JFFI.js → chunk-3NOFNFGV.js} +1 -1
- package/dist/{chunk-6JGQT4OH.js → chunk-A3NSYJJL.js} +37 -2
- package/dist/{chunk-QBR7BWO6.js → chunk-AAPMP2T3.js} +8 -8
- package/dist/{chunk-3ZF3T3OG.js → chunk-ALXQPMYR.js} +1 -1
- package/dist/{chunk-RSK7E53V.js → chunk-AVNEHYTZ.js} +1 -1
- package/dist/{chunk-BRT5GE3Z.js → chunk-C3ZH2HLV.js} +5 -5
- package/dist/{chunk-RVEXUQHP.js → chunk-DEMNY4YE.js} +2 -2
- package/dist/{chunk-RJSJNR76.js → chunk-DP5V4C3I.js} +3 -3
- package/dist/{chunk-XOCF2U54.js → chunk-EDQ4V4PJ.js} +19 -1
- package/dist/{chunk-R7RTWOOV.js → chunk-ETMB45WP.js} +1 -1
- package/dist/{chunk-7W4KNDAW.js → chunk-FNVUPIMW.js} +2 -2
- package/dist/{chunk-PHHQVV3G.js → chunk-ILLWCY2P.js} +3 -3
- package/dist/{chunk-NHF3OGZN.js → chunk-IX7AKQBJ.js} +3 -3
- package/dist/{chunk-RPYSCFFA.js → chunk-JB4NDUWJ.js} +1 -1
- package/dist/{chunk-3LTLLHCD.js → chunk-JCECURGF.js} +4 -4
- package/dist/{chunk-42JQQZZQ.js → chunk-JEC5Z22M.js} +5 -5
- package/dist/{chunk-SSNKQTRX.js → chunk-JHCIMIB5.js} +3 -3
- package/dist/{chunk-EIRIZPR6.js → chunk-K4S2T6C5.js} +6 -3
- package/dist/{chunk-WOETP6NH.js → chunk-KRDMSGNZ.js} +346 -336
- package/dist/{chunk-JNRMODJS.js → chunk-NPHBHVAY.js} +1 -1
- package/dist/{chunk-DW3KF33I.js → chunk-OOXR7SZ5.js} +4 -4
- package/dist/{chunk-SFMCFMJR.js → chunk-QREFWO3Q.js} +1 -1
- package/dist/{chunk-ULUKHNE4.js → chunk-SNCRERSZ.js} +1 -1
- package/dist/{chunk-JGO7LGVN.js → chunk-SZSJALQM.js} +30 -10
- package/dist/{chunk-BGTJTKOJ.js → chunk-T6IV35KG.js} +3 -2
- package/dist/{chunk-KDV5NQZH.js → chunk-U6EUBP4B.js} +1 -1
- package/dist/{chunk-MBNXKKOD.js → chunk-VLFPI3T3.js} +2 -2
- package/dist/{chunk-QNSMMQJY.js → chunk-WE3SK5GQ.js} +7 -5
- package/dist/{chunk-CSDDKEL6.js → chunk-WHH7HWN7.js} +1 -1
- package/dist/{chunk-CNSLBHFP.js → chunk-WNBN4FYE.js} +1 -1
- package/dist/{chunk-3QHKN3JY.js → chunk-XSRKTGRG.js} +47 -32
- package/dist/{chunk-HZ55UIKM.js → chunk-Z6BDB4KS.js} +4 -4
- package/dist/{chunk-OQR4F7WF.js → chunk-ZCIC3DLS.js} +2 -2
- package/dist/{citations-ILU2CNT2.js → citations-X24SQ4ZU.js} +3 -3
- package/dist/{cli-catalog-ZBTUYNJA.js → cli-catalog-RYUJEUAY.js} +3 -3
- package/dist/{cli-commands-672L7BFD.js → cli-commands-DFTOVHCU.js} +7 -7
- package/dist/cli.js +13 -13
- package/dist/{competitor-NXSL3AWD.js → competitor-4GIR3D4Q.js} +3 -3
- package/dist/{content-TGWYXNBI.js → content-FPMODFJ4.js} +3 -3
- package/dist/{dashboard-IDCQTIYG.js → dashboard-IJCLC5MW.js} +6 -6
- package/dist/{demo-6X6IDMPT.js → demo-52GRHFQH.js} +1 -1
- package/dist/{demo-server-HKJWIYPQ.js → demo-server-QZPEIXU2.js} +11 -11
- package/dist/{discover-NW7NKL2Z.js → discover-Y7I3V75V.js} +3 -3
- package/dist/{discover-eval-2BVYL62I.js → discover-eval-TS67TA2C.js} +3 -3
- package/dist/{doctor-6I3LPYM7.js → doctor-E3OPJGNR.js} +3 -3
- package/dist/{evidence-ZTAMPBEP.js → evidence-HBPR3QYE.js} +3 -3
- package/dist/{export-cmd-4CXUQVYT.js → export-cmd-AXSRXCD5.js} +3 -3
- package/dist/{ga-2YXMDGHQ.js → ga-JXHGIEMK.js} +3 -3
- package/dist/{gbp-LTPPWTUR.js → gbp-4M54KRXG.js} +3 -3
- package/dist/{google-KTUJ4D3T.js → google-TBZLFQTN.js} +4 -4
- package/dist/{google-marketing-FAKTAI5S.js → google-marketing-EFUITED7.js} +1 -1
- package/dist/{health-cmd-C75E3NPQ.js → health-cmd-5SCHBHXS.js} +3 -3
- package/dist/{history-HE734BPT.js → history-BLOGMFLZ.js} +3 -3
- package/dist/index.d.ts +86 -67
- package/dist/index.js +24 -24
- package/dist/{init-M73CSTWU.js → init-2WCCRDYU.js} +11 -11
- package/dist/{insights-4GUVXY2V.js → insights-AUTLWRQS.js} +3 -3
- package/dist/intelligence-service-XDGWLXW4.js +15 -0
- package/dist/{journeys-BZCKKFG7.js → journeys-7Y3HE5AX.js} +3 -3
- package/dist/{keys-CMN3FUDW.js → keys-3T65JGMW.js} +3 -3
- package/dist/{keyword-QUM65R7C.js → keyword-2MQEXEYJ.js} +3 -3
- package/dist/{logs-HH7EP7YK.js → logs-4AWZCX2X.js} +3 -3
- package/dist/{mcp-76T6WX4K.js → mcp-RCMC554F.js} +2 -2
- package/dist/mcp.js +9 -9
- package/dist/{measurement-plan-2D2KQLTW.js → measurement-plan-HFPXGBVZ.js} +5 -5
- package/dist/{notify-VP5YYBJO.js → notify-GEUMV4QL.js} +3 -3
- package/dist/{organic-evidence-EAUZJVET.js → organic-evidence-TAH2R2U4.js} +3 -3
- package/dist/{overview-MCX3OHXK.js → overview-WBZW5QMX.js} +4 -4
- package/dist/{project-HMELPKXT.js → project-52XSBNDM.js} +3 -3
- package/dist/{query-J7UTKCY5.js → query-7DHBS2QS.js} +3 -3
- package/dist/{research-O4FYADRL.js → research-VDLJDU72.js} +3 -3
- package/dist/{results-export-4JHIHSWW.js → results-export-4XMDISAJ.js} +3 -3
- package/dist/{run-YJ3Y7FIE.js → run-NQ664S64.js} +4 -4
- package/dist/{schedule-6SXEB245.js → schedule-CFG2I3BJ.js} +3 -3
- package/dist/{search-MVL346VH.js → search-Q5HSLPLD.js} +3 -3
- package/dist/{serve-GSPGAHMD.js → serve-4X3LDV6K.js} +25 -25
- package/dist/{session-KFFTQBJU.js → session-3JP36MHE.js} +12 -12
- package/dist/{settings-UKVP6TDD.js → settings-Y7RLRCLF.js} +3 -3
- package/dist/{skills-DF336KFJ.js → skills-ZVV7HCF5.js} +2 -2
- package/dist/{snapshot-YKWGIRTM.js → snapshot-UAWGXBKI.js} +3 -3
- package/dist/{src-WDWTA7ON.js → src-6ZMVHPAY.js} +2 -2
- package/dist/{status-4PDQOFYS.js → status-A2FZZJ4M.js} +4 -4
- package/dist/{technical-aeo-XJRWNW24.js → technical-aeo-HXGF72PP.js} +7 -5
- package/dist/{telemetry-TXB7NGPP.js → telemetry-7SHJAUQD.js} +4 -4
- package/dist/{tools-5DBHZB4K.js → tools-3HY3R5J5.js} +11 -11
- package/dist/{traffic-AP22ENAC.js → traffic-6LPWSVRR.js} +5 -5
- package/dist/{users-44XJB4ZN.js → users-UHABRTME.js} +3 -3
- package/dist/{visibility-stats-5DMILJO6.js → visibility-stats-Z5D6ITSA.js} +3 -3
- package/dist/{wordpress-P6J44TMN.js → wordpress-HEIQZGMP.js} +3 -3
- package/package.json +1 -1
- package/assets/assets/ProjectPage-DCOhyc0W.js +0 -9
- package/assets/assets/SiteHealthSection-Ch56JPKl.js +0 -2
- package/assets/assets/react-query-gGXPkSlb.js +0 -1
- package/dist/intelligence-service-PAMFRLPE.js +0 -15
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runWithUsageTags
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-T6IV35KG.js";
|
|
4
4
|
import {
|
|
5
5
|
CanonryMcpToolNames,
|
|
6
6
|
canonryMcpTools
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WE3SK5GQ.js";
|
|
8
8
|
import {
|
|
9
9
|
CliError
|
|
10
10
|
} from "./chunk-HGMYEDAQ.js";
|
|
11
11
|
import {
|
|
12
12
|
buildOpenApiDocument
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-SZSJALQM.js";
|
|
14
14
|
import {
|
|
15
15
|
DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
|
|
16
16
|
MeasurementPortfolioLists,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
seoDatasetWithoutVendor,
|
|
24
24
|
seoProviderSchema,
|
|
25
25
|
truncateUtf16
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-A3NSYJJL.js";
|
|
27
27
|
|
|
28
28
|
// src/agent/tools.ts
|
|
29
29
|
import { Type as Type2 } from "@earendil-works/pi-ai";
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
measurementDraftUpsertGroupRequestSchema,
|
|
24
24
|
measurementDraftUpsertMarketRequestSchema,
|
|
25
25
|
measurementDraftUpsertTargetRequestSchema
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-A3NSYJJL.js";
|
|
27
27
|
|
|
28
28
|
// src/measurement-draft-actions.ts
|
|
29
29
|
import { z } from "zod";
|
|
@@ -9,14 +9,14 @@ import {
|
|
|
9
9
|
normalizeCloudflareWorkerEvent,
|
|
10
10
|
sessionizeJourneyRequests,
|
|
11
11
|
verifyRequestSignature
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WNBN4FYE.js";
|
|
13
13
|
import {
|
|
14
14
|
currentOutcomeAttribution,
|
|
15
15
|
getRequestContext,
|
|
16
16
|
registerRequestContext,
|
|
17
17
|
requestAuditIdentity,
|
|
18
18
|
sanitizeRequestContext
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-U6EUBP4B.js";
|
|
20
20
|
import {
|
|
21
21
|
SentimentIdempotencyConflict,
|
|
22
22
|
SentimentRepository,
|
|
@@ -156,7 +156,7 @@ import {
|
|
|
156
156
|
userSessions,
|
|
157
157
|
users,
|
|
158
158
|
writeNegativeReviewMaxStars
|
|
159
|
-
} from "./chunk-
|
|
159
|
+
} from "./chunk-EDQ4V4PJ.js";
|
|
160
160
|
import {
|
|
161
161
|
ADS_ACTIVATE_SCOPE,
|
|
162
162
|
ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
|
|
@@ -378,6 +378,7 @@ import {
|
|
|
378
378
|
SiteAuditTrendDirections,
|
|
379
379
|
SiteCrawlFetchedStates,
|
|
380
380
|
SiteCrawlIndexabilityReasons,
|
|
381
|
+
SiteCrawlUrlVersionFilters,
|
|
381
382
|
SiteHealthLinkKinds,
|
|
382
383
|
SiteHealthTemplateDetections,
|
|
383
384
|
TrafficEventConfidences,
|
|
@@ -1111,6 +1112,7 @@ import {
|
|
|
1111
1112
|
siteCrawlPagesResponseSchema,
|
|
1112
1113
|
siteCrawlStructureResponseSchema,
|
|
1113
1114
|
siteCrawlSummarySchema,
|
|
1115
|
+
siteCrawlUrlVersionFilterSchema,
|
|
1114
1116
|
siteHealthChangesResponseSchema,
|
|
1115
1117
|
siteHealthLinkKindSchema,
|
|
1116
1118
|
siteHealthPathResponseSchema,
|
|
@@ -1192,7 +1194,7 @@ import {
|
|
|
1192
1194
|
wordpressSchemaDeployResultDtoSchema,
|
|
1193
1195
|
wordpressSchemaStatusResultDtoSchema,
|
|
1194
1196
|
wordpressStatusDtoSchema
|
|
1195
|
-
} from "./chunk-
|
|
1197
|
+
} from "./chunk-A3NSYJJL.js";
|
|
1196
1198
|
|
|
1197
1199
|
// ../api-routes/src/user-session.ts
|
|
1198
1200
|
import crypto2 from "crypto";
|
|
@@ -42309,13 +42311,14 @@ var routeCatalog = [
|
|
|
42309
42311
|
{ name: "indexabilityState", in: "query", description: "Filter by crawler-derived indexability state; this is not Google index coverage.", schema: stringSchema },
|
|
42310
42312
|
{ name: "nodeKey", in: "query", description: "Return only the page with this node key. Combined with a filter it answers whether that exact page is in the filtered set, without paging through the list.", schema: stringSchema },
|
|
42311
42313
|
{ name: "healthState", in: "query", description: "Filter by the derived Site Health state shared with the dashboard and agents. Unlike `indexabilityState` this folds fetch state, canonical identity, and the crawler reasons into one decision. `hidden` means the SITE told answer engines not to index the page (noindex, canonical-away, robots.txt); a non-HTML file is `resource` and a redirect is `redirect`, because neither is suppressed. Values: `eligible`, `hidden`, `resource`, `redirect`, `failed`, `unchecked`.", schema: { type: "string", enum: ["eligible", "hidden", "resource", "redirect", "failed", "unchecked"] } },
|
|
42312
|
-
{ name: "auditState", in: "query", description: "Filter by audit state.", schema: stringSchema },
|
|
42314
|
+
{ name: "auditState", in: "query", description: "Filter by audit state. A URL version has `url-version`: it was fetched and classified but not scored.", schema: stringSchema },
|
|
42315
|
+
{ name: "urlVersions", in: "query", description: "URL versions are parameter addresses (filters, views, cache settings) whose canonical names the same path, so the site marks them as copies of that page. The audit does not score them or count them in fixes, and `inventorySummary.urlVersions` counts them. `include` (default) keeps every crawled address, `exclude` lists pages only, as the dashboard does, and `only` lists the URL versions, each with `urlVersionOf`. Scans made before URL versions were set aside have none.", schema: { type: "string", enum: ["include", "exclude", "only"] } },
|
|
42313
42316
|
{ name: "sort", in: "query", description: "Sort order. Defaults to `url`.", schema: { type: "string", enum: ["url", "path", "score-asc", "score-desc"] } },
|
|
42314
42317
|
crawlCursorParameter,
|
|
42315
42318
|
crawlLimitParameter
|
|
42316
42319
|
],
|
|
42317
42320
|
responses: {
|
|
42318
|
-
400: errorResponse("Invalid date, conflicting runId/date, or invalid cursor identity."),
|
|
42321
|
+
400: errorResponse("Invalid date, conflicting runId/date, invalid urlVersions, or invalid cursor identity."),
|
|
42319
42322
|
200: jsonResponse("Crawl pages returned.", "SiteCrawlPagesResponseDto"),
|
|
42320
42323
|
404: errorResponse("Project or site-audit run not found. A known run that published no crawl returns 200 with the no-crawl state instead.")
|
|
42321
42324
|
}
|
|
@@ -72106,6 +72109,14 @@ function parseSiteHealthState(value) {
|
|
|
72106
72109
|
}
|
|
72107
72110
|
return allowed.data;
|
|
72108
72111
|
}
|
|
72112
|
+
function parseUrlVersionFilter(value) {
|
|
72113
|
+
if (value === void 0 || value === "") return SiteCrawlUrlVersionFilters.include;
|
|
72114
|
+
const allowed = siteCrawlUrlVersionFilterSchema.safeParse(value);
|
|
72115
|
+
if (!allowed.success) {
|
|
72116
|
+
throw validationError(`"urlVersions" must be one of: ${siteCrawlUrlVersionFilterSchema.options.join(", ")}`);
|
|
72117
|
+
}
|
|
72118
|
+
return allowed.data;
|
|
72119
|
+
}
|
|
72109
72120
|
function parseBoolean2(value) {
|
|
72110
72121
|
if (value === true || value === "true" || value === "1") return true;
|
|
72111
72122
|
if (value === false || value === "false" || value === "0") return false;
|
|
@@ -72188,7 +72199,8 @@ function mapCrawlPage(row) {
|
|
|
72188
72199
|
linkScoreRaw: row.linkScoreRaw,
|
|
72189
72200
|
linkScoreNormalized: row.linkScoreNormalized,
|
|
72190
72201
|
healthState: deriveSiteHealthState(row),
|
|
72191
|
-
healthReason: deriveSiteHealthReason(row)
|
|
72202
|
+
healthReason: deriveSiteHealthReason(row),
|
|
72203
|
+
urlVersionOf: row.urlVersionOf ?? null
|
|
72192
72204
|
};
|
|
72193
72205
|
}
|
|
72194
72206
|
function withRecordedShare(factor) {
|
|
@@ -72559,19 +72571,22 @@ async function technicalAeoRoutes(app, opts) {
|
|
|
72559
72571
|
};
|
|
72560
72572
|
const inventorySummaryFor = (scope) => {
|
|
72561
72573
|
if (!scope) return null;
|
|
72562
|
-
const
|
|
72574
|
+
const inScope = and83(
|
|
72563
72575
|
eq100(siteCrawlPages.projectId, scope.projectId),
|
|
72564
72576
|
eq100(siteCrawlPages.runId, scope.runId),
|
|
72565
72577
|
eq100(siteCrawlPages.attemptId, scope.attemptId)
|
|
72566
|
-
)
|
|
72578
|
+
);
|
|
72579
|
+
const groups = crawlReasonGroups(inScope);
|
|
72567
72580
|
const total = groups.reduce((sum, group) => sum + group.pages, 0);
|
|
72568
72581
|
const eligible = groups.reduce((sum, group) => sum + (group.inventoryEligible ? group.pages : 0), 0);
|
|
72582
|
+
const urlVersions = app.db.select({ value: count8() }).from(siteCrawlPages).where(and83(inScope, isNotNull10(siteCrawlPages.urlVersionOf))).get()?.value ?? 0;
|
|
72569
72583
|
return {
|
|
72570
72584
|
scope: "selected-snapshot",
|
|
72571
72585
|
total,
|
|
72572
72586
|
eligible,
|
|
72573
72587
|
excluded: total - eligible,
|
|
72574
|
-
excludedReasons: reasonCounts(groups.filter((group) => !group.inventoryEligible))
|
|
72588
|
+
excludedReasons: reasonCounts(groups.filter((group) => !group.inventoryEligible)),
|
|
72589
|
+
urlVersions
|
|
72575
72590
|
};
|
|
72576
72591
|
};
|
|
72577
72592
|
const completenessOf = (target) => ({
|
|
@@ -73739,6 +73754,9 @@ async function technicalAeoRoutes(app, opts) {
|
|
|
73739
73754
|
if (request.query.fetchState) filters.push(eq100(siteCrawlPages.fetchState, request.query.fetchState));
|
|
73740
73755
|
if (request.query.indexabilityState) filters.push(eq100(siteCrawlPages.indexabilityState, request.query.indexabilityState));
|
|
73741
73756
|
if (request.query.auditState) filters.push(eq100(siteCrawlPages.auditState, request.query.auditState));
|
|
73757
|
+
const urlVersions = parseUrlVersionFilter(request.query.urlVersions);
|
|
73758
|
+
if (urlVersions === SiteCrawlUrlVersionFilters.exclude) filters.push(isNull17(siteCrawlPages.urlVersionOf));
|
|
73759
|
+
if (urlVersions === SiteCrawlUrlVersionFilters.only) filters.push(isNotNull10(siteCrawlPages.urlVersionOf));
|
|
73742
73760
|
const healthState = parseSiteHealthState(request.query.healthState);
|
|
73743
73761
|
const limit = parseBoundedLimit(request.query.limit, 100, 200);
|
|
73744
73762
|
const sort = ["score-desc", "score-asc", "path"].includes(request.query.sort ?? "") ? request.query.sort : "url";
|
|
@@ -73752,6 +73770,8 @@ async function technicalAeoRoutes(app, opts) {
|
|
|
73752
73770
|
fetchState: request.query.fetchState || null,
|
|
73753
73771
|
indexabilityState: request.query.indexabilityState || null,
|
|
73754
73772
|
auditState: request.query.auditState || null,
|
|
73773
|
+
// Absent for the default, so a cursor issued before this filter existed still matches.
|
|
73774
|
+
...urlVersions === SiteCrawlUrlVersionFilters.include ? {} : { urlVersions },
|
|
73755
73775
|
healthState,
|
|
73756
73776
|
sort
|
|
73757
73777
|
})).digest("base64url");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3NOFNFGV.js";
|
|
4
4
|
import {
|
|
5
5
|
PACKAGE_VERSION
|
|
6
6
|
} from "./chunk-AOJU5LKX.js";
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
sentimentSettingsReadSchema,
|
|
37
37
|
sentimentSummaryReadSchema,
|
|
38
38
|
upgradeCommandFor
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-A3NSYJJL.js";
|
|
40
40
|
|
|
41
41
|
// ../api-client-generated/src/generated/core/bodySerializer.gen.ts
|
|
42
42
|
var jsonBodySerializer = {
|
|
@@ -6410,6 +6410,7 @@ var ApiClient = class {
|
|
|
6410
6410
|
fetchState: opts?.fetchState,
|
|
6411
6411
|
indexabilityState: opts?.indexabilityState,
|
|
6412
6412
|
auditState: opts?.auditState,
|
|
6413
|
+
urlVersions: opts?.urlVersions,
|
|
6413
6414
|
sort: opts?.sort,
|
|
6414
6415
|
cursor: opts?.cursor,
|
|
6415
6416
|
limit: opts?.limit !== void 0 ? String(opts.limit) : void 0
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
trackIntegrationConnection
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JCECURGF.js";
|
|
4
4
|
import {
|
|
5
5
|
cliRuntimeContext
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DEMNY4YE.js";
|
|
7
7
|
|
|
8
8
|
// src/cli-connection-telemetry.ts
|
|
9
9
|
function trackCliConnection(properties) {
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
dedupeGscSitemapUrls,
|
|
3
3
|
resolveDiscoveredGscSitemapUrls,
|
|
4
4
|
submitGscSitemapBatches
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-WHH7HWN7.js";
|
|
6
6
|
import {
|
|
7
7
|
measurementDraftOperationSchema,
|
|
8
8
|
runMeasurementDraftAction
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-SNCRERSZ.js";
|
|
10
10
|
import {
|
|
11
11
|
CliError
|
|
12
12
|
} from "./chunk-HGMYEDAQ.js";
|
|
@@ -177,7 +177,7 @@ import {
|
|
|
177
177
|
trafficSeriesGranularitySchema,
|
|
178
178
|
visibilityCompareSelectionSchema,
|
|
179
179
|
visibilityReportRequestSchema
|
|
180
|
-
} from "./chunk-
|
|
180
|
+
} from "./chunk-A3NSYJJL.js";
|
|
181
181
|
|
|
182
182
|
// src/mcp/tool-registry.ts
|
|
183
183
|
import { z as z2 } from "zod";
|
|
@@ -1034,7 +1034,8 @@ var technicalAeoCrawlPagesInputSchema = z2.object({
|
|
|
1034
1034
|
inventoryEligible: z2.boolean().optional().describe("Filter Canonry technical-inventory eligibility. This is not actual Google index coverage."),
|
|
1035
1035
|
fetchState: z2.string().min(1).optional().describe("Filter crawler fetch state, for example html, redirect, non-html, or fetch-error."),
|
|
1036
1036
|
indexabilityState: z2.string().min(1).optional().describe("Filter crawler-derived indexability state. This is not Google index coverage."),
|
|
1037
|
-
auditState: z2.string().min(1).optional().describe("Filter audit state."),
|
|
1037
|
+
auditState: z2.string().min(1).optional().describe("Filter audit state. url-version marks a URL version: fetched and classified, not scored."),
|
|
1038
|
+
urlVersions: z2.enum(["include", "exclude", "only"]).optional().describe("URL versions are parameter addresses whose canonical names the same path, so the site marks them as copies of that page; the audit does not score them or count them in fixes. include (default) keeps every address, exclude lists pages only (the dashboard view), only lists the URL versions with urlVersionOf."),
|
|
1038
1039
|
sort: z2.enum(["url", "path", "score-asc", "score-desc"]).optional(),
|
|
1039
1040
|
cursor: z2.string().min(1).optional().describe("Opaque cursor from the previous crawl-pages result."),
|
|
1040
1041
|
limit: z2.number().int().positive().max(200).optional()
|
|
@@ -4150,7 +4151,7 @@ var rawCanonryMcpTools = [
|
|
|
4150
4151
|
defineTool({
|
|
4151
4152
|
name: "canonry_technical_aeo_crawl_pages",
|
|
4152
4153
|
title: "List Technical AEO crawl pages",
|
|
4153
|
-
description: "For a requested scan date pass date=YYYY-MM-DD. If the year was omitted and that date has no data, use availableScanDates.matchingMonthDayDates to resolve the year and request the exact returned date before concluding the historical scan is missing. recentDates and matchingMonthDayDates are bounded; totalDates and matchingMonthDayTotal report their full counts. No automatic date fallback. inventorySummary gives whole-snapshot eligible/excluded counts
|
|
4154
|
+
description: "For a requested scan date pass date=YYYY-MM-DD. If the year was omitted and that date has no data, use availableScanDates.matchingMonthDayDates to resolve the year and request the exact returned date before concluding the historical scan is missing. recentDates and matchingMonthDayDates are bounded; totalDates and matchingMonthDayTotal report their full counts. No automatic date fallback. inventorySummary gives whole-snapshot eligible/excluded counts, disjoint excluded reasons, and urlVersions (parameter copies of a page the audit did not score; pass urlVersions=exclude to list pages only); healthReasonCounts covers the filtered list before paging. Use these exact counts, never infer canonical-away from unknown indexability. healthReason distinguishes terminal redirects from canonical-to-other pages. Default runSelection reports same-date ambiguity and selects complete or most-pages evidence on the latest scan date. Read one bounded, cursor-paged list of canonical crawl nodes. Filter crawler-derived indexability and audit state, then follow nextCursor; this is technical inventory eligibility, not a claim about Google index coverage. `complete: false` means the crawl stopped at the budget named by `termination`, so a missing page or link is not proof it does not exist.",
|
|
4154
4155
|
access: "read",
|
|
4155
4156
|
tier: "monitoring",
|
|
4156
4157
|
inputSchema: technicalAeoCrawlPagesInputSchema,
|
|
@@ -4163,6 +4164,7 @@ var rawCanonryMcpTools = [
|
|
|
4163
4164
|
fetchState: input.fetchState,
|
|
4164
4165
|
indexabilityState: input.indexabilityState,
|
|
4165
4166
|
auditState: input.auditState,
|
|
4167
|
+
urlVersions: input.urlVersions,
|
|
4166
4168
|
sort: input.sort,
|
|
4167
4169
|
cursor: input.cursor,
|
|
4168
4170
|
limit: input.limit
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
answerServiceAdapters,
|
|
3
3
|
answerServiceDescriptors
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QREFWO3Q.js";
|
|
5
5
|
import {
|
|
6
6
|
AeroLlmUsageFeatures,
|
|
7
7
|
aeroTurnStatus,
|
|
@@ -27,14 +27,14 @@ import {
|
|
|
27
27
|
resolveConfiguredAgentProvider,
|
|
28
28
|
resolveSessionProviderAndModel,
|
|
29
29
|
setAeroSystemPrompt
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-C3ZH2HLV.js";
|
|
31
31
|
import {
|
|
32
32
|
AeroToolProfiles,
|
|
33
33
|
AeroToolScopes,
|
|
34
34
|
buildAeroStateTools,
|
|
35
35
|
isAeroToolProfile,
|
|
36
36
|
truncateToolResult
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-OOXR7SZ5.js";
|
|
38
38
|
import {
|
|
39
39
|
getGoogleAuthConfig,
|
|
40
40
|
getGoogleConnection,
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
removeCloudflareTrafficConnection,
|
|
54
54
|
removeCloudflareTrafficConnectionBySourceId,
|
|
55
55
|
upsertCloudflareTrafficConnection
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-JB4NDUWJ.js";
|
|
57
57
|
import {
|
|
58
58
|
claudeAdapter,
|
|
59
59
|
embedQueries,
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
openaiAdapter,
|
|
65
65
|
openrouterAdapter,
|
|
66
66
|
perplexityAdapter
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-K4S2T6C5.js";
|
|
68
68
|
import {
|
|
69
69
|
classifyUsageSurface,
|
|
70
70
|
createApiUsageTelemetry,
|
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
startOutcomeTimer,
|
|
77
77
|
trackFeatureCompleted,
|
|
78
78
|
trackInstallState
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-JCECURGF.js";
|
|
80
80
|
import {
|
|
81
81
|
isLoopbackBindHost
|
|
82
82
|
} from "./chunk-TSENU4GG.js";
|
|
@@ -84,7 +84,7 @@ import {
|
|
|
84
84
|
isApiProviderRegistrable,
|
|
85
85
|
isCdpProviderRegistrable,
|
|
86
86
|
registeredProviderNames
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-ALXQPMYR.js";
|
|
88
88
|
import {
|
|
89
89
|
checkLatestVersionForServer,
|
|
90
90
|
getOrCreateAnonymousId,
|
|
@@ -95,17 +95,17 @@ import {
|
|
|
95
95
|
recordDashboardEvent,
|
|
96
96
|
setTelemetryPreference,
|
|
97
97
|
trackEvent
|
|
98
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-DEMNY4YE.js";
|
|
99
99
|
import {
|
|
100
100
|
createCanonryMcpServer
|
|
101
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-ILLWCY2P.js";
|
|
102
102
|
import {
|
|
103
103
|
CANONRY_MCP_TIERS,
|
|
104
104
|
CANONRY_MCP_TOOLKIT_NAMES
|
|
105
105
|
} from "./chunk-NDTU7FGL.js";
|
|
106
106
|
import {
|
|
107
107
|
ApiClient
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-T6IV35KG.js";
|
|
109
109
|
import {
|
|
110
110
|
AGENT_PROVIDERS,
|
|
111
111
|
adapterSupportsBatch,
|
|
@@ -136,21 +136,21 @@ import {
|
|
|
136
136
|
saveConfigPatch,
|
|
137
137
|
sentimentInstallReadiness,
|
|
138
138
|
updateSharedProviderExecutionGate
|
|
139
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-3NOFNFGV.js";
|
|
140
140
|
import {
|
|
141
141
|
getBundledSkillSnapshots
|
|
142
|
-
} from "./chunk-
|
|
142
|
+
} from "./chunk-NPHBHVAY.js";
|
|
143
143
|
import {
|
|
144
144
|
computeFactorAverages,
|
|
145
145
|
deleteSiteCrawlGraphLayout,
|
|
146
146
|
persistSiteCrawlGraphLayout,
|
|
147
147
|
prepareSiteCrawlGraphLayout,
|
|
148
148
|
recordedSharePct
|
|
149
|
-
} from "./chunk-
|
|
149
|
+
} from "./chunk-FNVUPIMW.js";
|
|
150
150
|
import {
|
|
151
151
|
CanonryMcpToolNames,
|
|
152
152
|
canonryMcpTools
|
|
153
|
-
} from "./chunk-
|
|
153
|
+
} from "./chunk-WE3SK5GQ.js";
|
|
154
154
|
import {
|
|
155
155
|
PACKAGE_VERSION
|
|
156
156
|
} from "./chunk-AOJU5LKX.js";
|
|
@@ -162,11 +162,11 @@ import {
|
|
|
162
162
|
addLogListener,
|
|
163
163
|
createFastifyLogger,
|
|
164
164
|
createLogger
|
|
165
|
-
} from "./chunk-
|
|
165
|
+
} from "./chunk-JEC5Z22M.js";
|
|
166
166
|
import {
|
|
167
167
|
computeCitedCompetitorDomains,
|
|
168
168
|
determineCitationState
|
|
169
|
-
} from "./chunk-
|
|
169
|
+
} from "./chunk-ETMB45WP.js";
|
|
170
170
|
import {
|
|
171
171
|
BingApiError,
|
|
172
172
|
CC_CACHE_DIR,
|
|
@@ -286,7 +286,7 @@ import {
|
|
|
286
286
|
webhookResponseReason,
|
|
287
287
|
webhookTargetRefusalReason,
|
|
288
288
|
writeAuditLog
|
|
289
|
-
} from "./chunk-
|
|
289
|
+
} from "./chunk-SZSJALQM.js";
|
|
290
290
|
import {
|
|
291
291
|
OperationalLogStore,
|
|
292
292
|
SentimentIdempotencyConflict,
|
|
@@ -372,7 +372,7 @@ import {
|
|
|
372
372
|
siteLivenessState,
|
|
373
373
|
trafficSources,
|
|
374
374
|
usageCounters
|
|
375
|
-
} from "./chunk-
|
|
375
|
+
} from "./chunk-EDQ4V4PJ.js";
|
|
376
376
|
import {
|
|
377
377
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
378
378
|
AI_ENGINE_DOMAINS,
|
|
@@ -446,6 +446,7 @@ import {
|
|
|
446
446
|
SITE_AUDIT_DEFAULT_PAGE_LIMIT,
|
|
447
447
|
SITE_AUDIT_MAX_EDGE_LIMIT,
|
|
448
448
|
SITE_AUDIT_MAX_PAGE_LIMIT,
|
|
449
|
+
SITE_CRAWL_URL_VERSION_AUDIT_STATE,
|
|
449
450
|
STORED_ONLY_HEADER,
|
|
450
451
|
SchedulableRunKinds,
|
|
451
452
|
SentimentOutcomes,
|
|
@@ -606,6 +607,7 @@ import {
|
|
|
606
607
|
serializeRunError,
|
|
607
608
|
shiftIsoCalendarDate,
|
|
608
609
|
siteAuditRequestIdentity,
|
|
610
|
+
siteCrawlUrlVersionOf,
|
|
609
611
|
splitList,
|
|
610
612
|
startOfDayHourInTimeZone,
|
|
611
613
|
statusClassOf,
|
|
@@ -622,7 +624,7 @@ import {
|
|
|
622
624
|
winnabilityClassLabel,
|
|
623
625
|
withRetry,
|
|
624
626
|
withSkippedProviders
|
|
625
|
-
} from "./chunk-
|
|
627
|
+
} from "./chunk-A3NSYJJL.js";
|
|
626
628
|
|
|
627
629
|
// src/google-marketing-runtime.ts
|
|
628
630
|
import crypto2 from "crypto";
|
|
@@ -5805,7 +5807,7 @@ function nonBlank(value) {
|
|
|
5805
5807
|
return trimmed ? trimmed : void 0;
|
|
5806
5808
|
}
|
|
5807
5809
|
function resolveBuildCommit(env = process.env) {
|
|
5808
|
-
const embedded = true ? "
|
|
5810
|
+
const embedded = true ? "9caa25b0ba175e5a81276cef6fe4c541f3f40073" : void 0;
|
|
5809
5811
|
return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
|
|
5810
5812
|
}
|
|
5811
5813
|
function resolveInstanceIdentity(env = process.env) {
|
|
@@ -11948,7 +11950,14 @@ function pageDiscoverySource(page) {
|
|
|
11948
11950
|
if (page.provenance.sitemapSources.length > 0) return "sitemap";
|
|
11949
11951
|
return "link";
|
|
11950
11952
|
}
|
|
11953
|
+
function urlVersionOf(page) {
|
|
11954
|
+
return siteCrawlUrlVersionOf({ fetchState: page.state, url: page.requestedUrl, canonicalUrl: page.canonicalUrl });
|
|
11955
|
+
}
|
|
11956
|
+
function isScoredPage(page) {
|
|
11957
|
+
return page.audit != null && urlVersionOf(page) === null;
|
|
11958
|
+
}
|
|
11951
11959
|
function pageAuditState(page) {
|
|
11960
|
+
if (urlVersionOf(page) !== null) return SITE_CRAWL_URL_VERSION_AUDIT_STATE;
|
|
11952
11961
|
if (page.audit) return "success";
|
|
11953
11962
|
if (page.state === "fetch-error") return "error";
|
|
11954
11963
|
return "not-applicable";
|
|
@@ -11962,7 +11971,7 @@ function isCancelled(error, signal) {
|
|
|
11962
11971
|
return error instanceof DOMException && error.name === "AbortError";
|
|
11963
11972
|
}
|
|
11964
11973
|
function isLegacyScorecardPage(page) {
|
|
11965
|
-
return page
|
|
11974
|
+
return isScoredPage(page) || page.state === "fetch-error";
|
|
11966
11975
|
}
|
|
11967
11976
|
function emptyCompleteCrawlError(rootUrl, finalRootUrl, pagesObserved) {
|
|
11968
11977
|
if (!finalRootUrl) return new Error(`Site audit could not successfully audit any of ${pagesObserved} observed page(s).`);
|
|
@@ -12110,7 +12119,8 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
12110
12119
|
}
|
|
12111
12120
|
};
|
|
12112
12121
|
const persistPage = (tx, page, now) => {
|
|
12113
|
-
const
|
|
12122
|
+
const versionOf = urlVersionOf(page);
|
|
12123
|
+
const audit = versionOf === null ? page.audit : null;
|
|
12114
12124
|
const canonicalNodeKey = page.canonicalUrl ? nodeKeyByUrl.get(page.canonicalUrl) ?? null : null;
|
|
12115
12125
|
const healthState = deriveSiteHealthState({
|
|
12116
12126
|
fetchState: page.state,
|
|
@@ -12147,6 +12157,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
12147
12157
|
indexabilityState: page.indexability.state,
|
|
12148
12158
|
indexabilityReasons: page.indexability.reasons,
|
|
12149
12159
|
healthState,
|
|
12160
|
+
urlVersionOf: versionOf,
|
|
12150
12161
|
auditState: pageAuditState(page),
|
|
12151
12162
|
auditScore: audit?.overallScore ?? null,
|
|
12152
12163
|
auditFields: audit ? crawlAuditFields(audit) : {},
|
|
@@ -12181,6 +12192,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
12181
12192
|
indexabilityState: page.indexability.state,
|
|
12182
12193
|
indexabilityReasons: page.indexability.reasons,
|
|
12183
12194
|
healthState,
|
|
12195
|
+
urlVersionOf: versionOf,
|
|
12184
12196
|
auditState: pageAuditState(page),
|
|
12185
12197
|
auditScore: audit?.overallScore ?? null,
|
|
12186
12198
|
auditFields: audit ? crawlAuditFields(audit) : {},
|
|
@@ -12353,8 +12365,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
12353
12365
|
onEvent: persistEvent
|
|
12354
12366
|
});
|
|
12355
12367
|
const crawlSummary = report.summary;
|
|
12356
|
-
|
|
12357
|
-
if (crawlSummary.complete && !hasAuditedPages) {
|
|
12368
|
+
if (crawlSummary.complete && crawlSummary.auditRollup.auditedPages === 0) {
|
|
12358
12369
|
throw emptyCompleteCrawlError(crawlSummary.rootUrl, crawlSummary.finalRootUrl, crawlSummary.pagesObserved);
|
|
12359
12370
|
}
|
|
12360
12371
|
const placementRulesetVersion = crawlSummary.linkPlacementRulesetVersion ?? null;
|
|
@@ -12379,7 +12390,11 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
12379
12390
|
rootUrl: crawlSummary.finalRootUrl ?? crawlSummary.rootUrl
|
|
12380
12391
|
}, { signal: opts.signal, timeoutMs: opts.graphLayoutTimeoutMs });
|
|
12381
12392
|
const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
12382
|
-
const
|
|
12393
|
+
const pageObservations = [...observedPages.values()].filter((page) => urlVersionOf(page) === null);
|
|
12394
|
+
const scoredPages = pageObservations.filter(isScoredPage);
|
|
12395
|
+
const pagesAudited = scoredPages.length;
|
|
12396
|
+
const aggregateScore = pagesAudited > 0 ? Math.round(scoredPages.reduce((total, page) => total + page.audit.overallScore, 0) / pagesAudited) : null;
|
|
12397
|
+
const factors = computeFactorAverages(pageObservations);
|
|
12383
12398
|
const errorCount = observedErrorCount(observedPages.values());
|
|
12384
12399
|
const terminalStatus = crawlSummary.complete ? "completed" : "partial";
|
|
12385
12400
|
const deadLinksChecked = opts.checkDeadLinks ? deadLinkCheckedCount(observedEdges.values(), observedPages.values()) : 0;
|
|
@@ -12387,8 +12402,8 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
12387
12402
|
const unverifiedLinks = report.deadLinks.unverified;
|
|
12388
12403
|
const deadLinksFound = deadLinkFindings.length;
|
|
12389
12404
|
const deadLinksUnverified = new Set(unverifiedLinks.map((finding) => finding.to)).size;
|
|
12390
|
-
const legacyIssues = factors.map((factor) => toLegacyIssue(factor,
|
|
12391
|
-
const issueEvidence = buildSiteCrawlIssueEvidence(crawlSummary.siteIssues,
|
|
12405
|
+
const legacyIssues = factors.map((factor) => toLegacyIssue(factor, pagesAudited)).filter((issue) => issue !== null);
|
|
12406
|
+
const issueEvidence = buildSiteCrawlIssueEvidence(crawlSummary.siteIssues, pageObservations);
|
|
12392
12407
|
try {
|
|
12393
12408
|
persistSiteCrawlGraphLayout(db, { projectId, runId, attemptId }, graphLayout, finishedAt);
|
|
12394
12409
|
} catch (error) {
|
|
@@ -12420,16 +12435,16 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
12420
12435
|
const published = db.transaction((tx) => {
|
|
12421
12436
|
const claim2 = tx.update(runs).set({ status: terminalStatus, finishedAt }).where(and14(eq18(runs.id, runId), eq18(runs.status, "running"))).run();
|
|
12422
12437
|
if (claim2.changes === 0) return false;
|
|
12423
|
-
if (
|
|
12438
|
+
if (aggregateScore !== null) {
|
|
12424
12439
|
tx.insert(siteAuditSnapshots).values({
|
|
12425
12440
|
id: crypto19.randomUUID(),
|
|
12426
12441
|
projectId,
|
|
12427
12442
|
runId,
|
|
12428
12443
|
sitemapUrl: opts.sitemapUrl ?? new URL("/sitemap.xml", crawlRootUrl).href,
|
|
12429
12444
|
auditedAt: crawlSummary.completedAt,
|
|
12430
|
-
aggregateScore
|
|
12445
|
+
aggregateScore,
|
|
12431
12446
|
pagesDiscovered: crawlSummary.pagesDiscovered,
|
|
12432
|
-
pagesAudited
|
|
12447
|
+
pagesAudited,
|
|
12433
12448
|
pagesSkipped: Math.max(0, crawlSummary.pagesDiscovered - crawlSummary.pagesObserved),
|
|
12434
12449
|
pagesErrored: errorCount,
|
|
12435
12450
|
factorAverages: factors,
|
|
@@ -12558,9 +12573,9 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
12558
12573
|
termination: crawlSummary.terminationReason,
|
|
12559
12574
|
pagesDiscovered: crawlSummary.pagesDiscovered,
|
|
12560
12575
|
pagesFetched: crawlSummary.pagesFetched,
|
|
12561
|
-
pagesAudited
|
|
12576
|
+
pagesAudited,
|
|
12562
12577
|
pagesErrored: errorCount,
|
|
12563
|
-
aggregateScore
|
|
12578
|
+
aggregateScore,
|
|
12564
12579
|
pageBudget: maxPages,
|
|
12565
12580
|
checkDeadLinks: opts.checkDeadLinks ?? false,
|
|
12566
12581
|
deadLinksFound
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registeredProviderNames
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ALXQPMYR.js";
|
|
4
4
|
import {
|
|
5
5
|
configExists,
|
|
6
6
|
loadConfigRaw
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3NOFNFGV.js";
|
|
8
8
|
|
|
9
9
|
// src/setup-state.ts
|
|
10
10
|
import fs from "fs";
|
|
@@ -28,7 +28,7 @@ async function buildSetupState() {
|
|
|
28
28
|
}
|
|
29
29
|
if (dbPath && fs.existsSync(dbPath)) {
|
|
30
30
|
try {
|
|
31
|
-
const { createClient, projects, queries: queriesTable } = await import("./src-
|
|
31
|
+
const { createClient, projects, queries: queriesTable } = await import("./src-6ZMVHPAY.js");
|
|
32
32
|
const db = createClient(dbPath);
|
|
33
33
|
project_count = db.select({ id: projects.id }).from(projects).all().length;
|
|
34
34
|
const firstQuery = db.select({ id: queriesTable.id }).from(queriesTable).limit(1).all();
|
|
@@ -47,7 +47,7 @@ function queueServeHandoff() {
|
|
|
47
47
|
async function runPendingServeHandoff(format) {
|
|
48
48
|
if (!pendingServeHandoff) return;
|
|
49
49
|
pendingServeHandoff = false;
|
|
50
|
-
const { serveCommand } = await import("./serve-
|
|
50
|
+
const { serveCommand } = await import("./serve-4X3LDV6K.js");
|
|
51
51
|
await serveCommand(format);
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createApiClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-T6IV35KG.js";
|
|
4
4
|
import {
|
|
5
5
|
emitJsonl
|
|
6
6
|
} from "./chunk-Z7IUAJOF.js";
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
formatMicros,
|
|
20
20
|
formatRunErrorOneLine,
|
|
21
21
|
resolveProviderInput
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-A3NSYJJL.js";
|
|
23
23
|
|
|
24
24
|
// src/commands/run.ts
|
|
25
25
|
function getClient() {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createApiClient
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-T6IV35KG.js";
|
|
4
|
+
import "./chunk-3NOFNFGV.js";
|
|
5
5
|
import "./chunk-AOJU5LKX.js";
|
|
6
6
|
import "./chunk-HGMYEDAQ.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-A3NSYJJL.js";
|
|
8
8
|
import "./chunk-MLKGABMK.js";
|
|
9
9
|
|
|
10
10
|
// src/commands/citations.ts
|