@canonry/canonry 7.32.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.
Files changed (40) hide show
  1. package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +24 -0
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +204 -4
  3. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +14 -2
  4. package/assets/assets/{AuditHistoryPanel-cQyVA85P.js → AuditHistoryPanel-C5oZsvsR.js} +1 -1
  5. package/assets/assets/{BacklinksPage-UGZ_9N7F.js → BacklinksPage-CF5sGSTQ.js} +1 -1
  6. package/assets/assets/{HistoryPage-UJVFZ5LK.js → HistoryPage-DumL6cl5.js} +1 -1
  7. package/assets/assets/{MeasurementPropertyPage-ChpOxQfx.js → MeasurementPropertyPage-DCegOp_w.js} +3 -3
  8. package/assets/assets/ProjectPage-CWDk48Y6.js +8 -0
  9. package/assets/assets/RunsPage-Bb1VMWYu.js +1 -0
  10. package/assets/assets/{SettingsPage-DeKxjuTr.js → SettingsPage-CHGh169l.js} +1 -1
  11. package/assets/assets/{SiteHealthSection-COeVsgop.js → SiteHealthSection-bGzH9m9-.js} +3 -3
  12. package/assets/assets/{TrafficPage-DmMmeJKK.js → TrafficPage-cfnEZ2Mu.js} +1 -1
  13. package/assets/assets/{TrafficSourceDetailPage-CUehseZe.js → TrafficSourceDetailPage-BQS0MAXE.js} +1 -1
  14. package/assets/assets/{extract-error-message-BsxdS7Po.js → extract-error-message-IWhACkO_.js} +1 -1
  15. package/assets/assets/index-BDY3-V1S.js +86 -0
  16. package/assets/assets/{react-sigma_core.esm.min--MbbBWzJ.js → react-sigma_core.esm.min-BQt189AI.js} +1 -1
  17. package/assets/assets/{v2-overview-adapter-D-IScpdp.js → v2-overview-adapter-ZC3VuoTT.js} +1 -1
  18. package/assets/index.html +1 -1
  19. package/dist/{chunk-WRHA54BN.js → chunk-65BHDVYO.js} +5604 -3984
  20. package/dist/{chunk-FW4GX2LO.js → chunk-BPFRGC7K.js} +3 -3
  21. package/dist/{chunk-2C6NWFN4.js → chunk-BWR5MNL5.js} +2 -2
  22. package/dist/chunk-C2I7M3B2.js +22948 -0
  23. package/dist/{chunk-42XUY243.js → chunk-E43JM3QV.js} +11430 -10405
  24. package/dist/chunk-HGMYEDAQ.js +79 -0
  25. package/dist/{chunk-QFXD7GR5.js → chunk-KOIOZ7QW.js} +193 -19
  26. package/dist/{chunk-ZIETXJYU.js → chunk-LYKDNJXR.js} +158 -104
  27. package/dist/chunk-WRUKKEGR.js +562 -0
  28. package/dist/chunk-WU2BRWXY.js +546 -0
  29. package/dist/{chunk-K5EGSSXC.js → chunk-WXX3NL4C.js} +108 -41
  30. package/dist/cli-catalog-J3O6W726.js +15 -0
  31. package/dist/cli-commands-QST2CPDG.js +15 -0
  32. package/dist/cli.js +136 -22525
  33. package/dist/{demo-server-G5OK7SWE.js → demo-server-KA7DWTY6.js} +5 -4
  34. package/dist/index.js +7 -6
  35. package/dist/{intelligence-service-3ZUVTIO7.js → intelligence-service-LHZZTJPH.js} +2 -2
  36. package/dist/mcp.js +30 -15
  37. package/package.json +10 -10
  38. package/assets/assets/ProjectPage-CvxuPSiC.js +0 -8
  39. package/assets/assets/RunsPage-C6U_YcDY.js +0 -1
  40. package/assets/assets/index-ahEr6Oc-.js +0 -86
@@ -5,11 +5,12 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-2C6NWFN4.js";
8
+ } from "./chunk-BWR5MNL5.js";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  canonryMcpTools
12
- } from "./chunk-ZIETXJYU.js";
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-WRHA54BN.js";
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-42XUY243.js";
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-K5EGSSXC.js";
6
+ } from "./chunk-WXX3NL4C.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-QFXD7GR5.js";
10
- import "./chunk-2C6NWFN4.js";
11
- import "./chunk-ZIETXJYU.js";
12
- import "./chunk-WRHA54BN.js";
13
- import "./chunk-42XUY243.js";
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,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  HISTORY_WINDOW_RUNS,
3
3
  IntelligenceService
4
- } from "./chunk-WRHA54BN.js";
5
- import "./chunk-42XUY243.js";
4
+ } from "./chunk-65BHDVYO.js";
5
+ import "./chunk-E43JM3QV.js";
6
6
  export {
7
7
  HISTORY_WINDOW_RUNS,
8
8
  IntelligenceService
package/dist/mcp.js CHANGED
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-FW4GX2LO.js";
3
+ } from "./chunk-BPFRGC7K.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-QFXD7GR5.js";
8
- import "./chunk-ZIETXJYU.js";
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-42XUY243.js";
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
- --scope=<all|read-only>
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 "read-only"
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
- void autoSyncSkills();
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
- scope = normalizeScope(next);
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
- scope = normalizeScope(arg.slice("--scope=".length));
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
- throw new Error(`Invalid MCP scope "${value}". Expected "all" or "read-only".`);
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.32.0",
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": [
@@ -85,34 +85,34 @@
85
85
  "@types/node-cron": "^3.0.11",
86
86
  "tsup": "^8.5.1",
87
87
  "tsx": "^4.19.0",
88
+ "@ainyc/canonry-api-client": "0.0.0",
88
89
  "@ainyc/canonry-web": "0.0.0",
89
90
  "@ainyc/canonry-api-routes": "0.0.0",
90
- "@ainyc/canonry-config": "0.0.0",
91
- "@ainyc/canonry-api-client": "0.0.0",
92
- "@ainyc/canonry-db": "0.0.0",
93
91
  "@ainyc/canonry-contracts": "0.0.0",
92
+ "@ainyc/canonry-db": "0.0.0",
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-commoncrawl": "0.0.0",
99
98
  "@ainyc/canonry-integration-google": "0.0.0",
100
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
101
- "@ainyc/canonry-integration-google-places": "0.0.0",
99
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
102
100
  "@ainyc/canonry-integration-google-ads": "0.0.0",
101
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
103
102
  "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
104
103
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
104
+ "@ainyc/canonry-integration-traffic": "0.0.0",
105
+ "@ainyc/canonry-integration-google-places": "0.0.0",
105
106
  "@ainyc/canonry-integration-wordpress": "0.0.0",
106
107
  "@ainyc/canonry-intelligence": "0.0.0",
107
- "@ainyc/canonry-integration-traffic": "0.0.0",
108
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
111
  "@ainyc/canonry-provider-local": "0.0.0",
112
112
  "@ainyc/canonry-provider-muse": "0.0.0",
113
113
  "@ainyc/canonry-provider-openai": "0.0.0",
114
- "@ainyc/canonry-provider-perplexity": "0.0.0",
115
- "@ainyc/canonry-integration-typesafe": "0.0.0"
114
+ "@ainyc/canonry-integration-typesafe": "0.0.0",
115
+ "@ainyc/canonry-provider-perplexity": "0.0.0"
116
116
  },
117
117
  "scripts": {
118
118
  "build": "pnpm run build:cli && pnpm run build:web",