@canonry/canonry 7.99.0 → 7.100.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 (182) hide show
  1. package/README.md +18 -16
  2. package/assets/agent-workspace/AGENTS.md +13 -6
  3. package/assets/agent-workspace/skills/aero/SKILL.md +45 -26
  4. package/assets/agent-workspace/skills/aero/references/agent-operations.md +47 -12
  5. package/assets/agent-workspace/skills/aero/references/memory-patterns.md +1 -1
  6. package/assets/agent-workspace/skills/aero/references/orchestration.md +9 -9
  7. package/assets/agent-workspace/skills/aero/references/reporting.md +8 -4
  8. package/assets/agent-workspace/skills/aero/references/seo-analysis.md +2 -2
  9. package/assets/agent-workspace/skills/aero/references/site-health.md +23 -22
  10. package/assets/agent-workspace/skills/aero/soul.md +2 -2
  11. package/assets/agent-workspace/skills/canonry/SKILL.md +37 -7
  12. package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +14 -11
  13. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +122 -53
  14. package/assets/assets/AccessControls-DzO5Y8v9.js +2 -0
  15. package/assets/assets/AgentSetupPage-DWWovaCw.js +36 -0
  16. package/assets/assets/AuditHistoryPanel-BG-n1i8c.js +1 -0
  17. package/assets/assets/BacklinksPage-D6wdOMXt.js +1 -0
  18. package/assets/assets/ChartPrimitives-CtKdkn64.js +3 -0
  19. package/assets/assets/Hint-3TTi0MgX.js +1 -0
  20. package/assets/assets/{HistoryPage-DNE76LNh.js → HistoryPage-B_ReWHbL.js} +1 -1
  21. package/assets/assets/InfoTooltip-D29JcNMW.js +1 -0
  22. package/assets/assets/MeasurementPropertyPage-zdyLL-kl.js +4 -0
  23. package/assets/assets/ProjectPage-KZNKXR4w.js +15 -0
  24. package/assets/assets/RunsPage-DxN0xXQh.js +1 -0
  25. package/assets/assets/ServerTrafficSection-CvISj5pf.js +40 -0
  26. package/assets/assets/SettingsPage-CpRpBlMV.js +1 -0
  27. package/assets/assets/ToneBadge-DcwPruHr.js +60 -0
  28. package/assets/assets/TrafficPage-zk6zMZyz.js +1 -0
  29. package/assets/assets/TrafficSourceDetailPage-DJtsI06Z.js +1 -0
  30. package/assets/assets/{account-context-j3asaevn.js → account-context-CoJVqEXZ.js} +1 -1
  31. package/assets/assets/{agent-trust-copy--U_DFYQE.js → agent-trust-copy-BIXDMtBm.js} +1 -1
  32. package/assets/assets/{card-CQAQ-c3g.js → card-Dwmc7Srx.js} +1 -1
  33. package/assets/assets/index-fh1T5JQY.css +1 -0
  34. package/assets/assets/index-mqc2mWUR.js +42 -0
  35. package/assets/assets/query-client-Tg1fZu4i.js +1 -0
  36. package/assets/assets/react-query-BqcEEfEO.js +1 -0
  37. package/assets/assets/{react-sigma_core.esm.min-BAq_-iP1.js → react-sigma_core.esm.min-D1q0DR_j.js} +3 -3
  38. package/assets/assets/{server-traffic-jKXLZyeC.js → server-traffic-Djnh_9f0.js} +1 -1
  39. package/assets/assets/service-BQjBdN4O.js +1 -0
  40. package/assets/assets/use-tooltip-position-BOzm-6Wy.js +1 -0
  41. package/assets/assets/vendor-lucide-iE5MEh2-.js +1 -0
  42. package/assets/assets/{vendor-markdown-BDQ1GKGP.js → vendor-markdown-BBGbNklj.js} +1 -1
  43. package/assets/assets/{vendor-radix-BGYlvS2l.js → vendor-radix-DKCt5Z_h.js} +1 -1
  44. package/assets/assets/{vendor-recharts-DhEHcK3G.js → vendor-recharts-D3MLFU3q.js} +1 -1
  45. package/assets/assets/{vendor-tanstack-BNuZ37rE.js → vendor-tanstack-B90HW50P.js} +2 -2
  46. package/assets/index.html +16 -15
  47. package/dist/{ads-EYDUTG4U.js → ads-FVPZ6R6Z.js} +3 -3
  48. package/dist/{agent-KTK2IDB3.js → agent-2LPU2E5I.js} +7 -7
  49. package/dist/{agent-ask-KPZOH6RY.js → agent-ask-5ODREK6D.js} +3 -3
  50. package/dist/{agent-conversations-BCWA4JJL.js → agent-conversations-SNLOOJEM.js} +3 -3
  51. package/dist/{agent-journeys-UBVLQ7JV.js → agent-journeys-XDXVL6PK.js} +3 -3
  52. package/dist/{agent-memory-24SYEGEX.js → agent-memory-NKAI2S3U.js} +3 -3
  53. package/dist/{agent-providers-E7EWFE5P.js → agent-providers-R5L7A72X.js} +3 -3
  54. package/dist/{agent-transcript-QGJ45NW5.js → agent-transcript-C5WAGYVC.js} +3 -3
  55. package/dist/{analytics-GHVG5CCT.js → analytics-EJVOLIQL.js} +33 -13
  56. package/dist/{apply-7YLB2DPH.js → apply-I6JOM247.js} +3 -3
  57. package/dist/{backfill-WNQ6O5WP.js → backfill-UVUR36IB.js} +10 -10
  58. package/dist/{backlinks-ZBZR4D27.js → backlinks-3VMVACWN.js} +3 -3
  59. package/dist/{bing-4VBSKPSX.js → bing-R5RL3PW2.js} +3 -3
  60. package/dist/{bootstrap-7ESCLP2G.js → bootstrap-GMMSDTNO.js} +12 -12
  61. package/dist/{cdp-WBL6FZTL.js → cdp-FJKUXHEY.js} +7 -7
  62. package/dist/{chunk-L53ZSQN5.js → chunk-2DV7F6XA.js} +91 -2
  63. package/dist/{chunk-MTW37GXF.js → chunk-2FWYWGIR.js} +2 -2
  64. package/dist/{chunk-DMPSA7ZS.js → chunk-56VVRWJM.js} +14 -5
  65. package/dist/{chunk-YACKJGY4.js → chunk-7BEGCVVB.js} +1 -1
  66. package/dist/{chunk-YMHN4UIT.js → chunk-7BH53MOB.js} +27 -2
  67. package/dist/{chunk-XPIMVXAI.js → chunk-7J2RIIYU.js} +1366 -1033
  68. package/dist/{chunk-UY6SKAKW.js → chunk-7SNMIXEQ.js} +2 -2
  69. package/dist/{chunk-C55P75G4.js → chunk-AMGM55CP.js} +2 -2
  70. package/dist/{chunk-ZN2TEBBX.js → chunk-AYKTVQF7.js} +13 -5
  71. package/dist/{chunk-74V5EPZH.js → chunk-BKDRT4VS.js} +7 -7
  72. package/dist/{chunk-O6RXNSNW.js → chunk-COHSL6KW.js} +1 -1
  73. package/dist/{chunk-3WDQ5GPO.js → chunk-DGDLLRS4.js} +1 -1
  74. package/dist/{chunk-VADVPARO.js → chunk-DHIB7EIA.js} +4 -4
  75. package/dist/{chunk-3MFYM2IS.js → chunk-EE3QTCLS.js} +18 -6
  76. package/dist/{chunk-DLOWRO5R.js → chunk-F46TBLXK.js} +204 -94
  77. package/dist/{chunk-P764TJKQ.js → chunk-FBO25TA3.js} +1 -1
  78. package/dist/{chunk-SY3CWJR4.js → chunk-FZ3MUTU3.js} +2 -2
  79. package/dist/{chunk-WA6APXI6.js → chunk-G6QN4VFS.js} +16 -10
  80. package/dist/{chunk-YBWATBX4.js → chunk-HBHLYWKE.js} +9 -6
  81. package/dist/{chunk-5ZOM5BJS.js → chunk-HL2LGRTI.js} +8 -6
  82. package/dist/chunk-J6536OL6.js +31 -0
  83. package/dist/{chunk-3MKJ4LP6.js → chunk-KVRX7YIH.js} +20 -10
  84. package/dist/{chunk-3VPBRGPN.js → chunk-LJO2BKWU.js} +1 -1
  85. package/dist/{chunk-YEUULP44.js → chunk-LNVFERI4.js} +1 -1
  86. package/dist/{chunk-WXAF7AMC.js → chunk-NQYJHKML.js} +39 -7
  87. package/dist/{chunk-UPHHKO3L.js → chunk-O5UFAXUI.js} +646 -588
  88. package/dist/{chunk-XQP3XHLJ.js → chunk-O6APBEJE.js} +2 -2
  89. package/dist/{chunk-47X24IJG.js → chunk-O7S7OHLE.js} +9393 -8394
  90. package/dist/{chunk-2RW5D55K.js → chunk-QS5DWJDI.js} +2 -2
  91. package/dist/{chunk-TVBOK4P2.js → chunk-RBG2QXQM.js} +4 -4
  92. package/dist/{chunk-LM7HTNUO.js → chunk-SWZXHHAG.js} +16 -8
  93. package/dist/{chunk-AY7SDX6G.js → chunk-T7UDY7W3.js} +26 -11
  94. package/dist/{chunk-AJD252SX.js → chunk-UGO2FO6V.js} +119 -55
  95. package/dist/{chunk-PT5HNVCM.js → chunk-VHULVUDL.js} +1 -1
  96. package/dist/{chunk-ZGBLNKFN.js → chunk-YGAQQSCL.js} +56303 -54933
  97. package/dist/{chunk-RRXLJPBN.js → chunk-YIIRS7V7.js} +98 -65
  98. package/dist/{chunk-VOVT2H25.js → chunk-YU2WX7RD.js} +3 -3
  99. package/dist/{citations-N5MGNKJN.js → citations-LOEQRDUB.js} +21 -10
  100. package/dist/{cli-catalog-FFU7PHW7.js → cli-catalog-5RXNUFBS.js} +3 -3
  101. package/dist/{cli-commands-AMIDEUO2.js → cli-commands-HE2BQY3Y.js} +7 -7
  102. package/dist/cli.js +22 -17
  103. package/dist/{competitor-GRA2GMZR.js → competitor-PIX2BHJW.js} +3 -3
  104. package/dist/{content-YVAPTIV4.js → content-PJGW4WZF.js} +3 -3
  105. package/dist/{dashboard-33ACBR5A.js → dashboard-7OKBD4MG.js} +6 -6
  106. package/dist/{demo-AGXWBMR6.js → demo-SCOFAWFM.js} +1 -1
  107. package/dist/{demo-server-W4YAC7GT.js → demo-server-SJPI6RSL.js} +38 -36
  108. package/dist/{discover-BH33TO4Z.js → discover-I3WL2QUN.js} +10 -8
  109. package/dist/{discover-eval-3CEA6DEE.js → discover-eval-YRECOIP5.js} +3 -3
  110. package/dist/{doctor-ZAYTD5PC.js → doctor-F4J6LILX.js} +3 -3
  111. package/dist/{evidence-247GL7UK.js → evidence-MYQTCY4V.js} +25 -10
  112. package/dist/{export-cmd-HLKWFI5Q.js → export-cmd-3SUFOJM6.js} +3 -3
  113. package/dist/{ga-BMING57Z.js → ga-VA6FYK4L.js} +3 -3
  114. package/dist/{gbp-MIB5CXSD.js → gbp-DI6ZVFHL.js} +3 -3
  115. package/dist/{google-5JP6RYAW.js → google-UVKWJCD2.js} +4 -4
  116. package/dist/{google-marketing-25OBMPS6.js → google-marketing-S63HN733.js} +1 -1
  117. package/dist/{health-cmd-D5XSEL7H.js → health-cmd-DOZXGI46.js} +16 -9
  118. package/dist/{history-6MDRFPQ3.js → history-UTJTUDYK.js} +3 -3
  119. package/dist/index.d.ts +211 -19
  120. package/dist/index.js +26 -26
  121. package/dist/{init-RDR75N2Y.js → init-IVJSS33J.js} +19 -19
  122. package/dist/{insights-QZVMBGVM.js → insights-UHCVCZ76.js} +3 -3
  123. package/dist/intelligence-service-3EENJ5DS.js +16 -0
  124. package/dist/{journeys-TABTZDFZ.js → journeys-XIT7WDM2.js} +3 -3
  125. package/dist/{keys-SL5YF7NQ.js → keys-MQKW4JUI.js} +3 -3
  126. package/dist/{keyword-OCDEXRSW.js → keyword-EASMKYZ3.js} +3 -3
  127. package/dist/{logs-CSC7O364.js → logs-ZHZ6XM55.js} +3 -3
  128. package/dist/{mcp-P725OHAJ.js → mcp-ECVT2YGU.js} +4 -4
  129. package/dist/mcp.js +10 -10
  130. package/dist/{measurement-plan-Z42GBJBO.js → measurement-plan-7FQKUOMR.js} +5 -5
  131. package/dist/{notify-E5JBES4I.js → notify-TC7ARC6W.js} +3 -3
  132. package/dist/{organic-evidence-CUA3T64O.js → organic-evidence-M34MWJXE.js} +7 -4
  133. package/dist/overview-P6BRMXJN.js +314 -0
  134. package/dist/{project-2ULM64TV.js → project-WZ2YXFPJ.js} +4 -4
  135. package/dist/project-setup-WV6SPGIV.js +176 -0
  136. package/dist/{query-Y47IEFKJ.js → query-WAFJKDHG.js} +3 -3
  137. package/dist/{research-DPFQZ3TE.js → research-B5ZPQX7R.js} +3 -3
  138. package/dist/{results-export-KBHOBQAH.js → results-export-NIZV6R3K.js} +3 -3
  139. package/dist/{run-4CYHVIIU.js → run-ICLPZ7QT.js} +7 -4
  140. package/dist/{schedule-GY4P3RON.js → schedule-4C44LQ7R.js} +22 -3
  141. package/dist/{search-AGVNZMJQ.js → search-UJM7KII3.js} +11 -4
  142. package/dist/{serve-5LFKIXNL.js → serve-A6UIO6WP.js} +30 -29
  143. package/dist/{session-YAYEDM3P.js → session-RTE22GQT.js} +14 -14
  144. package/dist/settings-BOF5Z7ML.js +211 -0
  145. package/dist/{sitemaps-APTY7U6H.js → sitemaps-BM7S76H2.js} +4 -4
  146. package/dist/{skills-4BUONEIZ.js → skills-X5SR4HRO.js} +2 -2
  147. package/dist/{snapshot-BXCWSF5P.js → snapshot-KLKE37VY.js} +4 -4
  148. package/dist/{src-R7XZUX3D.js → src-EKLG5A6O.js} +4 -2
  149. package/dist/{status-SB6HPBYJ.js → status-OYG57DWU.js} +6 -5
  150. package/dist/{technical-aeo-G7UEMWZD.js → technical-aeo-KWVWOOTI.js} +23 -23
  151. package/dist/{telemetry-H4S4Y7YV.js → telemetry-KGE6FF3Y.js} +4 -4
  152. package/dist/{tools-46XX6I4R.js → tools-4R33AZQ3.js} +11 -11
  153. package/dist/{traffic-I6WRJN3W.js → traffic-SVMOKCSS.js} +7 -11
  154. package/dist/{trends-AQK3GLWF.js → trends-RGAKGX3L.js} +4 -4
  155. package/dist/{users-SNTVY6OB.js → users-47WKA2TO.js} +3 -3
  156. package/dist/{visibility-stats-44QAD2XS.js → visibility-stats-DTGQJPNV.js} +9 -5
  157. package/dist/{wordpress-N7LTOW46.js → wordpress-2CNUX4UE.js} +3 -3
  158. package/package.json +1 -1
  159. package/assets/assets/AgentSetupPage-yOqSVJ-e.js +0 -18
  160. package/assets/assets/AuditHistoryPanel-CiTzFgbw.js +0 -1
  161. package/assets/assets/BacklinksPage-DmRdQsFQ.js +0 -1
  162. package/assets/assets/ChartPrimitives-CvK6CQrj.js +0 -1
  163. package/assets/assets/Hint-c4a4W87X.js +0 -1
  164. package/assets/assets/InfoTooltip-Drnst4ML.js +0 -1
  165. package/assets/assets/MeasurementPropertyPage-Cx64Fnmz.js +0 -4
  166. package/assets/assets/ProjectPage-DNfgC82V.js +0 -11
  167. package/assets/assets/RunsPage-BmPKBKKr.js +0 -1
  168. package/assets/assets/SettingsPage-Dl0TNeVK.js +0 -1
  169. package/assets/assets/SiteHealthSection-DxQPaR--.js +0 -2
  170. package/assets/assets/ToneBadge-BhjTBHi-.js +0 -60
  171. package/assets/assets/TrafficPage-CJp0pS01.js +0 -40
  172. package/assets/assets/TrafficSourceDetailPage-DKE8tSw5.js +0 -1
  173. package/assets/assets/format-helpers-BPugHeIX.js +0 -3
  174. package/assets/assets/index-BAxHW-1G.css +0 -1
  175. package/assets/assets/index-xlDLvgRC.js +0 -60
  176. package/assets/assets/query-client-CwZpfiiD.js +0 -1
  177. package/assets/assets/react-query-CBpNFR4t.js +0 -1
  178. package/assets/assets/service-DFumlmXt.js +0 -1
  179. package/assets/assets/vendor-lucide-DuOM7wVi.js +0 -1
  180. package/dist/intelligence-service-KQE7RO5I.js +0 -16
  181. package/dist/overview-UKQ52I72.js +0 -213
  182. package/dist/settings-HUKMWRHY.js +0 -119
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -21,7 +21,7 @@ import {
21
21
  normalizeCompetitorDomain,
22
22
  shareOfVoiceLabel,
23
23
  shareOfVoiceReason
24
- } from "./chunk-47X24IJG.js";
24
+ } from "./chunk-O7S7OHLE.js";
25
25
  import "./chunk-MLKGABMK.js";
26
26
 
27
27
  // src/commands/competitor.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  contentTargetDismissRequestSchema,
16
16
  formatPercent
17
- } from "./chunk-47X24IJG.js";
17
+ } from "./chunk-O7S7OHLE.js";
18
18
  import "./chunk-MLKGABMK.js";
19
19
 
20
20
  // src/commands/content.ts
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  clearDashboardPassword,
3
3
  loadConfigRaw
4
- } from "./chunk-3MFYM2IS.js";
4
+ } from "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  isMachineFormat
7
7
  } from "./chunk-HGMYEDAQ.js";
8
8
  import {
9
9
  anyUsersExist
10
- } from "./chunk-ZGBLNKFN.js";
11
- import "./chunk-YEUULP44.js";
12
- import "./chunk-3VPBRGPN.js";
10
+ } from "./chunk-YGAQQSCL.js";
11
+ import "./chunk-LNVFERI4.js";
12
+ import "./chunk-LJO2BKWU.js";
13
13
  import {
14
14
  createClient
15
- } from "./chunk-L53ZSQN5.js";
16
- import "./chunk-47X24IJG.js";
15
+ } from "./chunk-2DV7F6XA.js";
16
+ import "./chunk-O7S7OHLE.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
 
19
19
  // src/commands/dashboard.ts
@@ -40,7 +40,7 @@ function parseDemoTrustedProxies(values) {
40
40
  async function demoCommand(options) {
41
41
  const { host, port } = parseDemoListenOptions(options);
42
42
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
43
- const { createDemoServer } = await import("./demo-server-W4YAC7GT.js");
43
+ const { createDemoServer } = await import("./demo-server-SJPI6RSL.js");
44
44
  const app = await createDemoServer({ trustProxy });
45
45
  let stopping = false;
46
46
  const stop = () => {
@@ -5,12 +5,12 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-SY3CWJR4.js";
8
+ } from "./chunk-FZ3MUTU3.js";
9
9
  import {
10
10
  canonryMcpTools
11
- } from "./chunk-DLOWRO5R.js";
12
- import "./chunk-3WDQ5GPO.js";
13
- import "./chunk-YACKJGY4.js";
11
+ } from "./chunk-F46TBLXK.js";
12
+ import "./chunk-DGDLLRS4.js";
13
+ import "./chunk-7BEGCVVB.js";
14
14
  import {
15
15
  PACKAGE_VERSION
16
16
  } from "./chunk-AOJU5LKX.js";
@@ -18,17 +18,17 @@ import "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  HISTORY_WINDOW_RUNS,
20
20
  IntelligenceService
21
- } from "./chunk-LM7HTNUO.js";
21
+ } from "./chunk-SWZXHHAG.js";
22
22
  import {
23
23
  determineCitationState
24
- } from "./chunk-YBWATBX4.js";
25
- import "./chunk-UY6SKAKW.js";
24
+ } from "./chunk-HBHLYWKE.js";
25
+ import "./chunk-7SNMIXEQ.js";
26
26
  import {
27
27
  apiRoutes,
28
28
  assessConversionTrackingIntegrity
29
- } from "./chunk-ZGBLNKFN.js";
30
- import "./chunk-YEUULP44.js";
31
- import "./chunk-3VPBRGPN.js";
29
+ } from "./chunk-YGAQQSCL.js";
30
+ import "./chunk-LNVFERI4.js";
31
+ import "./chunk-LJO2BKWU.js";
32
32
  import {
33
33
  adsAdGroups,
34
34
  adsAds,
@@ -104,9 +104,10 @@ import {
104
104
  siteCrawlPages,
105
105
  siteCrawlSnapshots,
106
106
  trafficSources
107
- } from "./chunk-L53ZSQN5.js";
107
+ } from "./chunk-2DV7F6XA.js";
108
108
  import {
109
109
  AI_ENGINE_DOMAINS,
110
+ CitationStates,
110
111
  GA_OVERVIEW_HISTORY_DAYS,
111
112
  GA_OVERVIEW_WINDOWS,
112
113
  GaOverviewPeriods,
@@ -150,8 +151,9 @@ import {
150
151
  queryClassSchema,
151
152
  roundPreservingTotal,
152
153
  siteAuditPageFactorSchema,
153
- wilsonInterval
154
- } from "./chunk-47X24IJG.js";
154
+ wilsonInterval,
155
+ withLegacyAgentReadinessPaths
156
+ } from "./chunk-O7S7OHLE.js";
155
157
  import "./chunk-MLKGABMK.js";
156
158
 
157
159
  // src/demo-server.ts
@@ -838,7 +840,7 @@ function loadDeadLinks(db, facts) {
838
840
  };
839
841
  }
840
842
  function deadLinkStep(project, deadLinks, text) {
841
- return step("canonry_technical_aeo_dead_links", { project: project.name }, {
843
+ return step("canonry_agent_readiness_dead_links", { project: project.name }, {
842
844
  state: deadLinks.state,
843
845
  checked: deadLinks.checked,
844
846
  found: deadLinks.found,
@@ -1107,7 +1109,7 @@ function harborInsights(db, facts, deadLinks) {
1107
1109
  }
1108
1110
  if (deadLinks) {
1109
1111
  const detail = deadLinkDetail(deadLinks);
1110
- findings.push(`**${deadLinks.found} dead links from the site audit.** There is ${detail}. Action: remove or redirect that link on all ${deadLinks.sources.length} pages. ${link("Open Site Health", `/projects/${project.name}/technical-aeo`)}`);
1112
+ findings.push(`**${deadLinks.found} dead links from the site audit.** There is ${detail}. Action: remove or redirect that link on all ${deadLinks.sources.length} pages. ${link("Open Agent Readiness", `/projects/${project.name}/agent-readiness`)}`);
1111
1113
  }
1112
1114
  const answer = [
1113
1115
  `Only ${active.length} ${active.length === 1 ? "insight is" : "insights are"} stored for ${project.displayName}${fromSweeps.length === 0 ? `, and ${active.length === 2 ? "neither" : "none"} comes from a sweep` : ""}, so there is no severity ranking worth walking through. These are the ${findings.length} most important measured findings instead:`,
@@ -1155,7 +1157,7 @@ import fastifyStatic from "@fastify/static";
1155
1157
  import rateLimit from "@fastify/rate-limit";
1156
1158
 
1157
1159
  // src/demo/access.ts
1158
- var DEMO_READ_ROUTES = /* @__PURE__ */ new Set([
1160
+ var DEMO_READ_ROUTES = new Set(withLegacyAgentReadinessPaths([
1159
1161
  "/api/v1/auth/session",
1160
1162
  "/api/v1/backlinks/releases",
1161
1163
  "/api/v1/backlinks/status",
@@ -1295,23 +1297,23 @@ var DEMO_READ_ROUTES = /* @__PURE__ */ new Set([
1295
1297
  "/api/v1/projects/:name/seo/runs/:id",
1296
1298
  "/api/v1/projects/:name/snapshots",
1297
1299
  "/api/v1/projects/:name/snapshots/diff",
1298
- "/api/v1/projects/:name/technical-aeo",
1299
- "/api/v1/projects/:name/technical-aeo/changes",
1300
- "/api/v1/projects/:name/technical-aeo/crawl",
1301
- "/api/v1/projects/:name/technical-aeo/crawl/pages",
1302
- "/api/v1/projects/:name/technical-aeo/crawl/pages/audit",
1303
- "/api/v1/projects/:name/technical-aeo/dead-links",
1304
- "/api/v1/projects/:name/technical-aeo/graph",
1305
- "/api/v1/projects/:name/technical-aeo/internal-links",
1306
- "/api/v1/projects/:name/technical-aeo/internal-links/neighbors",
1307
- "/api/v1/projects/:name/technical-aeo/pages",
1308
- "/api/v1/projects/:name/technical-aeo/path",
1309
- "/api/v1/projects/:name/technical-aeo/runs",
1310
- "/api/v1/projects/:name/technical-aeo/runs/:runId/page-health-preview",
1311
- "/api/v1/projects/:name/technical-aeo/runs/:runId/progress",
1312
- "/api/v1/projects/:name/technical-aeo/structure",
1313
- "/api/v1/projects/:name/technical-aeo/subgraph",
1314
- "/api/v1/projects/:name/technical-aeo/trend",
1300
+ "/api/v1/projects/:name/agent-readiness",
1301
+ "/api/v1/projects/:name/agent-readiness/changes",
1302
+ "/api/v1/projects/:name/agent-readiness/crawl",
1303
+ "/api/v1/projects/:name/agent-readiness/crawl/pages",
1304
+ "/api/v1/projects/:name/agent-readiness/crawl/pages/audit",
1305
+ "/api/v1/projects/:name/agent-readiness/dead-links",
1306
+ "/api/v1/projects/:name/agent-readiness/graph",
1307
+ "/api/v1/projects/:name/agent-readiness/internal-links",
1308
+ "/api/v1/projects/:name/agent-readiness/internal-links/neighbors",
1309
+ "/api/v1/projects/:name/agent-readiness/pages",
1310
+ "/api/v1/projects/:name/agent-readiness/path",
1311
+ "/api/v1/projects/:name/agent-readiness/runs",
1312
+ "/api/v1/projects/:name/agent-readiness/runs/:runId/page-health-preview",
1313
+ "/api/v1/projects/:name/agent-readiness/runs/:runId/progress",
1314
+ "/api/v1/projects/:name/agent-readiness/structure",
1315
+ "/api/v1/projects/:name/agent-readiness/subgraph",
1316
+ "/api/v1/projects/:name/agent-readiness/trend",
1315
1317
  "/api/v1/projects/:name/timeline",
1316
1318
  "/api/v1/projects/:name/trends",
1317
1319
  "/api/v1/projects/:name/traffic/events",
@@ -1324,7 +1326,7 @@ var DEMO_READ_ROUTES = /* @__PURE__ */ new Set([
1324
1326
  "/api/v1/runs",
1325
1327
  "/api/v1/runs/:id",
1326
1328
  "/api/v1/session"
1327
- ]);
1329
+ ]));
1328
1330
  function isDemoApiReadAllowed(method, registeredRoute) {
1329
1331
  return (method === "GET" || method === "HEAD") && registeredRoute !== void 0 && DEMO_READ_ROUTES.has(registeredRoute);
1330
1332
  }
@@ -1336,7 +1338,7 @@ var DEMO_CLIENT_CONFIG = {
1336
1338
  dashboard: { showAgentBar: false, showUpdateNotification: false }
1337
1339
  };
1338
1340
  var INLINE_SCRIPT = /<script(?<attributes>[^>]*)>(?<body>[\s\S]*?)<\/script>/gi;
1339
- var DEMO_DOCUMENT_PATH = /^\/(?:projects(?:\/[^/.]+(?:\/(?:portfolio|discovery|search-console|seo-data|activity|technical-aeo|conversions|local|queries|backlinks|report|history|settings|properties)(?:\/[^/.]+)*)?)?|runs|history|traffic(?:\/[^/.]+(?:\/[^/.]+)?)?)\/?$/;
1341
+ var DEMO_DOCUMENT_PATH = /^\/(?:projects(?:\/[^/.]+(?:\/(?:portfolio|discovery|search-console|seo-data|activity|traffic|journeys|agent-readiness|technical-aeo|conversions|local|queries|backlinks|report|history|settings|properties)(?:\/[^/.]+)*)?)?|runs|history|traffic(?:\/[^/.]+(?:\/[^/.]+)?)?)\/?$/;
1340
1342
  var DEMO_TITLE = "Canonry live demo";
1341
1343
  var DEMO_DESCRIPTION = "The open-source AEO operating platform. Sample data, no sign-in.";
1342
1344
  var DEMO_PREVIEW_IMAGE = "demo-og.png";
@@ -2147,7 +2149,7 @@ function seedDemoCore(db, context) {
2147
2149
  provider: identity.provider,
2148
2150
  model: identity.requestedModel,
2149
2151
  servedModel: identity.servedModel,
2150
- citationState: cited ? "cited" : "not-cited",
2152
+ citationState: cited ? CitationStates.cited : CitationStates["not-cited"],
2151
2153
  answerMentioned: cited,
2152
2154
  answerText: cited ? `Fictional answer: ${target.label} is a Harbor Resorts option for this stay.` : `Fictional answer: ${providerIndex === 1 ? "Coastal Stays" : "Seaside Collection"} is recommended instead.`,
2153
2155
  citedDomains: cited ? [context.portfolio.domain] : [competitor],
@@ -1,7 +1,12 @@
1
+ import {
2
+ SNAPSHOT_CELL_LEGEND,
3
+ citationGlyph,
4
+ mentionGlyph
5
+ } from "./chunk-J6536OL6.js";
1
6
  import {
2
7
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
8
+ } from "./chunk-UGO2FO6V.js";
9
+ import "./chunk-EE3QTCLS.js";
5
10
  import {
6
11
  emitJsonl
7
12
  } from "./chunk-Z7IUAJOF.js";
@@ -11,10 +16,9 @@ import {
11
16
  isMachineFormat
12
17
  } from "./chunk-HGMYEDAQ.js";
13
18
  import {
14
- CitationStates,
15
19
  DiscoveryPromoteCompetitorSkipReasons,
16
20
  describeError
17
- } from "./chunk-47X24IJG.js";
21
+ } from "./chunk-O7S7OHLE.js";
18
22
  import "./chunk-MLKGABMK.js";
19
23
 
20
24
  // src/commands/discover.ts
@@ -330,12 +334,10 @@ function printSessionDetail(session) {
330
334
  if (session.probes && session.probes.length > 0) {
331
335
  const sorted = [...session.probes].sort((a, b) => (a.bucket ?? "").localeCompare(b.bucket ?? ""));
332
336
  console.log(`
333
- Probes (${session.probes.length}): (cell = [citation][mention]; C=cited c=not, M=mentioned m=not, \u2013=no data)`);
337
+ Probes (${session.probes.length}): ${SNAPSHOT_CELL_LEGEND}`);
334
338
  for (const p of sorted) {
335
339
  const bucket = (p.bucket ?? "\u2013").padEnd(15);
336
- const citationGlyph = p.citationState === CitationStates.cited ? "C" : "c";
337
- const mentionGlyph = typeof p.answerMentioned === "boolean" ? p.answerMentioned ? "M" : "m" : "\u2013";
338
- console.log(` [${citationGlyph}${mentionGlyph}] ${bucket} ${p.query}`);
340
+ console.log(` [${citationGlyph(p.citationState)}${mentionGlyph(p.answerMentioned)}] ${bucket} ${p.query}`);
339
341
  }
340
342
  }
341
343
  }
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  CliError,
8
8
  EXIT_USER_ERROR
9
9
  } from "./chunk-HGMYEDAQ.js";
10
- import "./chunk-47X24IJG.js";
10
+ import "./chunk-O7S7OHLE.js";
11
11
  import "./chunk-MLKGABMK.js";
12
12
 
13
13
  // src/commands/discover-eval.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  CheckScopes,
15
15
  CheckStatuses
16
- } from "./chunk-47X24IJG.js";
16
+ } from "./chunk-O7S7OHLE.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
 
19
19
  // src/commands/doctor.ts
@@ -1,18 +1,29 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
8
8
  import "./chunk-AOJU5LKX.js";
9
9
  import "./chunk-HGMYEDAQ.js";
10
10
  import {
11
- CitationStates
12
- } from "./chunk-47X24IJG.js";
11
+ CitationStates,
12
+ citationStateToCited,
13
+ isCitationStateMeasured
14
+ } from "./chunk-O7S7OHLE.js";
13
15
  import "./chunk-MLKGABMK.js";
14
16
 
15
17
  // src/commands/evidence.ts
18
+ function latestCited(entry) {
19
+ const latest = entry.runs.at(-1);
20
+ return latest ? citationStateToCited(latest.citationState) : false;
21
+ }
22
+ var STATE_LABEL = {
23
+ [CitationStates.cited]: "\u2713 cited",
24
+ [CitationStates["not-cited"]]: "\u2717 not-cited",
25
+ [CitationStates["not-measured"]]: "\xB7 not measured (no sources)"
26
+ };
16
27
  function getClient() {
17
28
  return createApiClient();
18
29
  }
@@ -22,7 +33,7 @@ async function showEvidence(project, format) {
22
33
  if (format === "json") {
23
34
  const enriched = timeline.map((entry) => ({
24
35
  ...entry,
25
- cited: entry.runs[entry.runs.length - 1]?.citationState === CitationStates.cited
36
+ cited: latestCited(entry)
26
37
  }));
27
38
  console.log(JSON.stringify(enriched, null, 2));
28
39
  return;
@@ -30,7 +41,7 @@ async function showEvidence(project, format) {
30
41
  emitJsonl(timeline.map((entry) => ({
31
42
  project,
32
43
  ...entry,
33
- cited: entry.runs[entry.runs.length - 1]?.citationState === CitationStates.cited
44
+ cited: latestCited(entry)
34
45
  })));
35
46
  return;
36
47
  }
@@ -43,14 +54,18 @@ async function showEvidence(project, format) {
43
54
  for (const entry of timeline) {
44
55
  const latest = entry.runs[entry.runs.length - 1];
45
56
  if (!latest) continue;
46
- const state = latest.citationState === CitationStates.cited ? "\u2713 cited" : "\u2717 not-cited";
47
57
  const transition = latest.transition !== latest.citationState ? ` (${latest.transition})` : "";
48
- console.log(` ${state}${transition} ${entry.query}`);
58
+ console.log(` ${STATE_LABEL[latest.citationState]}${transition} ${entry.query}`);
49
59
  }
60
+ const latestStates = timeline.flatMap((e) => e.runs.length > 0 ? [e.runs[e.runs.length - 1].citationState] : []);
61
+ const measured = latestStates.filter(isCitationStateMeasured).length;
62
+ const cited = latestStates.filter((state) => state === CitationStates.cited).length;
50
63
  console.log(`
51
64
  Queries: ${timeline.length}`);
52
- const cited = timeline.filter((e) => e.runs[e.runs.length - 1]?.citationState === CitationStates.cited).length;
53
- console.log(` Cited: ${cited} / ${timeline.length}`);
65
+ console.log(` Cited: ${cited} / ${measured}`);
66
+ if (measured < latestStates.length) {
67
+ console.log(` Not measured: ${latestStates.length - measured} (no answer carried sources)`);
68
+ }
54
69
  }
55
70
  export {
56
71
  showEvidence
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  isEndpointMissing,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-HGMYEDAQ.js";
10
10
  import {
11
11
  isRedactedNotificationUrl
12
- } from "./chunk-47X24IJG.js";
12
+ } from "./chunk-O7S7OHLE.js";
13
13
  import "./chunk-MLKGABMK.js";
14
14
 
15
15
  // src/commands/export-cmd.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -26,7 +26,7 @@ import {
26
26
  gaSearchLandingHasSearchData,
27
27
  gaSearchLandingPageLabel,
28
28
  isGaOverviewWindow
29
- } from "./chunk-47X24IJG.js";
29
+ } from "./chunk-O7S7OHLE.js";
30
30
  import "./chunk-MLKGABMK.js";
31
31
 
32
32
  // src/commands/ga.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  isMachineFormat
@@ -11,7 +11,7 @@ import {
11
11
  formatPercent,
12
12
  gbpLocalPostCreateSchema,
13
13
  validationError
14
- } from "./chunk-47X24IJG.js";
14
+ } from "./chunk-O7S7OHLE.js";
15
15
  import "./chunk-MLKGABMK.js";
16
16
 
17
17
  // src/commands/gbp.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -10,7 +10,7 @@ import {
10
10
  requireGscSitemapUrls,
11
11
  resolveDiscoveredGscSitemapUrls,
12
12
  submitGscSitemapBatches
13
- } from "./chunk-3WDQ5GPO.js";
13
+ } from "./chunk-DGDLLRS4.js";
14
14
  import "./chunk-AOJU5LKX.js";
15
15
  import {
16
16
  CliError,
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-HGMYEDAQ.js";
19
19
  import {
20
20
  formatPercent
21
- } from "./chunk-47X24IJG.js";
21
+ } from "./chunk-O7S7OHLE.js";
22
22
  import "./chunk-MLKGABMK.js";
23
23
 
24
24
  // src/commands/google.ts
@@ -12,7 +12,7 @@ import {
12
12
  describeError,
13
13
  formatMicros,
14
14
  formatPercent
15
- } from "./chunk-47X24IJG.js";
15
+ } from "./chunk-O7S7OHLE.js";
16
16
  import "./chunk-MLKGABMK.js";
17
17
 
18
18
  // src/commands/google-marketing.ts
@@ -1,7 +1,10 @@
1
+ import {
2
+ citedBase
3
+ } from "./chunk-J6536OL6.js";
1
4
  import {
2
5
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
6
+ } from "./chunk-UGO2FO6V.js";
7
+ import "./chunk-EE3QTCLS.js";
5
8
  import {
6
9
  emitJsonl
7
10
  } from "./chunk-Z7IUAJOF.js";
@@ -9,10 +12,13 @@ import "./chunk-AOJU5LKX.js";
9
12
  import "./chunk-HGMYEDAQ.js";
10
13
  import {
11
14
  formatPercent
12
- } from "./chunk-47X24IJG.js";
15
+ } from "./chunk-O7S7OHLE.js";
13
16
  import "./chunk-MLKGABMK.js";
14
17
 
15
18
  // src/commands/health-cmd.ts
19
+ function citedText(rate, cited, measured) {
20
+ return rate === null ? "not measured" : `${formatPercent(rate)} cited (${cited}/${measured})`;
21
+ }
16
22
  async function showHealth(project, opts) {
17
23
  const client = createApiClient();
18
24
  if (opts.history) {
@@ -28,13 +34,13 @@ async function showHealth(project, opts) {
28
34
  console.log("No health history available.");
29
35
  return;
30
36
  }
31
- console.log("Date Mention Rate Mentioned/Total Cited Rate Cited/Total");
32
- console.log("\u2500".repeat(86));
37
+ console.log("Date Mention Rate Mentioned/Total Cited Rate Cited/Checked");
38
+ console.log("\u2500".repeat(88));
33
39
  for (const snap of snapshots) {
34
40
  const mRate = formatPercent(snap.overallMentionRate).padStart(6);
35
41
  const mRatio = `${snap.mentionedPairs}/${snap.totalPairs}`.padEnd(15);
36
- const cRate = formatPercent(snap.overallCitedRate).padStart(6);
37
- const cRatio = `${snap.citedPairs}/${snap.totalPairs}`;
42
+ const cRate = snap.overallCitedRate === null ? "not measured" : formatPercent(snap.overallCitedRate).padStart(6);
43
+ const cRatio = `${snap.citedPairs}/${citedBase(snap.totalPairs, snap.citationNotMeasuredPairs)}`;
38
44
  const date = snap.createdAt.slice(0, 19).padEnd(25);
39
45
  console.log(`${date} ${mRate} ${mRatio} ${cRate} ${cRatio}`);
40
46
  }
@@ -49,13 +55,14 @@ async function showHealth(project, opts) {
49
55
  console.log("No health data yet \u2014 run a sweep first (canonry run <project>).");
50
56
  return;
51
57
  }
58
+ const notMeasured = health.citationNotMeasuredPairs;
52
59
  console.log(`Health: ${formatPercent(health.overallMentionRate)} mentioned (${health.mentionedPairs}/${health.totalPairs} pairs)`);
53
- console.log(` ${formatPercent(health.overallCitedRate)} cited (${health.citedPairs}/${health.totalPairs} pairs)`);
60
+ console.log(health.overallCitedRate === null ? ` citations not measured (no pair's engine returns sources, ${notMeasured} pairs)` : ` ${formatPercent(health.overallCitedRate)} cited (${health.citedPairs}/${citedBase(health.totalPairs, notMeasured)} pairs)${notMeasured > 0 ? `, ${notMeasured} not measured (no sources)` : ""}`);
54
61
  console.log("");
55
62
  if (health.providerBreakdown && Object.keys(health.providerBreakdown).length > 0) {
56
63
  console.log("Provider Breakdown:");
57
64
  for (const [provider, stats] of Object.entries(health.providerBreakdown)) {
58
- console.log(` ${provider.padEnd(15)} ${formatPercent(stats.mentionRate)} mentioned (${stats.mentioned}/${stats.total}) ${formatPercent(stats.citedRate)} cited (${stats.cited}/${stats.total})`);
65
+ console.log(` ${provider.padEnd(15)} ${formatPercent(stats.mentionRate)} mentioned (${stats.mentioned}/${stats.total}) ${citedText(stats.citedRate, stats.cited, citedBase(stats.total, stats.citationNotMeasured))}`);
59
66
  }
60
67
  }
61
68
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AJD252SX.js";
4
- import "./chunk-3MFYM2IS.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -15,7 +15,7 @@ import {
15
15
  describeError,
16
16
  formatValidationIssues,
17
17
  resultsClearRequestSchema
18
- } from "./chunk-47X24IJG.js";
18
+ } from "./chunk-O7S7OHLE.js";
19
19
  import "./chunk-MLKGABMK.js";
20
20
 
21
21
  // src/commands/history.ts