@canonry/canonry 6.1.1 → 6.1.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 (29) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +1 -1
  2. package/assets/assets/{AuditHistoryPanel-Dtt7cbYo.js → AuditHistoryPanel-D-W_kwEY.js} +1 -1
  3. package/assets/assets/{BacklinksPage-h25kHk3u.js → BacklinksPage-BeqCFRO3.js} +1 -1
  4. package/assets/assets/{HistoryPage-70YWNYBU.js → HistoryPage-wAPbY0z4.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-CBPQ3A99.js → MeasurementPropertyPage-BSOrkHCB.js} +1 -1
  6. package/assets/assets/{ProjectPage-Dbbxf8yl.js → ProjectPage-v0C7CwyA.js} +1 -1
  7. package/assets/assets/{RunsPage-B6LqcDRg.js → RunsPage-CxolaIps.js} +1 -1
  8. package/assets/assets/{SettingsPage-DNV6Is27.js → SettingsPage-BQqJz0Ms.js} +1 -1
  9. package/assets/assets/{SiteHealthSection-CWEIYXut.js → SiteHealthSection-C56kNcQQ.js} +3 -3
  10. package/assets/assets/{TrafficPage-ZZqGgMyL.js → TrafficPage-BDmWdYWf.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-_RMyqM86.js → TrafficSourceDetailPage-DZl3YNBs.js} +1 -1
  12. package/assets/assets/{extract-error-message-D-AaTlPU.js → extract-error-message-D0mBVEGn.js} +1 -1
  13. package/assets/assets/{index-BCKrocfL.js → index-DZ__RzGa.js} +21 -21
  14. package/assets/assets/{react-sigma_core.esm.min-CaRTZKvV.js → react-sigma_core.esm.min-BQNp33-g.js} +1 -1
  15. package/assets/assets/{v2-overview-adapter-C16fKgpq.js → v2-overview-adapter-XZbD7swG.js} +1 -1
  16. package/assets/index.html +2 -2
  17. package/dist/{chunk-QFI47QVP.js → chunk-3QBRDFI5.js} +11 -11
  18. package/dist/{chunk-LXHE4DVO.js → chunk-4MWLHTRS.js} +9 -0
  19. package/dist/{chunk-DMU3SFC4.js → chunk-6CR7DWLU.js} +12 -9
  20. package/dist/{chunk-HTTYBQN4.js → chunk-HB6XZOZ6.js} +2 -2
  21. package/dist/{chunk-B5W7HDCG.js → chunk-N7MRAN3G.js} +42 -17
  22. package/dist/{chunk-MJ3QINUW.js → chunk-TBAVVIVI.js} +3 -3
  23. package/dist/{chunk-PDOMOHOP.js → chunk-YOMLHHJS.js} +2 -2
  24. package/dist/cli.js +32 -13
  25. package/dist/{demo-server-VP6CP33U.js → demo-server-2622GU2H.js} +4 -4
  26. package/dist/index.js +6 -6
  27. package/dist/{intelligence-service-6F63MYQ5.js → intelligence-service-QUAOWEIA.js} +2 -2
  28. package/dist/mcp.js +4 -4
  29. package/package.json +14 -14
@@ -4,14 +4,14 @@ import {
4
4
  installSkills,
5
5
  loadConfigRaw,
6
6
  saveConfigPatch
7
- } from "./chunk-PDOMOHOP.js";
7
+ } from "./chunk-YOMLHHJS.js";
8
8
  import {
9
9
  PACKAGE_VERSION
10
- } from "./chunk-DMU3SFC4.js";
10
+ } from "./chunk-6CR7DWLU.js";
11
11
  import {
12
12
  SKILL_MANIFEST_FILENAME,
13
13
  SkillsClients
14
- } from "./chunk-LXHE4DVO.js";
14
+ } from "./chunk-4MWLHTRS.js";
15
15
 
16
16
  // src/skills-autosync.ts
17
17
  import fs from "fs";
@@ -5,7 +5,7 @@ import {
5
5
  PACKAGE_VERSION,
6
6
  canonryMcpTools,
7
7
  isMachineFormat
8
- } from "./chunk-DMU3SFC4.js";
8
+ } from "./chunk-6CR7DWLU.js";
9
9
  import {
10
10
  AGENT_PROVIDER_IDS,
11
11
  CANONRY_NPM_PACKAGE_URL,
@@ -50,7 +50,7 @@ import {
50
50
  skillsClientSchema,
51
51
  upgradeCaveatFor,
52
52
  upgradeCommandFor
53
- } from "./chunk-LXHE4DVO.js";
53
+ } from "./chunk-4MWLHTRS.js";
54
54
 
55
55
  // src/config.ts
56
56
  import fs from "fs";
package/dist/cli.js CHANGED
@@ -35,11 +35,11 @@ import {
35
35
  trackCliCommandFinished,
36
36
  trackEvent,
37
37
  waitForServerRuntimeStartup
38
- } from "./chunk-QFI47QVP.js";
38
+ } from "./chunk-3QBRDFI5.js";
39
39
  import {
40
40
  autoSyncSkills,
41
41
  formatAutoSyncNotice
42
- } from "./chunk-MJ3QINUW.js";
42
+ } from "./chunk-TBAVVIVI.js";
43
43
  import {
44
44
  configExists,
45
45
  createApiClient,
@@ -56,13 +56,13 @@ import {
56
56
  saveConfig,
57
57
  saveConfigPatch,
58
58
  shouldPrintServeSkillsNudge
59
- } from "./chunk-PDOMOHOP.js";
59
+ } from "./chunk-YOMLHHJS.js";
60
60
  import {
61
61
  DEFAULT_DEMO_TRUSTED_PROXIES,
62
62
  trustedProxiesProblem,
63
63
  trustedProxyProblem
64
64
  } from "./chunk-RB2F4D3Z.js";
65
- import "./chunk-HTTYBQN4.js";
65
+ import "./chunk-HB6XZOZ6.js";
66
66
  import {
67
67
  CliError,
68
68
  EXIT_SYSTEM_ERROR,
@@ -74,7 +74,7 @@ import {
74
74
  runMeasurementDraftAction,
75
75
  systemError,
76
76
  usageError
77
- } from "./chunk-DMU3SFC4.js";
77
+ } from "./chunk-6CR7DWLU.js";
78
78
  import {
79
79
  CLOUDFLARE_WORKER_BINDINGS,
80
80
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -89,7 +89,7 @@ import {
89
89
  queries,
90
90
  renderReportHtml,
91
91
  runs
92
- } from "./chunk-B5W7HDCG.js";
92
+ } from "./chunk-N7MRAN3G.js";
93
93
  import {
94
94
  AdsDeliverySnapshotStatuses,
95
95
  AdsHistoricalCampaignRollupStatuses,
@@ -196,7 +196,7 @@ import {
196
196
  visibilityCompareSelectionSchema,
197
197
  visibilityReportRequestSchema,
198
198
  winnabilityClassSchema
199
- } from "./chunk-LXHE4DVO.js";
199
+ } from "./chunk-4MWLHTRS.js";
200
200
 
201
201
  // src/cli.ts
202
202
  import { pathToFileURL } from "url";
@@ -730,7 +730,7 @@ function parseDemoTrustedProxies(values) {
730
730
  async function demoCommand(options) {
731
731
  const { host, port } = parseDemoListenOptions(options);
732
732
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
733
- const { createDemoServer } = await import("./demo-server-VP6CP33U.js");
733
+ const { createDemoServer } = await import("./demo-server-2622GU2H.js");
734
734
  const app = await createDemoServer({ trustProxy });
735
735
  let stopping = false;
736
736
  const stop = () => {
@@ -17356,6 +17356,10 @@ function formatSiteHealthChangeRecord(record) {
17356
17356
  const fields = record.changedFields.length > 0 ? ` (${record.changedFields.join(", ")})` : "";
17357
17357
  return `${record.entity} ${record.change}: ${target}${fields}`;
17358
17358
  }
17359
+ function partialCrawlNote(res) {
17360
+ if (!res.hasCrawlData || res.complete !== false) return null;
17361
+ return `Partial crawl (${res.termination ?? "incomplete"}): pages and links beyond the crawl budget were not observed, so a missing page or link is not proof it does not exist.`;
17362
+ }
17359
17363
  async function technicalAeoCrawlPages(project2, opts) {
17360
17364
  const res = await getClient27().getTechnicalAeoCrawlPages(project2, opts);
17361
17365
  if (opts.format === "jsonl") {
@@ -17363,6 +17367,8 @@ async function technicalAeoCrawlPages(project2, opts) {
17363
17367
  kind: "technical-aeo-crawl-pages-header",
17364
17368
  project: project2,
17365
17369
  runId: res.runId,
17370
+ complete: res.complete,
17371
+ termination: res.termination,
17366
17372
  total: res.total,
17367
17373
  nextCursor: res.nextCursor
17368
17374
  }]);
@@ -17373,8 +17379,9 @@ async function technicalAeoCrawlPages(project2, opts) {
17373
17379
  console.log(JSON.stringify(res, null, 2));
17374
17380
  return;
17375
17381
  }
17382
+ const note = partialCrawlNote(res);
17376
17383
  if (res.pages.length === 0) {
17377
- console.log(`No persisted crawl pages for "${project2}".`);
17384
+ console.log([`No persisted crawl pages for "${project2}".`, ...note ? [note] : []].join("\n"));
17378
17385
  return;
17379
17386
  }
17380
17387
  const lines = [`${res.pages.length} of ${res.total} crawl page(s)${res.nextCursor ? " (more available)" : ""}:`, ""];
@@ -17384,6 +17391,7 @@ async function technicalAeoCrawlPages(project2, opts) {
17384
17391
  }
17385
17392
  if (res.nextCursor) lines.push(`
17386
17393
  Next cursor: ${res.nextCursor}`);
17394
+ if (note) lines.push("", note);
17387
17395
  console.log(lines.join("\n"));
17388
17396
  }
17389
17397
  async function technicalAeoPageAudit(project2, opts) {
@@ -17453,6 +17461,8 @@ async function technicalAeoStructure(project2, opts) {
17453
17461
  kind: "technical-aeo-structure-header",
17454
17462
  project: project2,
17455
17463
  runId: res.runId,
17464
+ complete: res.complete,
17465
+ termination: res.termination,
17456
17466
  parentPath: res.parentPath,
17457
17467
  returned: res.children.length,
17458
17468
  nextCursor: res.nextCursor
@@ -17464,8 +17474,9 @@ async function technicalAeoStructure(project2, opts) {
17464
17474
  console.log(JSON.stringify(res, null, 2));
17465
17475
  return;
17466
17476
  }
17477
+ const note = partialCrawlNote(res);
17467
17478
  if (res.children.length === 0) {
17468
- console.log(`No crawl structure below ${res.parentPath} for "${project2}".`);
17479
+ console.log([`No crawl structure below ${res.parentPath} for "${project2}".`, ...note ? [note] : []].join("\n"));
17469
17480
  return;
17470
17481
  }
17471
17482
  const lines = [`${res.children.length} child path(s) below ${res.parentPath}${res.nextCursor ? " (more available)" : ""}:`, ""];
@@ -17474,6 +17485,7 @@ async function technicalAeoStructure(project2, opts) {
17474
17485
  }
17475
17486
  if (res.nextCursor) lines.push(`
17476
17487
  Next cursor: ${res.nextCursor}`);
17488
+ if (note) lines.push("", note);
17477
17489
  console.log(lines.join("\n"));
17478
17490
  }
17479
17491
  async function technicalAeoInternalLinks(project2, opts) {
@@ -17483,6 +17495,8 @@ async function technicalAeoInternalLinks(project2, opts) {
17483
17495
  kind: "technical-aeo-internal-links-header",
17484
17496
  project: project2,
17485
17497
  runId: res.runId,
17498
+ complete: res.complete,
17499
+ termination: res.termination,
17486
17500
  total: res.total,
17487
17501
  nextCursor: res.nextCursor
17488
17502
  }]);
@@ -17493,8 +17507,9 @@ async function technicalAeoInternalLinks(project2, opts) {
17493
17507
  console.log(JSON.stringify(res, null, 2));
17494
17508
  return;
17495
17509
  }
17510
+ const note = partialCrawlNote(res);
17496
17511
  if (res.edges.length === 0) {
17497
- console.log(`No persisted internal links for "${project2}".`);
17512
+ console.log([`No persisted internal links for "${project2}".`, ...note ? [note] : []].join("\n"));
17498
17513
  return;
17499
17514
  }
17500
17515
  const lines = [`${res.edges.length} of ${res.total} internal link(s)${res.nextCursor ? " (more available)" : ""}:`, ""];
@@ -17503,6 +17518,7 @@ async function technicalAeoInternalLinks(project2, opts) {
17503
17518
  }
17504
17519
  if (res.nextCursor) lines.push(`
17505
17520
  Next cursor: ${res.nextCursor}`);
17521
+ if (note) lines.push("", note);
17506
17522
  console.log(lines.join("\n"));
17507
17523
  }
17508
17524
  async function technicalAeoLinkNeighbors(project2, opts) {
@@ -17512,14 +17528,17 @@ async function technicalAeoLinkNeighbors(project2, opts) {
17512
17528
  return;
17513
17529
  }
17514
17530
  const title = res.url ?? res.nodeKey ?? "page";
17531
+ const note = partialCrawlNote(res);
17532
+ const none = note ? " (none observed in this partial crawl)" : " (none)";
17515
17533
  const lines = [`Internal links for ${title}:`, "", "Inbound:"];
17516
17534
  for (const edge of res.inbound) lines.push(` ${edge.sourceUrl} \u2192 ${edge.targetUrl}`);
17517
- if (res.inbound.length === 0) lines.push(" (none)");
17535
+ if (res.inbound.length === 0) lines.push(none);
17518
17536
  if (res.inboundTruncated) lines.push(" (truncated)");
17519
17537
  lines.push("", "Outbound:");
17520
17538
  for (const edge of res.outbound) lines.push(` ${edge.sourceUrl} \u2192 ${edge.targetUrl}`);
17521
- if (res.outbound.length === 0) lines.push(" (none)");
17539
+ if (res.outbound.length === 0) lines.push(none);
17522
17540
  if (res.outboundTruncated) lines.push(" (truncated)");
17541
+ if (note) lines.push("", note);
17523
17542
  console.log(lines.join("\n"));
17524
17543
  }
17525
17544
  async function technicalAeoDeadLinks(project2, opts) {
@@ -5,11 +5,11 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-HTTYBQN4.js";
8
+ } from "./chunk-HB6XZOZ6.js";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  canonryMcpTools
12
- } from "./chunk-DMU3SFC4.js";
12
+ } from "./chunk-6CR7DWLU.js";
13
13
  import {
14
14
  HISTORY_WINDOW_RUNS,
15
15
  IntelligenceService,
@@ -85,7 +85,7 @@ import {
85
85
  siteCrawlPages,
86
86
  siteCrawlSnapshots,
87
87
  trafficSources
88
- } from "./chunk-B5W7HDCG.js";
88
+ } from "./chunk-N7MRAN3G.js";
89
89
  import {
90
90
  RunKinds,
91
91
  SiteCrawlFetchStates,
@@ -112,7 +112,7 @@ import {
112
112
  roundPreservingTotal,
113
113
  siteAuditPageFactorSchema,
114
114
  wilsonInterval
115
- } from "./chunk-LXHE4DVO.js";
115
+ } from "./chunk-4MWLHTRS.js";
116
116
 
117
117
  // src/demo-server.ts
118
118
  import { dirname, join as join2 } from "path";
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-QFI47QVP.js";
6
+ } from "./chunk-3QBRDFI5.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-PDOMOHOP.js";
10
- import "./chunk-HTTYBQN4.js";
11
- import "./chunk-DMU3SFC4.js";
12
- import "./chunk-B5W7HDCG.js";
13
- import "./chunk-LXHE4DVO.js";
9
+ } from "./chunk-YOMLHHJS.js";
10
+ import "./chunk-HB6XZOZ6.js";
11
+ import "./chunk-6CR7DWLU.js";
12
+ import "./chunk-N7MRAN3G.js";
13
+ import "./chunk-4MWLHTRS.js";
14
14
  export {
15
15
  GoogleMarketingRuntimeError,
16
16
  createGoogleMarketingCredentialStore,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  HISTORY_WINDOW_RUNS,
3
3
  IntelligenceService
4
- } from "./chunk-B5W7HDCG.js";
5
- import "./chunk-LXHE4DVO.js";
4
+ } from "./chunk-N7MRAN3G.js";
5
+ import "./chunk-4MWLHTRS.js";
6
6
  export {
7
7
  HISTORY_WINDOW_RUNS,
8
8
  IntelligenceService
package/dist/mcp.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-MJ3QINUW.js";
3
+ } from "./chunk-TBAVVIVI.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-PDOMOHOP.js";
8
- import "./chunk-DMU3SFC4.js";
7
+ } from "./chunk-YOMLHHJS.js";
8
+ import "./chunk-6CR7DWLU.js";
9
9
  import {
10
10
  isReadOnlyKey,
11
11
  updateCheckEnvOptOut
12
- } from "./chunk-LXHE4DVO.js";
12
+ } from "./chunk-4MWLHTRS.js";
13
13
 
14
14
  // src/mcp/cli.ts
15
15
  import { randomUUID } from "crypto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "6.1.1",
3
+ "version": "6.1.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-contracts": "0.0.0",
88
+ "@ainyc/canonry-web": "0.0.0",
89
+ "@ainyc/canonry-api-client": "0.0.0",
89
90
  "@ainyc/canonry-api-routes": "0.0.0",
90
91
  "@ainyc/canonry-db": "0.0.0",
91
- "@ainyc/canonry-api-client": "0.0.0",
92
- "@ainyc/canonry-web": "0.0.0",
93
- "@ainyc/canonry-integration-bing": "0.0.0",
94
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
95
92
  "@ainyc/canonry-config": "0.0.0",
96
- "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
93
+ "@ainyc/canonry-contracts": "0.0.0",
94
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
97
95
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
96
+ "@ainyc/canonry-integration-bing": "0.0.0",
97
+ "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
98
98
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
99
99
  "@ainyc/canonry-integration-google-ads": "0.0.0",
100
100
  "@ainyc/canonry-integration-google": "0.0.0",
101
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
102
101
  "@ainyc/canonry-integration-google-places": "0.0.0",
103
102
  "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
104
- "@ainyc/canonry-intelligence": "0.0.0",
105
- "@ainyc/canonry-integration-wordpress": "0.0.0",
106
- "@ainyc/canonry-provider-cdp": "0.0.0",
107
103
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
108
- "@ainyc/canonry-integration-traffic": "0.0.0",
109
- "@ainyc/canonry-provider-claude": "0.0.0",
104
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
105
+ "@ainyc/canonry-integration-wordpress": "0.0.0",
106
+ "@ainyc/canonry-intelligence": "0.0.0",
110
107
  "@ainyc/canonry-provider-gemini": "0.0.0",
111
108
  "@ainyc/canonry-provider-local": "0.0.0",
112
109
  "@ainyc/canonry-provider-muse": "0.0.0",
110
+ "@ainyc/canonry-integration-traffic": "0.0.0",
113
111
  "@ainyc/canonry-provider-openai": "0.0.0",
114
112
  "@ainyc/canonry-provider-perplexity": "0.0.0",
115
- "@ainyc/canonry-integration-typesafe": "0.0.0"
113
+ "@ainyc/canonry-integration-typesafe": "0.0.0",
114
+ "@ainyc/canonry-provider-claude": "0.0.0",
115
+ "@ainyc/canonry-provider-cdp": "0.0.0"
116
116
  },
117
117
  "scripts": {
118
118
  "build": "pnpm run build:cli && pnpm run build:web",