@ainyc/canonry 5.5.0 → 5.6.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 (38) hide show
  1. package/assets/agent-workspace/skills/aero/references/portfolio-analysis.md +1 -1
  2. package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +10 -0
  3. package/assets/assets/{AuditHistoryPanel-BMGGxHpw.js → AuditHistoryPanel-DVUbjx1M.js} +1 -1
  4. package/assets/assets/{BacklinksPage-CS3wJSWe.js → BacklinksPage-D01VTDAp.js} +1 -1
  5. package/assets/assets/ChartPrimitives-BQC2VH0O.js +1 -0
  6. package/assets/assets/{HistoryPage-Ba9ezeuP.js → HistoryPage-Bk1gsXe5.js} +1 -1
  7. package/assets/assets/{MeasurementPropertyPage-Y9eseEv0.js → MeasurementPropertyPage-D7p5vpY_.js} +1 -1
  8. package/assets/assets/ProjectPage-Dv3USEIE.js +8 -0
  9. package/assets/assets/{RunRow-DbUtgNUI.js → RunRow-Dpa0kAip.js} +1 -1
  10. package/assets/assets/{RunsPage-BBuFIYuS.js → RunsPage-B59z7DQ_.js} +1 -1
  11. package/assets/assets/{SettingsPage-DNnR33D-.js → SettingsPage-HJDgmQi9.js} +1 -1
  12. package/assets/assets/{SiteHealthSection-Cf4KHWp0.js → SiteHealthSection-BnJA-zvQ.js} +3 -3
  13. package/assets/assets/{TrafficPage-DSQjaZM9.js → TrafficPage-C8na59q_.js} +5 -5
  14. package/assets/assets/{TrafficSourceDetailPage-C-Pg69TW.js → TrafficSourceDetailPage-B2fO8bDc.js} +1 -1
  15. package/assets/assets/{extract-error-message-DNLmL0ID.js → extract-error-message-670MySRM.js} +1 -1
  16. package/assets/assets/index-DTrkuKOh.js +86 -0
  17. package/assets/assets/index-PT4UiPTM.css +1 -0
  18. package/assets/assets/{react-sigma_core.esm.min-DkItaBPY.js → react-sigma_core.esm.min-DOhuYLQj.js} +1 -1
  19. package/assets/assets/v2-overview-adapter-CQyDNkXa.js +1 -0
  20. package/assets/assets/{vendor-recharts-D-cUuLZo.js → vendor-recharts-llkUFBGR.js} +1 -1
  21. package/assets/index.html +3 -3
  22. package/dist/{chunk-75ECQ77U.js → chunk-C4KBR4H6.js} +6 -6
  23. package/dist/{chunk-REQEWYNF.js → chunk-D3DKDTXP.js} +1027 -70
  24. package/dist/{chunk-DX4CZNNU.js → chunk-GHAUT7XJ.js} +2 -2
  25. package/dist/{chunk-KKDXJWDK.js → chunk-I4AHG7K3.js} +3 -3
  26. package/dist/{chunk-LQAOGFFK.js → chunk-KZYOJ4F5.js} +2 -2
  27. package/dist/{chunk-BL3FMPSM.js → chunk-TM2NQMJA.js} +803 -777
  28. package/dist/cli.js +10 -9
  29. package/dist/{demo-server-BSH6SSWD.js → demo-server-JEGVGOPQ.js} +7 -3
  30. package/dist/index.js +5 -5
  31. package/dist/{intelligence-service-CU7W5AVC.js → intelligence-service-5P62KKG6.js} +2 -2
  32. package/dist/mcp.js +3 -3
  33. package/package.json +11 -11
  34. package/assets/assets/ChartPrimitives-Bxa_vFmq.js +0 -1
  35. package/assets/assets/ProjectPage-Cl1N9Dcw.js +0 -8
  36. package/assets/assets/index-BCCrbno5.js +0 -86
  37. package/assets/assets/index-gQj7x9RX.css +0 -1
  38. package/assets/assets/v2-overview-adapter-DKBMcYBh.js +0 -1
package/dist/cli.js CHANGED
@@ -35,11 +35,11 @@ import {
35
35
  trackCliCommandFinished,
36
36
  trackEvent,
37
37
  waitForServerRuntimeStartup
38
- } from "./chunk-75ECQ77U.js";
38
+ } from "./chunk-C4KBR4H6.js";
39
39
  import {
40
40
  autoSyncSkills,
41
41
  formatAutoSyncNotice
42
- } from "./chunk-DX4CZNNU.js";
42
+ } from "./chunk-GHAUT7XJ.js";
43
43
  import {
44
44
  CliError,
45
45
  EXIT_SYSTEM_ERROR,
@@ -66,13 +66,13 @@ import {
66
66
  shouldPrintServeSkillsNudge,
67
67
  systemError,
68
68
  usageError
69
- } from "./chunk-KKDXJWDK.js";
69
+ } from "./chunk-I4AHG7K3.js";
70
70
  import {
71
71
  DEFAULT_DEMO_TRUSTED_PROXIES,
72
72
  trustedProxiesProblem,
73
73
  trustedProxyProblem
74
74
  } from "./chunk-RB2F4D3Z.js";
75
- import "./chunk-LQAOGFFK.js";
75
+ import "./chunk-KZYOJ4F5.js";
76
76
  import "./chunk-AOJU5LKX.js";
77
77
  import {
78
78
  CLOUDFLARE_WORKER_BINDINGS,
@@ -88,7 +88,7 @@ import {
88
88
  queries,
89
89
  renderReportHtml,
90
90
  runs
91
- } from "./chunk-BL3FMPSM.js";
91
+ } from "./chunk-TM2NQMJA.js";
92
92
  import {
93
93
  AdsDeliverySnapshotStatuses,
94
94
  AdsHistoricalCampaignRollupStatuses,
@@ -139,6 +139,7 @@ import {
139
139
  formatMicros,
140
140
  formatRatio,
141
141
  formatRunErrorOneLine,
142
+ formatWholePercent,
142
143
  googleAdsMetricsWindowSchema,
143
144
  logQuerySchema,
144
145
  measurementChangesQuerySchema,
@@ -169,7 +170,7 @@ import {
169
170
  snapshotProviderModeSchema,
170
171
  visibilityReportRequestSchema,
171
172
  winnabilityClassSchema
172
- } from "./chunk-REQEWYNF.js";
173
+ } from "./chunk-D3DKDTXP.js";
173
174
 
174
175
  // src/cli.ts
175
176
  import { pathToFileURL } from "url";
@@ -434,7 +435,7 @@ function parseDemoTrustedProxies(values) {
434
435
  async function demoCommand(options) {
435
436
  const { host, port } = parseDemoListenOptions(options);
436
437
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
437
- const { createDemoServer } = await import("./demo-server-BSH6SSWD.js");
438
+ const { createDemoServer } = await import("./demo-server-JEGVGOPQ.js");
438
439
  const app = await createDemoServer({ trustProxy });
439
440
  let stopping = false;
440
441
  const stop = () => {
@@ -14602,8 +14603,8 @@ async function listContentGaps(project, opts) {
14602
14603
  console.log(`${response.gaps.length} gap${response.gaps.length === 1 ? "" : "s"} found`);
14603
14604
  console.log("");
14604
14605
  for (const gap of response.gaps) {
14605
- const missPct = Math.round(gap.missRate * 100);
14606
- console.log(`${missPct.toString().padStart(3)}% ${gap.competitorCount} competitor(s) ${gap.query}`);
14606
+ const missPct = formatWholePercent(gap.missRate);
14607
+ console.log(`${missPct.padStart(4)} ${gap.competitorCount} competitor(s) ${gap.query}`);
14607
14608
  console.log(` competitors: ${gap.competitorDomains.join(", ")}`);
14608
14609
  console.log("");
14609
14610
  }
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  layoutSiteCrawlGraphInput,
6
6
  persistSiteCrawlGraphLayout
7
- } from "./chunk-LQAOGFFK.js";
7
+ } from "./chunk-KZYOJ4F5.js";
8
8
  import {
9
9
  PACKAGE_VERSION
10
10
  } from "./chunk-AOJU5LKX.js";
@@ -83,7 +83,7 @@ import {
83
83
  siteCrawlPages,
84
84
  siteCrawlSnapshots,
85
85
  trafficSources
86
- } from "./chunk-BL3FMPSM.js";
86
+ } from "./chunk-TM2NQMJA.js";
87
87
  import {
88
88
  RunKinds,
89
89
  SiteCrawlFetchStates,
@@ -104,7 +104,7 @@ import {
104
104
  measurementPlanV2Schema,
105
105
  placementLinkDecision,
106
106
  siteAuditPageFactorSchema
107
- } from "./chunk-REQEWYNF.js";
107
+ } from "./chunk-D3DKDTXP.js";
108
108
 
109
109
  // src/demo-server.ts
110
110
  import { dirname, join as join2 } from "path";
@@ -995,6 +995,10 @@ function harborPlan(context, capturedAt) {
995
995
  stableKey: `market-${market.key}`,
996
996
  label: `${market.label} market`,
997
997
  kind: "market",
998
+ // Each demo Group holds exactly its market's properties, so the market
999
+ // links to its Group rather than sitting as an unrelated root option
1000
+ // with an identical label (O5).
1001
+ groupKey: `market-${market.key}`,
998
1002
  usageEdges: usageEdges.filter((edge) => edge.targetKey.includes(market.key))
999
1003
  })),
1000
1004
  compiledChecksum: "0".repeat(64)
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-75ECQ77U.js";
6
+ } from "./chunk-C4KBR4H6.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-KKDXJWDK.js";
10
- import "./chunk-LQAOGFFK.js";
9
+ } from "./chunk-I4AHG7K3.js";
10
+ import "./chunk-KZYOJ4F5.js";
11
11
  import "./chunk-AOJU5LKX.js";
12
- import "./chunk-BL3FMPSM.js";
13
- import "./chunk-REQEWYNF.js";
12
+ import "./chunk-TM2NQMJA.js";
13
+ import "./chunk-D3DKDTXP.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-BL3FMPSM.js";
5
- import "./chunk-REQEWYNF.js";
4
+ } from "./chunk-TM2NQMJA.js";
5
+ import "./chunk-D3DKDTXP.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-DX4CZNNU.js";
3
+ } from "./chunk-GHAUT7XJ.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-KKDXJWDK.js";
7
+ } from "./chunk-I4AHG7K3.js";
8
8
  import "./chunk-AOJU5LKX.js";
9
9
  import {
10
10
  isReadOnlyKey,
11
11
  updateCheckEnvOptOut
12
- } from "./chunk-REQEWYNF.js";
12
+ } from "./chunk-D3DKDTXP.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": "@ainyc/canonry",
3
- "version": "5.5.0",
3
+ "version": "5.6.0",
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": [
@@ -88,30 +88,30 @@
88
88
  "tsx": "^4.19.0",
89
89
  "@ainyc/canonry-web": "0.0.0",
90
90
  "@ainyc/canonry-api-client": "0.0.0",
91
- "@ainyc/canonry-api-routes": "0.0.0",
92
91
  "@ainyc/canonry-config": "0.0.0",
93
92
  "@ainyc/canonry-contracts": "0.0.0",
93
+ "@ainyc/canonry-api-routes": "0.0.0",
94
94
  "@ainyc/canonry-db": "0.0.0",
95
95
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
96
- "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
96
+ "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
97
97
  "@ainyc/canonry-integration-bing": "0.0.0",
98
+ "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
98
99
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
99
- "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
100
100
  "@ainyc/canonry-integration-google": "0.0.0",
101
- "@ainyc/canonry-integration-google-ads": "0.0.0",
102
101
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
103
102
  "@ainyc/canonry-integration-google-places": "0.0.0",
104
- "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
105
- "@ainyc/canonry-integration-openai-ads": "0.0.0",
106
103
  "@ainyc/canonry-integration-traffic": "0.0.0",
107
- "@ainyc/canonry-intelligence": "0.0.0",
104
+ "@ainyc/canonry-integration-google-ads": "0.0.0",
108
105
  "@ainyc/canonry-integration-wordpress": "0.0.0",
109
- "@ainyc/canonry-provider-claude": "0.0.0",
106
+ "@ainyc/canonry-integration-openai-ads": "0.0.0",
107
+ "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
108
+ "@ainyc/canonry-intelligence": "0.0.0",
110
109
  "@ainyc/canonry-provider-cdp": "0.0.0",
111
- "@ainyc/canonry-provider-gemini": "0.0.0",
110
+ "@ainyc/canonry-provider-claude": "0.0.0",
112
111
  "@ainyc/canonry-provider-openai": "0.0.0",
113
112
  "@ainyc/canonry-provider-local": "0.0.0",
114
- "@ainyc/canonry-provider-perplexity": "0.0.0"
113
+ "@ainyc/canonry-provider-perplexity": "0.0.0",
114
+ "@ainyc/canonry-provider-gemini": "0.0.0"
115
115
  },
116
116
  "scripts": {
117
117
  "build": "pnpm run build:cli && pnpm run build:web",
@@ -1 +0,0 @@
1
- import{j as i}from"./vendor-tanstack-ZXXkndVj.js";import{R as k,C,a as R,e as A,X as I,Y as _,T as D,d as m}from"./vendor-recharts-D-cUuLZo.js";const L={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)"}},v={fill:"var(--chart-neutral-text-dim, #8b8b93)",fontSize:11},O="var(--chart-grid, #27272a)",b="var(--chart-axis, #27272a)",p=["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)"],j={gemini:"#60a5fa",openai:"#34d399",claude:"#fb923c",perplexity:"#22d3ee",local:"#a78bfa"};function $(r,a=0){return j[r]??p[a%p.length]}const K={text:"var(--chart-neutral-text, #a1a1aa)",textDim:"var(--chart-neutral-text-dim, #8b8b93)",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))"},H={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 N(r){return r}function y(r){const a=/^(\d{4})-(\d{2})-(\d{2})/.exec(r);return a?{year:Number(a[1]),month:Number(a[2]),day:Number(a[3])}:null}function M(r){const a=String(r),e=y(a);return e?new Date(Date.UTC(e.year,e.month-1,e.day)).toLocaleDateString(void 0,{timeZone:"UTC",month:"short",day:"numeric",year:"numeric"}):a}function F(r){const a=y(String(r));return a?`${a.month}/${a.day}`:String(r)}function G(r){return new Date(r).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function P(r){const a=new Date(r);return`${a.getMonth()+1}/${a.getDate()}`}function U({data:r,xKey:a,series:e,height:x=260,xTickFormatter:g,labelFormatter:f,onSelectX:d,selectedX:u}){const h=[...new Set(e.map(t=>t.axisId))],S=new Map(e.map(t=>[t.label,t.formatValue])),T=r.map((t,s)=>{const n={...t};for(const o of e){if(!o.trend)continue;const c=o.trend.startIndex??0,l=o.trend.endIndex??r.length-1;if(s<c||s>l){n[`${o.dataKey}__trend`]=null;continue}n[`${o.dataKey}__trend`]=l<=c?o.trend.start:o.trend.start+(o.trend.end-o.trend.start)*(s-c)/(l-c)}return n});return i.jsx(k,{width:"100%",height:x,children:i.jsxs(C,{data:T,margin:{top:8,right:8,bottom:4,left:0},onClick:d?t=>{t?.activeLabel!==void 0&&d(String(t.activeLabel))}:void 0,style:d?{cursor:"pointer"}:void 0,children:[i.jsx(R,{stroke:O,strokeDasharray:"3 3",vertical:!1}),u!=null&&i.jsx(A,{x:u,yAxisId:h[0],stroke:K.text,strokeDasharray:"2 3",strokeWidth:1}),i.jsx(I,{dataKey:a,tick:v,stroke:b,tickFormatter:g,minTickGap:24}),h.map((t,s)=>{const n=e.find(o=>o.axisId===t);return i.jsx(_,{yAxisId:t,orientation:s===1?"right":"left",hide:s>1,reversed:n.inverted??!1,domain:n.inverted?[1,"auto"]:[0,"auto"],tick:v,stroke:b,width:48,tickFormatter:n.formatValue},t)}),i.jsx(D,{...L,labelFormatter:t=>f?f(String(t)):String(t),formatter:(t,s)=>{const n=String(s??"");return typeof t!="number"?[String(t??""),n]:[S.get(n)?.(t)??t.toLocaleString(),n]}}),e.filter(t=>t.trend).map(t=>i.jsx(m,{yAxisId:t.axisId,dataKey:`${t.dataKey}__trend`,name:`${t.label} trend`,stroke:t.color,strokeWidth:1.5,strokeDasharray:"5 4",strokeOpacity:.55,dot:!1,activeDot:!1,isAnimationActive:!1,legendType:"none",tooltipType:"none"},`${t.dataKey}-trend`)),e.map(t=>i.jsx(m,{yAxisId:t.axisId,dataKey:t.dataKey,name:t.label,stroke:t.color,strokeWidth:2,dot:!1,activeDot:{r:3},connectNulls:!1,isAnimationActive:!1},t.dataKey))]})})}export{O as C,U as M,b as a,v as b,M as c,L as d,p as e,F as f,K as g,H as h,P as i,G as j,N as o,$ as p};