@canonry/canonry 7.87.1 → 7.88.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/assets/agent-workspace/skills/aero/references/ai-traffic-tracking.md +6 -1
- package/assets/agent-workspace/skills/canonry/references/ai-traffic-tracking.md +6 -1
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +34 -5
- package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +17 -5
- package/assets/assets/{AgentSetupPage-_ZP3F_zA.js → AgentSetupPage-DV06oPTd.js} +1 -1
- package/assets/assets/{AuditHistoryPanel-9B0XpYsN.js → AuditHistoryPanel-C1JnxBFK.js} +1 -1
- package/assets/assets/{BacklinksPage-CsvVgXTZ.js → BacklinksPage-Dw0wgYlg.js} +1 -1
- package/assets/assets/{HistoryPage-BCxpCul0.js → HistoryPage-DsDx15am.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-BObvWjVx.js → MeasurementPropertyPage-Bkxt3QcY.js} +1 -1
- package/assets/assets/{ProjectPage-y378tOaT.js → ProjectPage-CzrD1lpf.js} +1 -1
- package/assets/assets/{RunsPage-CfQ_kqlu.js → RunsPage-BggqKbOG.js} +1 -1
- package/assets/assets/{SettingsPage-PIgRvqJc.js → SettingsPage-B7ns_ECx.js} +1 -1
- package/assets/assets/{SiteHealthSection-DuUE1cB0.js → SiteHealthSection-B2YibqCs.js} +2 -2
- package/assets/assets/{ToneBadge-BgTLSTKp.js → ToneBadge-B8hKcr8p.js} +1 -1
- package/assets/assets/{TrafficPage-B_YunwjH.js → TrafficPage-DRTbgzKI.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-C51W87fU.js → TrafficSourceDetailPage-sgLE2gdJ.js} +1 -1
- package/assets/assets/{account-context-CVjb3ZSn.js → account-context-pzV-boTi.js} +1 -1
- package/assets/assets/{agent-trust-copy-BlpC8jo5.js → agent-trust-copy-DBtiOpFu.js} +1 -1
- package/assets/assets/{card-BnVez9nG.js → card-Mu_5i5fM.js} +1 -1
- package/assets/assets/{extract-error-message-Dqirbrl0.js → extract-error-message-D_ptq0tW.js} +1 -1
- package/assets/assets/{format-helpers-DVXZD864.js → format-helpers-C8QYorwm.js} +1 -1
- package/assets/assets/{index-CsvEqhK4.js → index-fN5qDR8H.js} +6 -6
- package/assets/assets/{query-client-CVc7wMKJ.js → query-client-CdG4DC3B.js} +1 -1
- package/assets/assets/{react-query-CSlTSOjz.js → react-query-CxeygwoL.js} +1 -1
- package/assets/assets/{react-sigma_core.esm.min-CVfGIEIE.js → react-sigma_core.esm.min-BfnfPCis.js} +1 -1
- package/assets/assets/{service-BGqeyqhZ.js → service-B85wjZQP.js} +1 -1
- package/assets/index.html +7 -7
- package/dist/{ads-ZUZWSIBV.js → ads-4TAIMWZC.js} +3 -3
- package/dist/{agent-YDS3WY7B.js → agent-C7NKP2TO.js} +7 -7
- package/dist/{agent-ask-7VUPXTXL.js → agent-ask-EPH5FDM6.js} +3 -3
- package/dist/{agent-conversations-WPEBK3BS.js → agent-conversations-LPBBVRKK.js} +3 -3
- package/dist/{agent-journeys-H5CCYLNB.js → agent-journeys-MBORINJA.js} +3 -3
- package/dist/{agent-memory-CNPKPIWD.js → agent-memory-NJIZO75R.js} +3 -3
- package/dist/{agent-providers-U7FLJO5I.js → agent-providers-ZQVUOCX6.js} +3 -3
- package/dist/{agent-transcript-VY3BQNPU.js → agent-transcript-67HFY5GT.js} +3 -3
- package/dist/{analytics-PYUNO7C2.js → analytics-TUO6BVB6.js} +3 -3
- package/dist/{apply-YNBEYC2G.js → apply-V7A5O7YS.js} +3 -3
- package/dist/{backfill-PNHBAV5N.js → backfill-PGKYR6NA.js} +10 -10
- package/dist/{backlinks-LVHZ2MQ7.js → backlinks-5GGPQNR4.js} +3 -3
- package/dist/bing-PQOLIW2X.js +759 -0
- package/dist/{bootstrap-AZYQXBHN.js → bootstrap-IH3XX6PI.js} +10 -10
- package/dist/{cdp-HCYY4SXR.js → cdp-B3PFQ5RB.js} +7 -7
- package/dist/{chunk-RSPOFH66.js → chunk-2KL2XHS6.js} +4 -4
- package/dist/{chunk-DOPUEXMC.js → chunk-4A4X7VXE.js} +2 -2
- package/dist/{chunk-2AXFKYJU.js → chunk-4T2VZPDG.js} +2 -2
- package/dist/{chunk-W7DHXSXN.js → chunk-4VMHN5LL.js} +4004 -2994
- package/dist/{chunk-2FJB3CSS.js → chunk-5KDJJO2N.js} +1 -1
- package/dist/{chunk-BJHHD7VE.js → chunk-5WWEZ26Y.js} +2 -2
- package/dist/{chunk-2I22IUA3.js → chunk-6DIDDYG6.js} +5 -5
- package/dist/{chunk-IBGZ6D6R.js → chunk-BDLC3DFM.js} +2 -2
- package/dist/{chunk-IK7QEKKD.js → chunk-CYQCO5NY.js} +1 -1
- package/dist/{chunk-FAMCDCVK.js → chunk-D354CQ6T.js} +1 -1
- package/dist/{chunk-3KK6FWDF.js → chunk-DILCH7RL.js} +1 -1
- package/dist/{chunk-BKZ6PQAE.js → chunk-DVWAA3ES.js} +1088 -646
- package/dist/{chunk-ECZGTJIQ.js → chunk-E4DUE2PW.js} +6 -6
- package/dist/{chunk-TEQF4ZJA.js → chunk-EGUJNHAZ.js} +162 -2
- package/dist/{chunk-JDTKG7KJ.js → chunk-EL4HRIID.js} +3 -3
- package/dist/{chunk-UXSWQAVZ.js → chunk-EYSQMZ6L.js} +530 -342
- package/dist/{chunk-MNLAIB67.js → chunk-FL76YWYN.js} +1 -1
- package/dist/{chunk-INH773FB.js → chunk-FLJVGHTQ.js} +3 -3
- package/dist/{chunk-4LNZTL7M.js → chunk-FNQFM3TK.js} +3 -3
- package/dist/{chunk-GBWCEOZR.js → chunk-IPOYH4WE.js} +1 -1
- package/dist/{chunk-VDYXB6SV.js → chunk-IR3MYKIA.js} +84 -13
- package/dist/{chunk-CR54BCUP.js → chunk-LBZYPZAA.js} +7 -7
- package/dist/{chunk-4FWDITQG.js → chunk-MCQK432C.js} +1 -1
- package/dist/{chunk-CBWGUGME.js → chunk-MEN27RAJ.js} +18 -2
- package/dist/{chunk-RHOIR5QY.js → chunk-N6AWKBLY.js} +5 -5
- package/dist/{chunk-TN53B5AB.js → chunk-O7OZVZWR.js} +210 -3
- package/dist/{chunk-6F5ULQDY.js → chunk-OKLDBQYW.js} +4 -4
- package/dist/{chunk-G44S34CE.js → chunk-PBOIN52J.js} +2 -2
- package/dist/{chunk-GXTCDNX7.js → chunk-PZLEKWYA.js} +1 -1
- package/dist/{chunk-F643WELJ.js → chunk-Q2SJRZA3.js} +297 -5
- package/dist/{chunk-ICS2WJ7H.js → chunk-R7K24KY7.js} +3 -3
- package/dist/{chunk-J7ITGXCS.js → chunk-TAQHHXBC.js} +4 -4
- package/dist/{chunk-JAYUWQAV.js → chunk-TL52ELES.js} +1 -1
- package/dist/{chunk-GDU6IMGB.js → chunk-UVXQQZB5.js} +2 -2
- package/dist/{chunk-O26FQ7RI.js → chunk-ZQGWB7VJ.js} +260 -1
- package/dist/{citations-3EZTHA65.js → citations-J3IGPX4L.js} +3 -3
- package/dist/{cli-catalog-CBTM3JKP.js → cli-catalog-2PCRGKPH.js} +3 -3
- package/dist/{cli-commands-62QECRBV.js → cli-commands-4MUJZCZO.js} +7 -7
- package/dist/cli.js +13 -13
- package/dist/{competitor-VH4TXJLT.js → competitor-X7Q2AZGL.js} +3 -3
- package/dist/{content-TSMNHXJZ.js → content-HTR3PJPX.js} +3 -3
- package/dist/{dashboard-4HOXCUQE.js → dashboard-LSO57ZEE.js} +6 -6
- package/dist/{demo-IY7Y7KR3.js → demo-P25N4SKK.js} +1 -1
- package/dist/{demo-server-BLLSDILQ.js → demo-server-6Z5XSHFS.js} +12 -12
- package/dist/{discover-XTJXTKCI.js → discover-KE6TQPOC.js} +3 -3
- package/dist/{discover-eval-IVQI5YEW.js → discover-eval-XKOYGCRW.js} +3 -3
- package/dist/{doctor-SJ4SHSQO.js → doctor-RL2J54I3.js} +3 -3
- package/dist/{evidence-C6T556YH.js → evidence-CYJ4AKUZ.js} +3 -3
- package/dist/{export-cmd-JQZ5ZRSI.js → export-cmd-2YM3PXCW.js} +3 -3
- package/dist/{ga-W2WHVRHN.js → ga-XAB66MJO.js} +3 -3
- package/dist/{gbp-3AZIV5WF.js → gbp-CDGBLRVV.js} +3 -3
- package/dist/{google-3CKWPZT7.js → google-XHCUKQ3J.js} +4 -4
- package/dist/{google-marketing-PJBGQYYW.js → google-marketing-ZR6NTWEY.js} +1 -1
- package/dist/{health-cmd-4JTQMCXM.js → health-cmd-VS3EIFJD.js} +3 -3
- package/dist/{history-TXUJFEO2.js → history-YIGYYNZJ.js} +3 -3
- package/dist/index.d.ts +2000 -373
- package/dist/index.js +25 -25
- package/dist/{init-JY76QAOC.js → init-ST3BXHQF.js} +12 -12
- package/dist/{insights-XZQO4B45.js → insights-KZS6TYYL.js} +3 -3
- package/dist/intelligence-service-LCTP5BC7.js +16 -0
- package/dist/{journeys-VFIV5JYV.js → journeys-USOPWGW5.js} +3 -3
- package/dist/{keys-PV23G4LW.js → keys-XY7LSM3S.js} +3 -3
- package/dist/{keyword-D76KBIV5.js → keyword-PKBFHHF5.js} +3 -3
- package/dist/{logs-DYDZ6IEJ.js → logs-PROW5TQJ.js} +3 -3
- package/dist/{mcp-GAR5LDQD.js → mcp-OQGC62QU.js} +4 -4
- package/dist/mcp.js +9 -9
- package/dist/{measurement-plan-K24EOGMI.js → measurement-plan-AI4NNBTO.js} +5 -5
- package/dist/{notify-XQHMPDQQ.js → notify-6HRPNJZ5.js} +3 -3
- package/dist/{organic-evidence-UHHE7AO4.js → organic-evidence-IXCSUGGY.js} +3 -3
- package/dist/{overview-AUZ3XRS5.js → overview-2WS3CFHK.js} +4 -4
- package/dist/{project-FUCPU2BD.js → project-ENUZG62V.js} +3 -3
- package/dist/{query-HRMSXDKL.js → query-WE3ZWTIB.js} +3 -3
- package/dist/{research-R23XLZJ3.js → research-DZSD5UZ2.js} +3 -3
- package/dist/{results-export-N6IV3KG4.js → results-export-JMUMYNUE.js} +3 -3
- package/dist/{run-CJLG5EXH.js → run-QXOO7CRK.js} +4 -4
- package/dist/{schedule-IPDCQ2I5.js → schedule-3RJKGUDN.js} +3 -3
- package/dist/{search-ZU4AKJ76.js → search-SGS4H7I4.js} +3 -3
- package/dist/{serve-ZQXMTDE7.js → serve-T24QKEUY.js} +26 -26
- package/dist/{session-MGOUDLXN.js → session-HPH2A4AZ.js} +13 -13
- package/dist/{settings-4FS5NRKP.js → settings-K44RK2TW.js} +3 -3
- package/dist/{skills-GSFHACGN.js → skills-HGPPGBXG.js} +2 -2
- package/dist/{snapshot-4NUVPDK3.js → snapshot-FEHHQRY3.js} +3 -3
- package/dist/{src-SJYGA7NH.js → src-4PAYI7GE.js} +18 -2
- package/dist/{status-ASBLMFP2.js → status-L5HVFWTS.js} +4 -4
- package/dist/{technical-aeo-QXHRBGYY.js → technical-aeo-Z43UCW6E.js} +3 -3
- package/dist/{telemetry-J2I577I3.js → telemetry-D47SSSG7.js} +4 -4
- package/dist/{tools-ZWFLE5UR.js → tools-WCWUY2ZJ.js} +11 -11
- package/dist/{traffic-B7Q4WPOV.js → traffic-5KH62P43.js} +5 -5
- package/dist/{trends-YOLCJBNM.js → trends-RMAXZKRO.js} +3 -3
- package/dist/{users-LPSCZV3M.js → users-WT54XNEI.js} +3 -3
- package/dist/{visibility-stats-JJQTZSSK.js → visibility-stats-HU62U5MA.js} +3 -3
- package/dist/{wordpress-4IKDT5KT.js → wordpress-BDAKQ4MU.js} +3 -3
- package/package.json +1 -1
- package/dist/bing-A2MUG6AV.js +0 -418
- package/dist/intelligence-service-GJYBEHJE.js +0 -16
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
measurementDraftUpsertGroupRequestSchema,
|
|
24
24
|
measurementDraftUpsertMarketRequestSchema,
|
|
25
25
|
measurementDraftUpsertTargetRequestSchema
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
27
27
|
|
|
28
28
|
// src/measurement-draft-actions.ts
|
|
29
29
|
import { z } from "zod";
|
|
@@ -2,18 +2,18 @@ import {
|
|
|
2
2
|
configExists,
|
|
3
3
|
loadConfigRaw,
|
|
4
4
|
saveConfigPatch
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-5KDJJO2N.js";
|
|
6
6
|
import {
|
|
7
7
|
BUNDLED_SKILL_NAMES,
|
|
8
8
|
installSkills
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-D354CQ6T.js";
|
|
10
10
|
import {
|
|
11
11
|
PACKAGE_VERSION
|
|
12
12
|
} from "./chunk-AOJU5LKX.js";
|
|
13
13
|
import {
|
|
14
14
|
SKILL_MANIFEST_FILENAME,
|
|
15
15
|
SkillsClients
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
17
17
|
|
|
18
18
|
// src/skills-autosync.ts
|
|
19
19
|
import fs from "fs";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createApiClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EGUJNHAZ.js";
|
|
4
4
|
import {
|
|
5
5
|
emitJsonl
|
|
6
6
|
} from "./chunk-Z7IUAJOF.js";
|
|
7
7
|
import {
|
|
8
8
|
measurementDraftOperationSchema,
|
|
9
9
|
runMeasurementDraftAction
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-FL76YWYN.js";
|
|
11
11
|
import {
|
|
12
12
|
isMachineFormat,
|
|
13
13
|
systemError
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
unattributedAnswersLabel,
|
|
38
38
|
uncheckedSourcesLabel,
|
|
39
39
|
visibilityReportRequestSchema
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
41
41
|
|
|
42
42
|
// src/commands/measurement-plan.ts
|
|
43
43
|
import crypto from "crypto";
|
|
@@ -3,6 +3,8 @@ import {
|
|
|
3
3
|
AgentTrustLevels,
|
|
4
4
|
AgentTrustReasons,
|
|
5
5
|
AiReferralTrafficClasses,
|
|
6
|
+
JOURNEY_LOOKBACK_DAYS,
|
|
7
|
+
JOURNEY_VISIT_IDLE_MINUTES,
|
|
6
8
|
TrafficEventConfidences,
|
|
7
9
|
TrafficEvidenceKinds,
|
|
8
10
|
TrafficPathClasses,
|
|
@@ -11,8 +13,9 @@ import {
|
|
|
11
13
|
classifyJourneyEntry,
|
|
12
14
|
classifyTrafficPath,
|
|
13
15
|
hostMatchesDomain,
|
|
14
|
-
hostOf
|
|
15
|
-
|
|
16
|
+
hostOf,
|
|
17
|
+
isLocationRedirectStatus
|
|
18
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
16
19
|
|
|
17
20
|
// ../integration-traffic/src/agent-trust.ts
|
|
18
21
|
var AGENT_TRUST_RULES_VERSION = 2;
|
|
@@ -18170,6 +18173,18 @@ function isStepRefererHost(host, path) {
|
|
|
18170
18173
|
return host === entry.slice(0, slash) && path.startsWith(entry.slice(slash));
|
|
18171
18174
|
});
|
|
18172
18175
|
}
|
|
18176
|
+
function siteDomainHosts(siteDomains = []) {
|
|
18177
|
+
return siteDomains.map(domainOf).filter((d) => Boolean(d));
|
|
18178
|
+
}
|
|
18179
|
+
function isStepReferer(event, siteHosts = []) {
|
|
18180
|
+
const refererUrl = refererUrlOf(event.referer);
|
|
18181
|
+
const refererBase = baseHost(refererUrl?.hostname || null);
|
|
18182
|
+
if (!refererBase) return false;
|
|
18183
|
+
const siteHost = baseHost(hostOfEvent(event));
|
|
18184
|
+
if (siteHost && (onDomain(refererBase, siteHost) || onDomain(siteHost, refererBase))) return true;
|
|
18185
|
+
if (siteHosts.some((domain) => onDomain(refererBase, domain))) return true;
|
|
18186
|
+
return isStepRefererHost(refererBase, refererUrl?.pathname ?? "/");
|
|
18187
|
+
}
|
|
18173
18188
|
function isAssetPath(path) {
|
|
18174
18189
|
return ASSET_PATH_PREFIXES.some((prefix) => path.startsWith(prefix)) || ASSET_EXTENSION_PATTERN.test(path);
|
|
18175
18190
|
}
|
|
@@ -18194,7 +18209,7 @@ function isLikelyBrowser(userAgent) {
|
|
|
18194
18209
|
return Boolean(ua) && /^Mozilla\//.test(ua) && !NON_BROWSER_PATTERN.test(ua);
|
|
18195
18210
|
}
|
|
18196
18211
|
function extractJourneyRequests(events, options = {}) {
|
|
18197
|
-
const
|
|
18212
|
+
const siteHosts = siteDomainHosts(options.siteDomains);
|
|
18198
18213
|
const out = [];
|
|
18199
18214
|
for (const event of events) {
|
|
18200
18215
|
const method = event.method?.toUpperCase() ?? null;
|
|
@@ -18212,12 +18227,8 @@ function extractJourneyRequests(events, options = {}) {
|
|
|
18212
18227
|
});
|
|
18213
18228
|
const maskedPath = maskJourneyPath(rawPath);
|
|
18214
18229
|
const path = (kept.length ? `${maskedPath}?${kept.join("&")}` : maskedPath).slice(0, MAX_PATH_LENGTH);
|
|
18215
|
-
const
|
|
18216
|
-
const
|
|
18217
|
-
const refererBase = baseHost(refererHost);
|
|
18218
|
-
const siteHost = baseHost(hostOfEvent(event));
|
|
18219
|
-
const sameSite = Boolean(refererBase && (siteHost && (onDomain(refererBase, siteHost) || onDomain(siteHost, refererBase)) || siteDomains.some((domain) => onDomain(refererBase, domain))));
|
|
18220
|
-
const stepReferer = sameSite || Boolean(refererBase && isStepRefererHost(refererBase, refererUrl?.pathname ?? "/"));
|
|
18230
|
+
const refererHost = refererUrlOf(event.referer)?.hostname || null;
|
|
18231
|
+
const stepReferer = isStepReferer(event, siteHosts);
|
|
18221
18232
|
const ai = classifyAiReferral(event);
|
|
18222
18233
|
const networkClickId = Object.keys(NETWORK_CLICK_ID_PARAMETERS).find((name) => params.has(name));
|
|
18223
18234
|
out.push({
|
|
@@ -18615,11 +18626,68 @@ function isLikelySubresourcePath(path) {
|
|
|
18615
18626
|
const cleanPath = path.split("?")[0] || "/";
|
|
18616
18627
|
return ASSET_PATH_PREFIXES2.some((prefix) => cleanPath.startsWith(prefix)) || ASSET_EXTENSION_PATTERN2.test(cleanPath);
|
|
18617
18628
|
}
|
|
18618
|
-
function
|
|
18629
|
+
function batchActorKey(event) {
|
|
18619
18630
|
const remoteIp = event.remoteIp?.trim();
|
|
18620
18631
|
const userAgent = event.userAgent?.trim();
|
|
18621
|
-
|
|
18622
|
-
|
|
18632
|
+
return remoteIp || userAgent ? `${remoteIp ?? "unknown-ip"} ${userAgent ?? "unknown-ua"}` : null;
|
|
18633
|
+
}
|
|
18634
|
+
function actorKey(event) {
|
|
18635
|
+
return batchActorKey(event) ?? `event:${event.eventId}`;
|
|
18636
|
+
}
|
|
18637
|
+
var AI_REFERRAL_LOOKBACK_MS = JOURNEY_LOOKBACK_DAYS * 24 * 60 * 6e4;
|
|
18638
|
+
var AI_REFERRAL_SAME_VISIT_MS = JOURNEY_VISIT_IDLE_MINUTES * 6e4;
|
|
18639
|
+
function findAiReferralFollowOns(events, options) {
|
|
18640
|
+
const lookbackMs = options.lookbackMs ?? AI_REFERRAL_LOOKBACK_MS;
|
|
18641
|
+
const siteHosts = siteDomainHosts(options.siteDomains);
|
|
18642
|
+
const candidates = [];
|
|
18643
|
+
for (const event of events) {
|
|
18644
|
+
if (isSelfTraffic(event)) continue;
|
|
18645
|
+
const referral = classifyAiReferral(event);
|
|
18646
|
+
if (!referral || isLikelySubresourcePath(resolveAiReferralLandingPath(event, referral.evidenceType))) continue;
|
|
18647
|
+
const at = Date.parse(event.observedAt);
|
|
18648
|
+
const actor = options.actorKey(event, referral.product);
|
|
18649
|
+
if (!Number.isFinite(at) || actor === null) continue;
|
|
18650
|
+
const hop = event.status !== null && isLocationRedirectStatus(event.status);
|
|
18651
|
+
candidates.push({ eventId: event.eventId, actor, at, step: isStepReferer(event, siteHosts), hop });
|
|
18652
|
+
}
|
|
18653
|
+
candidates.sort((a, b) => a.at - b.at || Number(a.step) - Number(b.step));
|
|
18654
|
+
const actors = [...new Set(candidates.map((candidate) => candidate.actor))];
|
|
18655
|
+
const known = actors.length > 0 && options.known ? options.known(actors) : /* @__PURE__ */ new Map();
|
|
18656
|
+
const eventIds = /* @__PURE__ */ new Set();
|
|
18657
|
+
const arrivals = /* @__PURE__ */ new Map();
|
|
18658
|
+
const counted = (actor, arrival) => {
|
|
18659
|
+
const list = arrivals.get(actor);
|
|
18660
|
+
if (list) list.push(arrival);
|
|
18661
|
+
else arrivals.set(actor, [arrival]);
|
|
18662
|
+
};
|
|
18663
|
+
for (const candidate of candidates) {
|
|
18664
|
+
const remembered = [...known.get(candidate.actor) ?? [], ...arrivals.get(candidate.actor) ?? []];
|
|
18665
|
+
if (candidate.step) {
|
|
18666
|
+
const covered = remembered.some((arrival) => arrival.at <= candidate.at && candidate.at - arrival.at <= lookbackMs);
|
|
18667
|
+
if (covered || candidate.hop) {
|
|
18668
|
+
eventIds.add(candidate.eventId);
|
|
18669
|
+
continue;
|
|
18670
|
+
}
|
|
18671
|
+
counted(candidate.actor, { at: candidate.at, standIn: true });
|
|
18672
|
+
continue;
|
|
18673
|
+
}
|
|
18674
|
+
if (candidate.hop) continue;
|
|
18675
|
+
const alreadyCounted = remembered.some((arrival) => arrival.standIn && arrival.at >= candidate.at && arrival.at - candidate.at <= AI_REFERRAL_SAME_VISIT_MS);
|
|
18676
|
+
if (alreadyCounted) {
|
|
18677
|
+
eventIds.add(candidate.eventId);
|
|
18678
|
+
continue;
|
|
18679
|
+
}
|
|
18680
|
+
counted(candidate.actor, { at: candidate.at, standIn: false });
|
|
18681
|
+
}
|
|
18682
|
+
return { eventIds, arrivals };
|
|
18683
|
+
}
|
|
18684
|
+
function findAiReferralFollowOnsInBatch(events) {
|
|
18685
|
+
return findAiReferralFollowOns(events, {
|
|
18686
|
+
actorKey: (event, product) => {
|
|
18687
|
+
const actor = batchActorKey(event);
|
|
18688
|
+
return actor === null ? null : `${actor} ${product}`;
|
|
18689
|
+
}
|
|
18690
|
+
}).eventIds;
|
|
18623
18691
|
}
|
|
18624
18692
|
function aiReferralSessionKey(event, aiReferral, landingPathNormalized, windowMs) {
|
|
18625
18693
|
return [
|
|
@@ -18679,6 +18747,7 @@ function buildTrafficProbeReport(events, options = {}) {
|
|
|
18679
18747
|
const includedEvents = events.filter((event) => !isSelfTraffic(event));
|
|
18680
18748
|
const selfTrafficExcluded = events.length - includedEvents.length;
|
|
18681
18749
|
const scannerBursts = options.scannerBurstEventIds ?? findScannerBurstsInBatch(includedEvents);
|
|
18750
|
+
const aiReferralFollowOns = options.aiReferralFollowOnEventIds ?? findAiReferralFollowOnsInBatch(includedEvents);
|
|
18682
18751
|
let crawlerHits = 0;
|
|
18683
18752
|
let aiUserFetchHits = 0;
|
|
18684
18753
|
let aiUserFetchLikelyFakeHits = 0;
|
|
@@ -18770,7 +18839,7 @@ function buildTrafficProbeReport(events, options = {}) {
|
|
|
18770
18839
|
if (aiReferral) {
|
|
18771
18840
|
aiReferralHits += 1;
|
|
18772
18841
|
const landingPathNormalized = resolveAiReferralLandingPath(event, aiReferral.evidenceType);
|
|
18773
|
-
if (!isLikelySubresourcePath(landingPathNormalized)) {
|
|
18842
|
+
if (!aiReferralFollowOns.has(event.eventId) && !isLikelySubresourcePath(landingPathNormalized)) {
|
|
18774
18843
|
const session = {
|
|
18775
18844
|
tsHour,
|
|
18776
18845
|
operator: aiReferral.operator,
|
|
@@ -19549,6 +19618,8 @@ export {
|
|
|
19549
19618
|
UNRECOGNIZED_AGENT_NAMING_VERSION,
|
|
19550
19619
|
unrecognizedAgentName,
|
|
19551
19620
|
normalizeTrafficPathPattern,
|
|
19621
|
+
AI_REFERRAL_LOOKBACK_MS,
|
|
19622
|
+
findAiReferralFollowOns,
|
|
19552
19623
|
buildTrafficProbeReport,
|
|
19553
19624
|
normalizeCloudflareWorkerEvent,
|
|
19554
19625
|
CLOUDFLARE_WORKER_BINDINGS,
|
|
@@ -8,23 +8,23 @@ import {
|
|
|
8
8
|
reparseStoredResult4,
|
|
9
9
|
reparseStoredResult5,
|
|
10
10
|
resolveStoredApiResponse
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-N6AWKBLY.js";
|
|
12
12
|
import {
|
|
13
13
|
loadConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-5KDJJO2N.js";
|
|
15
15
|
import {
|
|
16
16
|
isMachineFormat
|
|
17
17
|
} from "./chunk-HGMYEDAQ.js";
|
|
18
18
|
import {
|
|
19
19
|
determineCitationState
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-TL52ELES.js";
|
|
21
21
|
import {
|
|
22
22
|
backfillProjectAnswerMentions,
|
|
23
23
|
competitorIdentityColumns,
|
|
24
24
|
createRunCompetitorResolver,
|
|
25
25
|
readMarketCompetitorNames,
|
|
26
26
|
refreshSnapshotMentionIdentity
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-4VMHN5LL.js";
|
|
28
28
|
import {
|
|
29
29
|
RawEventSampleEventTypes,
|
|
30
30
|
auditLog,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
querySnapshots,
|
|
39
39
|
rawEventSamples,
|
|
40
40
|
runs
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-ZQGWB7VJ.js";
|
|
42
42
|
import {
|
|
43
43
|
ProviderNames,
|
|
44
44
|
RetrievalContracts,
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
extractRecommendedCompetitors,
|
|
52
52
|
normalizeUrlPath,
|
|
53
53
|
openRouterRouteModel
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
55
55
|
|
|
56
56
|
// src/commands/backfill.ts
|
|
57
57
|
import { setImmediate as yieldToEventLoop } from "timers/promises";
|
|
@@ -429,7 +429,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
|
|
|
429
429
|
}
|
|
430
430
|
}
|
|
431
431
|
async function backfillInsightsCommand(project, opts) {
|
|
432
|
-
const { IntelligenceService } = await import("./intelligence-service-
|
|
432
|
+
const { IntelligenceService } = await import("./intelligence-service-LCTP5BC7.js");
|
|
433
433
|
const config = loadConfig();
|
|
434
434
|
const db = createClient(config.database);
|
|
435
435
|
migrate(db);
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
AppError,
|
|
6
6
|
parseWindowIn,
|
|
7
7
|
resolveDateRange
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
9
9
|
|
|
10
10
|
// src/cli-access.ts
|
|
11
11
|
var CLI_ACCESS_BY_ID = Object.freeze({
|
|
@@ -81,16 +81,32 @@ var CLI_ACCESS_BY_ID = Object.freeze({
|
|
|
81
81
|
"bing.connect": "write",
|
|
82
82
|
"bing.coverage": "write",
|
|
83
83
|
"bing.coverage-history": "stored",
|
|
84
|
+
"bing.crawl-stats": "stored",
|
|
84
85
|
"bing.disconnect": "write",
|
|
86
|
+
"bing.fetched-urls": "live",
|
|
85
87
|
"bing.inspect": "write",
|
|
86
88
|
"bing.inspect-sitemap": "write",
|
|
87
89
|
"bing.inspections": "stored",
|
|
88
|
-
"bing.
|
|
90
|
+
"bing.keyword-demand": "stored",
|
|
91
|
+
"bing.keywords": "live",
|
|
92
|
+
"bing.links": "live",
|
|
93
|
+
"bing.page-queries": "live",
|
|
94
|
+
"bing.pages": "stored",
|
|
95
|
+
"bing.performance": "stored",
|
|
96
|
+
"bing.queries": "stored",
|
|
97
|
+
"bing.query-history": "live",
|
|
98
|
+
"bing.query-pages": "live",
|
|
89
99
|
"bing.refresh": "write",
|
|
90
100
|
"bing.request-indexing": "write",
|
|
91
101
|
"bing.set-site": "write",
|
|
102
|
+
"bing.site": "stored",
|
|
103
|
+
"bing.sitemaps": "stored",
|
|
92
104
|
"bing.sites": "live",
|
|
93
105
|
"bing.status": "stored",
|
|
106
|
+
"bing.sync": "write",
|
|
107
|
+
"bing.traffic": "stored",
|
|
108
|
+
"bing.url-children": "live",
|
|
109
|
+
"bing.url-traffic": "live",
|
|
94
110
|
"bootstrap": "write",
|
|
95
111
|
"cdp": "stored",
|
|
96
112
|
"cdp.connect": "write",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createLogger
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BDLC3DFM.js";
|
|
4
4
|
import {
|
|
5
5
|
addLikelyFakeAgentHits,
|
|
6
6
|
correctBackgroundCallJourneys,
|
|
7
7
|
mergeSplitJourneyVisitors,
|
|
8
8
|
writeUnrecognizedAgentBuckets
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4VMHN5LL.js";
|
|
10
10
|
import {
|
|
11
11
|
AGENT_TRUST_RULES_VERSION,
|
|
12
12
|
BROWSER_SHAPED_AGENT_MARKERS,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
isSelfTraffic,
|
|
24
24
|
normalizeTrafficPathPattern,
|
|
25
25
|
unrecognizedAgentName
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-IR3MYKIA.js";
|
|
27
27
|
import {
|
|
28
28
|
RawEventSampleEventTypes,
|
|
29
29
|
agentJourneyCaptureDays,
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
rawEventSamples,
|
|
37
37
|
trafficReclassificationState,
|
|
38
38
|
unrecognizedAgentEventsHourly
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-ZQGWB7VJ.js";
|
|
40
40
|
import {
|
|
41
41
|
AI_ENGINE_DOMAINS,
|
|
42
42
|
AI_ENGINE_SELF_DOMAINS,
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
retryAfterDelayMs,
|
|
70
70
|
usageCount,
|
|
71
71
|
withRetry
|
|
72
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
73
73
|
|
|
74
74
|
// ../provider-openai/src/normalize.ts
|
|
75
75
|
import OpenAI from "openai";
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
dedupeGscSitemapUrls,
|
|
3
3
|
resolveDiscoveredGscSitemapUrls,
|
|
4
4
|
submitGscSitemapBatches
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PZLEKWYA.js";
|
|
6
6
|
import {
|
|
7
7
|
measurementDraftOperationSchema,
|
|
8
8
|
runMeasurementDraftAction
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-FL76YWYN.js";
|
|
10
10
|
import {
|
|
11
11
|
CliError
|
|
12
12
|
} from "./chunk-HGMYEDAQ.js";
|
|
@@ -46,6 +46,7 @@ import {
|
|
|
46
46
|
apiKeyDtoSchema,
|
|
47
47
|
auditHistoryQuerySchema,
|
|
48
48
|
backlinkSourceSchema,
|
|
49
|
+
bingSiteSnapshotKindSchema,
|
|
49
50
|
calendarDateSchema,
|
|
50
51
|
canonicalizeGtmAccountId,
|
|
51
52
|
canonicalizeGtmResourceSelection,
|
|
@@ -186,7 +187,7 @@ import {
|
|
|
186
187
|
trendSurfaceSchema,
|
|
187
188
|
visibilityCompareSelectionSchema,
|
|
188
189
|
visibilityReportRequestSchema
|
|
189
|
-
} from "./chunk-
|
|
190
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
190
191
|
|
|
191
192
|
// src/mcp/tool-registry.ts
|
|
192
193
|
import { z as z2 } from "zod";
|
|
@@ -486,6 +487,59 @@ var gscPerformanceInputSchema = z2.object({
|
|
|
486
487
|
orderBy: gscPerformanceOrderBySchema.optional(),
|
|
487
488
|
window: analyticsWindowSchema.optional()
|
|
488
489
|
});
|
|
490
|
+
var bingWindowShape = {
|
|
491
|
+
project: projectNameSchema,
|
|
492
|
+
startDate: z2.string().optional().describe("First day, YYYY-MM-DD. Wins over days."),
|
|
493
|
+
endDate: z2.string().optional().describe("Last day, YYYY-MM-DD."),
|
|
494
|
+
days: z2.number().int().positive().optional().describe("Span in days ending at endDate or at the newest stored day (default 28).")
|
|
495
|
+
};
|
|
496
|
+
var bingWindowInputSchema = z2.object(bingWindowShape);
|
|
497
|
+
var bingQueriesInputSchema = z2.object({
|
|
498
|
+
...bingWindowShape,
|
|
499
|
+
query: z2.string().optional().describe("Substring filter on the query."),
|
|
500
|
+
groupBy: z2.enum(["query", "week"]).optional(),
|
|
501
|
+
limit: z2.number().int().positive().max(5e3).optional(),
|
|
502
|
+
offset: z2.number().int().nonnegative().optional()
|
|
503
|
+
});
|
|
504
|
+
var bingPagesInputSchema = z2.object({
|
|
505
|
+
...bingWindowShape,
|
|
506
|
+
page: z2.string().optional().describe("Substring filter on the page URL."),
|
|
507
|
+
groupBy: z2.enum(["page", "week"]).optional(),
|
|
508
|
+
limit: z2.number().int().positive().max(5e3).optional(),
|
|
509
|
+
offset: z2.number().int().nonnegative().optional()
|
|
510
|
+
});
|
|
511
|
+
var bingSiteInputSchema = z2.object({
|
|
512
|
+
project: projectNameSchema,
|
|
513
|
+
kind: bingSiteSnapshotKindSchema.optional()
|
|
514
|
+
});
|
|
515
|
+
var bingKeywordDemandInputSchema = z2.object({
|
|
516
|
+
project: projectNameSchema,
|
|
517
|
+
query: z2.string().optional().describe("A tracked query whose weekly history to include.")
|
|
518
|
+
});
|
|
519
|
+
var bingQueryPagesInputSchema = z2.object({ project: projectNameSchema, query: z2.string().min(1) });
|
|
520
|
+
var bingPageQueriesInputSchema = z2.object({ project: projectNameSchema, page: z2.string().url() });
|
|
521
|
+
var bingQueryHistoryInputSchema = z2.object({ project: projectNameSchema, query: z2.string().min(1), page: z2.string().url().optional() });
|
|
522
|
+
var bingUrlTrafficInputSchema = z2.object({
|
|
523
|
+
project: projectNameSchema,
|
|
524
|
+
url: z2.string().url(),
|
|
525
|
+
children: z2.boolean().optional(),
|
|
526
|
+
page: z2.number().int().nonnegative().optional()
|
|
527
|
+
});
|
|
528
|
+
var bingKeywordsInputSchema = z2.object({
|
|
529
|
+
project: projectNameSchema,
|
|
530
|
+
keyword: z2.string().min(1),
|
|
531
|
+
country: z2.string().optional().describe("Market country, such as us. Defaults to the project country."),
|
|
532
|
+
language: z2.string().optional().describe("Market language tag, such as en-US. Defaults from the project."),
|
|
533
|
+
startDate: z2.string().optional(),
|
|
534
|
+
endDate: z2.string().optional()
|
|
535
|
+
});
|
|
536
|
+
function bingWindowQuery(input) {
|
|
537
|
+
return {
|
|
538
|
+
...input.startDate ? { startDate: input.startDate } : {},
|
|
539
|
+
...input.endDate ? { endDate: input.endDate } : {},
|
|
540
|
+
...input.days !== void 0 ? { days: String(input.days) } : {}
|
|
541
|
+
};
|
|
542
|
+
}
|
|
489
543
|
var gscPerformanceDailyInputSchema = z2.object({
|
|
490
544
|
project: projectNameSchema,
|
|
491
545
|
startDate: z2.string().optional(),
|
|
@@ -2465,6 +2519,159 @@ var rawCanonryMcpTools = [
|
|
|
2465
2519
|
openApiOperations: ["GET /api/v1/projects/{name}/bing/coverage"],
|
|
2466
2520
|
handler: (client, input) => client.bingCoverage(input.project)
|
|
2467
2521
|
}),
|
|
2522
|
+
defineTool({
|
|
2523
|
+
name: "canonry_bing_sync",
|
|
2524
|
+
title: "Sync Bing data",
|
|
2525
|
+
description: "Queue a full Bing Webmaster sync for a project: daily site clicks and impressions, weekly query and page stats, daily crawl stats, sitemaps, site settings (submission quotas, crawl settings, blocked URLs, URL parameters, geo-targeting, preview and sitelink blocks, Fetch as Bingbot history, crawl issues) and weekly search demand for tracked queries. Makes about 20 to 50 calls to Bing, paced on the shared account limit. Runs daily as part of the data refresh; trigger it only when stored data is missing or stale. Returns the queued run.",
|
|
2526
|
+
access: "write",
|
|
2527
|
+
tier: "bing",
|
|
2528
|
+
inputSchema: projectInputSchema,
|
|
2529
|
+
annotations: writeAnnotations({ idempotentHint: true, openWorldHint: true }),
|
|
2530
|
+
openApiOperations: ["POST /api/v1/projects/{name}/bing/sync"],
|
|
2531
|
+
handler: (client, input) => client.bingSync(input.project)
|
|
2532
|
+
}),
|
|
2533
|
+
defineTool({
|
|
2534
|
+
name: "canonry_bing_traffic",
|
|
2535
|
+
title: "Get Bing traffic",
|
|
2536
|
+
description: "Get stored daily Bing search clicks and impressions for the whole site, with window totals and CTR (no call to Bing). These daily rows are the site total; use them for Bing headline numbers, never a sum of canonry_bing_queries rows. latestAvailableDate is the newest stored day (Bing lags 2 to 3 days); earliestAvailableDate says how far back history goes.",
|
|
2537
|
+
access: "read",
|
|
2538
|
+
tier: "bing",
|
|
2539
|
+
inputSchema: bingWindowInputSchema,
|
|
2540
|
+
annotations: readAnnotations(),
|
|
2541
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/traffic"],
|
|
2542
|
+
handler: (client, input) => client.bingTraffic(input.project, bingWindowQuery(input))
|
|
2543
|
+
}),
|
|
2544
|
+
defineTool({
|
|
2545
|
+
name: "canonry_bing_queries",
|
|
2546
|
+
title: "Get Bing query stats",
|
|
2547
|
+
description: "Get stored Bing search stats per query (no call to Bing). Bing reports queries per WEEK, so each row sums the weekly buckets inside the window, with impression-weighted position and the number of weeks it appeared. Bing names only some queries: never sum rows for a site total, use canonry_bing_traffic. groupBy=week returns weekly totals instead, for a trend. Page with limit/offset until truncated is false.",
|
|
2548
|
+
access: "read",
|
|
2549
|
+
tier: "bing",
|
|
2550
|
+
inputSchema: bingQueriesInputSchema,
|
|
2551
|
+
annotations: readAnnotations(),
|
|
2552
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/queries"],
|
|
2553
|
+
handler: (client, input) => client.bingQueries(input.project, { ...bingWindowQuery(input), query: input.query, groupBy: input.groupBy, limit: input.limit, offset: input.offset })
|
|
2554
|
+
}),
|
|
2555
|
+
defineTool({
|
|
2556
|
+
name: "canonry_bing_pages",
|
|
2557
|
+
title: "Get Bing page stats",
|
|
2558
|
+
description: "Get stored Bing search stats per page URL (no call to Bing), summed from weekly buckets like canonry_bing_queries. groupBy=week returns weekly totals. Never sum rows for a site total; use canonry_bing_traffic.",
|
|
2559
|
+
access: "read",
|
|
2560
|
+
tier: "bing",
|
|
2561
|
+
inputSchema: bingPagesInputSchema,
|
|
2562
|
+
annotations: readAnnotations(),
|
|
2563
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/pages"],
|
|
2564
|
+
handler: (client, input) => client.bingPages(input.project, { ...bingWindowQuery(input), page: input.page, groupBy: input.groupBy, limit: input.limit, offset: input.offset })
|
|
2565
|
+
}),
|
|
2566
|
+
defineTool({
|
|
2567
|
+
name: "canonry_bing_crawl_stats",
|
|
2568
|
+
title: "Get Bing crawl stats",
|
|
2569
|
+
description: "Get stored daily Bingbot crawl counts (no call to Bing): pages crawled, pages in index, crawl errors, inbound links, HTTP 2xx/301/302/4xx/5xx counts, robots.txt blocks, timeouts, DNS failures and malware flags. Newest first.",
|
|
2570
|
+
access: "read",
|
|
2571
|
+
tier: "bing",
|
|
2572
|
+
inputSchema: bingWindowInputSchema,
|
|
2573
|
+
annotations: readAnnotations(),
|
|
2574
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/crawl-stats"],
|
|
2575
|
+
handler: (client, input) => client.bingCrawlStats(input.project, bingWindowQuery(input))
|
|
2576
|
+
}),
|
|
2577
|
+
defineTool({
|
|
2578
|
+
name: "canonry_bing_sitemaps",
|
|
2579
|
+
title: "Get Bing sitemaps",
|
|
2580
|
+
description: "Get the sitemaps Bing has for the site as of the last sync (no call to Bing): type, status, URL count, submitted and last-crawled dates. Child sitemaps carry the parentUrl of their sitemap index.",
|
|
2581
|
+
access: "read",
|
|
2582
|
+
tier: "bing",
|
|
2583
|
+
inputSchema: projectInputSchema,
|
|
2584
|
+
annotations: readAnnotations(),
|
|
2585
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/sitemaps"],
|
|
2586
|
+
handler: (client, input) => client.bingSitemaps(input.project)
|
|
2587
|
+
}),
|
|
2588
|
+
defineTool({
|
|
2589
|
+
name: "canonry_bing_site",
|
|
2590
|
+
title: "Get Bing site settings",
|
|
2591
|
+
description: "Get the stored Bing site settings (no call to Bing): URL and content submission quotas LEFT today and this month, crawl settings, crawl issues, blocked URLs, page preview blocks, sitelink blocks, URL parameters, geo-targeting, Fetch as Bingbot history, connected pages and user roles. status is unauthorized for owner-only settings this key cannot read. A blocked URL or preview block keeps a page out of Bing and Copilot answers.",
|
|
2592
|
+
access: "read",
|
|
2593
|
+
tier: "bing",
|
|
2594
|
+
inputSchema: bingSiteInputSchema,
|
|
2595
|
+
annotations: readAnnotations(),
|
|
2596
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/site"],
|
|
2597
|
+
handler: (client, input) => client.bingSite(input.project, input.kind ? { kind: input.kind } : void 0)
|
|
2598
|
+
}),
|
|
2599
|
+
defineTool({
|
|
2600
|
+
name: "canonry_bing_keyword_demand",
|
|
2601
|
+
title: "Get Bing keyword demand",
|
|
2602
|
+
description: "Get stored weekly Bing search volume for every tracked query in the project market (no call to Bing): average and latest weekly exact-match searches, broad-match searches and weeks stored. This is demand for the query, not traffic to the site. Pass query to include that query's weekly history. Refreshed weekly by the Bing sync.",
|
|
2603
|
+
access: "read",
|
|
2604
|
+
tier: "bing",
|
|
2605
|
+
inputSchema: bingKeywordDemandInputSchema,
|
|
2606
|
+
annotations: readAnnotations(),
|
|
2607
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/keyword-demand"],
|
|
2608
|
+
handler: (client, input) => client.bingKeywordDemand(input.project, input.query ? { query: input.query } : void 0)
|
|
2609
|
+
}),
|
|
2610
|
+
defineTool({
|
|
2611
|
+
name: "canonry_bing_query_pages",
|
|
2612
|
+
title: "Get Bing pages for a query (live)",
|
|
2613
|
+
description: "Ask Bing live which of the site's pages showed for one search query, per week (one call to Bing). Use it to find the page Bing ranks for a query.",
|
|
2614
|
+
access: "read",
|
|
2615
|
+
tier: "bing",
|
|
2616
|
+
inputSchema: bingQueryPagesInputSchema,
|
|
2617
|
+
annotations: readAnnotations(true),
|
|
2618
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/query-pages"],
|
|
2619
|
+
handler: (client, input) => client.bingQueryPages(input.project, input.query)
|
|
2620
|
+
}),
|
|
2621
|
+
defineTool({
|
|
2622
|
+
name: "canonry_bing_page_queries",
|
|
2623
|
+
title: "Get Bing queries for a page (live)",
|
|
2624
|
+
description: "Ask Bing live which search queries one page showed for, per week (one call to Bing).",
|
|
2625
|
+
access: "read",
|
|
2626
|
+
tier: "bing",
|
|
2627
|
+
inputSchema: bingPageQueriesInputSchema,
|
|
2628
|
+
annotations: readAnnotations(true),
|
|
2629
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/page-queries"],
|
|
2630
|
+
handler: (client, input) => client.bingPageQueries(input.project, input.page)
|
|
2631
|
+
}),
|
|
2632
|
+
defineTool({
|
|
2633
|
+
name: "canonry_bing_query_history",
|
|
2634
|
+
title: "Get Bing query history (live)",
|
|
2635
|
+
description: "Ask Bing live for one query's clicks and impressions per day, or per week with position when page is given (one call to Bing).",
|
|
2636
|
+
access: "read",
|
|
2637
|
+
tier: "bing",
|
|
2638
|
+
inputSchema: bingQueryHistoryInputSchema,
|
|
2639
|
+
annotations: readAnnotations(true),
|
|
2640
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/query-history"],
|
|
2641
|
+
handler: (client, input) => client.bingQueryHistory(input.project, { query: input.query, page: input.page })
|
|
2642
|
+
}),
|
|
2643
|
+
defineTool({
|
|
2644
|
+
name: "canonry_bing_url_traffic",
|
|
2645
|
+
title: "Get Bing traffic for a URL (live)",
|
|
2646
|
+
description: "Ask Bing live for one URL's clicks and impressions, optionally with the URLs under it (children, 0-indexed page). One or two calls to Bing.",
|
|
2647
|
+
access: "read",
|
|
2648
|
+
tier: "bing",
|
|
2649
|
+
inputSchema: bingUrlTrafficInputSchema,
|
|
2650
|
+
annotations: readAnnotations(true),
|
|
2651
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/url-traffic"],
|
|
2652
|
+
handler: (client, input) => client.bingUrlTraffic(input.project, {
|
|
2653
|
+
url: input.url,
|
|
2654
|
+
children: input.children ? "true" : void 0,
|
|
2655
|
+
page: input.page === void 0 ? void 0 : String(input.page)
|
|
2656
|
+
})
|
|
2657
|
+
}),
|
|
2658
|
+
defineTool({
|
|
2659
|
+
name: "canonry_bing_keywords",
|
|
2660
|
+
title: "Research a keyword on Bing (live)",
|
|
2661
|
+
description: "Ask Bing live for any keyword's search volume over a window, its weekly history and related keywords with their volume (three calls to Bing). Not tied to the site; use it to size demand for a topic or find new queries to track. impressions is exact-match volume, broadImpressions broad-match.",
|
|
2662
|
+
access: "read",
|
|
2663
|
+
tier: "bing",
|
|
2664
|
+
inputSchema: bingKeywordsInputSchema,
|
|
2665
|
+
annotations: readAnnotations(true),
|
|
2666
|
+
openApiOperations: ["GET /api/v1/projects/{name}/bing/keywords"],
|
|
2667
|
+
handler: (client, input) => client.bingKeywords(input.project, {
|
|
2668
|
+
keyword: input.keyword,
|
|
2669
|
+
country: input.country,
|
|
2670
|
+
language: input.language,
|
|
2671
|
+
startDate: input.startDate,
|
|
2672
|
+
endDate: input.endDate
|
|
2673
|
+
})
|
|
2674
|
+
}),
|
|
2468
2675
|
defineTool({
|
|
2469
2676
|
name: "canonry_gsc_sitemaps",
|
|
2470
2677
|
title: "Get GSC sitemaps",
|
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
bucketCliCommandDuration,
|
|
3
3
|
isTelemetryEnabled,
|
|
4
4
|
trackEvent
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4A4X7VXE.js";
|
|
6
6
|
import {
|
|
7
7
|
getConfigDir
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-5KDJJO2N.js";
|
|
9
9
|
import {
|
|
10
10
|
currentOutcomeAttribution
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-IPOYH4WE.js";
|
|
12
12
|
import {
|
|
13
13
|
AGENT_NONE,
|
|
14
14
|
OutcomeSurfaces,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
integrationConnectionPropertiesSchema,
|
|
20
20
|
normalizeAgentSlug,
|
|
21
21
|
usageSurfaceSchema
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-Q2SJRZA3.js";
|
|
23
23
|
|
|
24
24
|
// src/outcome-telemetry.ts
|
|
25
25
|
import fs from "fs";
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
siteCrawlGraphNodes,
|
|
6
6
|
siteCrawlPages,
|
|
7
7
|
siteCrawlSnapshots
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-ZQGWB7VJ.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-Q2SJRZA3.js";
|
|
19
19
|
|
|
20
20
|
// src/site-audit-factors.ts
|
|
21
21
|
function recordedSharePct(factor) {
|