@canonry/canonry 7.2.0 → 7.4.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/aeo-discovery.md +3 -2
- package/assets/agent-workspace/skills/aero/references/orchestration.md +1 -1
- package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +1 -1
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +33 -4
- package/assets/assets/{AuditHistoryPanel-Duvyi8vx.js → AuditHistoryPanel-DIL5oTHF.js} +1 -1
- package/assets/assets/{BacklinksPage-CY5AllQu.js → BacklinksPage-BpCURZh8.js} +1 -1
- package/assets/assets/{HistoryPage-C0Gr0gcj.js → HistoryPage-TPbexxzA.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-DrAB6VKX.js → MeasurementPropertyPage-H991GW9h.js} +1 -1
- package/assets/assets/ProjectPage-l1NAl-9k.js +8 -0
- package/assets/assets/{RunsPage-DMxOrtfl.js → RunsPage-Dhu7Qe7B.js} +1 -1
- package/assets/assets/{SettingsPage-sxiUNt2A.js → SettingsPage-BCG1QJ07.js} +1 -1
- package/assets/assets/SiteHealthSection-BXueYSiu.js +4 -0
- package/assets/assets/{TrafficPage-CvSQDNTi.js → TrafficPage-ua9wsccA.js} +3 -3
- package/assets/assets/{TrafficSourceDetailPage-BaYeIBmc.js → TrafficSourceDetailPage-pwATnkp8.js} +1 -1
- package/assets/assets/{extract-error-message-76IWhqQF.js → extract-error-message-DJfNdKqh.js} +1 -1
- package/assets/assets/{index-BlrH2zRW.js → index-DvWWyhGp.js} +21 -21
- package/assets/assets/{react-sigma_core.esm.min-CkAcKW2k.js → react-sigma_core.esm.min-DnbWY5j_.js} +1 -1
- package/assets/assets/{v2-overview-adapter-DnEE4E9w.js → v2-overview-adapter-BIOvZAlo.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-UIDHHZH3.js → chunk-GEKMHZS2.js} +293 -1267
- package/dist/{chunk-BYSSJEL7.js → chunk-JU6TPMCJ.js} +33 -11
- package/dist/{chunk-TY3CJKKR.js → chunk-PXRUWG75.js} +11327 -10807
- package/dist/{chunk-RCQJI3UX.js → chunk-SWSWCUHS.js} +3215 -2723
- package/dist/{chunk-FDBQOQLP.js → chunk-TNLOOXUP.js} +29 -2
- package/dist/{chunk-SVTVBPIT.js → chunk-XFVJ6QVE.js} +2 -2
- package/dist/{chunk-EQBYK77W.js → chunk-ZP6GF32R.js} +3 -3
- package/dist/cli.js +1151 -68
- package/dist/{demo-server-GWRYDPJC.js → demo-server-INMOE4BA.js} +6 -6
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-3L2665AK.js → intelligence-service-IBUS2IND.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +13 -13
- package/assets/assets/ProjectPage-DSxvvnAd.js +0 -8
- package/assets/assets/SiteHealthSection--6tZe3hM.js +0 -4
|
@@ -26,6 +26,8 @@ import {
|
|
|
26
26
|
backlinkSourceSchema,
|
|
27
27
|
canonicalizeGtmAccountId,
|
|
28
28
|
canonicalizeGtmResourceSelection,
|
|
29
|
+
competitorAliasesRequestSchema,
|
|
30
|
+
competitorAppendRequestSchema,
|
|
29
31
|
competitorBatchRequestSchema,
|
|
30
32
|
competitorLandscapeQuerySchema,
|
|
31
33
|
contentTargetDismissRequestSchema,
|
|
@@ -122,6 +124,7 @@ import {
|
|
|
122
124
|
sentimentSummaryIncludeSchema,
|
|
123
125
|
sentimentSummaryReadSchema,
|
|
124
126
|
settingsDtoSchema,
|
|
127
|
+
siteAuditPageBudgetSchema,
|
|
125
128
|
snapshotRequestInputSchema,
|
|
126
129
|
telemetryStatusDtoSchema,
|
|
127
130
|
trafficAnalyticsPeriodSchema,
|
|
@@ -132,7 +135,7 @@ import {
|
|
|
132
135
|
trafficSeriesGranularitySchema,
|
|
133
136
|
visibilityCompareSelectionSchema,
|
|
134
137
|
visibilityReportRequestSchema
|
|
135
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-PXRUWG75.js";
|
|
136
139
|
|
|
137
140
|
// src/cli-error.ts
|
|
138
141
|
function isMachineFormat(format) {
|
|
@@ -906,6 +909,14 @@ var competitorsInputSchema = z3.object({
|
|
|
906
909
|
project: projectNameSchema,
|
|
907
910
|
request: competitorBatchRequestSchema
|
|
908
911
|
});
|
|
912
|
+
var competitorsAddInputSchema = z3.object({
|
|
913
|
+
project: projectNameSchema,
|
|
914
|
+
request: competitorAppendRequestSchema
|
|
915
|
+
});
|
|
916
|
+
var competitorAliasesInputSchema = competitorAliasesRequestSchema.safeExtend({
|
|
917
|
+
project: projectNameSchema,
|
|
918
|
+
domain: z3.string().trim().min(1).describe("Tracked competitor domain (any spelling; it resolves to the stored registrable domain).")
|
|
919
|
+
});
|
|
909
920
|
var latestSweepRunIdDescription = "A run id, or latest for the latest sweep (the run the measurement reads display). With queryClass branded or non-brand and neither runId nor window, this tool reads latest; pass window to pool every sweep in it.";
|
|
910
921
|
var competitorLandscapeInputSchema = competitorLandscapeQuerySchema.safeExtend({
|
|
911
922
|
project: projectNameSchema,
|
|
@@ -1199,7 +1210,7 @@ var technicalAeoRunInputSchema = z3.object({
|
|
|
1199
1210
|
project: projectNameSchema,
|
|
1200
1211
|
sitemapUrl: z3.string().url().optional().describe("Override the sitemap URL. Defaults to https://<canonicalDomain>/sitemap.xml."),
|
|
1201
1212
|
limit: z3.number().int().positive().max(2e3).optional().describe("Deprecated compatibility alias for maxPages."),
|
|
1202
|
-
maxPages:
|
|
1213
|
+
maxPages: siteAuditPageBudgetSchema.optional().describe("Maximum pages crawled and audited (1 to 50,000). Omitted uses the project's saved budget (siteAuditMaxPages, set with canonry_project_upsert or canonry_apply_config), else the full site, up to 50,000; pass a smaller number for a quick look."),
|
|
1203
1214
|
maxEdges: z3.number().int().positive().max(1e6).optional().describe("Maximum link observations retained for this crawl. When omitted the crawl engine derives the budget from the page count; hard maximum 1,000,000."),
|
|
1204
1215
|
maxDepth: z3.number().int().min(0).max(100).optional().describe("Maximum internal-link depth from the root page."),
|
|
1205
1216
|
checkDeadLinks: z3.boolean().optional().describe("Opt in to internal dead-link checks. Omitted and false both disable checks.")
|
|
@@ -1948,7 +1959,7 @@ var canonryMcpTools = [
|
|
|
1948
1959
|
defineTool({
|
|
1949
1960
|
name: "canonry_competitors_list",
|
|
1950
1961
|
title: "List competitors",
|
|
1951
|
-
description: "List tracked competitors for a Canonry project.",
|
|
1962
|
+
description: "List tracked competitors for a Canonry project, each with its operator-curated `aliases` (the names it goes by in answer text; `[]` means the domain label alone identifies it).",
|
|
1952
1963
|
access: "read",
|
|
1953
1964
|
tier: "setup",
|
|
1954
1965
|
inputSchema: projectInputSchema,
|
|
@@ -2684,7 +2695,7 @@ var canonryMcpTools = [
|
|
|
2684
2695
|
defineTool({
|
|
2685
2696
|
name: "canonry_project_upsert",
|
|
2686
2697
|
title: "Create or replace project",
|
|
2687
|
-
description: "Create or replace a Canonry project. PUT semantics: fields not in the request are reset to their defaults. Provide the full intended project shape. Exceptions: an omitted providerDispatchModes (provider \u2192 sync|batch for scheduled sweeps) keeps the stored preference; send {} to clear it. An omitted qualifiedAliases (the aliases Simple sentiment treats as this brand's own names) keeps the stored list, minus names that no longer qualify (a removed alias, a spelling of the display name, or a competitor's name); send [] to clear it.",
|
|
2698
|
+
description: "Create or replace a Canonry project. PUT semantics: fields not in the request are reset to their defaults. Provide the full intended project shape. Exceptions: an omitted providerDispatchModes (provider \u2192 sync|batch for scheduled sweeps) keeps the stored preference; send {} to clear it. An omitted qualifiedAliases (the aliases Simple sentiment treats as this brand's own names) keeps the stored list, minus names that no longer qualify (a removed alias, a spelling of the display name, or a competitor's name); send [] to clear it. Competitors are not part of this request, but a new identity (display name, aliases, domains) that claims a tracked competitor's curated alias drops that alias, and the drop is audited. An omitted siteAuditMaxPages (the Site Health page budget for scans that set none, 1 to 50,000) keeps the stored budget; send null for the full site.",
|
|
2688
2699
|
access: "write",
|
|
2689
2700
|
tier: "setup",
|
|
2690
2701
|
inputSchema: projectUpsertInputSchema,
|
|
@@ -2695,7 +2706,7 @@ var canonryMcpTools = [
|
|
|
2695
2706
|
defineTool({
|
|
2696
2707
|
name: "canonry_apply_config",
|
|
2697
2708
|
title: "Apply project config",
|
|
2698
|
-
description: "Apply one Canonry config-as-code project document. Replaces the project to match the config; fields omitted from the spec are reset to defaults, with these exceptions: a spec with neither queries nor keywords leaves the tracked-query basket unchanged (to clear the basket, pass an explicit empty queries list); an omitted providerDispatchModes keeps the stored preference;
|
|
2709
|
+
description: "Apply one Canonry config-as-code project document. Replaces the project to match the config; fields omitted from the spec are reset to defaults, with these exceptions: a spec with neither queries nor keywords leaves the tracked-query basket unchanged (to clear the basket, pass an explicit empty queries list); an omitted providerDispatchModes keeps the stored preference; an omitted qualifiedAliases keeps the stored list, minus names that no longer qualify (a removed alias, a spelling of the display name, or a competitor's name); send [] to clear it; and a competitor given as a plain domain keeps its stored curated aliases, while `{ domain, aliases }` sets them exactly (`[]` clears). A spec identity that claims a competitor's alias drops that alias (audited); a new competitor whose name overlaps another competitor's alias (one brand key contains the other) or that is the project's own site fails the apply. An omitted siteAuditMaxPages keeps the stored Site Health page budget (null means the full site). For multi-document YAML, call this tool once per project document.",
|
|
2699
2710
|
access: "write",
|
|
2700
2711
|
tier: "core",
|
|
2701
2712
|
inputSchema: applyConfigInputSchema,
|
|
@@ -3255,16 +3266,27 @@ var canonryMcpTools = [
|
|
|
3255
3266
|
defineTool({
|
|
3256
3267
|
name: "canonry_competitors_add",
|
|
3257
3268
|
title: "Add competitors",
|
|
3258
|
-
description: "Add tracked competitor domains to a Canonry project.",
|
|
3269
|
+
description: "Add tracked competitor domains to a Canonry project. Each entry is a domain, or `{ domain, aliases }` to also add curated answer-text names to that competitor (tracked already or not; existing aliases are kept, the same rules as canonry_competitors_aliases_set apply). A new domain whose name overlaps another competitor's curated alias, or the label or a curated alias of a competitor an Advanced market pins (one brand key contains the other, so the alias \"Tune\" claims tunespoke.example), is rejected until that name is removed, and so is the project's own site. Already tracked domains (any spelling) are skipped.",
|
|
3259
3270
|
access: "write",
|
|
3260
3271
|
tier: "setup",
|
|
3261
|
-
inputSchema:
|
|
3272
|
+
inputSchema: competitorsAddInputSchema,
|
|
3262
3273
|
annotations: writeAnnotations({ idempotentHint: true }),
|
|
3263
3274
|
openApiOperations: ["POST /api/v1/projects/{name}/competitors"],
|
|
3264
3275
|
handler: async (client, input) => {
|
|
3265
|
-
await client.appendCompetitors(input.project,
|
|
3276
|
+
await client.appendCompetitors(input.project, input.request.competitors);
|
|
3266
3277
|
}
|
|
3267
3278
|
}),
|
|
3279
|
+
defineTool({
|
|
3280
|
+
name: "canonry_competitors_aliases_set",
|
|
3281
|
+
title: "Set competitor aliases",
|
|
3282
|
+
description: `Set one tracked competitor's operator-curated aliases exactly (\`[]\` clears): the brand names it goes by in answer text when they differ from its domain, e.g. "TuneSpoke" for spoketuneworks.example or a 3-letter brand the domain label floor drops. Every competitor mention matcher (mention share, competitor landscape, mention gaps, run and history signals) uses them on stored answers at read time. Rejected: aliases under 3 letters or digits, over 80 characters, more than 10, or whose brand key contains, or sits inside, one of the project's own names or hosts or a name another tracked competitor answers to (its aliases, domain label or written host), because answers may split or join the words: "Tune" cannot belong to one competitor while another answers to "Tune Spoke", "TuneSpoke" or tunespoke.example, and joined-word lookalikes ("Tune" and "Tuner") are refused too. A competitor an Advanced market pins (active revision, pending draft, or a superseded revision the project's runs were measured under) counts as another competitor. Idempotent; returns the competitor.`,
|
|
3283
|
+
access: "write",
|
|
3284
|
+
tier: "setup",
|
|
3285
|
+
inputSchema: competitorAliasesInputSchema,
|
|
3286
|
+
annotations: writeAnnotations({ idempotentHint: true }),
|
|
3287
|
+
openApiOperations: ["PUT /api/v1/projects/{name}/competitors/{domain}/aliases"],
|
|
3288
|
+
handler: (client, input) => client.setCompetitorAliases(input.project, input.domain, input.aliases)
|
|
3289
|
+
}),
|
|
3268
3290
|
defineTool({
|
|
3269
3291
|
name: "canonry_competitors_remove",
|
|
3270
3292
|
title: "Remove competitors",
|
|
@@ -3555,7 +3577,7 @@ var canonryMcpTools = [
|
|
|
3555
3577
|
defineTool({
|
|
3556
3578
|
name: "canonry_discover_promote_preview",
|
|
3557
3579
|
title: "Preview discovery promotion",
|
|
3558
|
-
description: "Read-only preview of available promotion candidates for a session: bucketed query lists
|
|
3580
|
+
description: "Read-only preview of available promotion candidates for a session: bucketed query lists, the recurring competitors a promote could add (suggestedCompetitors, each stored as its registrable domain with the cited hosts merged into it as sources), and the eligible ones it would leave out with a reason (skippedCompetitors: already-tracked, project-domain, shared-host, claimed-by-alias). Use it to confirm a basket before calling canonry_discover_promote.",
|
|
3559
3581
|
access: "read",
|
|
3560
3582
|
tier: "discovery",
|
|
3561
3583
|
inputSchema: discoverySessionIdInputSchema,
|
|
@@ -3566,7 +3588,7 @@ var canonryMcpTools = [
|
|
|
3566
3588
|
defineTool({
|
|
3567
3589
|
name: "canonry_discover_promote",
|
|
3568
3590
|
title: "Promote discovery session",
|
|
3569
|
-
description:
|
|
3591
|
+
description: `Adopt a completed discovery session's bucketed queries into the project's tracked basket, tagged with provenance "discovery:<sessionId>". By default, only cited + aspirational queries are promoted; include wasted-surface explicitly when off-ICP competitor gaps should also be tracked. Recurring discovered competitor domains classified as direct-competitor are also merged by default; pass request.competitorTypes to adopt editorial-media channels or recover legacy unknown entries. Cited subdomains are stored as their registrable domain; a competitor that is the project's own site, was cited as two or more different subdomains of one possibly shared host, or is claimed by another competitor's curated alias is left out with a reason in competitorDetails while the rest proceeds. Add-only and idempotent: queries/domains already tracked are returned under \`skipped\`, never inserted twice. Only sessions with status "completed" can be promoted. Call canonry_discover_promote_preview first to inspect candidates.`,
|
|
3570
3592
|
access: "write",
|
|
3571
3593
|
tier: "discovery",
|
|
3572
3594
|
inputSchema: discoveryPromoteInputSchema,
|
|
@@ -3794,7 +3816,7 @@ var canonryMcpTools = [
|
|
|
3794
3816
|
defineTool({
|
|
3795
3817
|
name: "canonry_technical_aeo_run",
|
|
3796
3818
|
title: "Run Technical AEO site audit",
|
|
3797
|
-
description: "Start a site-audit run. The run discovers root, sitemap, and linked pages.
|
|
3819
|
+
description: "Start a site-audit run. The run discovers root, sitemap, and linked pages. Without maxPages it uses the project's saved page budget (siteAuditMaxPages), else the full site (up to 50,000 pages), and the engine derives the link-observation budget from that page count with a 100,000 floor, so raising maxPages raises it too. An explicit maxEdges is a ceiling that replaces the derivation and can sit below it. It returns {runId, status} and continues in the background. If an active run has identical effective options, this tool returns it; different options are refused. Poll canonry_run_get, then read the crawl and score tools.",
|
|
3798
3820
|
access: "write",
|
|
3799
3821
|
tier: "monitoring",
|
|
3800
3822
|
inputSchema: technicalAeoRunInputSchema,
|