@canonry/canonry 5.34.0 → 6.1.1

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 (39) hide show
  1. package/assets/agent-workspace/skills/aero/references/portfolio-analysis.md +15 -3
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +4 -8
  3. package/assets/assets/{AuditHistoryPanel-Ddg6JIi3.js → AuditHistoryPanel-Dtt7cbYo.js} +1 -1
  4. package/assets/assets/{BacklinksPage-DI9BmaYt.js → BacklinksPage-h25kHk3u.js} +1 -1
  5. package/assets/assets/{HistoryPage-CACIL005.js → HistoryPage-70YWNYBU.js} +1 -1
  6. package/assets/assets/{MeasurementPropertyPage-D_i3t0DT.js → MeasurementPropertyPage-CBPQ3A99.js} +1 -1
  7. package/assets/assets/ProjectPage-Dbbxf8yl.js +8 -0
  8. package/assets/assets/RunsPage-B6LqcDRg.js +1 -0
  9. package/assets/assets/SettingsPage-DNV6Is27.js +1 -0
  10. package/assets/assets/SiteHealthSection-CWEIYXut.js +4 -0
  11. package/assets/assets/TrafficPage-ZZqGgMyL.js +40 -0
  12. package/assets/assets/{TrafficSourceDetailPage-BPqNmuws.js → TrafficSourceDetailPage-_RMyqM86.js} +1 -1
  13. package/assets/assets/{extract-error-message-B7OeWj0x.js → extract-error-message-D-AaTlPU.js} +1 -1
  14. package/assets/assets/index-BCKrocfL.js +86 -0
  15. package/assets/assets/index-C17E5ZcA.css +1 -0
  16. package/assets/assets/{react-sigma_core.esm.min-jiMNkILi.js → react-sigma_core.esm.min-CaRTZKvV.js} +1 -1
  17. package/assets/assets/{v2-overview-adapter-Caj3bHQE.js → v2-overview-adapter-C16fKgpq.js} +1 -1
  18. package/assets/index.html +2 -2
  19. package/dist/{chunk-G2K5KCUY.js → chunk-B5W7HDCG.js} +49 -24
  20. package/dist/{chunk-25H4K7KL.js → chunk-DMU3SFC4.js} +8 -8
  21. package/dist/{chunk-NZCKJMLC.js → chunk-HTTYBQN4.js} +2 -2
  22. package/dist/{chunk-NOIK3FUO.js → chunk-LXHE4DVO.js} +68 -17
  23. package/dist/{chunk-VHPGBX4P.js → chunk-MJ3QINUW.js} +3 -3
  24. package/dist/{chunk-QTETJEHI.js → chunk-PDOMOHOP.js} +6 -3
  25. package/dist/{chunk-AIAVZY6L.js → chunk-QFI47QVP.js} +36 -135
  26. package/dist/cli.js +22 -12
  27. package/dist/{demo-server-UI24OAHX.js → demo-server-VP6CP33U.js} +4 -4
  28. package/dist/index.js +6 -6
  29. package/dist/{intelligence-service-ZKFLGJ23.js → intelligence-service-6F63MYQ5.js} +2 -2
  30. package/dist/mcp.js +4 -4
  31. package/package.json +15 -15
  32. package/assets/assets/ProjectPage-d1djqfh3.js +0 -8
  33. package/assets/assets/RunRow-CjhvvA6g.js +0 -1
  34. package/assets/assets/RunsPage-DuBhw2uc.js +0 -1
  35. package/assets/assets/SettingsPage-MUpfB0HH.js +0 -1
  36. package/assets/assets/SiteHealthSection-6qdXlFcO.js +0 -4
  37. package/assets/assets/TrafficPage--nGSOgqn.js +0 -40
  38. package/assets/assets/index-C4lreGwR.js +0 -86
  39. package/assets/assets/index-DX5M4MHr.css +0 -1
package/dist/cli.js CHANGED
@@ -35,11 +35,11 @@ import {
35
35
  trackCliCommandFinished,
36
36
  trackEvent,
37
37
  waitForServerRuntimeStartup
38
- } from "./chunk-AIAVZY6L.js";
38
+ } from "./chunk-QFI47QVP.js";
39
39
  import {
40
40
  autoSyncSkills,
41
41
  formatAutoSyncNotice
42
- } from "./chunk-VHPGBX4P.js";
42
+ } from "./chunk-MJ3QINUW.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-QTETJEHI.js";
59
+ } from "./chunk-PDOMOHOP.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-NZCKJMLC.js";
65
+ import "./chunk-HTTYBQN4.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-25H4K7KL.js";
77
+ } from "./chunk-DMU3SFC4.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-G2K5KCUY.js";
92
+ } from "./chunk-B5W7HDCG.js";
93
93
  import {
94
94
  AdsDeliverySnapshotStatuses,
95
95
  AdsHistoricalCampaignRollupStatuses,
@@ -151,6 +151,7 @@ import {
151
151
  formatSignedPointDelta,
152
152
  gbpNegativeReviewMaxStarsSchema,
153
153
  googleAdsMetricsWindowSchema,
154
+ isRetiredAgentProviderId,
154
155
  isVisibilityCompareClassMetric,
155
156
  logQuerySchema,
156
157
  measurementChangesQuerySchema,
@@ -195,7 +196,7 @@ import {
195
196
  visibilityCompareSelectionSchema,
196
197
  visibilityReportRequestSchema,
197
198
  winnabilityClassSchema
198
- } from "./chunk-NOIK3FUO.js";
199
+ } from "./chunk-LXHE4DVO.js";
199
200
 
200
201
  // src/cli.ts
201
202
  import { pathToFileURL } from "url";
@@ -460,13 +461,21 @@ async function showSentiment(project2, selection2, format) {
460
461
  if (machine(value, format)) return;
461
462
  printSummary(value);
462
463
  }
464
+ function ratedAnswersLine({ ratedAnswers, eligibleAnswers, ratedAnswerRate }) {
465
+ if (ratedAnswers === void 0 || eligibleAnswers === void 0) return null;
466
+ if (eligibleAnswers === 0) return "Rated: no answers yet";
467
+ if (ratedAnswerRate === null || ratedAnswerRate === void 0) return `Rated: Unavailable \xB7 ${eligibleAnswers} eligible ${eligibleAnswers === 1 ? "answer" : "answers"}`;
468
+ return `Rated: ${formatPercent(ratedAnswerRate, RatioUnits.fraction)} \xB7 ${ratedAnswers} of ${eligibleAnswers} ${eligibleAnswers === 1 ? "answer" : "answers"} rated`;
469
+ }
463
470
  function printSummary(value) {
464
471
  const label = value.selection.queryClass === "branded" ? "Branded" : "Non-brand";
465
472
  console.log(`${label} sentiment: ${value.state}${value.provisional ? " \xB7 provisional" : ""}`);
466
473
  if (value.reason) console.log(value.reason);
467
474
  console.log(`Favorable: ${value.score.favorableDisplay} \xB7 Mixed: ${value.score.mixedDisplay} \xB7 Unfavorable: ${value.score.unfavorableDisplay}`);
468
475
  console.log(`${label} favorable % = favorable / (favorable + mixed + unfavorable).`);
469
- console.log(`${value.coverage.judged} of ${value.coverage.selected} assessments judged \xB7 ${value.coverage.distinctSourceAnswers} distinct source answers`);
476
+ const rated = ratedAnswersLine(value.coverage);
477
+ if (rated) console.log(rated);
478
+ console.log(`${value.coverage.judged} of ${value.coverage.selected} assessments judged \xB7 ${value.coverage.distinctSourceAnswers} admitted source answers`);
470
479
  console.log(`${value.coverage.eligibleAssessments} eligible assessments \xB7 ${value.coverage.unadmittedAssessments} not yet admitted`);
471
480
  console.log(`Source provider slots: ${value.coverage.completedProviderSlots} of ${value.coverage.expectedProviderSlots}`);
472
481
  console.log(`Evaluation definition: ${value.selection.evaluationDefinitionId ?? "not measured"}`);
@@ -721,7 +730,7 @@ function parseDemoTrustedProxies(values) {
721
730
  async function demoCommand(options) {
722
731
  const { host, port } = parseDemoListenOptions(options);
723
732
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
724
- const { createDemoServer } = await import("./demo-server-UI24OAHX.js");
733
+ const { createDemoServer } = await import("./demo-server-VP6CP33U.js");
725
734
  const app = await createDemoServer({ trustProxy });
726
735
  let stopping = false;
727
736
  const stop = () => {
@@ -11825,7 +11834,7 @@ Citation Rate Trends (${data.window})`);
11825
11834
  for (const [provider, served] of servedEntries) {
11826
11835
  const rawIds = served.latestServedModelIds.length > 0 ? served.latestServedModelIds.join(", ") : formatModelEvidence(served.latestObservation.state);
11827
11836
  const substituted = mismatch[provider];
11828
- const note = substituted ? ` \u2014 not the ${formatModelEvidence(substituted.configured)} you selected` : "";
11837
+ const note = substituted ? ` (not the ${formatModelEvidence(substituted.configured)} you selected)` : "";
11829
11838
  console.log(` ${provider}: ${rawIds} at ${served.latestObservation.observedAt}${note}`);
11830
11839
  for (const event of served.events) {
11831
11840
  const dating = event.fromPreWindowAnchor ? " (on or before)" : "";
@@ -19874,9 +19883,10 @@ Usage: ${usage}`, {
19874
19883
  }
19875
19884
  const providerInput = getString(input.values, "provider");
19876
19885
  if (providerInput && !coerceAgentProvider(providerInput)) {
19877
- throw usageError(`Error: --provider must be one of: ${listAgentProviders().join(", ")}
19886
+ const message = isRetiredAgentProviderId(providerInput) ? `--provider ${providerInput} was removed; use one of: ${listAgentProviders().join(", ")}` : `--provider must be one of: ${listAgentProviders().join(", ")}`;
19887
+ throw usageError(`Error: ${message}
19878
19888
  Usage: ${usage}`, {
19879
- message: `--provider must be one of: ${listAgentProviders().join(", ")}`,
19889
+ message,
19880
19890
  details: {
19881
19891
  command: "agent.ask",
19882
19892
  usage,
@@ -5,11 +5,11 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-NZCKJMLC.js";
8
+ } from "./chunk-HTTYBQN4.js";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  canonryMcpTools
12
- } from "./chunk-25H4K7KL.js";
12
+ } from "./chunk-DMU3SFC4.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-G2K5KCUY.js";
88
+ } from "./chunk-B5W7HDCG.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-NOIK3FUO.js";
115
+ } from "./chunk-LXHE4DVO.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-AIAVZY6L.js";
6
+ } from "./chunk-QFI47QVP.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-QTETJEHI.js";
10
- import "./chunk-NZCKJMLC.js";
11
- import "./chunk-25H4K7KL.js";
12
- import "./chunk-G2K5KCUY.js";
13
- import "./chunk-NOIK3FUO.js";
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";
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-G2K5KCUY.js";
5
- import "./chunk-NOIK3FUO.js";
4
+ } from "./chunk-B5W7HDCG.js";
5
+ import "./chunk-LXHE4DVO.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-VHPGBX4P.js";
3
+ } from "./chunk-MJ3QINUW.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-QTETJEHI.js";
8
- import "./chunk-25H4K7KL.js";
7
+ } from "./chunk-PDOMOHOP.js";
8
+ import "./chunk-DMU3SFC4.js";
9
9
  import {
10
10
  isReadOnlyKey,
11
11
  updateCheckEnvOptOut
12
- } from "./chunk-NOIK3FUO.js";
12
+ } from "./chunk-LXHE4DVO.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": "5.34.0",
3
+ "version": "6.1.1",
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": [
@@ -61,8 +61,8 @@
61
61
  "@fastify/rate-limit": "^11.2.0",
62
62
  "@fastify/static": "^9.1.1",
63
63
  "@google/genai": "^1.46.0",
64
- "@earendil-works/pi-agent-core": "0.87.1",
65
- "@earendil-works/pi-ai": "0.87.1",
64
+ "@earendil-works/pi-agent-core": "1.0.0",
65
+ "@earendil-works/pi-ai": "1.0.0",
66
66
  "@modelcontextprotocol/sdk": "^1.29.0",
67
67
  "better-sqlite3": "^12.11.1",
68
68
  "chrome-remote-interface": "^0.33.2",
@@ -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-web": "0.0.0",
89
- "@ainyc/canonry-api-client": "0.0.0",
90
- "@ainyc/canonry-config": "0.0.0",
91
- "@ainyc/canonry-db": "0.0.0",
92
88
  "@ainyc/canonry-contracts": "0.0.0",
93
89
  "@ainyc/canonry-api-routes": "0.0.0",
90
+ "@ainyc/canonry-db": "0.0.0",
91
+ "@ainyc/canonry-api-client": "0.0.0",
92
+ "@ainyc/canonry-web": "0.0.0",
94
93
  "@ainyc/canonry-integration-bing": "0.0.0",
95
94
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
96
- "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
95
+ "@ainyc/canonry-config": "0.0.0",
97
96
  "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
97
+ "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
98
98
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
99
- "@ainyc/canonry-integration-google": "0.0.0",
100
99
  "@ainyc/canonry-integration-google-ads": "0.0.0",
101
- "@ainyc/canonry-integration-google-places": "0.0.0",
100
+ "@ainyc/canonry-integration-google": "0.0.0",
102
101
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
102
+ "@ainyc/canonry-integration-google-places": "0.0.0",
103
103
  "@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",
104
107
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
105
108
  "@ainyc/canonry-integration-traffic": "0.0.0",
106
- "@ainyc/canonry-integration-wordpress": "0.0.0",
107
- "@ainyc/canonry-intelligence": "0.0.0",
108
109
  "@ainyc/canonry-provider-claude": "0.0.0",
109
- "@ainyc/canonry-provider-cdp": "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
+ "@ainyc/canonry-provider-openai": "0.0.0",
113
114
  "@ainyc/canonry-provider-perplexity": "0.0.0",
114
- "@ainyc/canonry-integration-typesafe": "0.0.0",
115
- "@ainyc/canonry-provider-openai": "0.0.0"
115
+ "@ainyc/canonry-integration-typesafe": "0.0.0"
116
116
  },
117
117
  "scripts": {
118
118
  "build": "pnpm run build:cli && pnpm run build:web",