@canonry/canonry 4.133.0 → 4.133.2
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/dist/{chunk-VPY3PZXV.js → chunk-IEZTETUZ.js} +52 -19
- package/dist/{chunk-P4MIG7V5.js → chunk-JTJQZ4UC.js} +1 -1
- package/dist/{chunk-42P7POVS.js → chunk-V2YR3YK6.js} +3 -3
- package/dist/cli.js +3 -3
- package/dist/index.js +3 -3
- package/dist/{intelligence-service-2K7GVEQM.js → intelligence-service-WZNE23TV.js} +1 -1
- package/dist/mcp.js +1 -1
- package/package.json +8 -8
|
@@ -15267,22 +15267,48 @@ function sumSearchRows(rows) {
|
|
|
15267
15267
|
zero()
|
|
15268
15268
|
);
|
|
15269
15269
|
}
|
|
15270
|
+
var classifyVerificationStatus = (status) => {
|
|
15271
|
+
if (status === VerificationStatuses.verified) return "verified";
|
|
15272
|
+
if (status === VerificationStatuses.claimed_unverified) return "claimedUnverified";
|
|
15273
|
+
if (status === VerificationStatuses.unknown_ai_like) return "unknownAiLike";
|
|
15274
|
+
return null;
|
|
15275
|
+
};
|
|
15276
|
+
var emptyVerificationCounts = () => ({
|
|
15277
|
+
verified: 0,
|
|
15278
|
+
claimedUnverified: 0,
|
|
15279
|
+
unknownAiLike: 0
|
|
15280
|
+
});
|
|
15281
|
+
function summarizeVerificationHits(rows) {
|
|
15282
|
+
const counts2 = emptyVerificationCounts();
|
|
15283
|
+
let unsupportedRows = 0;
|
|
15284
|
+
let unsupportedHits = 0;
|
|
15285
|
+
for (const row of rows) {
|
|
15286
|
+
const tier = classifyVerificationStatus(row.verificationStatus);
|
|
15287
|
+
if (!tier) {
|
|
15288
|
+
unsupportedRows += 1;
|
|
15289
|
+
unsupportedHits += row.hits;
|
|
15290
|
+
continue;
|
|
15291
|
+
}
|
|
15292
|
+
counts2[tier] += row.hits;
|
|
15293
|
+
}
|
|
15294
|
+
return { counts: counts2, unsupportedRows, unsupportedHits };
|
|
15295
|
+
}
|
|
15270
15296
|
function summarizeServer(crawlers, fetches, referrals) {
|
|
15271
15297
|
const total = referrals.reduce((count2, row) => count2 + row.sessionsOrHits, 0);
|
|
15272
15298
|
const paid = referrals.reduce((count2, row) => count2 + row.paidSessionsOrHits, 0);
|
|
15273
15299
|
const organic = referrals.reduce((count2, row) => count2 + row.organicSessionsOrHits, 0);
|
|
15300
|
+
const crawlerHits = summarizeVerificationHits(crawlers);
|
|
15301
|
+
const userFetchHits = summarizeVerificationHits(fetches);
|
|
15274
15302
|
return {
|
|
15275
|
-
|
|
15276
|
-
|
|
15277
|
-
|
|
15278
|
-
|
|
15279
|
-
},
|
|
15280
|
-
userFetchHits: {
|
|
15281
|
-
verified: fetches.filter((row) => row.verificationStatus === VerificationStatuses.verified).reduce((count2, row) => count2 + row.hits, 0),
|
|
15282
|
-
claimedUnverified: fetches.filter((row) => row.verificationStatus === VerificationStatuses.claimed_unverified).reduce((count2, row) => count2 + row.hits, 0),
|
|
15283
|
-
unknownAiLike: fetches.filter((row) => row.verificationStatus === VerificationStatuses.unknown_ai_like).reduce((count2, row) => count2 + row.hits, 0)
|
|
15303
|
+
summary: {
|
|
15304
|
+
crawlerHits: crawlerHits.counts,
|
|
15305
|
+
userFetchHits: userFetchHits.counts,
|
|
15306
|
+
referralSessions: { total, paid, organic, unknown: Math.max(0, total - paid - organic) }
|
|
15284
15307
|
},
|
|
15285
|
-
|
|
15308
|
+
unsupportedVerification: {
|
|
15309
|
+
rows: crawlerHits.unsupportedRows + userFetchHits.unsupportedRows,
|
|
15310
|
+
hits: crawlerHits.unsupportedHits + userFetchHits.unsupportedHits
|
|
15311
|
+
}
|
|
15286
15312
|
};
|
|
15287
15313
|
}
|
|
15288
15314
|
function comparisonDetail(latest, prior) {
|
|
@@ -15476,7 +15502,8 @@ function buildOrganicEvidence(db, projectName, periodDays) {
|
|
|
15476
15502
|
const crawlers = allCrawlers.filter((row) => serverInWindow(row.tsHour));
|
|
15477
15503
|
const fetches = allFetches.filter((row) => serverInWindow(row.tsHour));
|
|
15478
15504
|
const referrals = allReferrals.filter((row) => serverInWindow(row.tsHour));
|
|
15479
|
-
const
|
|
15505
|
+
const serverSummary = summarizeServer(crawlers, fetches, referrals);
|
|
15506
|
+
const server = serverSources.length ? serverSummary.summary : null;
|
|
15480
15507
|
const latest = db.select().from(runs).where(and14(
|
|
15481
15508
|
eq18(runs.projectId, project.id),
|
|
15482
15509
|
eq18(runs.kind, RunKinds["answer-visibility"]),
|
|
@@ -15523,16 +15550,16 @@ function buildOrganicEvidence(db, projectName, periodDays) {
|
|
|
15523
15550
|
ensurePage(row.landingPageNormalized ?? row.landingPage).ga4OrganicSessions += row.sessions;
|
|
15524
15551
|
}
|
|
15525
15552
|
for (const row of crawlers) {
|
|
15553
|
+
const tier = classifyVerificationStatus(row.verificationStatus);
|
|
15554
|
+
if (!tier) continue;
|
|
15526
15555
|
const counts2 = ensurePage(row.pathNormalized).server.crawlerHits;
|
|
15527
|
-
|
|
15528
|
-
else if (row.verificationStatus === VerificationStatuses.claimed_unverified) counts2.claimedUnverified += row.hits;
|
|
15529
|
-
else counts2.unknownAiLike += row.hits;
|
|
15556
|
+
counts2[tier] += row.hits;
|
|
15530
15557
|
}
|
|
15531
15558
|
for (const row of fetches) {
|
|
15559
|
+
const tier = classifyVerificationStatus(row.verificationStatus);
|
|
15560
|
+
if (!tier) continue;
|
|
15532
15561
|
const counts2 = ensurePage(row.pathNormalized).server.userFetchHits;
|
|
15533
|
-
|
|
15534
|
-
else if (row.verificationStatus === VerificationStatuses.claimed_unverified) counts2.claimedUnverified += row.hits;
|
|
15535
|
-
else counts2.unknownAiLike += row.hits;
|
|
15562
|
+
counts2[tier] += row.hits;
|
|
15536
15563
|
}
|
|
15537
15564
|
for (const row of referrals) {
|
|
15538
15565
|
const counts2 = ensurePage(row.landingPathNormalized).server.referralSessions;
|
|
@@ -15567,10 +15594,10 @@ function buildOrganicEvidence(db, projectName, periodDays) {
|
|
|
15567
15594
|
}
|
|
15568
15595
|
const latestGa = ga4?.cohorts.at(-1);
|
|
15569
15596
|
const priorGa = ga4?.cohorts.at(-2);
|
|
15570
|
-
if (ga4 && latestGa && priorGa) {
|
|
15597
|
+
if (ga4 && latestGa && priorGa && latestGa.organicSessions !== priorGa.organicSessions) {
|
|
15571
15598
|
findings.push({
|
|
15572
15599
|
tone: "neutral",
|
|
15573
|
-
title: "Organic sessions
|
|
15600
|
+
title: "Organic sessions changed",
|
|
15574
15601
|
detail: `GA4 organic sessions were ${comparisonDetail(latestGa.organicSessions, priorGa.organicSessions)}; visibility alone does not establish lead impact.`
|
|
15575
15602
|
});
|
|
15576
15603
|
}
|
|
@@ -15674,6 +15701,12 @@ function buildOrganicEvidence(db, projectName, periodDays) {
|
|
|
15674
15701
|
detail: "Claimed-unverified and heuristic AI requests are user-agent evidence without operator IP verification and are reported separately from verified requests."
|
|
15675
15702
|
});
|
|
15676
15703
|
}
|
|
15704
|
+
if (serverSummary.unsupportedVerification.rows > 0) {
|
|
15705
|
+
limitations.push({
|
|
15706
|
+
code: "unsupported-server-verification-status",
|
|
15707
|
+
detail: `Skipped ${serverSummary.unsupportedVerification.hits} server hits across ${serverSummary.unsupportedVerification.rows} rows with unsupported verification statuses; they are excluded from all verification tiers.`
|
|
15708
|
+
});
|
|
15709
|
+
}
|
|
15677
15710
|
if (visibility && visibility.ageDays > 30) {
|
|
15678
15711
|
limitations.push({
|
|
15679
15712
|
code: "stale-visibility-sweep",
|
|
@@ -6470,7 +6470,7 @@ var canonryMcpTools = [
|
|
|
6470
6470
|
defineTool({
|
|
6471
6471
|
name: "canonry_organic_evidence",
|
|
6472
6472
|
title: "Reconcile organic and AI evidence",
|
|
6473
|
-
description: "One-call investigation of whether organic work is gaining visibility, traffic, AI attention
|
|
6473
|
+
description: "One-call investigation of whether organic work is gaining visibility, traffic, or AI attention. Returns source-specific 30-day GSC and GA4 cohorts, URL-agnostic page evidence, available GA4 lead-event evidence (not lead attribution), server-observed AI crawling/user-fetch/referral evidence, the latest answer-visibility sweep, source coverage, findings, and limitations. It preserves native units. Prefer this over fanning out across GSC, GA, traffic, and visibility tools.",
|
|
6474
6474
|
access: "read",
|
|
6475
6475
|
tier: "monitoring",
|
|
6476
6476
|
inputSchema: z2.object({
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
loadConfig,
|
|
11
11
|
loadConfigRaw,
|
|
12
12
|
saveConfigPatch
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-JTJQZ4UC.js";
|
|
14
14
|
import {
|
|
15
15
|
CC_CACHE_DIR,
|
|
16
16
|
DUCKDB_SPEC,
|
|
@@ -118,7 +118,7 @@ import {
|
|
|
118
118
|
siteAuditPages,
|
|
119
119
|
siteAuditSnapshots,
|
|
120
120
|
usageCounters
|
|
121
|
-
} from "./chunk-
|
|
121
|
+
} from "./chunk-IEZTETUZ.js";
|
|
122
122
|
import {
|
|
123
123
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
124
124
|
AGENT_PROVIDER_IDS,
|
|
@@ -7000,7 +7000,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
7000
7000
|
return result;
|
|
7001
7001
|
}
|
|
7002
7002
|
async function backfillInsightsCommand(project, opts) {
|
|
7003
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
7003
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-WZNE23TV.js");
|
|
7004
7004
|
const config = loadConfig();
|
|
7005
7005
|
const db = createClient(config.database);
|
|
7006
7006
|
migrate(db);
|
package/dist/cli.js
CHANGED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
setTelemetrySource,
|
|
30
30
|
showFirstRunNotice,
|
|
31
31
|
trackEvent
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-V2YR3YK6.js";
|
|
33
33
|
import {
|
|
34
34
|
CliError,
|
|
35
35
|
EXIT_SYSTEM_ERROR,
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
saveConfig,
|
|
47
47
|
saveConfigPatch,
|
|
48
48
|
usageError
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-JTJQZ4UC.js";
|
|
50
50
|
import {
|
|
51
51
|
apiKeys,
|
|
52
52
|
createClient,
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
projects,
|
|
55
55
|
queries,
|
|
56
56
|
renderReportHtml
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-IEZTETUZ.js";
|
|
58
58
|
import {
|
|
59
59
|
AdsOperationKinds,
|
|
60
60
|
AdsOperationStates,
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-V2YR3YK6.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-JTJQZ4UC.js";
|
|
7
|
+
import "./chunk-IEZTETUZ.js";
|
|
8
8
|
import "./chunk-ZPQX5ZQ2.js";
|
|
9
9
|
export {
|
|
10
10
|
createServer,
|
package/dist/mcp.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonry/canonry",
|
|
3
|
-
"version": "4.133.
|
|
3
|
+
"version": "4.133.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agent-first open-source AEO operating platform - track how answer engines cite your domain",
|
|
6
6
|
"license": "FSL-1.1-ALv2",
|
|
@@ -72,20 +72,20 @@
|
|
|
72
72
|
"@ainyc/canonry-db": "0.0.0",
|
|
73
73
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
74
74
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
75
|
-
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
76
|
-
"@ainyc/canonry-integration-google": "0.0.0",
|
|
77
75
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
76
|
+
"@ainyc/canonry-integration-google": "0.0.0",
|
|
78
77
|
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
78
|
+
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
79
79
|
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
80
|
+
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
80
81
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
81
|
-
"@ainyc/canonry-intelligence": "0.0.0",
|
|
82
82
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
83
|
+
"@ainyc/canonry-intelligence": "0.0.0",
|
|
83
84
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
84
|
-
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
85
|
-
"@ainyc/canonry-provider-local": "0.0.0",
|
|
86
85
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
87
|
-
"@ainyc/canonry-provider-
|
|
88
|
-
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
86
|
+
"@ainyc/canonry-provider-local": "0.0.0",
|
|
87
|
+
"@ainyc/canonry-provider-perplexity": "0.0.0",
|
|
88
|
+
"@ainyc/canonry-provider-openai": "0.0.0"
|
|
89
89
|
},
|
|
90
90
|
"scripts": {
|
|
91
91
|
"build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
|