@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
@@ -0,0 +1,176 @@
1
+ import {
2
+ createApiClient
3
+ } from "./chunk-UGO2FO6V.js";
4
+ import "./chunk-EE3QTCLS.js";
5
+ import "./chunk-AOJU5LKX.js";
6
+ import {
7
+ isMachineFormat
8
+ } from "./chunk-HGMYEDAQ.js";
9
+ import {
10
+ AiVisibilitySetupBlockers,
11
+ ProjectSetupNextActions,
12
+ SITE_AUDIT_ONBOARDING_PAGE_LIMIT,
13
+ SetupTrackStates,
14
+ defaultProviderDisplayName,
15
+ providerConnectionName,
16
+ providerFailureRemedy,
17
+ shellQuote,
18
+ siteAuditRunPhaseSchema
19
+ } from "./chunk-O7S7OHLE.js";
20
+ import "./chunk-MLKGABMK.js";
21
+
22
+ // src/commands/project-setup.ts
23
+ var TRACK_STATE_LABELS = {
24
+ [SetupTrackStates.not_started]: "Not started",
25
+ [SetupTrackStates.queued]: "Queued",
26
+ [SetupTrackStates.running]: "Running",
27
+ [SetupTrackStates.completed]: "Complete",
28
+ [SetupTrackStates.partial]: "Partial results",
29
+ [SetupTrackStates.failed]: "Failed",
30
+ [SetupTrackStates.cancelled]: "Cancelled"
31
+ };
32
+ var TRACK_NAME_WIDTH = "Agent Readiness".length + 3;
33
+ async function showProjectSetup(name, format) {
34
+ const setup = await createApiClient().getProjectSetup(name);
35
+ if (isMachineFormat(format)) {
36
+ console.log(JSON.stringify(setup, null, 2));
37
+ return;
38
+ }
39
+ for (const line of projectSetupLines(setup)) console.log(line);
40
+ }
41
+ function projectSetupLines(setup) {
42
+ const { agentReadiness, aiVisibility } = setup.tracks;
43
+ const brand = setup.project.displayName ?? setup.project.name;
44
+ const rows = [
45
+ { name: "Agent Readiness", state: agentReadiness.state, lines: agentReadinessLines(agentReadiness) },
46
+ { name: "AI Visibility", state: aiVisibility.state, lines: aiVisibilityLines(aiVisibility) }
47
+ ];
48
+ const badgeWidth = Math.max(...rows.map((row) => TRACK_STATE_LABELS[row.state].length)) + 3;
49
+ const continuation = " ".repeat(2 + TRACK_NAME_WIDTH + badgeWidth);
50
+ return [
51
+ `${brand} (${setup.project.canonicalDomain})${setup.complete ? " \xB7 setup complete" : ""}`,
52
+ ...rows.flatMap((row) => row.lines.map((line, index) => index === 0 ? ` ${row.name.padEnd(TRACK_NAME_WIDTH)}${TRACK_STATE_LABELS[row.state].padEnd(badgeWidth)}${line}` : `${continuation}${line}`)),
53
+ `Next: ${nextStep(setup)}`
54
+ ];
55
+ }
56
+ function agentReadinessLines(track) {
57
+ switch (track.state) {
58
+ case SetupTrackStates.not_started:
59
+ return [`Reads up to ${SITE_AUDIT_ONBOARDING_PAGE_LIMIT} public pages. No AI engine needed.`];
60
+ case SetupTrackStates.queued:
61
+ return ["Waiting to start"];
62
+ case SetupTrackStates.running: {
63
+ const progress = track.progress;
64
+ if (progress?.phase === siteAuditRunPhaseSchema.enum.checking) {
65
+ return [`Checking pages \xB7 ${progress.pagesChecked}${progress.pageLimit === null ? "" : ` of up to ${progress.pageLimit}`}`];
66
+ }
67
+ return [`Finding pages${progress?.pagesFound == null ? "" : ` \xB7 ${progress.pagesFound} found`}`];
68
+ }
69
+ case SetupTrackStates.completed:
70
+ case SetupTrackStates.partial:
71
+ return [track.result?.score == null ? "No page was scored." : `Score ${track.result.score}/100 \xB7 ${track.result.pagesScored} ${track.result.pagesScored === 1 ? "page" : "pages"} scored`];
72
+ case SetupTrackStates.failed:
73
+ return [`The scan did not finish.${track.error ? ` ${track.error}` : ""}`];
74
+ case SetupTrackStates.cancelled:
75
+ return ["The scan was cancelled."];
76
+ }
77
+ }
78
+ function blockerLine(blocker) {
79
+ switch (blocker) {
80
+ case AiVisibilitySetupBlockers.no_engine:
81
+ return "Needs an AI engine.";
82
+ case AiVisibilitySetupBlockers.no_queries:
83
+ return "Add queries to check.";
84
+ case AiVisibilitySetupBlockers.plan_unpublished:
85
+ return "Publish the Advanced Measurement plan before the first check.";
86
+ case AiVisibilitySetupBlockers.engines_failing:
87
+ return "Every AI engine it would ask keeps failing on its account.";
88
+ }
89
+ }
90
+ function trackedQueriesLine(queries) {
91
+ const classes = [`${queries.nonBrand} non-brand`, `${queries.branded} branded`];
92
+ if (queries.unclassified > 0) classes.push(`${queries.unclassified} without a class`);
93
+ return `${queries.total} ${queries.total === 1 ? "query" : "queries"} tracked: ${classes.join(", ")}`;
94
+ }
95
+ function signalCounts(counts) {
96
+ if (counts.totalQueries === 0) return "none in this check";
97
+ const citedTotal = counts.totalQueries - (counts.citationNotMeasuredQueries ?? 0);
98
+ const cited = citedTotal === 0 ? "citations not measured" : `cited in ${counts.citedQueries} of ${citedTotal}`;
99
+ return `mentioned in ${counts.mentionedQueries} of ${counts.totalQueries}, ${cited}`;
100
+ }
101
+ function resultLines(result, isBaseline) {
102
+ const lines = [`${isBaseline ? "Baseline" : "Latest check"} \xB7 ${result.answers} ${result.answers === 1 ? "answer" : "answers"} from ${result.engines} ${result.engines === 1 ? "engine" : "engines"}`];
103
+ if (result.queryCountsByClass) {
104
+ lines.push(`Non-brand queries: ${signalCounts(result.queryCountsByClass.nonBrand)}`);
105
+ lines.push(`Branded queries: ${signalCounts(result.queryCountsByClass.branded)}`);
106
+ if (result.queryCountsByClass.unclassifiedQueries > 0) {
107
+ const unclassified = result.queryCountsByClass.unclassifiedQueries;
108
+ lines.push(`${unclassified} ${unclassified === 1 ? "query" : "queries"} without a class, counted in neither`);
109
+ }
110
+ } else if (result.queryCounts) {
111
+ lines.push(`All queries, pooled (no query has a class): ${signalCounts(result.queryCounts)}`);
112
+ }
113
+ return lines;
114
+ }
115
+ function failureLines(track) {
116
+ return Object.entries(track.providerFailures ?? {}).map(([engine, failure]) => `${engine}: ${failure.failedQueries} ${failure.failedQueries === 1 ? "query" : "queries"} failed${failure.stopped ? ", so this check stopped asking it" : ""}. ${failure.message}`);
117
+ }
118
+ function aiVisibilityLines(track) {
119
+ switch (track.state) {
120
+ case SetupTrackStates.not_started:
121
+ if (track.blockedBy) return [blockerLine(track.blockedBy)];
122
+ return [track.engines.length > 0 ? `Ready to ask ${track.engines.join(", ")}` : "Ready to check", trackedQueriesLine(track.queries)];
123
+ case SetupTrackStates.queued:
124
+ return ["Waiting to start", ...failureLines(track)];
125
+ case SetupTrackStates.running: {
126
+ const saved = track.progress?.answersSaved ?? 0;
127
+ const planned = track.progress?.answersPlanned ?? null;
128
+ const engines = track.engines.length > 0 ? `Asking ${track.engines.join(", ")}` : "Asking engines";
129
+ return [
130
+ planned === null ? `${engines} \xB7 ${saved} ${saved === 1 ? "answer" : "answers"} saved` : `${engines} \xB7 ${saved} of ${planned} ${planned === 1 ? "answer" : "answers"} saved`,
131
+ ...failureLines(track)
132
+ ];
133
+ }
134
+ case SetupTrackStates.completed:
135
+ case SetupTrackStates.partial:
136
+ return track.result ? resultLines(track.result, track.runId !== null && track.runId === track.baselineRunId) : ["Result unavailable"];
137
+ case SetupTrackStates.failed: {
138
+ const engines = track.failedEngines ?? [];
139
+ if (engines.length === 0) return [`The check did not finish.${track.error ? ` ${track.error}` : ""}`];
140
+ return ["The check did not finish.", ...engines.flatMap((engine) => {
141
+ const remedy = providerFailureRemedy(engine.code, defaultProviderDisplayName(providerConnectionName(engine.provider)));
142
+ return [`${engine.provider}: ${engine.message}`, ...remedy ? [remedy] : []];
143
+ })];
144
+ }
145
+ case SetupTrackStates.cancelled:
146
+ return ["The check was cancelled.", ...track.blockedBy ? [blockerLine(track.blockedBy)] : []];
147
+ }
148
+ }
149
+ function nextStep(setup) {
150
+ const project = shellQuote(setup.project.name);
151
+ const scan = `cnry agent-readiness run ${project} --max-pages ${SITE_AUDIT_ONBOARDING_PAGE_LIMIT}`;
152
+ const aiVisibility = setup.tracks.aiVisibility;
153
+ switch (setup.nextAction) {
154
+ case ProjectSetupNextActions.run_agent_readiness:
155
+ return `run the Agent Readiness audit scan: ${scan}`;
156
+ case ProjectSetupNextActions.retry_agent_readiness:
157
+ return `run the audit scan again: ${scan}`;
158
+ case ProjectSetupNextActions.connect_engine:
159
+ return "connect an AI engine: cnry settings provider <name> --api-key <key>";
160
+ case ProjectSetupNextActions.add_queries:
161
+ return `add queries: cnry query add ${project} "<query>"`;
162
+ case ProjectSetupNextActions.publish_plan:
163
+ return `publish the Advanced Measurement draft: cnry measurement-plan advanced ${project} draft-action <json>, with action "publish"`;
164
+ case ProjectSetupNextActions.run_ai_visibility:
165
+ return `run the AI Visibility check (cnry run preview ${project} shows what it will ask): cnry run ${project}`;
166
+ case ProjectSetupNextActions.repair_ai_visibility:
167
+ return aiVisibility.state === SetupTrackStates.failed && aiVisibility.runId ? `see why the check failed, then fix the engine: cnry run show ${shellQuote(aiVisibility.runId)}` : "fix the failing engine's key, access or billing, then save it: cnry settings provider <name> --api-key <key>";
168
+ case ProjectSetupNextActions.wait:
169
+ return `wait for the work in progress, then check again: cnry project setup ${project}`;
170
+ case ProjectSetupNextActions.open_project:
171
+ return `read the results: cnry overview ${project}`;
172
+ }
173
+ }
174
+ export {
175
+ showProjectSetup
176
+ };
@@ -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";
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-HGMYEDAQ.js";
13
13
  import {
14
14
  reportedQueryClasses
15
- } from "./chunk-47X24IJG.js";
15
+ } from "./chunk-O7S7OHLE.js";
16
16
  import "./chunk-MLKGABMK.js";
17
17
 
18
18
  // src/commands/query.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";
@@ -18,7 +18,7 @@ import {
18
18
  answerCompletionLabel,
19
19
  answerCostBasisLabel,
20
20
  researchBatchCreateSchema
21
- } from "./chunk-47X24IJG.js";
21
+ } from "./chunk-O7S7OHLE.js";
22
22
  import "./chunk-MLKGABMK.js";
23
23
 
24
24
  // src/commands/research.ts
@@ -1,10 +1,10 @@
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 "./chunk-HGMYEDAQ.js";
7
- import "./chunk-47X24IJG.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-WXAF7AMC.js";
13
- import "./chunk-AJD252SX.js";
14
- import "./chunk-3MFYM2IS.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-47X24IJG.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-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,10 +10,28 @@ import {
10
10
  isMachineFormat,
11
11
  usageError
12
12
  } from "./chunk-HGMYEDAQ.js";
13
- import "./chunk-47X24IJG.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-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
8
8
  } from "./chunk-HGMYEDAQ.js";
9
- import "./chunk-47X24IJG.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-74V5EPZH.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-XPIMVXAI.js";
13
- import "./chunk-5ZOM5BJS.js";
14
- import "./chunk-3MKJ4LP6.js";
15
- import "./chunk-DMPSA7ZS.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-PT5HNVCM.js";
19
- import "./chunk-RRXLJPBN.js";
18
+ import "./chunk-VHULVUDL.js";
19
+ import "./chunk-YIIRS7V7.js";
20
20
  import {
21
21
  trackFeatureCompleted
22
- } from "./chunk-VADVPARO.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-O6RXNSNW.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-C55P75G4.js";
38
- import "./chunk-WA6APXI6.js";
39
- import "./chunk-MTW37GXF.js";
40
- import "./chunk-AJD252SX.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-3MFYM2IS.js";
46
+ } from "./chunk-EE3QTCLS.js";
47
47
  import {
48
48
  getMissingUserSkillsNudge,
49
49
  shouldPrintServeSkillsNudge
50
- } from "./chunk-P764TJKQ.js";
51
- import "./chunk-SY3CWJR4.js";
52
- import "./chunk-DLOWRO5R.js";
53
- import "./chunk-3WDQ5GPO.js";
54
- import "./chunk-YACKJGY4.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-LM7HTNUO.js";
61
- import "./chunk-YBWATBX4.js";
62
- import "./chunk-UY6SKAKW.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-ZGBLNKFN.js";
67
- import "./chunk-YEUULP44.js";
68
- import "./chunk-3VPBRGPN.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-L53ZSQN5.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-47X24IJG.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-3MKJ4LP6.js";
13
- import "./chunk-DMPSA7ZS.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-AJD252SX.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-3MFYM2IS.js";
23
- import "./chunk-DLOWRO5R.js";
24
- import "./chunk-3WDQ5GPO.js";
25
- import "./chunk-YACKJGY4.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-UY6SKAKW.js";
29
- import "./chunk-ZGBLNKFN.js";
30
- import "./chunk-YEUULP44.js";
31
- import "./chunk-3VPBRGPN.js";
32
- import "./chunk-L53ZSQN5.js";
33
- import "./chunk-47X24IJG.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,