@canonry/canonry 7.25.0 → 7.43.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +24 -0
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +219 -6
- package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +14 -2
- package/assets/assets/{AuditHistoryPanel-B-9DLSmD.js → AuditHistoryPanel-C5oZsvsR.js} +1 -1
- package/assets/assets/{BacklinksPage-DPssWU5-.js → BacklinksPage-CF5sGSTQ.js} +1 -1
- package/assets/assets/{HistoryPage-BAPUoHjI.js → HistoryPage-DumL6cl5.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-aTs5l1OV.js → MeasurementPropertyPage-DCegOp_w.js} +3 -3
- package/assets/assets/ProjectPage-CWDk48Y6.js +8 -0
- package/assets/assets/RunsPage-Bb1VMWYu.js +1 -0
- package/assets/assets/{SettingsPage-Oo861eRm.js → SettingsPage-CHGh169l.js} +1 -1
- package/assets/assets/{SiteHealthSection-BMdk3Och.js → SiteHealthSection-bGzH9m9-.js} +3 -3
- package/assets/assets/{TrafficPage-Ciot_0lN.js → TrafficPage-cfnEZ2Mu.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-D7tWadfJ.js → TrafficSourceDetailPage-BQS0MAXE.js} +1 -1
- package/assets/assets/{extract-error-message-Bb4azvlK.js → extract-error-message-IWhACkO_.js} +1 -1
- package/assets/assets/index-BDY3-V1S.js +86 -0
- package/assets/assets/{react-sigma_core.esm.min-C-Y9Z74U.js → react-sigma_core.esm.min-BQt189AI.js} +1 -1
- package/assets/assets/{v2-overview-adapter-D2S25ivE.js → v2-overview-adapter-ZC3VuoTT.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-PKQF7BV2.js → chunk-65BHDVYO.js} +5650 -4002
- package/dist/{chunk-NOA7KJDB.js → chunk-BPFRGC7K.js} +3 -3
- package/dist/{chunk-I3546GTK.js → chunk-BWR5MNL5.js} +2 -2
- package/dist/chunk-C2I7M3B2.js +22948 -0
- package/dist/{chunk-PFEQWGJN.js → chunk-E43JM3QV.js} +11444 -10397
- package/dist/chunk-HGMYEDAQ.js +79 -0
- package/dist/{chunk-BMBHREYM.js → chunk-KOIOZ7QW.js} +195 -20
- package/dist/{chunk-6AOIFHC6.js → chunk-LYKDNJXR.js} +163 -107
- package/dist/chunk-WRUKKEGR.js +562 -0
- package/dist/chunk-WU2BRWXY.js +546 -0
- package/dist/{chunk-NX257AKC.js → chunk-WXX3NL4C.js} +108 -41
- package/dist/cli-catalog-J3O6W726.js +15 -0
- package/dist/cli-commands-QST2CPDG.js +15 -0
- package/dist/cli.js +136 -22502
- package/dist/{demo-server-RUZWYXSW.js → demo-server-KA7DWTY6.js} +5 -4
- package/dist/index.js +7 -6
- package/dist/{intelligence-service-TYSVXO3S.js → intelligence-service-LHZZTJPH.js} +2 -2
- package/dist/mcp.js +30 -15
- package/package.json +6 -6
- package/assets/assets/ProjectPage-sVY1ETmt.js +0 -8
- package/assets/assets/RunsPage-D0q7ifK3.js +0 -1
- package/assets/assets/index-ClA5Nf2V.js +0 -86
|
@@ -5,11 +5,12 @@ import {
|
|
|
5
5
|
computeFactorAverages,
|
|
6
6
|
layoutSiteCrawlGraphInput,
|
|
7
7
|
persistSiteCrawlGraphLayout
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-BWR5MNL5.js";
|
|
9
9
|
import {
|
|
10
10
|
PACKAGE_VERSION,
|
|
11
11
|
canonryMcpTools
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-LYKDNJXR.js";
|
|
13
|
+
import "./chunk-HGMYEDAQ.js";
|
|
13
14
|
import {
|
|
14
15
|
HISTORY_WINDOW_RUNS,
|
|
15
16
|
IntelligenceService,
|
|
@@ -85,7 +86,7 @@ import {
|
|
|
85
86
|
siteCrawlPages,
|
|
86
87
|
siteCrawlSnapshots,
|
|
87
88
|
trafficSources
|
|
88
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-65BHDVYO.js";
|
|
89
90
|
import {
|
|
90
91
|
RunKinds,
|
|
91
92
|
SiteCrawlFetchStates,
|
|
@@ -115,7 +116,7 @@ import {
|
|
|
115
116
|
roundPreservingTotal,
|
|
116
117
|
siteAuditPageFactorSchema,
|
|
117
118
|
wilsonInterval
|
|
118
|
-
} from "./chunk-
|
|
119
|
+
} from "./chunk-E43JM3QV.js";
|
|
119
120
|
|
|
120
121
|
// src/demo-server.ts
|
|
121
122
|
import { dirname, join as join2 } from "path";
|
package/dist/index.js
CHANGED
|
@@ -3,14 +3,15 @@ import {
|
|
|
3
3
|
createGoogleMarketingCredentialStore,
|
|
4
4
|
createGoogleMarketingRuntime,
|
|
5
5
|
createServer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WXX3NL4C.js";
|
|
7
7
|
import {
|
|
8
8
|
loadConfig
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-KOIOZ7QW.js";
|
|
10
|
+
import "./chunk-BWR5MNL5.js";
|
|
11
|
+
import "./chunk-LYKDNJXR.js";
|
|
12
|
+
import "./chunk-HGMYEDAQ.js";
|
|
13
|
+
import "./chunk-65BHDVYO.js";
|
|
14
|
+
import "./chunk-E43JM3QV.js";
|
|
14
15
|
export {
|
|
15
16
|
GoogleMarketingRuntimeError,
|
|
16
17
|
createGoogleMarketingCredentialStore,
|
package/dist/mcp.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
autoSyncSkills
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BPFRGC7K.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-KOIOZ7QW.js";
|
|
8
|
+
import "./chunk-LYKDNJXR.js";
|
|
9
|
+
import "./chunk-HGMYEDAQ.js";
|
|
9
10
|
import {
|
|
10
11
|
isReadOnlyKey,
|
|
11
12
|
updateCheckEnvOptOut
|
|
12
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-E43JM3QV.js";
|
|
13
14
|
|
|
14
15
|
// src/mcp/cli.ts
|
|
15
16
|
import { randomUUID } from "crypto";
|
|
@@ -45,20 +46,21 @@ function createUpdateNoticeSource(client, opts = {}) {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
// src/mcp/cli.ts
|
|
48
|
-
var HELP_TEXT = `Usage: canonry-mcp [--read-only | --scope=<all|read-only>] [--eager]
|
|
49
|
+
var HELP_TEXT = `Usage: canonry-mcp [--read-only | --stored-only | --scope=<all|read-only|stored-only>] [--eager]
|
|
49
50
|
|
|
50
51
|
Stdio MCP adapter over the Canonry public API. Inherits config from
|
|
51
52
|
~/.canonry/config.yaml (or $CANONRY_CONFIG_DIR/config.yaml).
|
|
52
53
|
|
|
53
54
|
Flags:
|
|
54
55
|
--read-only Expose read tools only
|
|
55
|
-
--
|
|
56
|
+
--stored-only Expose stored reads only
|
|
57
|
+
--scope=<all|read-only|stored-only>
|
|
56
58
|
Same as --read-only when "read-only"
|
|
57
59
|
--eager Load all toolkits at start (skip progressive discovery)
|
|
58
60
|
--help, -h Show this message
|
|
59
61
|
|
|
60
62
|
Environment variables:
|
|
61
|
-
CANONRY_MCP_SCOPE "all" (default) or "
|
|
63
|
+
CANONRY_MCP_SCOPE "all" (default), "read-only", or "stored-only"
|
|
62
64
|
CANONRY_MCP_EAGER "1" / "true" / "yes" to enable eager mode
|
|
63
65
|
`;
|
|
64
66
|
var HelpRequested = class extends Error {
|
|
@@ -78,9 +80,10 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
78
80
|
}
|
|
79
81
|
throw error;
|
|
80
82
|
}
|
|
81
|
-
|
|
83
|
+
if (options.scope === "stored-only") process.env.CANONRY_STORED_ONLY = "1";
|
|
84
|
+
if (options.scope !== "stored-only") void autoSyncSkills();
|
|
82
85
|
const client = createApiClient({ clientName: "canonry-mcp", surface: "mcp-stdio", actorSession: randomUUID() });
|
|
83
|
-
const updateNotice = createUpdateNoticeSource(client);
|
|
86
|
+
const updateNotice = options.scope === "stored-only" ? { refresh: async () => void 0, get: () => null } : createUpdateNoticeSource(client);
|
|
84
87
|
const [authorization] = await Promise.all([
|
|
85
88
|
resolveEffectiveAuthorization(client, options.scope),
|
|
86
89
|
updateNotice.refresh()
|
|
@@ -103,7 +106,7 @@ async function resolveEffectiveAuthorization(client, flagScope) {
|
|
|
103
106
|
process.stderr.write(
|
|
104
107
|
"canonry-mcp: configured API key is read-only \u2014 restricting to read tools.\n"
|
|
105
108
|
);
|
|
106
|
-
return { scope: "read-only", credentialScopes: self.scopes, operator: self.operator === true };
|
|
109
|
+
return { scope: flagScope === "stored-only" ? "stored-only" : "read-only", credentialScopes: self.scopes, operator: self.operator === true };
|
|
107
110
|
}
|
|
108
111
|
return { scope: flagScope, credentialScopes: self.scopes, operator: self.operator === true };
|
|
109
112
|
} catch {
|
|
@@ -115,11 +118,18 @@ function parseCliOptions(argv, env = process.env) {
|
|
|
115
118
|
throw new HelpRequested();
|
|
116
119
|
}
|
|
117
120
|
let scope = normalizeScope(env.CANONRY_MCP_SCOPE);
|
|
121
|
+
let storedOnlyRequested = ["1", "true"].includes((env.CANONRY_STORED_ONLY ?? "").toLowerCase()) || scope === "stored-only";
|
|
122
|
+
if (storedOnlyRequested) scope = "stored-only";
|
|
118
123
|
let eager = parseEagerEnv(env.CANONRY_MCP_EAGER);
|
|
119
124
|
for (let i = 0; i < argv.length; i += 1) {
|
|
120
125
|
const arg = argv[i];
|
|
121
126
|
if (arg === "--read-only") {
|
|
122
|
-
scope = "read-only";
|
|
127
|
+
if (!storedOnlyRequested) scope = "read-only";
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (arg === "--stored-only") {
|
|
131
|
+
storedOnlyRequested = true;
|
|
132
|
+
scope = "stored-only";
|
|
123
133
|
continue;
|
|
124
134
|
}
|
|
125
135
|
if (arg === "--eager") {
|
|
@@ -129,22 +139,27 @@ function parseCliOptions(argv, env = process.env) {
|
|
|
129
139
|
if (arg === "--scope") {
|
|
130
140
|
const next = argv[i + 1];
|
|
131
141
|
if (!next) throw new Error("Missing value for --scope");
|
|
132
|
-
|
|
142
|
+
const requestedScope = normalizeScope(next);
|
|
143
|
+
if (requestedScope === "stored-only") storedOnlyRequested = true;
|
|
144
|
+
if (!storedOnlyRequested) scope = requestedScope;
|
|
133
145
|
i += 1;
|
|
134
146
|
continue;
|
|
135
147
|
}
|
|
136
148
|
if (arg?.startsWith("--scope=")) {
|
|
137
|
-
|
|
149
|
+
const requestedScope = normalizeScope(arg.slice("--scope=".length));
|
|
150
|
+
if (requestedScope === "stored-only") storedOnlyRequested = true;
|
|
151
|
+
if (!storedOnlyRequested) scope = requestedScope;
|
|
138
152
|
continue;
|
|
139
153
|
}
|
|
140
154
|
throw new Error(`Unknown canonry-mcp argument: ${arg}`);
|
|
141
155
|
}
|
|
142
|
-
return { scope, eager };
|
|
156
|
+
return { scope: storedOnlyRequested || scope === "stored-only" ? "stored-only" : scope, eager };
|
|
143
157
|
}
|
|
144
158
|
function normalizeScope(value) {
|
|
145
159
|
if (!value || value === "all") return "all";
|
|
146
160
|
if (value === "read-only") return "read-only";
|
|
147
|
-
|
|
161
|
+
if (value === "stored-only") return "stored-only";
|
|
162
|
+
throw new Error(`Invalid MCP scope "${value}". Expected "all", "read-only", or "stored-only".`);
|
|
148
163
|
}
|
|
149
164
|
function parseEagerEnv(value) {
|
|
150
165
|
if (!value) return false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonry/canonry",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.43.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Self-hosted AI visibility (AEO) platform: track how ChatGPT, Claude, Gemini, and Perplexity cite your domain, join it with Search Console, GA4, server-side traffic, and paid media, and fix what you find through agent tools (CLI, REST, MCP). Local SQLite.",
|
|
6
6
|
"keywords": [
|
|
@@ -86,30 +86,30 @@
|
|
|
86
86
|
"tsup": "^8.5.1",
|
|
87
87
|
"tsx": "^4.19.0",
|
|
88
88
|
"@ainyc/canonry-api-client": "0.0.0",
|
|
89
|
+
"@ainyc/canonry-web": "0.0.0",
|
|
89
90
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
90
91
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
91
|
-
"@ainyc/canonry-web": "0.0.0",
|
|
92
92
|
"@ainyc/canonry-db": "0.0.0",
|
|
93
93
|
"@ainyc/canonry-config": "0.0.0",
|
|
94
94
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
95
95
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
96
96
|
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
97
97
|
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
98
|
+
"@ainyc/canonry-integration-google": "0.0.0",
|
|
98
99
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
99
100
|
"@ainyc/canonry-integration-google-ads": "0.0.0",
|
|
100
|
-
"@ainyc/canonry-integration-google": "0.0.0",
|
|
101
101
|
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
102
|
-
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
103
102
|
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
104
103
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
105
104
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
105
|
+
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
106
106
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
107
|
-
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
108
107
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
108
|
+
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
109
109
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
110
110
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
111
|
-
"@ainyc/canonry-provider-muse": "0.0.0",
|
|
112
111
|
"@ainyc/canonry-provider-local": "0.0.0",
|
|
112
|
+
"@ainyc/canonry-provider-muse": "0.0.0",
|
|
113
113
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
114
114
|
"@ainyc/canonry-integration-typesafe": "0.0.0",
|
|
115
115
|
"@ainyc/canonry-provider-perplexity": "0.0.0"
|