@canonry/canonry 7.43.2 → 7.44.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agent-workspace/skills/aero/references/agent-operations.md +9 -0
- package/assets/agent-workspace/skills/aero/references/site-health.md +12 -0
- package/assets/agent-workspace/skills/canonry/SKILL.md +9 -0
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +3 -0
- package/assets/assets/{AuditHistoryPanel-C5oZsvsR.js → AuditHistoryPanel-CvANw3ds.js} +1 -1
- package/assets/assets/{BacklinksPage-CF5sGSTQ.js → BacklinksPage-C6x9ELjk.js} +1 -1
- package/assets/assets/{HistoryPage-DumL6cl5.js → HistoryPage-r36HX1cC.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-DCegOp_w.js → MeasurementPropertyPage-ComoCzR4.js} +1 -1
- package/assets/assets/{ProjectPage-CWDk48Y6.js → ProjectPage-CIeU-buk.js} +1 -1
- package/assets/assets/{RunsPage-Bb1VMWYu.js → RunsPage-DI6eJATZ.js} +1 -1
- package/assets/assets/{SettingsPage-CHGh169l.js → SettingsPage-Bw7GdXxs.js} +1 -1
- package/assets/assets/{SiteHealthSection-bGzH9m9-.js → SiteHealthSection-C-JaNKpS.js} +3 -3
- package/assets/assets/{TrafficPage-cfnEZ2Mu.js → TrafficPage-Cnsp276v.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-BQS0MAXE.js → TrafficSourceDetailPage-CBIaJk7e.js} +1 -1
- package/assets/assets/{extract-error-message-IWhACkO_.js → extract-error-message-C_Owa0n9.js} +1 -1
- package/assets/assets/{index-BDY3-V1S.js → index-ZS9sSTMS.js} +20 -20
- package/assets/assets/{react-sigma_core.esm.min-BQt189AI.js → react-sigma_core.esm.min-ugyh-ooq.js} +1 -1
- package/assets/assets/{v2-overview-adapter-ZC3VuoTT.js → v2-overview-adapter-BLSrVQ7K.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-WU2BRWXY.js → chunk-3JVF3ULD.js} +5 -1
- package/dist/{chunk-WRUKKEGR.js → chunk-45Z5RJZW.js} +3 -3
- package/dist/{chunk-C2I7M3B2.js → chunk-57MGI2UT.js} +127 -9
- package/dist/{chunk-KOIOZ7QW.js → chunk-5LY7EG4U.js} +47 -3
- package/dist/{chunk-65BHDVYO.js → chunk-G47XJVAS.js} +830 -465
- package/dist/{chunk-E43JM3QV.js → chunk-GZ2KIONF.js} +92 -1
- package/dist/{chunk-BWR5MNL5.js → chunk-JVBI6VBT.js} +2 -2
- package/dist/{chunk-WXX3NL4C.js → chunk-LK7O7RM6.js} +62 -19
- package/dist/{chunk-LYKDNJXR.js → chunk-MPWBFKGK.js} +44 -1
- package/dist/{chunk-BPFRGC7K.js → chunk-SW54HXSZ.js} +3 -3
- package/dist/{cli-catalog-J3O6W726.js → cli-catalog-PNJEQV5H.js} +3 -3
- package/dist/cli-commands-D3JIQ2ID.js +15 -0
- package/dist/cli.js +10 -10
- package/dist/{demo-server-KA7DWTY6.js → demo-server-WRHR25HF.js} +4 -4
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-LHZZTJPH.js → intelligence-service-QXXRUB2G.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +10 -10
- package/dist/cli-commands-QST2CPDG.js +0 -15
|
@@ -7505,7 +7505,9 @@ var siteCrawlAuditFactorSchema = siteAuditPageFactorSchema.extend({
|
|
|
7505
7505
|
/** `null` means the engine did not explicitly classify applicability. */
|
|
7506
7506
|
applicable: z15.boolean().nullable(),
|
|
7507
7507
|
findings: z15.array(siteCrawlAuditFindingSchema).default([]),
|
|
7508
|
-
recommendations: z15.array(z15.string()).default([])
|
|
7508
|
+
recommendations: z15.array(z15.string()).default([]),
|
|
7509
|
+
/** Optional review advice, also present in recommendations; absent on older evidence. */
|
|
7510
|
+
advisoryRecommendations: z15.array(z15.string()).optional()
|
|
7509
7511
|
});
|
|
7510
7512
|
var siteCrawlCriticalDefectSchema = z15.object({
|
|
7511
7513
|
id: z15.string().min(1),
|
|
@@ -8049,6 +8051,86 @@ var siteAuditLivePageHealthSchema = z15.object({
|
|
|
8049
8051
|
updatedAt: z15.string().nullable(),
|
|
8050
8052
|
examples: z15.array(siteAuditLivePageHealthExampleSchema).max(12).default([])
|
|
8051
8053
|
});
|
|
8054
|
+
var siteCrawlIssueEvidenceSchema = z15.object({
|
|
8055
|
+
schemaVersion: z15.literal("1.0"),
|
|
8056
|
+
groupIdentityVersion: z15.literal("duplicate-metadata-v1"),
|
|
8057
|
+
siteIssues: z15.array(z15.object({
|
|
8058
|
+
/** Null preserves unfamiliar evidence without inventing cross-run identity. */
|
|
8059
|
+
key: z15.string().min(1).nullable(),
|
|
8060
|
+
code: z15.string().min(1),
|
|
8061
|
+
message: z15.string(),
|
|
8062
|
+
affectedUrls: z15.array(z15.string().min(1))
|
|
8063
|
+
}))
|
|
8064
|
+
});
|
|
8065
|
+
var SITE_AUDIT_ISSUES_DEFAULT_LIMIT = 25;
|
|
8066
|
+
var SITE_AUDIT_ISSUES_MAX_LIMIT = 100;
|
|
8067
|
+
var siteAuditIssueListQuerySchema = z15.object({
|
|
8068
|
+
runId: z15.string().min(1).max(128).optional(),
|
|
8069
|
+
cursor: z15.string().min(1).max(2048).optional(),
|
|
8070
|
+
limit: z15.number().int().min(1).max(SITE_AUDIT_ISSUES_MAX_LIMIT).optional()
|
|
8071
|
+
}).strict();
|
|
8072
|
+
var siteAuditIssueDispositionSchema = z15.enum(["actionable", "advisory", "unverified", "informational"]);
|
|
8073
|
+
var SiteAuditIssueRecommendationScopes = { factor: "factor", issue: "issue", none: "none" };
|
|
8074
|
+
var siteAuditIssuePageSchema = z15.object({
|
|
8075
|
+
nodeKey: z15.string().nullable(),
|
|
8076
|
+
url: z15.string(),
|
|
8077
|
+
message: z15.string().max(400),
|
|
8078
|
+
messageTruncated: z15.boolean(),
|
|
8079
|
+
/** Scope identifies whole-factor guidance versus the critical defect's own recommendation. */
|
|
8080
|
+
recommendations: z15.array(z15.string().max(400)).max(3),
|
|
8081
|
+
recommendationsScope: z15.enum(["factor", "issue", "none"]),
|
|
8082
|
+
recommendationsTruncated: z15.boolean()
|
|
8083
|
+
});
|
|
8084
|
+
var siteAuditIssueSchema = z15.object({
|
|
8085
|
+
id: z15.string(),
|
|
8086
|
+
stableIdentity: z15.boolean(),
|
|
8087
|
+
code: z15.string(),
|
|
8088
|
+
source: z15.enum(["page-finding", "cross-page", "critical-defect"]),
|
|
8089
|
+
/** Independent critical-defect severity; page findings do not invent a severity from scores. */
|
|
8090
|
+
severity: z15.enum(["critical", "warning"]).nullable(),
|
|
8091
|
+
factorId: z15.string().nullable(),
|
|
8092
|
+
findingType: siteCrawlAuditFindingSchema.shape.type,
|
|
8093
|
+
/** Prioritization hint, not a score penalty, permission to edit, or proof of ranking impact. */
|
|
8094
|
+
disposition: siteAuditIssueDispositionSchema,
|
|
8095
|
+
message: z15.string().max(400),
|
|
8096
|
+
messageTruncated: z15.boolean(),
|
|
8097
|
+
affectedPages: z15.number().int().nonnegative(),
|
|
8098
|
+
examples: z15.array(siteAuditIssuePageSchema).max(3),
|
|
8099
|
+
examplesTruncated: z15.boolean()
|
|
8100
|
+
});
|
|
8101
|
+
var siteAuditIssueCoverageSchema = z15.object({
|
|
8102
|
+
pageFindings: z15.enum(["available", "partial", "unavailable"]),
|
|
8103
|
+
crossPage: z15.enum(["available", "unavailable"]),
|
|
8104
|
+
/** Pages with a stored score or a versioned audit-evidence envelope. */
|
|
8105
|
+
auditedPages: z15.number().int().nonnegative(),
|
|
8106
|
+
pagesWithFindingEvidence: z15.number().int().nonnegative(),
|
|
8107
|
+
pagesWithoutFindingEvidence: z15.number().int().nonnegative(),
|
|
8108
|
+
/** Malformed or uncoded records omitted from grouping; positive values preclude a clean verdict. */
|
|
8109
|
+
omittedFindings: z15.number().int().nonnegative()
|
|
8110
|
+
});
|
|
8111
|
+
var siteAuditIssueProvenanceSchema = z15.object({
|
|
8112
|
+
project: z15.string(),
|
|
8113
|
+
runId: z15.string().nullable(),
|
|
8114
|
+
attemptId: z15.string().nullable(),
|
|
8115
|
+
/** Stored observation time, never the time of this read. */
|
|
8116
|
+
auditedAt: z15.string().nullable(),
|
|
8117
|
+
runStatus: nullableRunStatusSchema,
|
|
8118
|
+
complete: z15.boolean(),
|
|
8119
|
+
termination: z15.string().nullable(),
|
|
8120
|
+
runSelection: siteAuditRunSelectionSchema.optional(),
|
|
8121
|
+
state: z15.enum(["no-crawl", "unavailable", "partial", "available"]),
|
|
8122
|
+
coverage: siteAuditIssueCoverageSchema,
|
|
8123
|
+
/** Exact groups/members among retained evidence. Null means no usable evidence was retained. */
|
|
8124
|
+
total: z15.number().int().nonnegative().nullable(),
|
|
8125
|
+
nextCursor: z15.string().nullable()
|
|
8126
|
+
});
|
|
8127
|
+
var siteAuditIssuesResponseSchema = siteAuditIssueProvenanceSchema.extend({
|
|
8128
|
+
issues: z15.array(siteAuditIssueSchema).max(SITE_AUDIT_ISSUES_MAX_LIMIT)
|
|
8129
|
+
});
|
|
8130
|
+
var siteAuditIssuePagesResponseSchema = siteAuditIssueProvenanceSchema.extend({
|
|
8131
|
+
issueId: z15.string(),
|
|
8132
|
+
pages: z15.array(siteAuditIssuePageSchema).max(SITE_AUDIT_ISSUES_MAX_LIMIT)
|
|
8133
|
+
});
|
|
8052
8134
|
|
|
8053
8135
|
// ../contracts/src/answer-prose.ts
|
|
8054
8136
|
var TOP_LEVEL_DOMAINS = new Set(tlds_default2.map((tld) => tld.toLowerCase()));
|
|
@@ -12656,6 +12738,8 @@ var STORED_READ_OPERATIONS = /* @__PURE__ */ new Set([
|
|
|
12656
12738
|
"GET /api/v1/projects/{name}/technical-aeo/graph",
|
|
12657
12739
|
"GET /api/v1/projects/{name}/technical-aeo/crawl/pages",
|
|
12658
12740
|
"GET /api/v1/projects/{name}/technical-aeo/crawl/pages/audit",
|
|
12741
|
+
"GET /api/v1/projects/{name}/technical-aeo/issues",
|
|
12742
|
+
"GET /api/v1/projects/{name}/technical-aeo/issues/{issueId}/pages",
|
|
12659
12743
|
"GET /api/v1/projects/{name}/technical-aeo/structure",
|
|
12660
12744
|
"GET /api/v1/projects/{name}/technical-aeo/internal-links",
|
|
12661
12745
|
"GET /api/v1/projects/{name}/technical-aeo/internal-links/neighbors",
|
|
@@ -24264,6 +24348,7 @@ export {
|
|
|
24264
24348
|
templateLinkDetection,
|
|
24265
24349
|
classifyTemplateLinkEdge,
|
|
24266
24350
|
templateLinkSource,
|
|
24351
|
+
siteCrawlAuditFindingSchema,
|
|
24267
24352
|
siteCrawlAuditFactorSchema,
|
|
24268
24353
|
siteCrawlCriticalDefectSchema,
|
|
24269
24354
|
siteCrawlPageAuditSchema,
|
|
@@ -24303,6 +24388,12 @@ export {
|
|
|
24303
24388
|
SITE_HEALTH_SCANS_MAX_LIMIT,
|
|
24304
24389
|
siteAuditRunProgressSchema,
|
|
24305
24390
|
siteAuditLivePageHealthSchema,
|
|
24391
|
+
siteCrawlIssueEvidenceSchema,
|
|
24392
|
+
SITE_AUDIT_ISSUES_DEFAULT_LIMIT,
|
|
24393
|
+
siteAuditIssueListQuerySchema,
|
|
24394
|
+
SiteAuditIssueRecommendationScopes,
|
|
24395
|
+
siteAuditIssuesResponseSchema,
|
|
24396
|
+
siteAuditIssuePagesResponseSchema,
|
|
24306
24397
|
answerProseForMentions,
|
|
24307
24398
|
MIN_DOMAIN_BRAND_KEY_LENGTH,
|
|
24308
24399
|
MIN_BRAND_ALIAS_KEY_LENGTH,
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
siteCrawlGraphNodes,
|
|
6
6
|
siteCrawlPages,
|
|
7
7
|
siteCrawlSnapshots
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-G47XJVAS.js";
|
|
9
9
|
import {
|
|
10
10
|
SITE_CRAWL_GRAPH_MAX_EDGES,
|
|
11
11
|
SITE_CRAWL_GRAPH_MAX_NODES,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
factorStatusFromDistribution,
|
|
16
16
|
factorStatusFromScore,
|
|
17
17
|
roundPreservingTotal
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-GZ2KIONF.js";
|
|
19
19
|
|
|
20
20
|
// src/site-audit-factors.ts
|
|
21
21
|
function recordedSharePct(factor) {
|
|
@@ -21,19 +21,19 @@ import {
|
|
|
21
21
|
saveConfig,
|
|
22
22
|
saveConfigPatch,
|
|
23
23
|
sentimentInstallReadiness
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-5LY7EG4U.js";
|
|
25
25
|
import {
|
|
26
26
|
computeFactorAverages,
|
|
27
27
|
deleteSiteCrawlGraphLayout,
|
|
28
28
|
persistSiteCrawlGraphLayout,
|
|
29
29
|
prepareSiteCrawlGraphLayout,
|
|
30
30
|
recordedSharePct
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-JVBI6VBT.js";
|
|
32
32
|
import {
|
|
33
33
|
CanonryMcpToolNames,
|
|
34
34
|
PACKAGE_VERSION,
|
|
35
35
|
canonryMcpTools
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-MPWBFKGK.js";
|
|
37
37
|
import {
|
|
38
38
|
CliError
|
|
39
39
|
} from "./chunk-HGMYEDAQ.js";
|
|
@@ -240,7 +240,7 @@ import {
|
|
|
240
240
|
webhookResponseReason,
|
|
241
241
|
webhookTargetRefusalReason,
|
|
242
242
|
writeAuditLog
|
|
243
|
-
} from "./chunk-
|
|
243
|
+
} from "./chunk-G47XJVAS.js";
|
|
244
244
|
import {
|
|
245
245
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
246
246
|
AGENT_NONE,
|
|
@@ -487,7 +487,7 @@ import {
|
|
|
487
487
|
winnabilityClassLabel,
|
|
488
488
|
withRetry,
|
|
489
489
|
withSkippedProviders
|
|
490
|
-
} from "./chunk-
|
|
490
|
+
} from "./chunk-GZ2KIONF.js";
|
|
491
491
|
|
|
492
492
|
// src/runtime-context.ts
|
|
493
493
|
function cliRuntimeContext(env = process.env, stdio = process) {
|
|
@@ -4812,6 +4812,7 @@ function listModels(config, signal) {
|
|
|
4812
4812
|
}
|
|
4813
4813
|
|
|
4814
4814
|
// ../provider-gemini/src/adapter.ts
|
|
4815
|
+
import { FinishReason } from "@google/genai";
|
|
4815
4816
|
function toGeminiConfig(config) {
|
|
4816
4817
|
return {
|
|
4817
4818
|
apiKey: config.apiKey ?? "",
|
|
@@ -4840,17 +4841,27 @@ function toRawQueryResult(raw) {
|
|
|
4840
4841
|
servedModel: raw.servedModel,
|
|
4841
4842
|
groundingSources: raw.groundingSources,
|
|
4842
4843
|
searchQueries: raw.searchQueries,
|
|
4843
|
-
|
|
4844
|
-
// marker is present on 100% of stored rows, so it has never been shown to
|
|
4845
|
-
// discriminate a non-retrieving answer and wiring it up would hardcode
|
|
4846
|
-
// `used`. `unknown` states what we actually know. The contract is a
|
|
4847
|
-
// declaration about how we build the request, so it is always knowable.
|
|
4848
|
-
retrievalStatus: "unknown",
|
|
4844
|
+
retrievalStatus: readRetrievalStatus(raw.rawResponse),
|
|
4849
4845
|
retrievalContract: "native-auto-v1",
|
|
4850
4846
|
usage: raw.usage,
|
|
4851
4847
|
stopReason: raw.stopReason
|
|
4852
4848
|
};
|
|
4853
4849
|
}
|
|
4850
|
+
function readRetrievalStatus(rawResponse) {
|
|
4851
|
+
const response = rawResponse;
|
|
4852
|
+
if (usageCount(response.usageMetadata?.toolUsePromptTokenCount) > 0) return RetrievalStatuses.used;
|
|
4853
|
+
const candidate = Array.isArray(response.candidates) ? response.candidates[0] : void 0;
|
|
4854
|
+
if (!candidate) return RetrievalStatuses.unknown;
|
|
4855
|
+
const metadata2 = candidate.groundingMetadata;
|
|
4856
|
+
const queries2 = metadata2?.webSearchQueries;
|
|
4857
|
+
const chunks = metadata2?.groundingChunks;
|
|
4858
|
+
if (Array.isArray(queries2) && queries2.some((query) => typeof query === "string" && query.trim().length > 0) || Array.isArray(chunks) && chunks.some((chunk) => typeof chunk.web?.uri === "string" && chunk.web.uri.trim().length > 0)) {
|
|
4859
|
+
return RetrievalStatuses.used;
|
|
4860
|
+
}
|
|
4861
|
+
const parts = candidate.content?.parts;
|
|
4862
|
+
const hasAnswer = Array.isArray(parts) && parts.some((part) => !part.thought && typeof part.text === "string" && part.text.trim().length > 0);
|
|
4863
|
+
return candidate.finishReason === FinishReason.STOP && hasAnswer ? RetrievalStatuses["not-used"] : RetrievalStatuses.unknown;
|
|
4864
|
+
}
|
|
4854
4865
|
var geminiAdapter = {
|
|
4855
4866
|
name: "gemini",
|
|
4856
4867
|
displayName: "Gemini",
|
|
@@ -4923,7 +4934,7 @@ var geminiAdapter = {
|
|
|
4923
4934
|
citedDomains: normalized.citedDomains,
|
|
4924
4935
|
groundingSources: normalized.groundingSources,
|
|
4925
4936
|
searchQueries: normalized.searchQueries,
|
|
4926
|
-
retrievalStatus:
|
|
4937
|
+
retrievalStatus: readRetrievalStatus(raw.rawResponse)
|
|
4927
4938
|
};
|
|
4928
4939
|
},
|
|
4929
4940
|
async generateText(prompt, config) {
|
|
@@ -8357,7 +8368,7 @@ function nonBlank(value) {
|
|
|
8357
8368
|
return trimmed ? trimmed : void 0;
|
|
8358
8369
|
}
|
|
8359
8370
|
function resolveBuildCommit(env = process.env) {
|
|
8360
|
-
const embedded = true ? "
|
|
8371
|
+
const embedded = true ? "e030cb7a90ea9f96ff105df0274d1490664614f1" : void 0;
|
|
8361
8372
|
return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
|
|
8362
8373
|
}
|
|
8363
8374
|
function resolveInstanceIdentity(env = process.env) {
|
|
@@ -14421,6 +14432,31 @@ function classifySiteCrawlTemplateLinks(db, scope, pagesFetched, placementRulese
|
|
|
14421
14432
|
};
|
|
14422
14433
|
}
|
|
14423
14434
|
|
|
14435
|
+
// src/site-audit-issues.ts
|
|
14436
|
+
import { createHash as createHash4 } from "crypto";
|
|
14437
|
+
var GROUP_IDENTITY_VERSION = "duplicate-metadata-v1";
|
|
14438
|
+
function buildSiteCrawlIssueEvidence(siteIssues, pages) {
|
|
14439
|
+
if (siteIssues === void 0) return null;
|
|
14440
|
+
const metadataByUrl = /* @__PURE__ */ new Map();
|
|
14441
|
+
if (siteIssues.length > 0) {
|
|
14442
|
+
for (const page of pages) {
|
|
14443
|
+
if (page.state === "html" && page.indexability.state === "indexable" && page.finalUrl && page.audit) {
|
|
14444
|
+
metadataByUrl.set(page.finalUrl, page.audit.metadata);
|
|
14445
|
+
}
|
|
14446
|
+
}
|
|
14447
|
+
}
|
|
14448
|
+
const groups = siteIssues.map((issue) => {
|
|
14449
|
+
const affectedUrls = [...new Set(issue.affectedUrls)].sort();
|
|
14450
|
+
const field = issue.code === "site.duplicate-title" ? "pageTitle" : issue.code === "site.duplicate-meta-description" ? "metaDescription" : null;
|
|
14451
|
+
const values = field ? affectedUrls.map((url) => metadataByUrl.get(url)?.[field]?.trim()) : [];
|
|
14452
|
+
const value = values[0];
|
|
14453
|
+
const key = value && values.every((candidate) => candidate === value) ? `site-issue:${createHash4("sha256").update(JSON.stringify([GROUP_IDENTITY_VERSION, issue.code, value])).digest("hex")}` : null;
|
|
14454
|
+
return { key, code: issue.code, message: issue.message, affectedUrls };
|
|
14455
|
+
});
|
|
14456
|
+
groups.sort((left, right) => left.code.localeCompare(right.code) || (left.key ?? "").localeCompare(right.key ?? "") || JSON.stringify(left.affectedUrls).localeCompare(JSON.stringify(right.affectedUrls)));
|
|
14457
|
+
return { schemaVersion: "1.0", groupIdentityVersion: GROUP_IDENTITY_VERSION, siteIssues: groups };
|
|
14458
|
+
}
|
|
14459
|
+
|
|
14424
14460
|
// src/execute-site-audit.ts
|
|
14425
14461
|
var log14 = createLogger("SiteAudit");
|
|
14426
14462
|
var SiteAuditCancelledError = class extends Error {
|
|
@@ -14461,7 +14497,8 @@ function toCrawlAuditFactor(factor) {
|
|
|
14461
14497
|
status: factorStatusFromScore(factor.score),
|
|
14462
14498
|
applicable: factor.applicable ?? null,
|
|
14463
14499
|
findings: factor.findings,
|
|
14464
|
-
recommendations: factor.recommendations
|
|
14500
|
+
recommendations: factor.recommendations,
|
|
14501
|
+
...factor.advisoryRecommendations === void 0 ? {} : { advisoryRecommendations: factor.advisoryRecommendations }
|
|
14465
14502
|
};
|
|
14466
14503
|
}
|
|
14467
14504
|
function crawlAuditFields(audit) {
|
|
@@ -14929,6 +14966,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
14929
14966
|
const deadLinksFound = deadLinkFindings.length;
|
|
14930
14967
|
const deadLinksUnverified = new Set(unverifiedLinks.map((finding) => finding.to)).size;
|
|
14931
14968
|
const legacyIssues = factors.map((factor) => toLegacyIssue(factor, crawlSummary.auditRollup.auditedPages)).filter((issue) => issue !== null);
|
|
14969
|
+
const issueEvidence = buildSiteCrawlIssueEvidence(crawlSummary.siteIssues, observedPages.values());
|
|
14932
14970
|
try {
|
|
14933
14971
|
persistSiteCrawlGraphLayout(db, { projectId, runId, attemptId }, graphLayout, finishedAt);
|
|
14934
14972
|
} catch (error) {
|
|
@@ -15027,6 +15065,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
15027
15065
|
pagesErrored: errorCount,
|
|
15028
15066
|
edgesDiscovered: crawlSummary.edgesObserved,
|
|
15029
15067
|
findingsCount: deadLinksFound,
|
|
15068
|
+
issueEvidence,
|
|
15030
15069
|
deadLinkState: report.deadLinks.state,
|
|
15031
15070
|
deadLinksChecked,
|
|
15032
15071
|
deadLinksFound,
|
|
@@ -15506,6 +15545,10 @@ function resolveModelForCapability(provider, capability, modelIdOverride) {
|
|
|
15506
15545
|
const baseUrl = base.endsWith("/v1beta") ? base : `${base}/v1beta`;
|
|
15507
15546
|
return { ...model, baseUrl };
|
|
15508
15547
|
}
|
|
15548
|
+
if (provider === AgentProviderIds.zai && process.env.ZAI_BASE_URL) {
|
|
15549
|
+
const baseUrl = process.env.ZAI_BASE_URL.replace(/\/+$/, "");
|
|
15550
|
+
return { ...model, baseUrl };
|
|
15551
|
+
}
|
|
15509
15552
|
return model;
|
|
15510
15553
|
}
|
|
15511
15554
|
function isAgentModelAvailable(provider, id) {
|
|
@@ -15700,7 +15743,7 @@ import { Type as Type3 } from "@earendil-works/pi-ai";
|
|
|
15700
15743
|
|
|
15701
15744
|
// src/agent/mcp-to-agent-tool.ts
|
|
15702
15745
|
import { Type as Type2 } from "@earendil-works/pi-ai";
|
|
15703
|
-
import { createHash as
|
|
15746
|
+
import { createHash as createHash5, randomUUID as randomUUID2 } from "crypto";
|
|
15704
15747
|
|
|
15705
15748
|
// src/agent/tool-result-units.ts
|
|
15706
15749
|
var SUCCESS_STATUSES = ["200", "201", "202"];
|
|
@@ -16179,7 +16222,7 @@ function hasOtherLists(value, primary) {
|
|
|
16179
16222
|
}
|
|
16180
16223
|
function projectionPath(path11) {
|
|
16181
16224
|
if (path11.length <= MAX_SUMMARY_PATH_CHARS) return path11;
|
|
16182
|
-
const digest =
|
|
16225
|
+
const digest = createHash5("sha256").update(path11).digest("hex").slice(0, 12);
|
|
16183
16226
|
return `${truncateUtf16(path11, 48)}...#${digest}${path11.slice(-24)}`;
|
|
16184
16227
|
}
|
|
16185
16228
|
function boundedProjection(full, partialRows, reserve = 0) {
|
|
@@ -17901,7 +17944,7 @@ function assertProviderReloadKeepsPendingBatches(db, previous, next, executing =
|
|
|
17901
17944
|
}
|
|
17902
17945
|
|
|
17903
17946
|
// src/provider-model-catalog.ts
|
|
17904
|
-
import { createHash as
|
|
17947
|
+
import { createHash as createHash6 } from "crypto";
|
|
17905
17948
|
var TTL_MS = 60 * 60 * 1e3;
|
|
17906
17949
|
var RETRY_MS = 60 * 1e3;
|
|
17907
17950
|
var TIMEOUT_MS3 = 3e3;
|
|
@@ -17915,7 +17958,7 @@ function createProviderModelCatalog(registry) {
|
|
|
17915
17958
|
}
|
|
17916
17959
|
const fallback = provider.adapter.modelRegistry.knownModels;
|
|
17917
17960
|
if (!provider.adapter.listModels) return fallback;
|
|
17918
|
-
const identity =
|
|
17961
|
+
const identity = createHash6("sha256").update(JSON.stringify(provider.config)).digest("hex");
|
|
17919
17962
|
let entry = cache.get(name);
|
|
17920
17963
|
if (entry?.identity !== identity) {
|
|
17921
17964
|
entry = { identity, expiresAt: 0 };
|
|
@@ -17954,7 +17997,7 @@ function createProviderModelCatalog(registry) {
|
|
|
17954
17997
|
const provider = registry.get(name);
|
|
17955
17998
|
if (!provider) return [];
|
|
17956
17999
|
const entry = cache.get(name);
|
|
17957
|
-
const identity =
|
|
18000
|
+
const identity = createHash6("sha256").update(JSON.stringify(provider.config)).digest("hex");
|
|
17958
18001
|
return (entry?.identity === identity ? entry.models : void 0) ?? provider.adapter.modelRegistry.knownModels;
|
|
17959
18002
|
};
|
|
17960
18003
|
return Object.assign(read, { cached: cached2 });
|
|
@@ -147,6 +147,9 @@ import {
|
|
|
147
147
|
sentimentSummaryIncludeSchema,
|
|
148
148
|
sentimentSummaryReadSchema,
|
|
149
149
|
settingsDtoSchema,
|
|
150
|
+
siteAuditIssueListQuerySchema,
|
|
151
|
+
siteAuditIssuePagesResponseSchema,
|
|
152
|
+
siteAuditIssuesResponseSchema,
|
|
150
153
|
siteAuditPageBudgetSchema,
|
|
151
154
|
snapshotRequestInputSchema,
|
|
152
155
|
telemetryStatusDtoSchema,
|
|
@@ -159,7 +162,7 @@ import {
|
|
|
159
162
|
trafficSeriesGranularitySchema,
|
|
160
163
|
visibilityCompareSelectionSchema,
|
|
161
164
|
visibilityReportRequestSchema
|
|
162
|
-
} from "./chunk-
|
|
165
|
+
} from "./chunk-GZ2KIONF.js";
|
|
163
166
|
|
|
164
167
|
// src/package-version.ts
|
|
165
168
|
import { createRequire } from "module";
|
|
@@ -1106,6 +1109,14 @@ var technicalAeoCrawlInputSchema = z3.object({
|
|
|
1106
1109
|
runId: crawlRunIdSchema,
|
|
1107
1110
|
date: calendarDateSchema.optional().describe("Exact UTC scan date YYYY-MM-DD, mutually exclusive with runId. A dated no-data result may include availableScanDates. When the user omitted the year, resolve it from matchingMonthDayDates and request that exact returned date before concluding the scan is missing. Never silently select another date.")
|
|
1108
1111
|
});
|
|
1112
|
+
var siteHealthIssuesInputSchema = siteAuditIssueListQuerySchema.extend({
|
|
1113
|
+
project: projectNameSchema,
|
|
1114
|
+
runId: siteAuditIssueListQuerySchema.shape.runId.describe("Select an exact saved scan. Omit for the default scan; use its returned runId for subsequent pages and issue details."),
|
|
1115
|
+
cursor: siteAuditIssueListQuerySchema.shape.cursor.describe("Opaque nextCursor from this same scan and issue feed.")
|
|
1116
|
+
});
|
|
1117
|
+
var siteHealthIssuePagesInputSchema = siteHealthIssuesInputSchema.extend({
|
|
1118
|
+
issueId: z3.string().min(1).describe("Exact issue ID from canonry_site_health_issues. Keep the returned runId when inspecting affected pages.")
|
|
1119
|
+
});
|
|
1109
1120
|
var siteHealthPageAuditInputSchema = z3.object({
|
|
1110
1121
|
project: projectNameSchema,
|
|
1111
1122
|
runId: crawlRunIdSchema,
|
|
@@ -3773,6 +3784,38 @@ var rawCanonryMcpTools = [
|
|
|
3773
3784
|
openApiOperations: ["GET /api/v1/projects/{name}/technical-aeo/crawl"],
|
|
3774
3785
|
handler: (client, input) => client.getTechnicalAeoCrawl(input.project, { runId: input.runId, date: input.date })
|
|
3775
3786
|
}),
|
|
3787
|
+
defineTool({
|
|
3788
|
+
name: "canonry_site_health_issues",
|
|
3789
|
+
title: "List stored Site Health issues",
|
|
3790
|
+
description: "Read paginated finding groups from a saved audit, including duplicate metadata and critical defects regardless of aggregate score. Never starts a crawl. Preserve scan date, run/attempt identity, coverage and partial/unavailable states: an empty result does not prove the site is clean. Disposition separates actionable findings, advisory guidance, unverified checks and information; severity retains the recorded critical-defect level. recommendationsScope distinguishes issue-specific defect guidance from whole-factor advice. stableIdentity=false means the ID cannot establish continuity across scans. Follow nextCursor with the returned runId, or inspect one issue with canonry_site_health_issue_pages.",
|
|
3791
|
+
access: "read",
|
|
3792
|
+
tier: "monitoring",
|
|
3793
|
+
inputSchema: siteHealthIssuesInputSchema,
|
|
3794
|
+
outputSchema: siteAuditIssuesResponseSchema,
|
|
3795
|
+
annotations: readAnnotations(),
|
|
3796
|
+
openApiOperations: ["GET /api/v1/projects/{name}/technical-aeo/issues"],
|
|
3797
|
+
handler: (client, input) => client.getSiteAuditIssues(input.project, {
|
|
3798
|
+
runId: input.runId,
|
|
3799
|
+
cursor: input.cursor,
|
|
3800
|
+
limit: input.limit
|
|
3801
|
+
})
|
|
3802
|
+
}),
|
|
3803
|
+
defineTool({
|
|
3804
|
+
name: "canonry_site_health_issue_pages",
|
|
3805
|
+
title: "Read pages affected by a saved audit issue",
|
|
3806
|
+
description: "Read paginated affected URLs and saved messages for one issue in the selected audit. Use the issue ID and runId from canonry_site_health_issues; continue with nextCursor without changing the selection. Null node keys and unavailable/partial coverage remain explicit. recommendationsScope identifies issue-specific defect guidance or broader factor advice; do not present factor advice as an exact fix for this finding. This stored read never crawls, changes content or authorizes edits.",
|
|
3807
|
+
access: "read",
|
|
3808
|
+
tier: "monitoring",
|
|
3809
|
+
inputSchema: siteHealthIssuePagesInputSchema,
|
|
3810
|
+
outputSchema: siteAuditIssuePagesResponseSchema,
|
|
3811
|
+
annotations: readAnnotations(),
|
|
3812
|
+
openApiOperations: ["GET /api/v1/projects/{name}/technical-aeo/issues/{issueId}/pages"],
|
|
3813
|
+
handler: (client, input) => client.getSiteAuditIssuePages(input.project, input.issueId, {
|
|
3814
|
+
runId: input.runId,
|
|
3815
|
+
cursor: input.cursor,
|
|
3816
|
+
limit: input.limit
|
|
3817
|
+
})
|
|
3818
|
+
}),
|
|
3776
3819
|
defineTool({
|
|
3777
3820
|
name: "canonry_site_health_page_audit",
|
|
3778
3821
|
title: "Get Site Health page audit",
|
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
installSkills,
|
|
5
5
|
loadConfigRaw,
|
|
6
6
|
saveConfigPatch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-5LY7EG4U.js";
|
|
8
8
|
import {
|
|
9
9
|
PACKAGE_VERSION
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-MPWBFKGK.js";
|
|
11
11
|
import {
|
|
12
12
|
SKILL_MANIFEST_FILENAME,
|
|
13
13
|
SkillsClients
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-GZ2KIONF.js";
|
|
15
15
|
|
|
16
16
|
// src/skills-autosync.ts
|
|
17
17
|
import fs from "fs";
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
buildCliCatalog,
|
|
4
4
|
printCliCatalog,
|
|
5
5
|
renderTopLevelHelp
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-45Z5RJZW.js";
|
|
7
|
+
import "./chunk-3JVF3ULD.js";
|
|
8
8
|
import "./chunk-HGMYEDAQ.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-GZ2KIONF.js";
|
|
10
10
|
export {
|
|
11
11
|
CLI_ROOT_SUMMARIES,
|
|
12
12
|
buildCliCatalog,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
REGISTERED_CLI_COMMANDS
|
|
3
|
+
} from "./chunk-57MGI2UT.js";
|
|
4
|
+
import "./chunk-LK7O7RM6.js";
|
|
5
|
+
import "./chunk-5LY7EG4U.js";
|
|
6
|
+
import "./chunk-3JVF3ULD.js";
|
|
7
|
+
import "./chunk-RB2F4D3Z.js";
|
|
8
|
+
import "./chunk-JVBI6VBT.js";
|
|
9
|
+
import "./chunk-MPWBFKGK.js";
|
|
10
|
+
import "./chunk-HGMYEDAQ.js";
|
|
11
|
+
import "./chunk-G47XJVAS.js";
|
|
12
|
+
import "./chunk-GZ2KIONF.js";
|
|
13
|
+
export {
|
|
14
|
+
REGISTERED_CLI_COMMANDS
|
|
15
|
+
};
|
package/dist/cli.js
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
import {
|
|
3
3
|
autoSyncSkills,
|
|
4
4
|
formatAutoSyncNotice
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-SW54HXSZ.js";
|
|
6
6
|
import {
|
|
7
7
|
accessFilterFromArgs,
|
|
8
8
|
dispatchRegisteredCommand,
|
|
9
9
|
printCliCatalog
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-45Z5RJZW.js";
|
|
11
11
|
import {
|
|
12
12
|
REGISTERED_CLI_COMMANDS,
|
|
13
13
|
buildSetupState,
|
|
14
14
|
consumePendingServeHandoff,
|
|
15
15
|
serveCommand
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-57MGI2UT.js";
|
|
17
17
|
import {
|
|
18
18
|
checkLatestVersionForCli,
|
|
19
19
|
cliRuntimeContext,
|
|
@@ -27,14 +27,14 @@ import {
|
|
|
27
27
|
showFirstRunNotice,
|
|
28
28
|
trackCliCommandFinished,
|
|
29
29
|
trackEvent
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-LK7O7RM6.js";
|
|
31
|
+
import "./chunk-5LY7EG4U.js";
|
|
32
32
|
import {
|
|
33
33
|
resolveCliAccess
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-3JVF3ULD.js";
|
|
35
35
|
import "./chunk-RB2F4D3Z.js";
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-JVBI6VBT.js";
|
|
37
|
+
import "./chunk-MPWBFKGK.js";
|
|
38
38
|
import {
|
|
39
39
|
CliError,
|
|
40
40
|
EXIT_SYSTEM_ERROR,
|
|
@@ -42,10 +42,10 @@ import {
|
|
|
42
42
|
printCliError,
|
|
43
43
|
usageError
|
|
44
44
|
} from "./chunk-HGMYEDAQ.js";
|
|
45
|
-
import "./chunk-
|
|
45
|
+
import "./chunk-G47XJVAS.js";
|
|
46
46
|
import {
|
|
47
47
|
OperationAccesses
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-GZ2KIONF.js";
|
|
49
49
|
|
|
50
50
|
// src/cli.ts
|
|
51
51
|
import { pathToFileURL } from "url";
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
computeFactorAverages,
|
|
6
6
|
layoutSiteCrawlGraphInput,
|
|
7
7
|
persistSiteCrawlGraphLayout
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-JVBI6VBT.js";
|
|
9
9
|
import {
|
|
10
10
|
PACKAGE_VERSION,
|
|
11
11
|
canonryMcpTools
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-MPWBFKGK.js";
|
|
13
13
|
import "./chunk-HGMYEDAQ.js";
|
|
14
14
|
import {
|
|
15
15
|
HISTORY_WINDOW_RUNS,
|
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
siteCrawlPages,
|
|
87
87
|
siteCrawlSnapshots,
|
|
88
88
|
trafficSources
|
|
89
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-G47XJVAS.js";
|
|
90
90
|
import {
|
|
91
91
|
RunKinds,
|
|
92
92
|
SiteCrawlFetchStates,
|
|
@@ -116,7 +116,7 @@ import {
|
|
|
116
116
|
roundPreservingTotal,
|
|
117
117
|
siteAuditPageFactorSchema,
|
|
118
118
|
wilsonInterval
|
|
119
|
-
} from "./chunk-
|
|
119
|
+
} from "./chunk-GZ2KIONF.js";
|
|
120
120
|
|
|
121
121
|
// src/demo-server.ts
|
|
122
122
|
import { dirname, join as join2 } from "path";
|
package/dist/index.js
CHANGED
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
createGoogleMarketingCredentialStore,
|
|
4
4
|
createGoogleMarketingRuntime,
|
|
5
5
|
createServer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-LK7O7RM6.js";
|
|
7
7
|
import {
|
|
8
8
|
loadConfig
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-5LY7EG4U.js";
|
|
10
|
+
import "./chunk-JVBI6VBT.js";
|
|
11
|
+
import "./chunk-MPWBFKGK.js";
|
|
12
12
|
import "./chunk-HGMYEDAQ.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-G47XJVAS.js";
|
|
14
|
+
import "./chunk-GZ2KIONF.js";
|
|
15
15
|
export {
|
|
16
16
|
GoogleMarketingRuntimeError,
|
|
17
17
|
createGoogleMarketingCredentialStore,
|
package/dist/mcp.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
autoSyncSkills
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SW54HXSZ.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-5LY7EG4U.js";
|
|
8
|
+
import "./chunk-MPWBFKGK.js";
|
|
9
9
|
import "./chunk-HGMYEDAQ.js";
|
|
10
10
|
import {
|
|
11
11
|
isReadOnlyKey,
|
|
12
12
|
updateCheckEnvOptOut
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GZ2KIONF.js";
|
|
14
14
|
|
|
15
15
|
// src/mcp/cli.ts
|
|
16
16
|
import { randomUUID } from "crypto";
|