@canonry/canonry 4.160.0 → 4.162.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.
Files changed (28) hide show
  1. package/assets/assets/{AuditHistoryPanel-AtgoG2AH.js → AuditHistoryPanel-BTtqk1mK.js} +1 -1
  2. package/assets/assets/{BacklinksPage-DrOSF7Mu.js → BacklinksPage-wqRYkJFG.js} +1 -1
  3. package/assets/assets/ChartPrimitives-BoYe2M-i.js +1 -0
  4. package/assets/assets/{HistoryPage-CGQXleJc.js → HistoryPage-Dj1FU5WV.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-C7D2OgIQ.js → MeasurementPropertyPage-CPCYzznG.js} +1 -1
  6. package/assets/assets/ProjectPage-7vg1El9D.js +9 -0
  7. package/assets/assets/{RunRow-BdzKKODo.js → RunRow-CTgtgq5x.js} +1 -1
  8. package/assets/assets/{RunsPage-BU96L07S.js → RunsPage-qS7etC5f.js} +1 -1
  9. package/assets/assets/{SettingsPage-LEca0kDH.js → SettingsPage-BlUWPiA7.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-CKM4DUfE.js → SiteHealthSection-tUFchSy-.js} +3 -3
  11. package/assets/assets/{TrafficPage-tU9wl1F_.js → TrafficPage-BSWUsXM1.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-DZTpnU9f.js → TrafficSourceDetailPage-DOTtU4SK.js} +1 -1
  13. package/assets/assets/{extract-error-message-BAyN-ftk.js → extract-error-message-DOWCsWL0.js} +1 -1
  14. package/assets/assets/{index-Wqv7kvs-.js → index-BYGqta_M.js} +20 -20
  15. package/assets/assets/{index-CACRaOmZ.css → index-CHluSPlN.css} +1 -1
  16. package/assets/assets/{react-sigma_core.esm.min-DlZOAc_w.js → react-sigma_core.esm.min-C4kgfZfm.js} +1 -1
  17. package/assets/index.html +2 -2
  18. package/dist/{chunk-HQAVEK42.js → chunk-2TLRE2L3.js} +1 -1
  19. package/dist/{chunk-X7CYY5Q7.js → chunk-C6ZZH3XI.js} +206 -38
  20. package/dist/{chunk-XGESWHFP.js → chunk-FZAAGXTK.js} +35 -18
  21. package/dist/{chunk-7M7T5QXS.js → chunk-NG7OR6GO.js} +3354 -3216
  22. package/dist/cli.js +42 -15
  23. package/dist/index.js +4 -4
  24. package/dist/{intelligence-service-6XQMM466.js → intelligence-service-ANRFEQWX.js} +2 -2
  25. package/dist/mcp.js +2 -2
  26. package/package.json +12 -12
  27. package/assets/assets/ChartPrimitives-DXVLCdBi.js +0 -1
  28. package/assets/assets/ProjectPage-Lp1VjNvL.js +0 -12
package/dist/cli.js CHANGED
@@ -31,7 +31,7 @@ import {
31
31
  showFirstRunNotice,
32
32
  trackCliCommandFinished,
33
33
  trackEvent
34
- } from "./chunk-XGESWHFP.js";
34
+ } from "./chunk-FZAAGXTK.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-HQAVEK42.js";
54
+ } from "./chunk-2TLRE2L3.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-X7CYY5Q7.js";
68
+ } from "./chunk-C6ZZH3XI.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-7M7T5QXS.js";
132
+ } from "./chunk-NG7OR6GO.js";
133
133
 
134
134
  // src/cli.ts
135
135
  import { pathToFileURL } from "url";
@@ -7092,25 +7092,56 @@ async function googlePerformanceDaily(project, opts) {
7092
7092
  console.log(JSON.stringify(data, null, 2));
7093
7093
  return;
7094
7094
  } else if (opts.format === "jsonl") {
7095
- emitJsonl(data.daily.map((row) => ({ project, ...row })));
7095
+ emitJsonl(data.daily.map((row) => ({ project, window: data.window, ...row })));
7096
7096
  return;
7097
7097
  }
7098
7098
  if (data.daily.length === 0) {
7099
7099
  console.log('No GSC data found in this window. Run "canonry google sync" first.');
7100
7100
  return;
7101
7101
  }
7102
- const { clicks, impressions, ctr, days } = data.totals;
7103
- console.log(`GSC daily summary (${days} day${days === 1 ? "" : "s"}):
7102
+ const { clicks, impressions, ctr, position, days } = data.totals;
7103
+ const win = data.window;
7104
+ const range = win?.startDate && win.endDate ? ` ${win.startDate} to ${win.endDate}` : "";
7105
+ console.log(`GSC daily summary (${days} day${days === 1 ? "" : "s"}${range}):
7104
7106
  `);
7107
+ const endsAtFrontier = win?.endDate !== void 0 && win.endDate === win.latestDataDate;
7108
+ if (endsAtFrontier && (win.daysSinceLatestData ?? 0) > 0) {
7109
+ console.log(` Search Console data through ${win.endDate} (${win.daysSinceLatestData} day${win.daysSinceLatestData === 1 ? "" : "s"} ago).`);
7110
+ console.log();
7111
+ } else if (win?.latestDataDate && win.endDate !== win.latestDataDate) {
7112
+ console.log(` Showing a fixed range. Latest Search Console data is ${win.latestDataDate}.`);
7113
+ console.log();
7114
+ }
7105
7115
  console.log(` Clicks: ${clicks.toLocaleString()}`);
7106
7116
  console.log(` Impressions: ${impressions.toLocaleString()}`);
7107
7117
  console.log(` CTR: ${(ctr * 100).toFixed(2)}%`);
7118
+ console.log(` Position: ${position == null ? "\u2014" : position.toFixed(1)}`);
7119
+ const fits = data.trends;
7120
+ const trendLines = [];
7121
+ for (const [label, trend, fmt] of [
7122
+ ["Clicks", fits?.clicks, (v) => v.toFixed(2)],
7123
+ ["Impressions", fits?.impressions, (v) => v.toFixed(2)],
7124
+ ["CTR", fits?.ctr, (v) => `${(v * 100).toFixed(3)}pp`],
7125
+ ["Position", fits?.position, (v) => v.toFixed(3)]
7126
+ ]) {
7127
+ if (!trend) continue;
7128
+ const better = label === "Position" ? trend.slope < 0 : trend.slope > 0;
7129
+ const direction = trend.slope === 0 ? "flat" : better ? "improving" : "declining";
7130
+ trendLines.push(
7131
+ ` ${`${label}:`.padEnd(13)}${fmt(trend.slope).padStart(10)}/day ${direction} (r\xB2=${trend.r2.toFixed(2)})`
7132
+ );
7133
+ }
7134
+ if (trendLines.length > 0) {
7135
+ console.log(`
7136
+ Trend (least-squares fit over ${days} day${days === 1 ? "" : "s"}):`);
7137
+ for (const line of trendLines) console.log(line);
7138
+ }
7108
7139
  console.log();
7109
- console.log(` ${"DATE".padEnd(12)}${"CLICKS".padStart(10)}${"IMPR".padStart(12)}${"CTR".padStart(10)}`);
7110
- console.log(` ${"\u2500".repeat(12)}${"\u2500".repeat(10)}${"\u2500".repeat(12)}${"\u2500".repeat(10)}`);
7140
+ console.log(` ${"DATE".padEnd(12)}${"CLICKS".padStart(10)}${"IMPR".padStart(12)}${"CTR".padStart(10)}${"POS".padStart(9)}`);
7141
+ console.log(` ${"\u2500".repeat(12)}${"\u2500".repeat(10)}${"\u2500".repeat(12)}${"\u2500".repeat(10)}${"\u2500".repeat(9)}`);
7111
7142
  for (const row of data.daily) {
7112
7143
  console.log(
7113
- ` ${row.date.padEnd(12)}${row.clicks.toLocaleString().padStart(10)}${row.impressions.toLocaleString().padStart(12)}${(row.ctr * 100).toFixed(2).padStart(9)}%`
7144
+ ` ${row.date.padEnd(12)}${row.clicks.toLocaleString().padStart(10)}${row.impressions.toLocaleString().padStart(12)}${(row.ctr * 100).toFixed(2).padStart(9)}%${(row.position == null ? "\u2014" : row.position.toFixed(1)).padStart(9)}`
7114
7145
  );
7115
7146
  }
7116
7147
  }
@@ -7166,11 +7197,7 @@ async function googlePerformance(project, opts) {
7166
7197
  if (opts.startDate) params.startDate = opts.startDate;
7167
7198
  if (opts.endDate) params.endDate = opts.endDate;
7168
7199
  } else if (opts.days) {
7169
- const end = /* @__PURE__ */ new Date();
7170
- const start = /* @__PURE__ */ new Date();
7171
- start.setDate(start.getDate() - opts.days);
7172
- params.startDate = start.toISOString().split("T")[0];
7173
- params.endDate = end.toISOString().split("T")[0];
7200
+ params.days = String(opts.days);
7174
7201
  }
7175
7202
  if (opts.keyword) params.query = opts.keyword;
7176
7203
  if (opts.page) params.page = opts.page;
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-XGESWHFP.js";
3
+ } from "./chunk-FZAAGXTK.js";
4
4
  import {
5
5
  loadConfig
6
- } from "./chunk-HQAVEK42.js";
7
- import "./chunk-X7CYY5Q7.js";
8
- import "./chunk-7M7T5QXS.js";
6
+ } from "./chunk-2TLRE2L3.js";
7
+ import "./chunk-C6ZZH3XI.js";
8
+ import "./chunk-NG7OR6GO.js";
9
9
  export {
10
10
  createServer,
11
11
  loadConfig
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-X7CYY5Q7.js";
4
- import "./chunk-7M7T5QXS.js";
3
+ } from "./chunk-C6ZZH3XI.js";
4
+ import "./chunk-NG7OR6GO.js";
5
5
  export {
6
6
  IntelligenceService
7
7
  };
package/dist/mcp.js CHANGED
@@ -3,10 +3,10 @@ import {
3
3
  PACKAGE_VERSION,
4
4
  canonryMcpTools,
5
5
  createApiClient
6
- } from "./chunk-HQAVEK42.js";
6
+ } from "./chunk-2TLRE2L3.js";
7
7
  import {
8
8
  isReadOnlyKey
9
- } from "./chunk-7M7T5QXS.js";
9
+ } from "./chunk-NG7OR6GO.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.160.0",
3
+ "version": "4.162.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",
@@ -71,27 +71,27 @@
71
71
  "tsup": "^8.5.1",
72
72
  "tsx": "^4.19.0",
73
73
  "@ainyc/canonry-api-client": "0.0.0",
74
- "@ainyc/canonry-api-routes": "0.0.0",
75
- "@ainyc/canonry-contracts": "0.0.0",
76
74
  "@ainyc/canonry-config": "0.0.0",
77
- "@ainyc/canonry-db": "0.0.0",
78
75
  "@ainyc/canonry-integration-bing": "0.0.0",
79
- "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
76
+ "@ainyc/canonry-contracts": "0.0.0",
77
+ "@ainyc/canonry-db": "0.0.0",
80
78
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
79
+ "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
80
+ "@ainyc/canonry-api-routes": "0.0.0",
81
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
81
82
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
82
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
83
83
  "@ainyc/canonry-integration-google": "0.0.0",
84
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
85
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
84
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
86
85
  "@ainyc/canonry-integration-google-places": "0.0.0",
87
- "@ainyc/canonry-intelligence": "0.0.0",
88
- "@ainyc/canonry-integration-wordpress": "0.0.0",
89
86
  "@ainyc/canonry-integration-traffic": "0.0.0",
87
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
88
+ "@ainyc/canonry-integration-wordpress": "0.0.0",
90
89
  "@ainyc/canonry-provider-claude": "0.0.0",
90
+ "@ainyc/canonry-provider-cdp": "0.0.0",
91
91
  "@ainyc/canonry-provider-gemini": "0.0.0",
92
- "@ainyc/canonry-provider-local": "0.0.0",
92
+ "@ainyc/canonry-intelligence": "0.0.0",
93
93
  "@ainyc/canonry-provider-openai": "0.0.0",
94
- "@ainyc/canonry-provider-cdp": "0.0.0",
94
+ "@ainyc/canonry-provider-local": "0.0.0",
95
95
  "@ainyc/canonry-provider-perplexity": "0.0.0"
96
96
  },
97
97
  "scripts": {
@@ -1 +0,0 @@
1
- const c={contentStyle:{backgroundColor:"var(--chart-tooltip-bg, #18181b)",border:"1px solid var(--chart-tooltip-border, #3f3f46)",borderRadius:8,fontSize:12},labelStyle:{color:"var(--chart-tooltip-label, #e4e4e7)"},itemStyle:{color:"var(--chart-tooltip-item, #a1a1aa)"}},i={fill:"var(--chart-neutral-text-dim, #71717a)",fontSize:11},s="var(--chart-grid, #27272a)",u="var(--chart-axis, #27272a)",e=["var(--chart-series-1, #34d399)","var(--chart-series-2, #60a5fa)","var(--chart-series-3, #f472b6)","var(--chart-series-4, #facc15)","var(--chart-series-5, #a78bfa)","var(--chart-series-6, #fb923c)","var(--chart-series-7, #22d3ee)","var(--chart-series-8, #f87171)"],o={gemini:"#60a5fa",openai:"#34d399",claude:"#fb923c",perplexity:"#22d3ee",local:"#a78bfa"};function l(a,t=0){return o[a]??e[t%e.length]}const h={text:"var(--chart-neutral-text, #a1a1aa)",textDim:"var(--chart-neutral-text-dim, #71717a)",textFaint:"var(--chart-neutral-text-faint, #52525b)",surface:"var(--chart-neutral-surface, #27272a)",trackSubtle:"var(--chart-neutral-track-subtle, rgb(255 255 255 / 0.04))",gridLine:"var(--chart-neutral-grid-line, rgb(255 255 255 / 0.06))"},v={positive:"var(--chart-tone-positive, #34d399)",positiveDeep:"var(--chart-tone-positive-deep, #10b981)",caution:"var(--chart-tone-caution, #fbbf24)",negative:"var(--chart-tone-negative, #fb7185)"};function d(a){return a}function n(a){const t=/^(\d{4})-(\d{2})-(\d{2})/.exec(a);return t?{year:Number(t[1]),month:Number(t[2]),day:Number(t[3])}:null}function f(a){const t=String(a),r=n(t);return r?new Date(Date.UTC(r.year,r.month-1,r.day)).toLocaleDateString(void 0,{timeZone:"UTC",month:"short",day:"numeric",year:"numeric"}):t}function b(a){const t=n(String(a));return t?`${t.month}/${t.day}`:String(a)}function m(a){return new Date(a).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function S(a){const t=new Date(a);return`${t.getMonth()+1}/${t.getDate()}`}export{u as C,i as a,f as b,c,h as d,e,b as f,v as g,s as h,S as i,m as j,d as o,l as p};