@canonry/canonry 7.98.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 +34 -23
  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-DeN79d3c.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-CdEHcI5S.js → account-context-CoJVqEXZ.js} +1 -1
  31. package/assets/assets/{agent-trust-copy-N6WacCSg.js → agent-trust-copy-BIXDMtBm.js} +1 -1
  32. package/assets/assets/{card-B1O0SunG.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-f4uuOgrw.js → react-sigma_core.esm.min-D1q0DR_j.js} +3 -3
  38. package/assets/assets/{server-traffic-CkSCFMnL.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-PQ4OP6OH.js → ads-FVPZ6R6Z.js} +3 -3
  48. package/dist/{agent-B6ZPL2HH.js → agent-2LPU2E5I.js} +7 -7
  49. package/dist/{agent-ask-ZUKNXRAX.js → agent-ask-5ODREK6D.js} +3 -3
  50. package/dist/{agent-conversations-DJ7WU7PL.js → agent-conversations-SNLOOJEM.js} +3 -3
  51. package/dist/{agent-journeys-LGUI3SQG.js → agent-journeys-XDXVL6PK.js} +3 -3
  52. package/dist/{agent-memory-PWZJ7G5Q.js → agent-memory-NKAI2S3U.js} +3 -3
  53. package/dist/{agent-providers-TEERDNJT.js → agent-providers-R5L7A72X.js} +3 -3
  54. package/dist/{agent-transcript-KDPOPK5Z.js → agent-transcript-C5WAGYVC.js} +3 -3
  55. package/dist/{analytics-NFW5RQRT.js → analytics-EJVOLIQL.js} +33 -13
  56. package/dist/{apply-EP4V4UF5.js → apply-I6JOM247.js} +3 -3
  57. package/dist/{backfill-6UTNNVFO.js → backfill-UVUR36IB.js} +10 -10
  58. package/dist/{backlinks-SG5GV5X5.js → backlinks-3VMVACWN.js} +3 -3
  59. package/dist/{bing-Q4W24JNC.js → bing-R5RL3PW2.js} +3 -3
  60. package/dist/{bootstrap-WEMERVNZ.js → bootstrap-GMMSDTNO.js} +12 -12
  61. package/dist/{cdp-3XKBJGHO.js → cdp-FJKUXHEY.js} +7 -7
  62. package/dist/{chunk-KK3Z34AN.js → chunk-2DV7F6XA.js} +91 -2
  63. package/dist/{chunk-MTW37GXF.js → chunk-2FWYWGIR.js} +2 -2
  64. package/dist/{chunk-Q5SNOMRB.js → chunk-56VVRWJM.js} +14 -5
  65. package/dist/{chunk-52M2JWCB.js → chunk-7BEGCVVB.js} +1 -1
  66. package/dist/{chunk-WZSDGC45.js → chunk-7BH53MOB.js} +27 -2
  67. package/dist/{chunk-IX5AC3QB.js → chunk-7J2RIIYU.js} +1450 -1067
  68. package/dist/{chunk-UXXZXXNG.js → chunk-7SNMIXEQ.js} +2 -2
  69. package/dist/{chunk-2XCYEBQV.js → chunk-AMGM55CP.js} +2 -2
  70. package/dist/{chunk-MSI4BGFN.js → chunk-AYKTVQF7.js} +13 -5
  71. package/dist/{chunk-3JWY65XO.js → chunk-BKDRT4VS.js} +7 -7
  72. package/dist/{chunk-FQ3L2TIX.js → chunk-COHSL6KW.js} +1 -1
  73. package/dist/{chunk-X3UXMHWC.js → chunk-DGDLLRS4.js} +1 -1
  74. package/dist/{chunk-YJITDEZR.js → chunk-DHIB7EIA.js} +4 -4
  75. package/dist/{chunk-BLW327AU.js → chunk-EE3QTCLS.js} +18 -6
  76. package/dist/{chunk-3GMBHGQ5.js → chunk-F46TBLXK.js} +204 -94
  77. package/dist/{chunk-RTH5JVC3.js → chunk-FBO25TA3.js} +1 -1
  78. package/dist/{chunk-2Q7JEC6N.js → chunk-FZ3MUTU3.js} +2 -2
  79. package/dist/{chunk-64R66MWZ.js → chunk-G6QN4VFS.js} +16 -10
  80. package/dist/{chunk-ISIJ2NS4.js → chunk-HBHLYWKE.js} +9 -6
  81. package/dist/{chunk-EJZ444VV.js → chunk-HL2LGRTI.js} +8 -6
  82. package/dist/chunk-J6536OL6.js +31 -0
  83. package/dist/{chunk-RLKI2QF7.js → chunk-KVRX7YIH.js} +20 -10
  84. package/dist/{chunk-3BA75QYU.js → chunk-LJO2BKWU.js} +1 -1
  85. package/dist/{chunk-CN6MVUY3.js → chunk-LNVFERI4.js} +1 -1
  86. package/dist/{chunk-ZADRESLB.js → chunk-NQYJHKML.js} +39 -7
  87. package/dist/{chunk-IAGC2MGP.js → chunk-O5UFAXUI.js} +646 -588
  88. package/dist/{chunk-RGFIRJ7F.js → chunk-O6APBEJE.js} +2 -2
  89. package/dist/{chunk-ZBTUISPG.js → chunk-O7S7OHLE.js} +9399 -8388
  90. package/dist/{chunk-ER5ZHAB2.js → chunk-QS5DWJDI.js} +2 -2
  91. package/dist/{chunk-QSL3FXE4.js → chunk-RBG2QXQM.js} +4 -4
  92. package/dist/{chunk-SAKH2RRF.js → chunk-SWZXHHAG.js} +16 -8
  93. package/dist/{chunk-VMGZBH5L.js → chunk-T7UDY7W3.js} +26 -11
  94. package/dist/{chunk-OL2L5ANJ.js → chunk-UGO2FO6V.js} +119 -55
  95. package/dist/{chunk-J6MYB3F4.js → chunk-VHULVUDL.js} +1 -1
  96. package/dist/{chunk-O22WSFWL.js → chunk-YGAQQSCL.js} +56339 -54966
  97. package/dist/{chunk-TNOYUE2L.js → chunk-YIIRS7V7.js} +98 -65
  98. package/dist/{chunk-64KB6YTG.js → chunk-YU2WX7RD.js} +3 -3
  99. package/dist/{citations-5OSQ3ZYU.js → citations-LOEQRDUB.js} +21 -10
  100. package/dist/{cli-catalog-T5OAVKGS.js → cli-catalog-5RXNUFBS.js} +3 -3
  101. package/dist/{cli-commands-VATCVJKW.js → cli-commands-HE2BQY3Y.js} +7 -7
  102. package/dist/cli.js +22 -17
  103. package/dist/{competitor-YIKTMTHY.js → competitor-PIX2BHJW.js} +3 -3
  104. package/dist/{content-DS2LKR7J.js → content-PJGW4WZF.js} +3 -3
  105. package/dist/{dashboard-HLVRRRI4.js → dashboard-7OKBD4MG.js} +6 -6
  106. package/dist/{demo-A5DTVJGK.js → demo-SCOFAWFM.js} +1 -1
  107. package/dist/{demo-server-P2JGAI6C.js → demo-server-SJPI6RSL.js} +38 -36
  108. package/dist/{discover-VNZDO2MU.js → discover-I3WL2QUN.js} +10 -8
  109. package/dist/{discover-eval-ON77LUEN.js → discover-eval-YRECOIP5.js} +3 -3
  110. package/dist/{doctor-7TNNTI7H.js → doctor-F4J6LILX.js} +3 -3
  111. package/dist/{evidence-E54CNGXS.js → evidence-MYQTCY4V.js} +25 -10
  112. package/dist/{export-cmd-XXZ6KLQQ.js → export-cmd-3SUFOJM6.js} +3 -3
  113. package/dist/{ga-ZQB4EJI3.js → ga-VA6FYK4L.js} +3 -3
  114. package/dist/{gbp-ZQL6NQEK.js → gbp-DI6ZVFHL.js} +3 -3
  115. package/dist/{google-7EIHQGSV.js → google-UVKWJCD2.js} +4 -4
  116. package/dist/{google-marketing-RSAO4PG7.js → google-marketing-S63HN733.js} +1 -1
  117. package/dist/{health-cmd-R7WPKGWX.js → health-cmd-DOZXGI46.js} +16 -9
  118. package/dist/{history-2CSWSVCY.js → history-UTJTUDYK.js} +3 -3
  119. package/dist/index.d.ts +204 -12
  120. package/dist/index.js +26 -26
  121. package/dist/{init-FXZRMXZ3.js → init-IVJSS33J.js} +19 -19
  122. package/dist/{insights-EJUL3W6D.js → insights-UHCVCZ76.js} +3 -3
  123. package/dist/intelligence-service-3EENJ5DS.js +16 -0
  124. package/dist/{journeys-YUMBANFH.js → journeys-XIT7WDM2.js} +3 -3
  125. package/dist/{keys-KLOTGT4H.js → keys-MQKW4JUI.js} +3 -3
  126. package/dist/{keyword-5NSJFEOI.js → keyword-EASMKYZ3.js} +3 -3
  127. package/dist/{logs-WW3RLCRG.js → logs-ZHZ6XM55.js} +3 -3
  128. package/dist/{mcp-NTBEIEVX.js → mcp-ECVT2YGU.js} +4 -4
  129. package/dist/mcp.js +10 -10
  130. package/dist/{measurement-plan-BLPAZEXS.js → measurement-plan-7FQKUOMR.js} +5 -5
  131. package/dist/{notify-KAGE6UEN.js → notify-TC7ARC6W.js} +3 -3
  132. package/dist/{organic-evidence-HTYRXRML.js → organic-evidence-M34MWJXE.js} +7 -4
  133. package/dist/overview-P6BRMXJN.js +314 -0
  134. package/dist/{project-NYUWICVC.js → project-WZ2YXFPJ.js} +4 -4
  135. package/dist/project-setup-WV6SPGIV.js +176 -0
  136. package/dist/{query-3CRRDOHD.js → query-WAFJKDHG.js} +3 -3
  137. package/dist/{research-ZULVD3TW.js → research-B5ZPQX7R.js} +3 -3
  138. package/dist/{results-export-STM7SQ4J.js → results-export-NIZV6R3K.js} +3 -3
  139. package/dist/{run-S4MFU4MK.js → run-ICLPZ7QT.js} +7 -4
  140. package/dist/{schedule-6W3Q2FUL.js → schedule-4C44LQ7R.js} +22 -3
  141. package/dist/{search-EKXXN7C4.js → search-UJM7KII3.js} +11 -4
  142. package/dist/{serve-TFBFPFAQ.js → serve-A6UIO6WP.js} +30 -29
  143. package/dist/{session-4B5V3AH6.js → session-RTE22GQT.js} +14 -14
  144. package/dist/settings-BOF5Z7ML.js +211 -0
  145. package/dist/{sitemaps-R7XFCH6E.js → sitemaps-BM7S76H2.js} +4 -4
  146. package/dist/{skills-44XYCTVD.js → skills-X5SR4HRO.js} +2 -2
  147. package/dist/{snapshot-ROAOJI4W.js → snapshot-KLKE37VY.js} +4 -4
  148. package/dist/{src-ZJRIKEDB.js → src-EKLG5A6O.js} +4 -2
  149. package/dist/{status-EN3A2TX5.js → status-OYG57DWU.js} +6 -5
  150. package/dist/{technical-aeo-ZV466F65.js → technical-aeo-KWVWOOTI.js} +23 -23
  151. package/dist/{telemetry-EZHPNZ2A.js → telemetry-KGE6FF3Y.js} +4 -4
  152. package/dist/{tools-IH4M7AAG.js → tools-4R33AZQ3.js} +11 -11
  153. package/dist/{traffic-VFLXWB3Z.js → traffic-SVMOKCSS.js} +7 -11
  154. package/dist/{trends-ZXJIX3Z3.js → trends-RGAKGX3L.js} +4 -4
  155. package/dist/{users-J2BYEWOE.js → users-47WKA2TO.js} +3 -3
  156. package/dist/{visibility-stats-AJ7NY2BP.js → visibility-stats-DTGQJPNV.js} +9 -5
  157. package/dist/{wordpress-U6MS35VE.js → wordpress-2CNUX4UE.js} +3 -3
  158. package/package.json +2 -2
  159. package/assets/assets/AgentSetupPage-h1kJhy9q.js +0 -18
  160. package/assets/assets/AuditHistoryPanel-CNUApNiJ.js +0 -1
  161. package/assets/assets/BacklinksPage-CpKmlAek.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-CcHnYn81.js +0 -4
  166. package/assets/assets/ProjectPage-Tmuqmust.js +0 -11
  167. package/assets/assets/RunsPage-BD4k3MjX.js +0 -1
  168. package/assets/assets/SettingsPage-BHy30JP5.js +0 -1
  169. package/assets/assets/SiteHealthSection-SYdtuGjq.js +0 -2
  170. package/assets/assets/ToneBadge-Cii5KNtg.js +0 -60
  171. package/assets/assets/TrafficPage-DuxtRqnc.js +0 -40
  172. package/assets/assets/TrafficSourceDetailPage-DiX1bB02.js +0 -1
  173. package/assets/assets/format-helpers-V8Pyc7cR.js +0 -3
  174. package/assets/assets/index-BAxHW-1G.css +0 -1
  175. package/assets/assets/index-BTz-B9hV.js +0 -60
  176. package/assets/assets/query-client-C1ycmW1c.js +0 -1
  177. package/assets/assets/react-query-DI7VfOND.js +0 -1
  178. package/assets/assets/service-DSgXWhNq.js +0 -1
  179. package/assets/assets/vendor-lucide-DuOM7wVi.js +0 -1
  180. package/dist/intelligence-service-TKK7O3Z5.js +0 -16
  181. package/dist/overview-GSJ4GP2T.js +0 -213
  182. package/dist/settings-VRTDPFR3.js +0 -119
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-OL2L5ANJ.js";
4
- import "./chunk-BLW327AU.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import "./chunk-HGMYEDAQ.js";
7
- import "./chunk-ZBTUISPG.js";
7
+ import "./chunk-O7S7OHLE.js";
8
8
  import "./chunk-MLKGABMK.js";
9
9
 
10
10
  // src/commands/results-export.ts
@@ -2,6 +2,7 @@ import {
2
2
  cancelRun,
3
3
  fillRun,
4
4
  listRuns,
5
+ previewRun,
5
6
  printRunDetail,
6
7
  providerAccountStreakLine,
7
8
  runAdmissionLines,
@@ -9,18 +10,20 @@ import {
9
10
  showRunCompleteness,
10
11
  triggerRun,
11
12
  triggerRunAll
12
- } from "./chunk-ZADRESLB.js";
13
- import "./chunk-OL2L5ANJ.js";
14
- import "./chunk-BLW327AU.js";
13
+ } from "./chunk-NQYJHKML.js";
14
+ import "./chunk-J6536OL6.js";
15
+ import "./chunk-UGO2FO6V.js";
16
+ import "./chunk-EE3QTCLS.js";
15
17
  import "./chunk-Z7IUAJOF.js";
16
18
  import "./chunk-AOJU5LKX.js";
17
19
  import "./chunk-HGMYEDAQ.js";
18
- import "./chunk-ZBTUISPG.js";
20
+ import "./chunk-O7S7OHLE.js";
19
21
  import "./chunk-MLKGABMK.js";
20
22
  export {
21
23
  cancelRun,
22
24
  fillRun,
23
25
  listRuns,
26
+ previewRun,
24
27
  printRunDetail,
25
28
  providerAccountStreakLine,
26
29
  runAdmissionLines,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-OL2L5ANJ.js";
4
- import "./chunk-BLW327AU.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -10,10 +10,28 @@ import {
10
10
  isMachineFormat,
11
11
  usageError
12
12
  } from "./chunk-HGMYEDAQ.js";
13
- import "./chunk-ZBTUISPG.js";
13
+ import {
14
+ formatZonedTimestamp,
15
+ schedulePreviewRequestSchema
16
+ } from "./chunk-O7S7OHLE.js";
14
17
  import "./chunk-MLKGABMK.js";
15
18
 
16
19
  // src/commands/schedule.ts
20
+ async function previewSchedule(project, timing, format) {
21
+ const parsed = schedulePreviewRequestSchema.safeParse(timing);
22
+ if (!parsed.success) throw usageError("Invalid schedule timing", { message: parsed.error.issues.map((issue) => issue.message).join("; ") });
23
+ const preview = await getClient().previewSchedule(project, parsed.data);
24
+ if (format === "jsonl") {
25
+ emitJsonl([preview]);
26
+ return;
27
+ }
28
+ if (format === "json") {
29
+ console.log(JSON.stringify(preview, null, 2));
30
+ return;
31
+ }
32
+ console.log(`Next run: ${preview.nextRunAt ? formatZonedTimestamp(preview.nextRunAt, preview.timezone) : "No future occurrence"}`);
33
+ console.log("Preview only. No schedule was saved or enabled.");
34
+ }
17
35
  async function listSchedules(project, format) {
18
36
  const schedules = await getClient().listSchedules(project);
19
37
  if (format === "jsonl") {
@@ -185,6 +203,7 @@ export {
185
203
  enableSchedule,
186
204
  formatNextRun,
187
205
  listSchedules,
206
+ previewSchedule,
188
207
  printSchedule,
189
208
  removeSchedule,
190
209
  setSchedule,
@@ -1,15 +1,22 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-OL2L5ANJ.js";
4
- import "./chunk-BLW327AU.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  isMachineFormat
8
8
  } from "./chunk-HGMYEDAQ.js";
9
- import "./chunk-ZBTUISPG.js";
9
+ import {
10
+ CitationStates
11
+ } from "./chunk-O7S7OHLE.js";
10
12
  import "./chunk-MLKGABMK.js";
11
13
 
12
14
  // src/commands/search.ts
15
+ var CITATION_STATE_LABEL = {
16
+ [CitationStates.cited]: "cited",
17
+ [CitationStates["not-cited"]]: "not-cited",
18
+ [CitationStates["not-measured"]]: "citation not measured"
19
+ };
13
20
  async function searchProject(project, opts) {
14
21
  const client = createApiClient();
15
22
  const result = await client.searchProject(project, { q: opts.query, limit: opts.limit });
@@ -25,7 +32,7 @@ async function searchProject(project, opts) {
25
32
  }
26
33
  for (const hit of result.hits) {
27
34
  if (hit.kind === "snapshot") {
28
- console.log(` [snapshot] ${hit.query} (${hit.provider}, ${hit.citationState}) \u2014 ${hit.matchedField}`);
35
+ console.log(` [snapshot] ${hit.query} (${hit.provider}, ${CITATION_STATE_LABEL[hit.citationState]}) \u2014 ${hit.matchedField}`);
29
36
  console.log(` ${hit.snippet}`);
30
37
  console.log(` run=${hit.runId} at ${hit.createdAt}`);
31
38
  } else {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  backfillAiReferralPaths,
3
3
  backfillNormalizedPaths
4
- } from "./chunk-3JWY65XO.js";
4
+ } from "./chunk-BKDRT4VS.js";
5
5
  import {
6
6
  operatorHttpUrl
7
7
  } from "./chunk-6GO5VVAC.js";
@@ -9,24 +9,24 @@ import {
9
9
  allowsKeylessFirstRunSetup,
10
10
  createServer,
11
11
  waitForServerRuntimeStartup
12
- } from "./chunk-IX5AC3QB.js";
13
- import "./chunk-EJZ444VV.js";
14
- import "./chunk-RLKI2QF7.js";
15
- import "./chunk-Q5SNOMRB.js";
12
+ } from "./chunk-7J2RIIYU.js";
13
+ import "./chunk-KVRX7YIH.js";
14
+ import "./chunk-HL2LGRTI.js";
15
+ import "./chunk-56VVRWJM.js";
16
16
  import "./chunk-ELCLGWUT.js";
17
17
  import "./chunk-XEBKF4N5.js";
18
- import "./chunk-J6MYB3F4.js";
19
- import "./chunk-TNOYUE2L.js";
18
+ import "./chunk-VHULVUDL.js";
19
+ import "./chunk-YIIRS7V7.js";
20
20
  import {
21
21
  trackFeatureCompleted
22
- } from "./chunk-YJITDEZR.js";
22
+ } from "./chunk-DHIB7EIA.js";
23
23
  import {
24
24
  isLoopbackBindHost,
25
25
  resolveServePort
26
26
  } from "./chunk-TSENU4GG.js";
27
27
  import {
28
28
  registeredProviderNames
29
- } from "./chunk-FQ3L2TIX.js";
29
+ } from "./chunk-COHSL6KW.js";
30
30
  import {
31
31
  cliRuntimeContext,
32
32
  getPrintedUpdateAvailable,
@@ -34,45 +34,45 @@ import {
34
34
  isTelemetryEnabled,
35
35
  setTelemetrySource,
36
36
  trackEvent
37
- } from "./chunk-2XCYEBQV.js";
38
- import "./chunk-64R66MWZ.js";
39
- import "./chunk-MTW37GXF.js";
40
- import "./chunk-OL2L5ANJ.js";
37
+ } from "./chunk-AMGM55CP.js";
38
+ import "./chunk-G6QN4VFS.js";
39
+ import "./chunk-2FWYWGIR.js";
40
+ import "./chunk-UGO2FO6V.js";
41
41
  import {
42
42
  getConfigDir,
43
43
  getConfigPath,
44
44
  loadConfig,
45
45
  saveConfigPatch
46
- } from "./chunk-BLW327AU.js";
46
+ } from "./chunk-EE3QTCLS.js";
47
47
  import {
48
48
  getMissingUserSkillsNudge,
49
49
  shouldPrintServeSkillsNudge
50
- } from "./chunk-RTH5JVC3.js";
51
- import "./chunk-2Q7JEC6N.js";
52
- import "./chunk-3GMBHGQ5.js";
53
- import "./chunk-X3UXMHWC.js";
54
- import "./chunk-52M2JWCB.js";
50
+ } from "./chunk-FBO25TA3.js";
51
+ import "./chunk-FZ3MUTU3.js";
52
+ import "./chunk-F46TBLXK.js";
53
+ import "./chunk-DGDLLRS4.js";
54
+ import "./chunk-7BEGCVVB.js";
55
55
  import "./chunk-AOJU5LKX.js";
56
56
  import {
57
57
  CliError,
58
58
  isMachineFormat
59
59
  } from "./chunk-HGMYEDAQ.js";
60
- import "./chunk-SAKH2RRF.js";
61
- import "./chunk-ISIJ2NS4.js";
62
- import "./chunk-UXXZXXNG.js";
60
+ import "./chunk-SWZXHHAG.js";
61
+ import "./chunk-HBHLYWKE.js";
62
+ import "./chunk-7SNMIXEQ.js";
63
63
  import {
64
64
  refreshSnapshotMentionIdentity,
65
65
  snapshotsWithSentimentResults
66
- } from "./chunk-O22WSFWL.js";
67
- import "./chunk-CN6MVUY3.js";
68
- import "./chunk-3BA75QYU.js";
66
+ } from "./chunk-YGAQQSCL.js";
67
+ import "./chunk-LNVFERI4.js";
68
+ import "./chunk-LJO2BKWU.js";
69
69
  import {
70
70
  createClient,
71
71
  dataRepairCompletions,
72
72
  migrate,
73
73
  projects,
74
74
  runs
75
- } from "./chunk-KK3Z34AN.js";
75
+ } from "./chunk-2DV7F6XA.js";
76
76
  import {
77
77
  OutcomeReasonCodes,
78
78
  OutcomeTriggers,
@@ -82,7 +82,7 @@ import {
82
82
  URL_PATH_NORMALIZATION_VERSION,
83
83
  classifyOutcomeError,
84
84
  describeError
85
- } from "./chunk-ZBTUISPG.js";
85
+ } from "./chunk-O7S7OHLE.js";
86
86
  import "./chunk-MLKGABMK.js";
87
87
 
88
88
  // src/commands/serve.ts
@@ -482,10 +482,11 @@ function readServeOpenState(db) {
482
482
  }
483
483
  function buildServeOpenLine(input) {
484
484
  if (input.projectCount === 0) {
485
- return `Open ${input.url}/setup to map your site and run your first Page Health scan.`;
485
+ return `Open ${input.url}/setup to set up your first project: a free Agent Readiness audit scan, then AI Visibility.`;
486
486
  }
487
487
  if (!input.hasSiteAudit && input.firstProjectName) {
488
- return `Open ${input.url}/setup?onboarding=site-health&setupProject=${encodeURIComponent(input.firstProjectName)} to run your first Page Health scan.`;
488
+ const firstRun = input.projectCount === 1 ? "&onboarding=first-run" : "";
489
+ return `Open ${input.url}/setup?project=${encodeURIComponent(input.firstProjectName)}${firstRun} to run its first Agent Readiness audit scan.`;
489
490
  }
490
491
  return `Open ${input.url}`;
491
492
  }
@@ -9,28 +9,28 @@ import {
9
9
  resolveAeroModel,
10
10
  resolveConfiguredAgentProvider,
11
11
  resolveSessionProviderAndModel
12
- } from "./chunk-RLKI2QF7.js";
13
- import "./chunk-Q5SNOMRB.js";
12
+ } from "./chunk-KVRX7YIH.js";
13
+ import "./chunk-56VVRWJM.js";
14
14
  import {
15
15
  resolveAeroSkillDir
16
- } from "./chunk-MTW37GXF.js";
17
- import "./chunk-OL2L5ANJ.js";
16
+ } from "./chunk-2FWYWGIR.js";
17
+ import "./chunk-UGO2FO6V.js";
18
18
  import {
19
19
  AgentProviders,
20
20
  coerceAgentProvider,
21
21
  listAgentProviders
22
- } from "./chunk-BLW327AU.js";
23
- import "./chunk-3GMBHGQ5.js";
24
- import "./chunk-X3UXMHWC.js";
25
- import "./chunk-52M2JWCB.js";
22
+ } from "./chunk-EE3QTCLS.js";
23
+ import "./chunk-F46TBLXK.js";
24
+ import "./chunk-DGDLLRS4.js";
25
+ import "./chunk-7BEGCVVB.js";
26
26
  import "./chunk-AOJU5LKX.js";
27
27
  import "./chunk-HGMYEDAQ.js";
28
- import "./chunk-UXXZXXNG.js";
29
- import "./chunk-O22WSFWL.js";
30
- import "./chunk-CN6MVUY3.js";
31
- import "./chunk-3BA75QYU.js";
32
- import "./chunk-KK3Z34AN.js";
33
- import "./chunk-ZBTUISPG.js";
28
+ import "./chunk-7SNMIXEQ.js";
29
+ import "./chunk-YGAQQSCL.js";
30
+ import "./chunk-LNVFERI4.js";
31
+ import "./chunk-LJO2BKWU.js";
32
+ import "./chunk-2DV7F6XA.js";
33
+ import "./chunk-O7S7OHLE.js";
34
34
  import "./chunk-MLKGABMK.js";
35
35
  export {
36
36
  AgentProviders,
@@ -0,0 +1,211 @@
1
+ import {
2
+ setGoogleAuthConfig
3
+ } from "./chunk-ELCLGWUT.js";
4
+ import {
5
+ createApiClient
6
+ } from "./chunk-UGO2FO6V.js";
7
+ import {
8
+ getConfigPath,
9
+ loadConfig,
10
+ saveConfigPatch
11
+ } from "./chunk-EE3QTCLS.js";
12
+ import "./chunk-AOJU5LKX.js";
13
+ import {
14
+ CliError,
15
+ EXIT_SYSTEM_ERROR,
16
+ isMachineFormat
17
+ } from "./chunk-HGMYEDAQ.js";
18
+ import {
19
+ ProviderConnectionTestStatuses,
20
+ formatDurationSeconds
21
+ } from "./chunk-O7S7OHLE.js";
22
+ import "./chunk-MLKGABMK.js";
23
+
24
+ // src/commands/settings.ts
25
+ function getClient() {
26
+ return createApiClient();
27
+ }
28
+ async function setProvider(name, opts) {
29
+ const client = getClient();
30
+ const { format, ...payload } = opts;
31
+ const result = await client.updateProvider(name, payload);
32
+ if (isMachineFormat(format)) {
33
+ console.log(JSON.stringify(result, null, 2));
34
+ return;
35
+ }
36
+ console.log(`Provider ${result.name} updated successfully.`);
37
+ if (result.model) {
38
+ console.log(` Model: ${result.model}`);
39
+ }
40
+ if (result.quota) {
41
+ console.log(` Quota: ${result.quota.maxConcurrency} concurrent \xB7 ${result.quota.maxRequestsPerMinute}/min \xB7 ${result.quota.maxRequestsPerDay}/day`);
42
+ }
43
+ }
44
+ function printConnection(connection) {
45
+ console.log(`${connection.displayName}: ${connection.configured ? "configured" : "not configured"}`);
46
+ if (connection.baseUrl) console.log(` Endpoint: ${connection.baseUrl}`);
47
+ console.log(` API key: ${connection.apiKeyConfigured ? "saved" : "not saved"}`);
48
+ if (connection.effectiveModel) console.log(` Model: ${connection.effectiveModel}${connection.model ? " (custom)" : " (inherited)"}`);
49
+ if (connection.configured && connection.lastTest !== void 0) console.log(` Last test: ${lastTestLine(connection.name, connection.lastTest)}`);
50
+ if (connection.capabilities.quota) {
51
+ for (const [key, value] of Object.entries(connection.quota.effective)) {
52
+ console.log(` ${key}: ${value} (${Object.hasOwn(connection.quota.overrides, key) ? "custom" : "inherited"})`);
53
+ }
54
+ }
55
+ console.log(` Used by ${connection.usage.projectCount} projects:`);
56
+ for (const project of connection.usage.projects) console.log(` ${project.displayName} (${project.name}): ${project.providers.join(", ")} \xB7 ${project.sources.join(", ")}`);
57
+ const unknown = connection.usage.unknown;
58
+ if (unknown) {
59
+ console.log(` Usage unknown for ${unknown.projectCount} ${unknown.projectCount === 1 ? "project" : "projects"} (saved settings could not be read):`);
60
+ for (const project of unknown.projects) console.log(` ${project.displayName} (${project.name}): ${project.sources.join(", ")}`);
61
+ }
62
+ for (const use of connection.hostUses) console.log(` Host use: ${use}`);
63
+ for (const blocker of connection.blockers) console.log(` Blocked: ${blocker.message}`);
64
+ if (connection.hostManaged.vertex) console.log(` Vertex AI (host managed): ${connection.hostManaged.vertex.project} \xB7 ${connection.hostManaged.vertex.region ?? "default region"}`);
65
+ if (connection.hostManaged.batch) console.log(` Batch (host managed): ${JSON.stringify(connection.hostManaged.batch)}`);
66
+ if (connection.hostManaged.pricing) console.log(` Pricing (host managed): ${JSON.stringify(connection.hostManaged.pricing)}`);
67
+ console.log(` Revision: ${connection.revision}`);
68
+ console.log(` Impact revision: ${connection.impactRevision}`);
69
+ }
70
+ async function showProviderSettings(name, format) {
71
+ const connection = await getClient().getProviderSettings(name);
72
+ if (isMachineFormat(format)) console.log(JSON.stringify(connection, null, 2));
73
+ else printConnection(connection);
74
+ }
75
+ async function disconnectProvider(name, opts) {
76
+ const client = getClient();
77
+ const preview = await client.getProviderSettings(name);
78
+ if (!opts.confirm) {
79
+ if (isMachineFormat(opts.format)) console.log(JSON.stringify(preview, null, 2));
80
+ else {
81
+ printConnection(preview);
82
+ console.log("\nDisconnect removes the saved connection. Project selections and history are retained; the vendor key is not revoked.");
83
+ console.log(`Run canonry settings disconnect-provider ${name} --confirm --if-impact-revision ${preview.impactRevision} to disconnect.`);
84
+ }
85
+ return;
86
+ }
87
+ const result = await client.disconnectProvider(name, { expectedImpactRevision: opts.expectedImpactRevision ?? preview.impactRevision });
88
+ if (isMachineFormat(opts.format)) console.log(JSON.stringify(result, null, 2));
89
+ else console.log(`Provider ${result.displayName} disconnected. Project selections and history were retained.`);
90
+ }
91
+ async function showSettings(format) {
92
+ const client = getClient();
93
+ const settings = await client.getSettings();
94
+ if (isMachineFormat(format)) {
95
+ console.log(JSON.stringify(settings, null, 2));
96
+ return;
97
+ }
98
+ console.log("Provider settings:\n");
99
+ for (const provider of settings.providers) {
100
+ const status = provider.configured ? "configured" : "not configured";
101
+ console.log(` ${provider.name.padEnd(10)} ${status}`);
102
+ if (provider.configured) {
103
+ const modelLabel = provider.model ? provider.model : provider.defaultModel ? `${provider.defaultModel} (default)` : "(default)";
104
+ console.log(` Model: ${modelLabel}`);
105
+ if (provider.quota) {
106
+ console.log(` Quota: ${provider.quota.maxConcurrency} concurrent \xB7 ${provider.quota.maxRequestsPerMinute}/min \xB7 ${provider.quota.maxRequestsPerDay}/day`);
107
+ }
108
+ const lastTest = settings.providerConnections?.find((connection) => connection.name === provider.name)?.lastTest;
109
+ if (lastTest !== void 0) console.log(` Last test: ${lastTestLine(provider.name, lastTest)}`);
110
+ }
111
+ }
112
+ const services = settings.providerCatalog.filter((entry) => entry.kind === "answer-service" && entry.connection === entry.name);
113
+ if (services.length > 0) {
114
+ console.log("\nSearch answer services (run only where a project or request names a profile):\n");
115
+ for (const service of services) {
116
+ const configured = settings.providers.some((provider) => provider.name === service.name && provider.configured);
117
+ const keyEnv = (service.settingsFields ?? []).map((field) => field.env).filter((env) => Boolean(env));
118
+ console.log(` ${service.displayName} (${service.name}): ${configured ? "configured" : "not configured"}${service.keyCheck === "saved-not-verified" ? ", key not verified until first use" : ""}${keyEnv.length > 0 ? `, key from ${keyEnv.join(" or ")} at bootstrap` : ""}`);
119
+ for (const profile of service.profiles ?? []) {
120
+ console.log(` ${profile.route.padEnd(28)} ${profile.workflows.join(", ")} ${profile.description}`);
121
+ }
122
+ }
123
+ }
124
+ console.log("\nGoogle OAuth:\n");
125
+ console.log(` ${settings.google.configured ? "configured" : "not configured"}`);
126
+ }
127
+ async function reloadProviders(format) {
128
+ const result = await getClient().reloadProviders();
129
+ if (isMachineFormat(format)) {
130
+ console.log(JSON.stringify(result, null, 2));
131
+ return;
132
+ }
133
+ console.log("Saved provider configuration is now active on the server.");
134
+ for (const provider of result.providers) {
135
+ console.log(` ${provider.name}: ${provider.configured ? "configured" : "not configured"}`);
136
+ }
137
+ }
138
+ function testStatusLabel(status) {
139
+ switch (status) {
140
+ case ProviderConnectionTestStatuses.connected:
141
+ return "connected";
142
+ case ProviderConnectionTestStatuses.failed:
143
+ return "failed";
144
+ case ProviderConnectionTestStatuses["not-verified"]:
145
+ return "saved, not verified";
146
+ }
147
+ }
148
+ function lastTestLine(name, lastTest) {
149
+ if (!lastTest) return `none since these settings changed; run "canonry settings provider test ${name}"`;
150
+ const detail = lastTest.status === ProviderConnectionTestStatuses.connected ? "" : ` (${lastTest.message})`;
151
+ return `${testStatusLabel(lastTest.status)} at ${lastTest.checkedAt}${detail}`;
152
+ }
153
+ async function testProvider(name, format) {
154
+ const result = await getClient().testProvider(name);
155
+ if (isMachineFormat(format)) {
156
+ console.log(JSON.stringify(result, null, 2));
157
+ } else {
158
+ console.log(`${result.displayName}: ${testStatusLabel(result.status)}`);
159
+ if (result.model) console.log(` Model: ${result.model}`);
160
+ console.log(` Result: ${result.message}`);
161
+ console.log(` Checked: ${result.checkedAt} (${formatDurationSeconds(result.durationMs / 1e3)})`);
162
+ }
163
+ if (!result.ok) {
164
+ throw new CliError({
165
+ code: "PROVIDER_TEST_FAILED",
166
+ message: `${result.displayName} connection test failed: ${result.message}`,
167
+ displayMessage: `Error: the ${result.displayName} connection test failed. Fix the saved key or endpoint with "canonry settings provider ${result.provider}", then test again.`,
168
+ details: { provider: result.provider, status: result.status },
169
+ exitCode: EXIT_SYSTEM_ERROR
170
+ });
171
+ }
172
+ }
173
+ async function setGoogleAuth(opts) {
174
+ if (opts.target === "server") {
175
+ const result = await getClient().updateGoogleSettings({
176
+ clientId: opts.clientId,
177
+ clientSecret: opts.clientSecret
178
+ });
179
+ if (isMachineFormat(opts.format)) {
180
+ console.log(JSON.stringify(result, null, 2));
181
+ return;
182
+ }
183
+ console.log("Google OAuth credentials updated on the server.");
184
+ return;
185
+ }
186
+ const config = loadConfig();
187
+ setGoogleAuthConfig(config, {
188
+ clientId: opts.clientId,
189
+ clientSecret: opts.clientSecret
190
+ });
191
+ saveConfigPatch(config);
192
+ if (isMachineFormat(opts.format)) {
193
+ console.log(JSON.stringify({
194
+ configured: true,
195
+ configPath: getConfigPath(),
196
+ restartRequired: true
197
+ }, null, 2));
198
+ return;
199
+ }
200
+ console.log(`Google OAuth credentials saved to ${getConfigPath()}.`);
201
+ console.log("Restart the local server if it is already running.");
202
+ }
203
+ export {
204
+ disconnectProvider,
205
+ reloadProviders,
206
+ setGoogleAuth,
207
+ setProvider,
208
+ showProviderSettings,
209
+ showSettings,
210
+ testProvider
211
+ };
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-OL2L5ANJ.js";
4
- import "./chunk-BLW327AU.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  isMachineFormat
8
8
  } from "./chunk-HGMYEDAQ.js";
9
- import "./chunk-ZBTUISPG.js";
9
+ import "./chunk-O7S7OHLE.js";
10
10
  import "./chunk-MLKGABMK.js";
11
11
 
12
12
  // src/commands/sitemaps.ts
@@ -34,7 +34,7 @@ async function sitemapsCommand(project, opts) {
34
34
  return;
35
35
  }
36
36
  const lines = [
37
- result.site.scannedAt ? `Site: ${result.site.sitemaps.length} sitemap file${result.site.sitemaps.length === 1 ? "" : "s"} in the Site Health scan of ${result.site.scannedAt}` : "Site: no Site Health scan yet, so only the engines are compared."
37
+ result.site.scannedAt ? `Site: ${result.site.sitemaps.length} sitemap file${result.site.sitemaps.length === 1 ? "" : "s"} in the Agent Readiness audit scan of ${result.site.scannedAt}` : "Site: no Agent Readiness audit scan yet, so only the engines are compared."
38
38
  ];
39
39
  for (const engine of opts.engine ? [opts.engine] : ["google", "bing"]) {
40
40
  lines.push("", ...engineLines(ENGINE_NAMES[engine], result[engine]));
@@ -9,13 +9,13 @@ import {
9
9
  parseSkillsClient,
10
10
  resolveBundledSkillsRoot,
11
11
  shouldPrintServeSkillsNudge
12
- } from "./chunk-RTH5JVC3.js";
12
+ } from "./chunk-FBO25TA3.js";
13
13
  import "./chunk-AOJU5LKX.js";
14
14
  import "./chunk-HGMYEDAQ.js";
15
15
  import {
16
16
  CodingAgents,
17
17
  SkillsClients
18
- } from "./chunk-ZBTUISPG.js";
18
+ } from "./chunk-O7S7OHLE.js";
19
19
  import "./chunk-MLKGABMK.js";
20
20
  export {
21
21
  BUNDLED_SKILL_NAMES,
@@ -3,15 +3,15 @@ import {
3
3
  } from "./chunk-XEBKF4N5.js";
4
4
  import {
5
5
  createApiClient
6
- } from "./chunk-OL2L5ANJ.js";
7
- import "./chunk-BLW327AU.js";
6
+ } from "./chunk-UGO2FO6V.js";
7
+ import "./chunk-EE3QTCLS.js";
8
8
  import "./chunk-AOJU5LKX.js";
9
9
  import {
10
10
  isMachineFormat
11
11
  } from "./chunk-HGMYEDAQ.js";
12
12
  import {
13
13
  factorStatusFromScore
14
- } from "./chunk-ZBTUISPG.js";
14
+ } from "./chunk-O7S7OHLE.js";
15
15
  import "./chunk-MLKGABMK.js";
16
16
 
17
17
  // src/commands/snapshot.ts
@@ -406,7 +406,7 @@ function formatSnapshotMarkdown(report) {
406
406
  lines.push("");
407
407
  lines.push(`**Domain:** ${report.domain}`);
408
408
  lines.push(`**Generated:** ${new Date(report.generatedAt).toLocaleString("en-US", { year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "2-digit" })}`);
409
- lines.push(`**AEO Audit Score:** ${report.audit.overallScore}/100`);
409
+ lines.push(`**Agent Readiness score:** ${report.audit.overallScore}/100`);
410
410
  lines.push("");
411
411
  lines.push("## Visibility Gap (Citations + Mentions)");
412
412
  lines.push("");
@@ -131,6 +131,7 @@ import {
131
131
  projects,
132
132
  providerBatchRequests,
133
133
  providerBatches,
134
+ providerConnectionTests,
134
135
  queries,
135
136
  queryBasketVersions,
136
137
  querySnapshots,
@@ -188,10 +189,10 @@ import {
188
189
  userSessions,
189
190
  users,
190
191
  writeNegativeReviewMaxStars
191
- } from "./chunk-KK3Z34AN.js";
192
+ } from "./chunk-2DV7F6XA.js";
192
193
  import {
193
194
  emptySeoResults
194
- } from "./chunk-ZBTUISPG.js";
195
+ } from "./chunk-O7S7OHLE.js";
195
196
  import "./chunk-MLKGABMK.js";
196
197
  export {
197
198
  MIGRATION_VERSIONS,
@@ -327,6 +328,7 @@ export {
327
328
  projects,
328
329
  providerBatchRequests,
329
330
  providerBatches,
331
+ providerConnectionTests,
330
332
  queries,
331
333
  queryBasketVersions,
332
334
  querySnapshots,
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  runAdmissionLines
3
- } from "./chunk-ZADRESLB.js";
3
+ } from "./chunk-NQYJHKML.js";
4
+ import "./chunk-J6536OL6.js";
4
5
  import {
5
6
  createApiClient
6
- } from "./chunk-OL2L5ANJ.js";
7
- import "./chunk-BLW327AU.js";
7
+ } from "./chunk-UGO2FO6V.js";
8
+ import "./chunk-EE3QTCLS.js";
8
9
  import {
9
10
  emitJsonl
10
11
  } from "./chunk-Z7IUAJOF.js";
@@ -16,7 +17,7 @@ import {
16
17
  import {
17
18
  HostedMcpStatuses,
18
19
  HostedMcpUnavailableReasons
19
- } from "./chunk-ZBTUISPG.js";
20
+ } from "./chunk-O7S7OHLE.js";
20
21
  import "./chunk-MLKGABMK.js";
21
22
 
22
23
  // src/commands/status.ts
@@ -121,7 +122,7 @@ async function showStatus(project, format, options = {}) {
121
122
  } else {
122
123
  const projectArg = /^[\w.-]+$/.test(project) ? project : `'${project.replaceAll("'", `'\\''`)}'`;
123
124
  console.log(`
124
- No runs yet. Capture Page Health with "canonry technical-aeo run ${projectArg}", or run an AI Visibility sweep after adding a provider.`);
125
+ No runs yet. Run an Agent Readiness audit scan with "canonry agent-readiness run ${projectArg}", or run an AI Visibility sweep after adding a provider.`);
125
126
  }
126
127
  const admission = runAdmissionLines(project, latest.admission, latest.manualAdmission);
127
128
  if (admission.length > 0) console.log(`