@canonry/canonry 7.60.0 → 7.61.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/canonry/references/canonry-cli.md +1 -0
- package/assets/assets/{AgentSetupPage-xAe2RSTQ.js → AgentSetupPage-CCMNQwRE.js} +1 -1
- package/assets/assets/{AuditHistoryPanel-DRGMxc1o.js → AuditHistoryPanel-B8mIRI3I.js} +1 -1
- package/assets/assets/{BacklinksPage-OS6r_MtQ.js → BacklinksPage-BNLyIR97.js} +1 -1
- package/assets/assets/{HistoryPage-RDxUN7rD.js → HistoryPage-DSr9KE16.js} +1 -1
- package/assets/assets/InfoTooltip-BbdxCAup.js +1 -0
- package/assets/assets/{MeasurementPropertyPage-BVAmJBKa.js → MeasurementPropertyPage-BTg-SFW7.js} +1 -1
- package/assets/assets/{ProjectPage-BWY9eFFx.js → ProjectPage-SqE0fkEq.js} +7 -7
- package/assets/assets/{RunsPage-Fb7IM6iV.js → RunsPage-gJR17ho1.js} +1 -1
- package/assets/assets/{SettingsPage-Dz_agQCf.js → SettingsPage-DY5f_oN4.js} +1 -1
- package/assets/assets/{SiteHealthSection-TXp2Cszl.js → SiteHealthSection-BYx91hP-.js} +2 -2
- package/assets/assets/ToneBadge-C3S7aVf3.js +60 -0
- package/assets/assets/{TrafficPage-BKfgooKl.js → TrafficPage-CCXH5nhh.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-C1HM_4Mh.js → TrafficSourceDetailPage-DTjCsu4-.js} +1 -1
- package/assets/assets/{account-context-sj3dKq-a.js → account-context-DozTQM44.js} +1 -1
- package/assets/assets/{card-DKV0mNmm.js → card-D8MU7RYV.js} +1 -1
- package/assets/assets/{extract-error-message-Tfdo6vAJ.js → extract-error-message-CsVYPTyt.js} +1 -1
- package/assets/assets/{format-helpers-BagbvnfZ.js → format-helpers-CWBooMJJ.js} +1 -1
- package/assets/assets/{index-7G0DHKIO.js → index-D5o-caTl.js} +4 -4
- package/assets/assets/index-DqhMdZUM.css +1 -0
- package/assets/assets/{query-client-7P_Wczfa.js → query-client-DbxlHfUm.js} +1 -1
- package/assets/assets/{react-query-agN8P-yg.js → react-query-D4ZSMg7h.js} +1 -1
- package/assets/assets/{react-sigma_core.esm.min-CHz1PIYq.js → react-sigma_core.esm.min-CSRp4hew.js} +1 -1
- package/assets/assets/{service-CAV4dMit.js → service-CYzJmCXU.js} +1 -1
- package/assets/index.html +9 -9
- package/dist/{ads-A42JBQ5Q.js → ads-Z2SNR2F5.js} +3 -3
- package/dist/{agent-ZKKHPMOB.js → agent-UUDYXXRD.js} +7 -7
- package/dist/{agent-ask-SMV76QZM.js → agent-ask-KCZKPBY7.js} +3 -3
- package/dist/{agent-conversations-O5QA3MHR.js → agent-conversations-CDQA7HOU.js} +3 -3
- package/dist/{agent-memory-ZRJQ6SZU.js → agent-memory-MER75L4L.js} +3 -3
- package/dist/{agent-providers-EOXIPRXN.js → agent-providers-RH7W5HYA.js} +3 -3
- package/dist/{agent-transcript-4TB2VI5E.js → agent-transcript-VU2VHSZ6.js} +3 -3
- package/dist/{analytics-KSHS32RJ.js → analytics-BDVOFX6O.js} +30 -8
- package/dist/{apply-4ZZMONED.js → apply-XJULCLGT.js} +3 -3
- package/dist/{backfill-DJIIN5ZR.js → backfill-SCB3KOTF.js} +9 -9
- package/dist/{backlinks-XIAPORR5.js → backlinks-HCSL6KKT.js} +3 -3
- package/dist/{bing-QDZXI334.js → bing-AEUPBLV6.js} +3 -3
- package/dist/{bootstrap-7RAGKHJZ.js → bootstrap-J73OTQWI.js} +10 -10
- package/dist/{cdp-3OX3WGWN.js → cdp-2UQER2VR.js} +7 -7
- package/dist/{chunk-O7KIDW4H.js → chunk-34HGKT6I.js} +1 -1
- package/dist/{chunk-Z7WG6F7Q.js → chunk-3A7LI5KI.js} +3 -3
- package/dist/{chunk-QRC6SDPF.js → chunk-3E7NFLYB.js} +338 -336
- package/dist/{chunk-7KEIZ5OO.js → chunk-4UTPB5KB.js} +8 -8
- package/dist/{chunk-IDPAYZHR.js → chunk-5AV2OUCJ.js} +1 -1
- package/dist/{chunk-GLFE3Q3C.js → chunk-5PYPNDIE.js} +3 -3
- package/dist/{chunk-FCPIOH6P.js → chunk-7VEXNHRX.js} +1 -1
- package/dist/{chunk-HV5MGQYI.js → chunk-B5KK54RE.js} +3 -3
- package/dist/{chunk-OA6N3BI7.js → chunk-BKNIXYMI.js} +4 -4
- package/dist/{chunk-QEG7BSLH.js → chunk-CZSHCZHW.js} +1 -1
- package/dist/{chunk-XJF7LMGU.js → chunk-EKY6GHJ4.js} +4 -4
- package/dist/{chunk-Z63ZR6AD.js → chunk-FWRHDY4R.js} +1 -1
- package/dist/{chunk-L7WQTD3D.js → chunk-G3DZSUYD.js} +5 -5
- package/dist/{chunk-UHE4RLFW.js → chunk-G3ZNUINX.js} +1 -1
- package/dist/{chunk-DUYENNUI.js → chunk-GAA7JGB7.js} +2 -2
- package/dist/{chunk-3JV3PWNA.js → chunk-HD7AZIOP.js} +1 -1
- package/dist/{chunk-JDL4QAPT.js → chunk-IG6ISQYD.js} +12 -2
- package/dist/{chunk-66C7YITH.js → chunk-KX5IRN55.js} +1 -1
- package/dist/{chunk-D7ZU5LMK.js → chunk-MRNMDQRB.js} +1 -1
- package/dist/{chunk-QCSNNKFI.js → chunk-P5DZ56CR.js} +1 -1
- package/dist/{chunk-FKQPVB5B.js → chunk-QGXPQHDN.js} +20 -20
- package/dist/{chunk-4IV4FO3O.js → chunk-QP36LXT5.js} +36 -11
- package/dist/{chunk-7XSGAPN5.js → chunk-RL7LPPFU.js} +7 -6
- package/dist/{chunk-TLNHDCJF.js → chunk-SA4CG775.js} +2 -2
- package/dist/{chunk-2IBFY7KQ.js → chunk-SQ6AOE57.js} +2 -2
- package/dist/{chunk-SJNF5GN2.js → chunk-SZXYGJMI.js} +5 -4
- package/dist/{chunk-RLXNZRHD.js → chunk-TGZKOIZ3.js} +5 -5
- package/dist/{chunk-I32IFAB3.js → chunk-TYWTIYYM.js} +3 -3
- package/dist/{chunk-ADY24WBX.js → chunk-V7Q2FUHQ.js} +4 -4
- package/dist/{chunk-HGBIJIVM.js → chunk-VCSJHXW6.js} +1 -1
- package/dist/{chunk-7HZ7KRHT.js → chunk-VHHFAAMI.js} +1 -1
- package/dist/{chunk-ZK5WIVGA.js → chunk-W5FR6AJP.js} +2 -2
- package/dist/{chunk-NQTUPEBQ.js → chunk-XCA546YC.js} +1 -1
- package/dist/{chunk-G7VJEPDZ.js → chunk-YHTU4XBR.js} +2 -2
- package/dist/{citations-L3HFNQVU.js → citations-3X5EJNJ3.js} +3 -3
- package/dist/{cli-catalog-DJPRREDK.js → cli-catalog-F3IOEPJK.js} +3 -3
- package/dist/{cli-commands-4KG4X76Z.js → cli-commands-J7CI2RNW.js} +7 -7
- package/dist/cli.js +13 -13
- package/dist/{competitor-Q5LZ26U5.js → competitor-CUPGN4NZ.js} +3 -3
- package/dist/{content-WRVFNQSO.js → content-FYQT7V5A.js} +3 -3
- package/dist/{dashboard-GBP2T2AG.js → dashboard-WHWMMX7W.js} +6 -6
- package/dist/{demo-JMLMPLJ6.js → demo-CNTR3ZXS.js} +1 -1
- package/dist/{demo-server-AOVPBGZ7.js → demo-server-ZOV5HCDE.js} +11 -11
- package/dist/{discover-SKUNZE4Y.js → discover-4IGXLRRE.js} +3 -3
- package/dist/{discover-eval-57BEDSQN.js → discover-eval-DGLZO5MD.js} +3 -3
- package/dist/{doctor-DMLJGH6G.js → doctor-3MFTUIEU.js} +3 -3
- package/dist/{evidence-J4XF4W7O.js → evidence-ANE4SFP5.js} +3 -3
- package/dist/{export-cmd-3JXT2YAP.js → export-cmd-X6S5F463.js} +3 -3
- package/dist/{ga-KHILAPMC.js → ga-2UKFAVDJ.js} +3 -3
- package/dist/{gbp-PHOFQZNT.js → gbp-Q3V3SQMV.js} +3 -3
- package/dist/{google-QOLM2NBI.js → google-D4O4JCM4.js} +4 -4
- package/dist/{google-marketing-N37WUWNL.js → google-marketing-6L5327YK.js} +1 -1
- package/dist/{health-cmd-2FUEPUJZ.js → health-cmd-7TPQHGKK.js} +3 -3
- package/dist/{history-MOSRCLAD.js → history-NNUOPNA7.js} +3 -3
- package/dist/index.d.ts +6 -6
- package/dist/index.js +24 -24
- package/dist/{init-V6ER2PJV.js → init-NCJ6KXTS.js} +11 -11
- package/dist/{insights-F3MT66IV.js → insights-DDAP3MRC.js} +3 -3
- package/dist/intelligence-service-O4BALXZK.js +15 -0
- package/dist/{journeys-DNS3EZNK.js → journeys-I7H25PPF.js} +3 -3
- package/dist/{keys-NPOLKCWZ.js → keys-YUJNNNV3.js} +3 -3
- package/dist/{keyword-AXEPIJQ7.js → keyword-25DDYT45.js} +3 -3
- package/dist/{logs-ECEDVUTX.js → logs-FKPJ4L5R.js} +3 -3
- package/dist/{mcp-HUIRIY74.js → mcp-ZPLVNLL3.js} +2 -2
- package/dist/mcp.js +9 -9
- package/dist/{measurement-plan-5Y2IHH43.js → measurement-plan-CDY63CLU.js} +5 -5
- package/dist/{notify-PIFCJ7WM.js → notify-67IIWOSF.js} +3 -3
- package/dist/{organic-evidence-S2IE5XV6.js → organic-evidence-P2BQK2BV.js} +3 -3
- package/dist/{overview-TZT7C4U4.js → overview-WHSTSNS2.js} +4 -4
- package/dist/{project-HIY673Y5.js → project-7AMXFZMD.js} +3 -3
- package/dist/{query-FUJIMFJQ.js → query-RLKE6JHY.js} +3 -3
- package/dist/{research-ECGEXWID.js → research-PDOE77HZ.js} +3 -3
- package/dist/{results-export-7DRGFNUX.js → results-export-5VKTQLOR.js} +3 -3
- package/dist/{run-4JEDD5VT.js → run-QXCB4AWO.js} +4 -4
- package/dist/{schedule-NRHQXHTW.js → schedule-NDM2GBBW.js} +3 -3
- package/dist/{search-M7PNZZZL.js → search-DDRSJUWZ.js} +3 -3
- package/dist/{serve-RXLQEALQ.js → serve-YWBWBUBR.js} +25 -25
- package/dist/{session-MCSZQR5V.js → session-HCGHUWAV.js} +12 -12
- package/dist/{settings-JXOYI7VV.js → settings-Q2ZOEA7H.js} +3 -3
- package/dist/{skills-SRUXD2PV.js → skills-PKSEX44J.js} +2 -2
- package/dist/{snapshot-7N4BEGGM.js → snapshot-URNBVDTA.js} +3 -3
- package/dist/{src-ZAAE3NIM.js → src-MAMJVGSJ.js} +2 -2
- package/dist/{status-5OYYSMAY.js → status-DDXVX4KE.js} +4 -4
- package/dist/{technical-aeo-464OUUWT.js → technical-aeo-OS6KQXAP.js} +3 -3
- package/dist/{telemetry-BZFNXACR.js → telemetry-G7GX2LIY.js} +4 -4
- package/dist/{tools-YVWC3NTG.js → tools-C3I2X3IS.js} +11 -11
- package/dist/{traffic-WXJHRB7H.js → traffic-A4QW7455.js} +5 -5
- package/dist/{users-U2UNKGDY.js → users-4WPDDCCR.js} +3 -3
- package/dist/{visibility-stats-AHGME46N.js → visibility-stats-5BY7GVUV.js} +3 -3
- package/dist/{wordpress-FUVFZKH2.js → wordpress-T5EYN2WX.js} +3 -3
- package/package.json +1 -1
- package/assets/assets/InfoTooltip-DV3_9Qp1.js +0 -1
- package/assets/assets/ToneBadge-DZzQvXs_.js +0 -60
- package/assets/assets/index-DElT2Fss.css +0 -1
- package/dist/intelligence-service-S5DI74LD.js +0 -15
|
@@ -7,27 +7,27 @@ import {
|
|
|
7
7
|
reparseStoredResult4,
|
|
8
8
|
reparseStoredResult5,
|
|
9
9
|
resolveStoredApiResponse
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GAA7JGB7.js";
|
|
11
11
|
import {
|
|
12
12
|
loadConfig
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-CZSHCZHW.js";
|
|
14
14
|
import {
|
|
15
15
|
isMachineFormat
|
|
16
16
|
} from "./chunk-HGMYEDAQ.js";
|
|
17
17
|
import {
|
|
18
18
|
determineCitationState
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-G3ZNUINX.js";
|
|
20
20
|
import {
|
|
21
21
|
backfillProjectAnswerMentions,
|
|
22
22
|
competitorIdentityColumns,
|
|
23
23
|
createRunCompetitorResolver,
|
|
24
24
|
readMarketCompetitorNames,
|
|
25
25
|
refreshSnapshotMentionIdentity
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-QP36LXT5.js";
|
|
27
27
|
import {
|
|
28
28
|
classifyAiUserFetch,
|
|
29
29
|
classifyCrawler
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-34HGKT6I.js";
|
|
31
31
|
import {
|
|
32
32
|
aiUserFetchEventsHourly,
|
|
33
33
|
auditLog,
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
querySnapshots,
|
|
43
43
|
rawEventSamples,
|
|
44
44
|
runs
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-HD7AZIOP.js";
|
|
46
46
|
import {
|
|
47
47
|
ProviderNames,
|
|
48
48
|
RetrievalContracts,
|
|
@@ -59,7 +59,7 @@ import {
|
|
|
59
59
|
extractRecommendedCompetitors,
|
|
60
60
|
normalizeUrlPath,
|
|
61
61
|
openRouterRouteModel
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-IG6ISQYD.js";
|
|
63
63
|
|
|
64
64
|
// src/commands/backfill.ts
|
|
65
65
|
import { setImmediate as yieldToEventLoop } from "timers/promises";
|
|
@@ -437,7 +437,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
|
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
439
|
async function backfillInsightsCommand(project, opts) {
|
|
440
|
-
const { IntelligenceService } = await import("./intelligence-service-
|
|
440
|
+
const { IntelligenceService } = await import("./intelligence-service-O4BALXZK.js");
|
|
441
441
|
const config = loadConfig();
|
|
442
442
|
const db = createClient(config.database);
|
|
443
443
|
migrate(db);
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
resolveCliAccess,
|
|
4
4
|
resolveCliAccessForInvocation,
|
|
5
5
|
windowOptions
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VHHFAAMI.js";
|
|
7
7
|
import {
|
|
8
8
|
emitJsonl
|
|
9
9
|
} from "./chunk-Z7IUAJOF.js";
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-HGMYEDAQ.js";
|
|
15
15
|
import {
|
|
16
16
|
OperationAccesses
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-IG6ISQYD.js";
|
|
18
18
|
|
|
19
19
|
// src/cli-catalog.ts
|
|
20
20
|
import { createRequire } from "module";
|
|
@@ -111,7 +111,7 @@ async function dispatchRegisteredCommand(args, fallbackFormat, specs) {
|
|
|
111
111
|
const accessValue = accessFilterFromArgs(argsWithoutHelp);
|
|
112
112
|
validateAccessFilter(accessValue);
|
|
113
113
|
if (fallbackFormat !== "text") {
|
|
114
|
-
const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-
|
|
114
|
+
const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-F3IOEPJK.js");
|
|
115
115
|
const group2 = argsWithoutHelp.find((arg) => !arg.startsWith("--"));
|
|
116
116
|
printCliCatalog2(specs, fallbackFormat, group2, accessValue);
|
|
117
117
|
return true;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createApiClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SZXYGJMI.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-MRNMDQRB.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-IG6ISQYD.js";
|
|
41
41
|
|
|
42
42
|
// src/commands/measurement-plan.ts
|
|
43
43
|
import crypto from "crypto";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runWithUsageTags
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SZXYGJMI.js";
|
|
4
4
|
import {
|
|
5
5
|
CanonryMcpToolNames,
|
|
6
6
|
canonryMcpTools
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RL7LPPFU.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-QP36LXT5.js";
|
|
14
14
|
import {
|
|
15
15
|
DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
|
|
16
16
|
MeasurementPortfolioLists,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
formatPercent,
|
|
21
21
|
ratioUnitSchema,
|
|
22
22
|
truncateUtf16
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-IG6ISQYD.js";
|
|
24
24
|
|
|
25
25
|
// src/agent/tools.ts
|
|
26
26
|
import { Type as Type2 } from "@earendil-works/pi-ai";
|
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
bucketCliCommandDuration,
|
|
3
3
|
isTelemetryEnabled,
|
|
4
4
|
trackEvent
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-YHTU4XBR.js";
|
|
6
6
|
import {
|
|
7
7
|
getConfigDir
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-CZSHCZHW.js";
|
|
9
9
|
import {
|
|
10
10
|
currentOutcomeAttribution
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KX5IRN55.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-IG6ISQYD.js";
|
|
23
23
|
|
|
24
24
|
// src/outcome-telemetry.ts
|
|
25
25
|
import fs from "fs";
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
isStoredPageReadTool,
|
|
6
6
|
isStoredReadTool,
|
|
7
7
|
truncateToolResult
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-BKNIXYMI.js";
|
|
9
9
|
import {
|
|
10
10
|
CANONRY_MCP_TOOLKITS
|
|
11
11
|
} from "./chunk-NCIPNVD6.js";
|
|
@@ -22,15 +22,15 @@ import {
|
|
|
22
22
|
resolveApiKeyFor,
|
|
23
23
|
resolveModelForProvider,
|
|
24
24
|
validateAgentProviderRegistry
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-CZSHCZHW.js";
|
|
26
26
|
import {
|
|
27
27
|
CanonryMcpToolNames,
|
|
28
28
|
canonryMcpTools
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-RL7LPPFU.js";
|
|
30
30
|
import {
|
|
31
31
|
agentToolEvents,
|
|
32
32
|
llmUsageEvents
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-HD7AZIOP.js";
|
|
34
34
|
import {
|
|
35
35
|
MeasurementPortfolioLists,
|
|
36
36
|
agentTurnLimitsSchema,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
describeError,
|
|
39
39
|
validationError,
|
|
40
40
|
visibilityReportRequestSchema
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-IG6ISQYD.js";
|
|
42
42
|
|
|
43
43
|
// src/agent/session.ts
|
|
44
44
|
import fs3 from "fs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseJsonColumn
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HD7AZIOP.js";
|
|
4
4
|
import {
|
|
5
5
|
AI_ENGINE_DOMAINS,
|
|
6
6
|
AI_ENGINE_SELF_DOMAINS,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
retryAfterDelayMs,
|
|
27
27
|
usageCount,
|
|
28
28
|
withRetry
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-IG6ISQYD.js";
|
|
30
30
|
|
|
31
31
|
// ../provider-openai/src/normalize.ts
|
|
32
32
|
import OpenAI from "openai";
|
|
@@ -10901,6 +10901,13 @@ var brandMetricsDtoSchema = z26.object({
|
|
|
10901
10901
|
window: metricsWindowSchema,
|
|
10902
10902
|
/** Scope that applies even when `buckets` is empty. `pooled` means classification was unavailable. */
|
|
10903
10903
|
mentionShareScope: z26.enum(["non-brand", "pooled"]),
|
|
10904
|
+
/**
|
|
10905
|
+
* The answers every rate, bucket, change and query-set event in this response
|
|
10906
|
+
* reads: `branded` or `non-brand` only, or `all` for both pooled. Mention
|
|
10907
|
+
* share is always non-brand, so it is empty under `branded`. A server that
|
|
10908
|
+
* predates the field read `all`.
|
|
10909
|
+
*/
|
|
10910
|
+
queryClass: queryClassFilterSchema.default("all"),
|
|
10904
10911
|
buckets: z26.array(timeBucketSchema),
|
|
10905
10912
|
overall: providerMetricSchema,
|
|
10906
10913
|
byProvider: z26.record(z26.string(), providerMetricSchema),
|
|
@@ -19049,6 +19056,7 @@ function classifyJourneyEntry(signal) {
|
|
|
19049
19056
|
if (signal.clickNetwork) return { entryClass: "social", entryName: signal.clickNetwork, entryHost: null, paid: false };
|
|
19050
19057
|
return { entryClass: "direct", entryName: null, entryHost: null, paid: false };
|
|
19051
19058
|
}
|
|
19059
|
+
var SAFARI_FROZEN_IOS_VERSION_FROM = 26;
|
|
19052
19060
|
function journeyDeviceLabel(userAgent) {
|
|
19053
19061
|
const ua = userAgent ?? "";
|
|
19054
19062
|
if (!ua) return "Unknown device";
|
|
@@ -19067,8 +19075,10 @@ function journeyDeviceLabel(userAgent) {
|
|
|
19067
19075
|
})();
|
|
19068
19076
|
const ios = /(iPhone|iPad|iPod).*?OS (\d+)_(\d+)/.exec(ua);
|
|
19069
19077
|
if (ios) {
|
|
19070
|
-
const
|
|
19071
|
-
|
|
19078
|
+
const thirdParty = /CriOS|FxiOS|EdgiOS/.test(ua);
|
|
19079
|
+
const safariMajor = thirdParty ? NaN : Number(/Version\/(\d+)/.exec(ua)?.[1]);
|
|
19080
|
+
const iosVersion = safariMajor >= SAFARI_FROZEN_IOS_VERSION_FROM ? String(safariMajor) : `${ios[2]}.${ios[3]}`;
|
|
19081
|
+
return [ios[1], `iOS ${iosVersion}`, thirdParty ? browser : "Safari"].filter(Boolean).join(" \xB7 ");
|
|
19072
19082
|
}
|
|
19073
19083
|
const android = /Android (\d+(?:\.\d+)?)/.exec(ua);
|
|
19074
19084
|
if (android) return ["Android " + android[1], browser].filter(Boolean).join(" \xB7 ");
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
measurementDraftUpsertGroupRequestSchema,
|
|
24
24
|
measurementDraftUpsertMarketRequestSchema,
|
|
25
25
|
measurementDraftUpsertTargetRequestSchema
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-IG6ISQYD.js";
|
|
27
27
|
|
|
28
28
|
// src/measurement-draft-actions.ts
|
|
29
29
|
import { z } from "zod";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
answerServiceAdapters,
|
|
3
3
|
answerServiceDescriptors
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7VEXNHRX.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-G3DZSUYD.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-BKNIXYMI.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-XCA546YC.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-GAA7JGB7.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-EKY6GHJ4.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-P5DZ56CR.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-YHTU4XBR.js";
|
|
99
99
|
import {
|
|
100
100
|
createCanonryMcpServer
|
|
101
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-3A7LI5KI.js";
|
|
102
102
|
import {
|
|
103
103
|
CANONRY_MCP_TIERS,
|
|
104
104
|
CANONRY_MCP_TOOLKIT_NAMES
|
|
105
105
|
} from "./chunk-NCIPNVD6.js";
|
|
106
106
|
import {
|
|
107
107
|
ApiClient
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-SZXYGJMI.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-CZSHCZHW.js";
|
|
140
140
|
import {
|
|
141
141
|
getBundledSkillSnapshots
|
|
142
|
-
} from "./chunk-
|
|
142
|
+
} from "./chunk-5AV2OUCJ.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-W5FR6AJP.js";
|
|
150
150
|
import {
|
|
151
151
|
CanonryMcpToolNames,
|
|
152
152
|
canonryMcpTools
|
|
153
|
-
} from "./chunk-
|
|
153
|
+
} from "./chunk-RL7LPPFU.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-TGZKOIZ3.js";
|
|
166
166
|
import {
|
|
167
167
|
computeCitedCompetitorDomains,
|
|
168
168
|
determineCitationState
|
|
169
|
-
} from "./chunk-
|
|
169
|
+
} from "./chunk-G3ZNUINX.js";
|
|
170
170
|
import {
|
|
171
171
|
BingApiError,
|
|
172
172
|
CC_CACHE_DIR,
|
|
@@ -285,7 +285,7 @@ import {
|
|
|
285
285
|
webhookResponseReason,
|
|
286
286
|
webhookTargetRefusalReason,
|
|
287
287
|
writeAuditLog
|
|
288
|
-
} from "./chunk-
|
|
288
|
+
} from "./chunk-QP36LXT5.js";
|
|
289
289
|
import {
|
|
290
290
|
OperationalLogStore,
|
|
291
291
|
SentimentIdempotencyConflict,
|
|
@@ -371,7 +371,7 @@ import {
|
|
|
371
371
|
siteLivenessState,
|
|
372
372
|
trafficSources,
|
|
373
373
|
usageCounters
|
|
374
|
-
} from "./chunk-
|
|
374
|
+
} from "./chunk-HD7AZIOP.js";
|
|
375
375
|
import {
|
|
376
376
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
377
377
|
AI_ENGINE_DOMAINS,
|
|
@@ -616,7 +616,7 @@ import {
|
|
|
616
616
|
winnabilityClassLabel,
|
|
617
617
|
withRetry,
|
|
618
618
|
withSkippedProviders
|
|
619
|
-
} from "./chunk-
|
|
619
|
+
} from "./chunk-IG6ISQYD.js";
|
|
620
620
|
|
|
621
621
|
// src/google-marketing-runtime.ts
|
|
622
622
|
import crypto2 from "crypto";
|
|
@@ -5657,7 +5657,7 @@ function nonBlank(value) {
|
|
|
5657
5657
|
return trimmed ? trimmed : void 0;
|
|
5658
5658
|
}
|
|
5659
5659
|
function resolveBuildCommit(env = process.env) {
|
|
5660
|
-
const embedded = true ? "
|
|
5660
|
+
const embedded = true ? "702b9edacd9f89400cd610bf68d54b10bb1d246e" : void 0;
|
|
5661
5661
|
return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
|
|
5662
5662
|
}
|
|
5663
5663
|
function resolveInstanceIdentity(env = process.env) {
|
|
@@ -9,14 +9,14 @@ import {
|
|
|
9
9
|
normalizeCloudflareWorkerEvent,
|
|
10
10
|
sessionizeJourneyRequests,
|
|
11
11
|
verifyRequestSignature
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-34HGKT6I.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-KX5IRN55.js";
|
|
20
20
|
import {
|
|
21
21
|
SentimentIdempotencyConflict,
|
|
22
22
|
SentimentRepository,
|
|
@@ -154,7 +154,7 @@ import {
|
|
|
154
154
|
userSessions,
|
|
155
155
|
users,
|
|
156
156
|
writeNegativeReviewMaxStars
|
|
157
|
-
} from "./chunk-
|
|
157
|
+
} from "./chunk-HD7AZIOP.js";
|
|
158
158
|
import {
|
|
159
159
|
ADS_ACTIVATE_SCOPE,
|
|
160
160
|
ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
|
|
@@ -939,6 +939,7 @@ import {
|
|
|
939
939
|
providerSummaryEntryDtoSchema,
|
|
940
940
|
providersFailing,
|
|
941
941
|
qualifiedNameIncludesName,
|
|
942
|
+
queryClassFilterSchema,
|
|
942
943
|
queryDtoSchema,
|
|
943
944
|
queryGenerateRequestSchema,
|
|
944
945
|
queryGenerateResponseSchema,
|
|
@@ -1156,7 +1157,7 @@ import {
|
|
|
1156
1157
|
wordpressSchemaDeployResultDtoSchema,
|
|
1157
1158
|
wordpressSchemaStatusResultDtoSchema,
|
|
1158
1159
|
wordpressStatusDtoSchema
|
|
1159
|
-
} from "./chunk-
|
|
1160
|
+
} from "./chunk-IG6ISQYD.js";
|
|
1160
1161
|
|
|
1161
1162
|
// ../api-routes/src/user-session.ts
|
|
1162
1163
|
import crypto2 from "crypto";
|
|
@@ -27368,6 +27369,22 @@ async function analyticsRoutes(app) {
|
|
|
27368
27369
|
const project = resolveProject(app.db, request.params.name);
|
|
27369
27370
|
const classifyQuery = projectQueryClassifier(project);
|
|
27370
27371
|
const mentionShareScope = classifyQuery ? "non-brand" : "pooled";
|
|
27372
|
+
const parsedQueryClass = queryClassFilterSchema.safeParse(request.query.queryClass ?? "all");
|
|
27373
|
+
if (!parsedQueryClass.success) {
|
|
27374
|
+
throw validationError('"queryClass" must be one of: all, branded, non-brand', { issues: parsedQueryClass.error.issues });
|
|
27375
|
+
}
|
|
27376
|
+
const queryClass = parsedQueryClass.data;
|
|
27377
|
+
if (queryClass !== "all" && activeMeasurementPlan(app.db, project.id)?.plan.schemaVersion === 2) {
|
|
27378
|
+
throw validationError(
|
|
27379
|
+
`Query class "${queryClass}" on a published measurement plan follows its assignments. Read the split from GET /projects/${project.name}/visibility-report, or omit queryClass for pooled trends.`
|
|
27380
|
+
);
|
|
27381
|
+
}
|
|
27382
|
+
if (queryClass !== "all" && !classifyQuery) {
|
|
27383
|
+
throw validationError(
|
|
27384
|
+
`Query class "${queryClass}" needs a brand name or alias on this project. Add one, or omit queryClass for pooled trends.`
|
|
27385
|
+
);
|
|
27386
|
+
}
|
|
27387
|
+
const inQueryClass = (text) => queryClass === "all" || classifyQuery(text) === queryClass;
|
|
27371
27388
|
const window2 = parseWindow(request.query.window);
|
|
27372
27389
|
const cutoff = windowCutoff(window2);
|
|
27373
27390
|
const projectRuns = app.db.select().from(runs).where(and37(
|
|
@@ -27381,6 +27398,7 @@ async function analyticsRoutes(app) {
|
|
|
27381
27398
|
return reply.send({
|
|
27382
27399
|
window: window2,
|
|
27383
27400
|
mentionShareScope,
|
|
27401
|
+
queryClass,
|
|
27384
27402
|
buckets: [],
|
|
27385
27403
|
overall: { citationRate: 0, cited: 0, total: 0, mentionRate: 0, mentionedCount: 0 },
|
|
27386
27404
|
byProvider: {},
|
|
@@ -27437,7 +27455,7 @@ async function analyticsRoutes(app) {
|
|
|
27437
27455
|
// this far when its text matched the basket, so its key is never empty.)
|
|
27438
27456
|
basketKey: normalizeQueryText(s.queryText ?? (s.queryId ? queryTextById.get(s.queryId) ?? "" : "")) || s.queryId || "",
|
|
27439
27457
|
runBasketRevision: runBasketRevision.get(s.runId) ?? null
|
|
27440
|
-
}));
|
|
27458
|
+
})).filter((s) => queryClass === "all" || s.queryClass === queryClass);
|
|
27441
27459
|
const mentionShareCompetitors2 = mentionShareCompetitors(
|
|
27442
27460
|
app.db.select(competitorIdentityColumns).from(competitors).where(eq46(competitors.projectId, project.id)).orderBy(competitors.domain).all()
|
|
27443
27461
|
);
|
|
@@ -27603,17 +27621,17 @@ async function analyticsRoutes(app) {
|
|
|
27603
27621
|
const trend = computeTrend(buckets, "citationRate");
|
|
27604
27622
|
const mentionTrend = computeTrend(buckets, "mentionRate");
|
|
27605
27623
|
const windowChange = computeWindowChange(buckets);
|
|
27606
|
-
const queryChanges = computeQueryChanges(projectQueries, cutoff);
|
|
27624
|
+
const queryChanges = computeQueryChanges(projectQueries.filter((q) => inQueryClass(q.query)), cutoff);
|
|
27607
27625
|
const basketChanges = basketRevisions.slice(1).map((rev, i) => {
|
|
27608
27626
|
const previous = new Set(basketRevisions[i].members);
|
|
27609
27627
|
const current = new Set(rev.members);
|
|
27610
27628
|
return {
|
|
27611
27629
|
revision: rev.revision,
|
|
27612
27630
|
at: rev.createdAt,
|
|
27613
|
-
added: rev.members.filter((m) => !previous.has(m)),
|
|
27614
|
-
removed: basketRevisions[i].members.filter((m) => !current.has(m))
|
|
27631
|
+
added: rev.members.filter((m) => !previous.has(m) && inQueryClass(m)),
|
|
27632
|
+
removed: basketRevisions[i].members.filter((m) => !current.has(m) && inQueryClass(m))
|
|
27615
27633
|
};
|
|
27616
|
-
}).filter((change) => !cutoff || change.at >= cutoff);
|
|
27634
|
+
}).filter((change) => queryClass === "all" || change.added.length + change.removed.length > 0).filter((change) => !cutoff || change.at >= cutoff);
|
|
27617
27635
|
const executionIdentityChanges = [];
|
|
27618
27636
|
let previousExecutionChecksum = null;
|
|
27619
27637
|
for (const run of projectRuns) {
|
|
@@ -27624,7 +27642,7 @@ async function analyticsRoutes(app) {
|
|
|
27624
27642
|
}
|
|
27625
27643
|
previousExecutionChecksum = identity.checksum;
|
|
27626
27644
|
}
|
|
27627
|
-
return reply.send({ window: window2, mentionShareScope, buckets, overall, byProvider, trend, mentionTrend, windowChange, queryChanges, basketChanges, executionIdentityChanges, referenceBasketRevision: latestBasket?.revision ?? null, modelAttribution, servedModelAttribution, modelServiceMismatch, modelPointerChanges, competitorIdentityChangedAt: readCompetitorIdentityChangedAt(app.db, project.id), competitorSetChangedAt: readCompetitorSetChangedAt(app.db, project.id) });
|
|
27645
|
+
return reply.send({ window: window2, mentionShareScope, queryClass, buckets, overall, byProvider, trend, mentionTrend, windowChange, queryChanges, basketChanges, executionIdentityChanges, referenceBasketRevision: latestBasket?.revision ?? null, modelAttribution, servedModelAttribution, modelServiceMismatch, modelPointerChanges, competitorIdentityChangedAt: readCompetitorIdentityChangedAt(app.db, project.id), competitorSetChangedAt: readCompetitorSetChangedAt(app.db, project.id) });
|
|
27628
27646
|
});
|
|
27629
27647
|
app.get("/projects/:name/analytics/gaps", async (request, reply) => {
|
|
27630
27648
|
const project = resolveProject(app.db, request.params.name);
|
|
@@ -34290,6 +34308,12 @@ var sourcesQueryClassParameter = {
|
|
|
34290
34308
|
description: "Restrict to branded or non-brand answers. With an active v2 measurement plan the class comes from each run's frozen plan assignments (the same answers as the competitor landscape at scope=all-markets); otherwise from the project's brand-name classifier over the query text. Answers neither basis can place are excluded and counted in unclassifiedAnswers. Defaults to all, which pools both classes.",
|
|
34291
34309
|
schema: { type: "string", enum: ["all", "branded", "non-brand"] }
|
|
34292
34310
|
};
|
|
34311
|
+
var metricsQueryClassParameter = {
|
|
34312
|
+
name: "queryClass",
|
|
34313
|
+
in: "query",
|
|
34314
|
+
description: "Restrict every rate, bucket, change and query-set event to branded or non-brand answers, classified from the query text by the project's brand names (the same split mention share uses). Mention share stays non-brand, so it is empty under branded. Bucket boundaries do not move with the class, so the two classes plot on the same dates. 400 when the project has no brand name or alias to classify with, or has a published v2 measurement plan (its classes live on the plan assignments; read the split from the visibility report). Defaults to all, which pools both classes.",
|
|
34315
|
+
schema: { type: "string", enum: ["all", "branded", "non-brand"] }
|
|
34316
|
+
};
|
|
34293
34317
|
var sourcesIncludeByQueryParameter = {
|
|
34294
34318
|
name: "includeByQuery",
|
|
34295
34319
|
in: "query",
|
|
@@ -36804,9 +36828,10 @@ var routeCatalog = [
|
|
|
36804
36828
|
path: "/api/v1/projects/{name}/analytics/metrics",
|
|
36805
36829
|
summary: "Get citation trend analytics",
|
|
36806
36830
|
tags: ["analytics"],
|
|
36807
|
-
parameters: [nameParameter, analyticsWindowParameter],
|
|
36831
|
+
parameters: [nameParameter, analyticsWindowParameter, metricsQueryClassParameter],
|
|
36808
36832
|
responses: {
|
|
36809
36833
|
200: jsonResponse("Citation metrics returned.", "BrandMetricsDto"),
|
|
36834
|
+
400: errorResponse("Invalid query parameters."),
|
|
36810
36835
|
404: errorResponse("Project not found.")
|
|
36811
36836
|
}
|
|
36812
36837
|
},
|