@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,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-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 "./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-P764TJKQ.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-47X24IJG.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-AJD252SX.js";
7
- import "./chunk-3MFYM2IS.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-47X24IJG.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-L53ZSQN5.js";
192
+ } from "./chunk-2DV7F6XA.js";
192
193
  import {
193
194
  emptySeoResults
194
- } from "./chunk-47X24IJG.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-WXAF7AMC.js";
3
+ } from "./chunk-NQYJHKML.js";
4
+ import "./chunk-J6536OL6.js";
4
5
  import {
5
6
  createApiClient
6
- } from "./chunk-AJD252SX.js";
7
- import "./chunk-3MFYM2IS.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-47X24IJG.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(`
@@ -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
  RatioUnits,
14
14
  SiteAuditIssueRecommendationScopes,
15
15
  formatPercent
16
- } from "./chunk-47X24IJG.js";
16
+ } from "./chunk-O7S7OHLE.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
 
19
19
  // src/commands/technical-aeo.ts
@@ -39,7 +39,7 @@ async function technicalAeoIssues(project, opts) {
39
39
  lines.push("", `[${issue.disposition}${severity}] ${issue.code} \xB7 ${issue.affectedPages} page(s)`, issue.message);
40
40
  lines.push(`Issue: ${issue.id}${issue.stableIdentity ? "" : " (identity is specific to this scan)"}`);
41
41
  for (const example of issue.examples) lines.push(` ${example.url}`);
42
- if (issue.examplesTruncated) lines.push("More affected pages are available with site-health issue-pages.");
42
+ if (issue.examplesTruncated) lines.push("More affected pages are available with canonry agent-readiness issue-pages.");
43
43
  if (issue.messageTruncated) lines.push("The saved message is shortened; inspect the affected pages for context.");
44
44
  }
45
45
  if (res.nextCursor) lines.push("", `Next cursor: ${res.nextCursor}`);
@@ -89,13 +89,13 @@ async function technicalAeoScore(project, opts) {
89
89
  }
90
90
  if (!score.hasData) {
91
91
  console.log(
92
- `No technical audit yet for "${project}". Run \`canonry technical-aeo run ${project}\` to generate one.`
92
+ `No Agent Readiness audit scan yet for "${project}". Run \`canonry agent-readiness run ${project}\` to start one.`
93
93
  );
94
94
  return;
95
95
  }
96
96
  const lines = [];
97
97
  const delta = score.deltaScore == null ? "" : ` (${score.deltaScore >= 0 ? "+" : ""}${score.deltaScore} vs prev)`;
98
- lines.push(`Technical AEO: ${score.aggregateScore}/100${delta}`);
98
+ lines.push(`Agent Readiness: ${score.aggregateScore}/100${delta}`);
99
99
  lines.push(
100
100
  `Audited ${score.pagesAudited} page(s) \xB7 ${score.pagesSkipped} skipped \xB7 ${score.pagesErrored} errored \xB7 sitemap ${score.sitemapUrl}`
101
101
  );
@@ -129,7 +129,7 @@ async function technicalAeoPages(project, opts) {
129
129
  return;
130
130
  }
131
131
  if (res.pages.length === 0) {
132
- console.log(`No audited pages for "${project}". Run \`canonry technical-aeo run ${project}\` first.`);
132
+ console.log(`No audited pages for "${project}". Run \`canonry agent-readiness run ${project}\` first.`);
133
133
  return;
134
134
  }
135
135
  const lines = [];
@@ -154,7 +154,7 @@ async function technicalAeoTrend(project, opts) {
154
154
  return;
155
155
  }
156
156
  if (res.points.length === 0) {
157
- console.log(`No audits yet for "${project}". Run \`canonry technical-aeo run ${project}\` first.`);
157
+ console.log(`No Agent Readiness audit scans yet for "${project}". Run \`canonry agent-readiness run ${project}\` first.`);
158
158
  return;
159
159
  }
160
160
  const lines = [];
@@ -171,7 +171,7 @@ async function technicalAeoProgress(project, opts) {
171
171
  return;
172
172
  }
173
173
  const lines = [
174
- `Site Health progress: ${progress.phase} (${progress.status})`,
174
+ `Agent Readiness audit scan progress: ${progress.phase} (${progress.status})`,
175
175
  `Run: ${progress.runId}`
176
176
  ];
177
177
  if (progress.attempt) {
@@ -198,14 +198,14 @@ async function technicalAeoCrawl(project, opts) {
198
198
  console.log([`No persisted site crawl for "${project}" on ${opts.date}.`, ...availableScanDateLines(crawl.availableScanDates)].join("\n"));
199
199
  return;
200
200
  }
201
- console.log(`No persisted site crawl for "${project}". Run \`canonry technical-aeo run ${project}\` first.`);
201
+ console.log(`No persisted site crawl for "${project}". Run \`canonry agent-readiness run ${project}\` first.`);
202
202
  return;
203
203
  }
204
204
  const lines = [
205
205
  `Site crawl: ${crawl.complete ? "complete" : "partial"} (${crawl.runStatus ?? "unknown"})`,
206
206
  `Root: ${crawl.rootUrl ?? "-"}`,
207
207
  `Pages: ${crawl.counts.pagesFetched} fetched \xB7 ${crawl.counts.pagesDiscovered} discovered \xB7 ${crawl.counts.pagesEligible} eligible`,
208
- `Links: ${crawl.counts.edges} internal/external observations \xB7 ${crawl.counts.findings} findings`,
208
+ `Links: ${crawl.counts.edges} internal/external observations${crawl.counts.internalLinks != null ? ` \xB7 ${crawl.counts.internalLinks} internal links on the site map` : ""} \xB7 ${crawl.counts.findings} findings`,
209
209
  `Dead links: ${formatDeadLinkState(crawl.deadLinks)}`
210
210
  ];
211
211
  lines.push(...inventorySummaryLines(crawl.inventorySummary));
@@ -219,17 +219,17 @@ async function technicalAeoSubgraph(project, opts) {
219
219
  return;
220
220
  }
221
221
  if (!res.hasCrawlData) {
222
- console.log(`No persisted Site Health crawl for "${project}". Run \`canonry technical-aeo run ${project}\` first.`);
222
+ console.log(`No persisted Agent Readiness crawl for "${project}". Run \`canonry agent-readiness run ${project}\` first.`);
223
223
  return;
224
224
  }
225
225
  if (res.state !== "ready") {
226
- console.log(`Site Health subgraph details are unavailable for crawl ${res.runId ?? "-"}.`);
226
+ console.log(`Agent Readiness subgraph details are unavailable for crawl ${res.runId ?? "-"}.`);
227
227
  return;
228
228
  }
229
229
  const focus = res.focusUrl ?? res.focusNodeKey ?? "crawl root";
230
230
  const totalQualifier = res.countAccuracy === "lower-bound" ? "at least " : "";
231
231
  const lines = [
232
- `Site Health subgraph: ${focus} (${res.hops} hop${res.hops === 1 ? "" : "s"})`,
232
+ `Agent Readiness subgraph: ${focus} (${res.hops} hop${res.hops === 1 ? "" : "s"})`,
233
233
  `${res.nodes.length} of ${totalQualifier}${res.totalNodes} node(s) \xB7 ${res.edges.length} of ${totalQualifier}${res.totalEdges} edge(s)`,
234
234
  `Crawl: ${res.complete ? "complete" : `partial (${res.termination ?? "incomplete"})`}`
235
235
  ];
@@ -245,11 +245,11 @@ async function technicalAeoPath(project, opts) {
245
245
  return;
246
246
  }
247
247
  if (res.state === "no-crawl") {
248
- console.log(`No persisted Site Health crawl for "${project}". Run \`canonry technical-aeo run ${project}\` first.`);
248
+ console.log(`No persisted Agent Readiness crawl for "${project}". Run \`canonry agent-readiness run ${project}\` first.`);
249
249
  return;
250
250
  }
251
251
  if (res.state === "details-unavailable") {
252
- console.log(`Site Health path details are unavailable for crawl ${res.runId ?? "-"}.`);
252
+ console.log(`Agent Readiness path details are unavailable for crawl ${res.runId ?? "-"}.`);
253
253
  return;
254
254
  }
255
255
  if (res.state === "unreachable") {
@@ -283,15 +283,15 @@ async function technicalAeoChanges(project, opts) {
283
283
  return;
284
284
  }
285
285
  if (res.state === "unavailable") {
286
- console.log(`Site Health changes unavailable: ${res.reason.replaceAll("-", " ")}.`);
286
+ console.log(`Agent Readiness changes unavailable: ${res.reason.replaceAll("-", " ")}.`);
287
287
  return;
288
288
  }
289
289
  if (res.state === "incompatible") {
290
- console.log(`Site Health changes unavailable: snapshots use incompatible ${res.mismatchedVersions.join(", ")} versions.`);
290
+ console.log(`Agent Readiness changes unavailable: snapshots use incompatible ${res.mismatchedVersions.join(", ")} versions.`);
291
291
  return;
292
292
  }
293
293
  const lines = [
294
- `Site Health changes: ${res.fromRunId} \u2192 ${res.toRunId}`,
294
+ `Agent Readiness changes: ${res.fromRunId} \u2192 ${res.toRunId}`,
295
295
  `Filters: ${res.filters.scope} \xB7 ${res.filters.change}`
296
296
  ];
297
297
  if (res.summaryState === "exact" && res.summary !== null && res.total !== null) {
@@ -391,7 +391,7 @@ async function technicalAeoPageAudit(project, opts) {
391
391
  return;
392
392
  }
393
393
  if (res.state === "no-crawl") {
394
- console.log(`No persisted Site Health crawl for "${project}". Run \`canonry technical-aeo run ${project}\` first.`);
394
+ console.log(`No persisted Agent Readiness crawl for "${project}". Run \`canonry agent-readiness run ${project}\` first.`);
395
395
  return;
396
396
  }
397
397
  const provenance = [`Run: ${res.runId} \xB7 ${res.complete ? "complete" : "partial"}`];
@@ -586,14 +586,14 @@ async function technicalAeoRun(project, opts) {
586
586
  return;
587
587
  }
588
588
  console.log(
589
- `Site audit started (run ${runId}, status ${status}). Use \`canonry runs get ${runId}\` to check status, or pass --wait.`
589
+ `Agent Readiness audit scan started (run ${runId}, status ${status}). Use \`canonry agent-readiness progress ${project} --run-id ${runId}\` to check status, or pass --wait.`
590
590
  );
591
591
  return;
592
592
  }
593
593
  const terminal = /* @__PURE__ */ new Set(["completed", "partial", "failed", "cancelled"]);
594
594
  const start = Date.now();
595
595
  const timeoutMs = 15 * 60 * 1e3;
596
- if (!isMachineFormat(opts.format)) process.stderr.write("Auditing");
596
+ if (!isMachineFormat(opts.format)) process.stderr.write("Scanning");
597
597
  let final = status;
598
598
  while (!terminal.has(final) && Date.now() - start < timeoutMs) {
599
599
  await new Promise((r) => setTimeout(r, 2e3));
@@ -606,7 +606,7 @@ async function technicalAeoRun(project, opts) {
606
606
  console.log(JSON.stringify({ runId, status: final }, null, 2));
607
607
  return;
608
608
  }
609
- console.log(`Site audit ${final} (run ${runId}).`);
609
+ console.log(`Agent Readiness audit scan ${final} (run ${runId}).`);
610
610
  }
611
611
  export {
612
612
  technicalAeoChanges,
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  getTelemetryStatus,
3
3
  setTelemetryPreference
4
- } from "./chunk-C55P75G4.js";
4
+ } from "./chunk-AMGM55CP.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-AJD252SX.js";
7
+ } from "./chunk-UGO2FO6V.js";
8
8
  import {
9
9
  configExists,
10
10
  getConfigPath
11
- } from "./chunk-3MFYM2IS.js";
11
+ } from "./chunk-EE3QTCLS.js";
12
12
  import "./chunk-AOJU5LKX.js";
13
13
  import {
14
14
  CliError,
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  normalizeTelemetryStatus
20
- } from "./chunk-47X24IJG.js";
20
+ } from "./chunk-O7S7OHLE.js";
21
21
  import "./chunk-MLKGABMK.js";
22
22
 
23
23
  // src/commands/telemetry.ts
@@ -11,19 +11,19 @@ import {
11
11
  buildAllTools,
12
12
  buildReadTools,
13
13
  isAeroToolProfile
14
- } from "./chunk-DMPSA7ZS.js";
15
- import "./chunk-AJD252SX.js";
16
- import "./chunk-3MFYM2IS.js";
17
- import "./chunk-DLOWRO5R.js";
18
- import "./chunk-3WDQ5GPO.js";
19
- import "./chunk-YACKJGY4.js";
14
+ } from "./chunk-56VVRWJM.js";
15
+ import "./chunk-UGO2FO6V.js";
16
+ import "./chunk-EE3QTCLS.js";
17
+ import "./chunk-F46TBLXK.js";
18
+ import "./chunk-DGDLLRS4.js";
19
+ import "./chunk-7BEGCVVB.js";
20
20
  import "./chunk-AOJU5LKX.js";
21
21
  import "./chunk-HGMYEDAQ.js";
22
- import "./chunk-ZGBLNKFN.js";
23
- import "./chunk-YEUULP44.js";
24
- import "./chunk-3VPBRGPN.js";
25
- import "./chunk-L53ZSQN5.js";
26
- import "./chunk-47X24IJG.js";
22
+ import "./chunk-YGAQQSCL.js";
23
+ import "./chunk-LNVFERI4.js";
24
+ import "./chunk-LJO2BKWU.js";
25
+ import "./chunk-2DV7F6XA.js";
26
+ import "./chunk-O7S7OHLE.js";
27
27
  import "./chunk-MLKGABMK.js";
28
28
  export {
29
29
  AERO_ADS_OPERATOR_CONTEXT_TOOL_NAME,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getCloudflareTrafficConnectionBySourceId
3
- } from "./chunk-PT5HNVCM.js";
3
+ } from "./chunk-VHULVUDL.js";
4
4
  import {
5
5
  createApiClient
6
- } from "./chunk-AJD252SX.js";
6
+ } from "./chunk-UGO2FO6V.js";
7
7
  import {
8
8
  loadConfigRaw
9
- } from "./chunk-3MFYM2IS.js";
9
+ } from "./chunk-EE3QTCLS.js";
10
10
  import {
11
11
  emitJsonl
12
12
  } from "./chunk-Z7IUAJOF.js";
@@ -23,7 +23,7 @@ import {
23
23
  DEFAULT_BOT_LIST,
24
24
  generateWorkerScript,
25
25
  generateWranglerToml
26
- } from "./chunk-YEUULP44.js";
26
+ } from "./chunk-LNVFERI4.js";
27
27
  import {
28
28
  RunStatuses,
29
29
  TRAFFIC_EVENT_KIND_FILTER_HINT,
@@ -33,11 +33,12 @@ import {
33
33
  formatValidationIssues,
34
34
  parseTrafficAnalyticsPeriod,
35
35
  parseTrafficEventKindFilter,
36
+ redactKnownSecrets,
36
37
  referralAssessmentQuerySchema,
37
38
  trafficSamplesQuerySchema,
38
39
  trafficSeriesGranularitySchema,
39
40
  trafficUnrecognizedAgentsQuerySchema
40
- } from "./chunk-47X24IJG.js";
41
+ } from "./chunk-O7S7OHLE.js";
41
42
  import "./chunk-MLKGABMK.js";
42
43
 
43
44
  // src/commands/traffic.ts
@@ -214,12 +215,7 @@ function assertCloudflareArtifactsDoNotContainSecrets(contents, secrets) {
214
215
  }
215
216
  }
216
217
  function redactCloudflareSecrets(message, secrets) {
217
- let redacted = message;
218
- const secretValues = "apiToken" in secrets ? [secrets.apiToken] : [secrets.bearerToken, secrets.hmacSecret];
219
- for (const secret of secretValues) {
220
- if (secret) redacted = redacted.replaceAll(secret, "[REDACTED]");
221
- }
222
- return redacted;
218
+ return redactKnownSecrets(message, "apiToken" in secrets ? [secrets.apiToken] : [secrets.bearerToken, secrets.hmacSecret]);
223
219
  }
224
220
  async function runWrangler(command, args, opts) {
225
221
  await new Promise((resolve, reject) => {
@@ -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,13 +11,13 @@ import {
11
11
  TrendUnits,
12
12
  formatPercent,
13
13
  formatSignedPointDelta
14
- } from "./chunk-47X24IJG.js";
14
+ } from "./chunk-O7S7OHLE.js";
15
15
  import "./chunk-MLKGABMK.js";
16
16
 
17
17
  // src/commands/trends.ts
18
18
  var SURFACE_TITLES = {
19
19
  "index-coverage": "Index coverage",
20
- "site-health": "Site Health",
20
+ "site-health": "Agent Readiness",
21
21
  backlinks: "Backlinks"
22
22
  };
23
23
  function formatReading(figure, value) {