@canonry/canonry 4.164.0 → 4.165.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/README.md +120 -66
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +4 -1
- package/assets/assets/{AuditHistoryPanel-CD1GVkS9.js → AuditHistoryPanel-IYMElyK5.js} +1 -1
- package/assets/assets/{BacklinksPage-B0Ijhntp.js → BacklinksPage-BMqIPRvZ.js} +1 -1
- package/assets/assets/{HistoryPage-DIKtpT_z.js → HistoryPage-iuETLmwO.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-BfPwwIsT.js → MeasurementPropertyPage-BzNAaB8X.js} +1 -1
- package/assets/assets/{ProjectPage-3czWArKE.js → ProjectPage-DIzi4Ggo.js} +1 -1
- package/assets/assets/{RunRow-CHyd0gQH.js → RunRow-BkkYxEjl.js} +1 -1
- package/assets/assets/{RunsPage-Dujt0SQ5.js → RunsPage-DGTrqrTA.js} +1 -1
- package/assets/assets/{SettingsPage-CJE9Oeg9.js → SettingsPage-Cwb_Ft9u.js} +1 -1
- package/assets/assets/{SiteHealthSection-DvuvziPJ.js → SiteHealthSection-k4I71wfJ.js} +3 -3
- package/assets/assets/{TrafficPage-B0tru9ek.js → TrafficPage-C8nyb8l1.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-DshEUtQX.js → TrafficSourceDetailPage-ry7Da0pV.js} +1 -1
- package/assets/assets/{extract-error-message-O2dirpiH.js → extract-error-message-BYyBW07F.js} +1 -1
- package/assets/assets/{index-C_y0aGQL.js → index-rqOXhYwp.js} +13 -13
- package/assets/assets/{react-sigma_core.esm.min-sVSSzmzq.js → react-sigma_core.esm.min-BtG8TWTe.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-BFGHZ2GU.js → chunk-BU6C2DKF.js} +23 -0
- package/dist/{chunk-RULHNUBH.js → chunk-L5SMSDZB.js} +4 -4
- package/dist/{chunk-C4WKYU5C.js → chunk-QDOZEMDK.js} +29 -1
- package/dist/{chunk-GCQPFCP2.js → chunk-QKLNTSQ2.js} +161 -14
- package/dist/cli.js +46 -8
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-Z3XS2UXQ.js → intelligence-service-RDGUEEZQ.js} +2 -2
- package/dist/mcp.js +2 -2
- package/package.json +10 -10
package/dist/cli.js
CHANGED
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
showFirstRunNotice,
|
|
32
32
|
trackCliCommandFinished,
|
|
33
33
|
trackEvent
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-L5SMSDZB.js";
|
|
35
35
|
import {
|
|
36
36
|
CliError,
|
|
37
37
|
EXIT_SYSTEM_ERROR,
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
saveConfigPatch,
|
|
52
52
|
systemError,
|
|
53
53
|
usageError
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-QDOZEMDK.js";
|
|
55
55
|
import {
|
|
56
56
|
CLOUDFLARE_WORKER_BINDINGS,
|
|
57
57
|
CLOUDFLARE_WORKER_GENERATED_MARKER,
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
projects,
|
|
66
66
|
queries,
|
|
67
67
|
renderReportHtml
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-QKLNTSQ2.js";
|
|
69
69
|
import {
|
|
70
70
|
AdsDeliverySnapshotStatuses,
|
|
71
71
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -129,7 +129,7 @@ import {
|
|
|
129
129
|
providerQuotaPolicySchema,
|
|
130
130
|
resolveProviderInput,
|
|
131
131
|
winnabilityClassSchema
|
|
132
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-BU6C2DKF.js";
|
|
133
133
|
|
|
134
134
|
// src/cli.ts
|
|
135
135
|
import { pathToFileURL } from "url";
|
|
@@ -3941,12 +3941,42 @@ async function gaStatus(project, format) {
|
|
|
3941
3941
|
console.log(` Last Synced: ${result.lastSyncedAt ?? "(never)"}`);
|
|
3942
3942
|
console.log(` Connected: ${result.createdAt ?? "unknown"}`);
|
|
3943
3943
|
}
|
|
3944
|
+
async function gaProperties(project, format) {
|
|
3945
|
+
const client = getClient7();
|
|
3946
|
+
const result = await client.gaProperties(project);
|
|
3947
|
+
if (format === "jsonl") {
|
|
3948
|
+
emitJsonl(result.properties.map((p) => ({ project, ...p })));
|
|
3949
|
+
return;
|
|
3950
|
+
}
|
|
3951
|
+
if (isMachineFormat(format)) {
|
|
3952
|
+
console.log(JSON.stringify(result, null, 2));
|
|
3953
|
+
return;
|
|
3954
|
+
}
|
|
3955
|
+
if (result.properties.length === 0) {
|
|
3956
|
+
console.log(`No GA4 properties visible to the connected account for "${project}".`);
|
|
3957
|
+
return;
|
|
3958
|
+
}
|
|
3959
|
+
console.log("Available GA4 properties:\n");
|
|
3960
|
+
const idWidth = Math.max(11, ...result.properties.map((p) => p.propertyId.length));
|
|
3961
|
+
const nameWidth = Math.max(12, ...result.properties.map((p) => p.displayName.length));
|
|
3962
|
+
console.log(` ${"PROPERTY ID".padEnd(idWidth)} ${"DISPLAY NAME".padEnd(nameWidth)} ACCOUNT`);
|
|
3963
|
+
console.log(` ${"\u2500".repeat(idWidth)} ${"\u2500".repeat(nameWidth)} ${"\u2500".repeat(12)}`);
|
|
3964
|
+
for (const p of result.properties) {
|
|
3965
|
+
console.log(` ${p.propertyId.padEnd(idWidth)} ${p.displayName.padEnd(nameWidth)} ${p.accountName}`);
|
|
3966
|
+
}
|
|
3967
|
+
console.log('\nUse "canonry ga connect <project> --property-id <id>" to select one.');
|
|
3968
|
+
}
|
|
3944
3969
|
async function gaSync(project, opts) {
|
|
3945
3970
|
const client = getClient7();
|
|
3946
3971
|
const body = {};
|
|
3947
3972
|
if (opts?.days) body.days = opts.days;
|
|
3948
3973
|
if (opts?.only) body.only = opts.only;
|
|
3949
3974
|
const result = await client.gaSync(project, body);
|
|
3975
|
+
if (result.clamped) {
|
|
3976
|
+
console.error(
|
|
3977
|
+
`Warning: requested ${result.requestedDays} days but synced ${result.days} \u2014 GA4's supported sync window bounded the request. Only ${result.days} days of history were written.`
|
|
3978
|
+
);
|
|
3979
|
+
}
|
|
3950
3980
|
if (isMachineFormat(opts?.format)) {
|
|
3951
3981
|
console.log(JSON.stringify(result, null, 2));
|
|
3952
3982
|
return;
|
|
@@ -3958,7 +3988,7 @@ async function gaSync(project, opts) {
|
|
|
3958
3988
|
console.log(` Page rows: ${result.rowCount}`);
|
|
3959
3989
|
console.log(` AI rows: ${result.aiReferralCount}`);
|
|
3960
3990
|
console.log(` Social rows: ${result.socialReferralCount}`);
|
|
3961
|
-
console.log(` Period: ${result.days} days`);
|
|
3991
|
+
console.log(` Period: ${result.days} days${result.clamped ? ` (requested ${result.requestedDays})` : ""}`);
|
|
3962
3992
|
console.log(` Synced at: ${result.syncedAt}`);
|
|
3963
3993
|
}
|
|
3964
3994
|
async function gaTraffic(project, opts) {
|
|
@@ -4501,14 +4531,14 @@ function rangeValues(values) {
|
|
|
4501
4531
|
var GA_CLI_COMMANDS = [
|
|
4502
4532
|
{
|
|
4503
4533
|
path: ["ga", "connect"],
|
|
4504
|
-
usage: "canonry ga connect <project> --property-id <id> --key-file <path> [--key-json <json>] [--format json]",
|
|
4534
|
+
usage: "canonry ga connect <project> --property-id <id> [--key-file <path>] [--key-json <json>] [--format json]",
|
|
4505
4535
|
options: {
|
|
4506
4536
|
"property-id": stringOption(),
|
|
4507
4537
|
"key-file": stringOption(),
|
|
4508
4538
|
"key-json": stringOption()
|
|
4509
4539
|
},
|
|
4510
4540
|
run: async (input) => {
|
|
4511
|
-
const project = requireProject(input, "ga.connect", "canonry ga connect <project> --property-id <id> --key-file <path>");
|
|
4541
|
+
const project = requireProject(input, "ga.connect", "canonry ga connect <project> --property-id <id> [--key-file <path>]");
|
|
4512
4542
|
const propertyId = getString(input.values, "property-id");
|
|
4513
4543
|
if (!propertyId) {
|
|
4514
4544
|
throw new Error("--property-id is required");
|
|
@@ -4529,6 +4559,14 @@ var GA_CLI_COMMANDS = [
|
|
|
4529
4559
|
await gaDisconnect(project, input.format);
|
|
4530
4560
|
}
|
|
4531
4561
|
},
|
|
4562
|
+
{
|
|
4563
|
+
path: ["ga", "properties"],
|
|
4564
|
+
usage: "canonry ga properties <project> [--format json]",
|
|
4565
|
+
run: async (input) => {
|
|
4566
|
+
const project = requireProject(input, "ga.properties", "canonry ga properties <project> [--format json]");
|
|
4567
|
+
await gaProperties(project, input.format);
|
|
4568
|
+
}
|
|
4569
|
+
},
|
|
4532
4570
|
{
|
|
4533
4571
|
path: ["ga", "status"],
|
|
4534
4572
|
usage: "canonry ga status <project> [--format json]",
|
|
@@ -4686,7 +4724,7 @@ var GA_CLI_COMMANDS = [
|
|
|
4686
4724
|
unknownSubcommand(input.positionals[0], {
|
|
4687
4725
|
command: "ga",
|
|
4688
4726
|
usage: "canonry ga <subcommand> <project> [args]",
|
|
4689
|
-
available: ["connect", "disconnect", "status", "sync", "measurement-analysis", "traffic", "coverage", "ai-referral-history", "ai-referral-daily", "social-referral-history", "session-history", "social-referral-summary", "attribution"]
|
|
4727
|
+
available: ["connect", "disconnect", "status", "properties", "sync", "measurement-analysis", "traffic", "coverage", "ai-referral-history", "ai-referral-daily", "social-referral-history", "session-history", "social-referral-summary", "attribution"]
|
|
4690
4728
|
});
|
|
4691
4729
|
}
|
|
4692
4730
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-L5SMSDZB.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-QDOZEMDK.js";
|
|
7
|
+
import "./chunk-QKLNTSQ2.js";
|
|
8
|
+
import "./chunk-BU6C2DKF.js";
|
|
9
9
|
export {
|
|
10
10
|
createServer,
|
|
11
11
|
loadConfig
|
package/dist/mcp.js
CHANGED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
PACKAGE_VERSION,
|
|
4
4
|
canonryMcpTools,
|
|
5
5
|
createApiClient
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QDOZEMDK.js";
|
|
7
7
|
import {
|
|
8
8
|
isReadOnlyKey
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-BU6C2DKF.js";
|
|
10
10
|
|
|
11
11
|
// src/mcp/cli.ts
|
|
12
12
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonry/canonry",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.165.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agent-first open-source AEO operating platform - track how answer engines cite your domain",
|
|
6
6
|
"license": "FSL-1.1-ALv2",
|
|
@@ -70,29 +70,29 @@
|
|
|
70
70
|
"@types/node-cron": "^3.0.11",
|
|
71
71
|
"tsup": "^8.5.1",
|
|
72
72
|
"tsx": "^4.19.0",
|
|
73
|
-
"@ainyc/canonry-api-client": "0.0.0",
|
|
74
73
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
74
|
+
"@ainyc/canonry-api-client": "0.0.0",
|
|
75
75
|
"@ainyc/canonry-config": "0.0.0",
|
|
76
76
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
77
77
|
"@ainyc/canonry-db": "0.0.0",
|
|
78
78
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
79
79
|
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
80
80
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
81
|
-
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
82
|
-
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
83
81
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
82
|
+
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
83
|
+
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
84
84
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
85
|
+
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
86
|
+
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
85
87
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
86
|
-
"@ainyc/canonry-intelligence": "0.0.0",
|
|
87
88
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
88
|
-
"@ainyc/canonry-
|
|
89
|
-
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
90
|
-
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
89
|
+
"@ainyc/canonry-intelligence": "0.0.0",
|
|
91
90
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
91
|
+
"@ainyc/canonry-provider-local": "0.0.0",
|
|
92
92
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
93
|
+
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
93
94
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
94
|
-
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
95
|
-
"@ainyc/canonry-provider-local": "0.0.0"
|
|
95
|
+
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
96
96
|
},
|
|
97
97
|
"scripts": {
|
|
98
98
|
"build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
|