@canonry/canonry 7.87.2 → 7.90.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 (156) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +43 -5
  2. package/assets/assets/{AgentSetupPage-_ZP3F_zA.js → AgentSetupPage-oSoM5flN.js} +6 -6
  3. package/assets/assets/AuditHistoryPanel-YrEggsyA.js +1 -0
  4. package/assets/assets/{BacklinksPage-CsvVgXTZ.js → BacklinksPage-vXUxxplH.js} +1 -1
  5. package/assets/assets/{ChartPrimitives-4D5wgAn5.js → ChartPrimitives-Cs2iavxU.js} +1 -1
  6. package/assets/assets/{Hint-CfeZmZig.js → Hint-uoVNfr0U.js} +1 -1
  7. package/assets/assets/{HistoryPage-BCxpCul0.js → HistoryPage-VJ_JQ7R3.js} +1 -1
  8. package/assets/assets/{InfoTooltip-DrBIPuSU.js → InfoTooltip-CNLlIWeP.js} +1 -1
  9. package/assets/assets/MeasurementPropertyPage-BZKiS1V0.js +4 -0
  10. package/assets/assets/ProjectPage-p-rDlzSq.js +11 -0
  11. package/assets/assets/{RunsPage-CfQ_kqlu.js → RunsPage-CjkPCc9Z.js} +1 -1
  12. package/assets/assets/{SettingsPage-PIgRvqJc.js → SettingsPage-BNHMlx6C.js} +1 -1
  13. package/assets/assets/SiteHealthSection-BZhulwSy.js +2 -0
  14. package/assets/assets/ToneBadge-B3rD6bDF.js +60 -0
  15. package/assets/assets/TrafficPage-Dr8NTQpA.js +40 -0
  16. package/assets/assets/TrafficSourceDetailPage-C79eQilP.js +1 -0
  17. package/assets/assets/{account-context-CVjb3ZSn.js → account-context-GstYbqpX.js} +1 -1
  18. package/assets/assets/agent-trust-copy-Ca4ys8J2.js +1 -0
  19. package/assets/assets/{card-BnVez9nG.js → card-CgdGerYK.js} +1 -1
  20. package/assets/assets/{format-helpers-DVXZD864.js → format-helpers-ByAY4dv0.js} +2 -2
  21. package/assets/assets/{index-BOUrrC9J.css → index-Bhpq6fUo.css} +1 -1
  22. package/assets/assets/index-BrHemYsG.js +60 -0
  23. package/assets/assets/query-client-DjRrRIsq.js +1 -0
  24. package/assets/assets/react-query-B8JD_K7g.js +1 -0
  25. package/assets/assets/{react-sigma_core.esm.min-CVfGIEIE.js → react-sigma_core.esm.min-OHqBWE8n.js} +1 -1
  26. package/assets/assets/server-traffic-Bt9bexaP.js +1 -0
  27. package/assets/assets/{service-BGqeyqhZ.js → service-SgtD5EOS.js} +1 -1
  28. package/assets/assets/{vendor-lucide-CoTHJwai.js → vendor-lucide-Bo69m9KC.js} +1 -1
  29. package/assets/assets/{vendor-markdown-cQgSk2i0.js → vendor-markdown-BiRP51B0.js} +1 -1
  30. package/assets/assets/{vendor-radix-wS8sWIWE.js → vendor-radix-PQeN8gOe.js} +1 -1
  31. package/assets/assets/{vendor-recharts-AnNqECZW.js → vendor-recharts-CY6tH-r6.js} +1 -1
  32. package/assets/assets/{vendor-tanstack-q5SvZtcv.js → vendor-tanstack-tBjrfzKu.js} +1 -1
  33. package/assets/index.html +15 -15
  34. package/dist/{ads-ZUZWSIBV.js → ads-6BAITIBY.js} +3 -3
  35. package/dist/{agent-YDS3WY7B.js → agent-BE3D65U4.js} +7 -7
  36. package/dist/{agent-ask-7VUPXTXL.js → agent-ask-TT6BAV2T.js} +3 -3
  37. package/dist/{agent-conversations-WPEBK3BS.js → agent-conversations-GJDAWU36.js} +3 -3
  38. package/dist/{agent-journeys-H5CCYLNB.js → agent-journeys-UEL27GNY.js} +3 -3
  39. package/dist/{agent-memory-CNPKPIWD.js → agent-memory-PB74OP46.js} +3 -3
  40. package/dist/{agent-providers-U7FLJO5I.js → agent-providers-5WFMNRRK.js} +3 -3
  41. package/dist/{agent-transcript-VY3BQNPU.js → agent-transcript-IAGB3JXG.js} +3 -3
  42. package/dist/{analytics-PYUNO7C2.js → analytics-5BVE7KUN.js} +3 -3
  43. package/dist/{apply-YNBEYC2G.js → apply-YJJWQ4JX.js} +3 -3
  44. package/dist/{backfill-6AYHWEQX.js → backfill-6OLGZIEV.js} +10 -10
  45. package/dist/{backlinks-LVHZ2MQ7.js → backlinks-4JK26OIO.js} +3 -3
  46. package/dist/bing-NZYYPB2M.js +794 -0
  47. package/dist/{bootstrap-27NOBWTP.js → bootstrap-6KHK63W3.js} +10 -10
  48. package/dist/{cdp-HCYY4SXR.js → cdp-PTXWVX6T.js} +7 -7
  49. package/dist/{chunk-JDTKG7KJ.js → chunk-2UULABPI.js} +7 -3
  50. package/dist/{chunk-GXTCDNX7.js → chunk-7ASKZHS4.js} +1 -1
  51. package/dist/{chunk-ICS2WJ7H.js → chunk-7VJJXLRP.js} +3 -3
  52. package/dist/{chunk-DOPUEXMC.js → chunk-AFYKUX2X.js} +2 -2
  53. package/dist/{chunk-LYTBHEID.js → chunk-C2XWWIJZ.js} +571 -346
  54. package/dist/{chunk-TFB2S6TQ.js → chunk-DF4B6OGX.js} +4 -4
  55. package/dist/{chunk-6F5ULQDY.js → chunk-DZO6CATO.js} +4 -4
  56. package/dist/{chunk-F643WELJ.js → chunk-ETIIPSWL.js} +412 -9
  57. package/dist/{chunk-BJHHD7VE.js → chunk-F442MSX2.js} +2 -2
  58. package/dist/{chunk-TEQF4ZJA.js → chunk-F6WNKKGG.js} +188 -2
  59. package/dist/{chunk-JAYUWQAV.js → chunk-GKX5F7NX.js} +1 -1
  60. package/dist/{chunk-IE4D47JE.js → chunk-HUQDD26S.js} +7 -7
  61. package/dist/{chunk-BVJA3TV2.js → chunk-I7DAEE3L.js} +5 -5
  62. package/dist/{chunk-4LNZTL7M.js → chunk-L2MDMZFT.js} +3 -3
  63. package/dist/{chunk-3KK6FWDF.js → chunk-LQWMNDZR.js} +1 -1
  64. package/dist/{chunk-INH773FB.js → chunk-LTZNUDSI.js} +3 -3
  65. package/dist/{chunk-ZJVQ72VC.js → chunk-N7LRPMWR.js} +2 -2
  66. package/dist/{chunk-T2MGGW6Y.js → chunk-NKGQCCUS.js} +6 -6
  67. package/dist/{chunk-POMLL2OZ.js → chunk-NPX5SL54.js} +1 -1
  68. package/dist/{chunk-2FJB3CSS.js → chunk-OOVWMWMT.js} +1 -1
  69. package/dist/{chunk-IVGVPPQT.js → chunk-OVUFIG22.js} +1156 -646
  70. package/dist/{chunk-MNLAIB67.js → chunk-PID3C4B7.js} +1 -1
  71. package/dist/{chunk-FAMCDCVK.js → chunk-Q6EZEVXE.js} +1 -1
  72. package/dist/{chunk-GDU6IMGB.js → chunk-QLVTMPFW.js} +2 -2
  73. package/dist/{chunk-2AXFKYJU.js → chunk-QWNDNZJ3.js} +2 -2
  74. package/dist/{chunk-AI75KS7G.js → chunk-SDXMG4VX.js} +2792 -1612
  75. package/dist/{chunk-IK7QEKKD.js → chunk-TA4L7U2M.js} +1 -1
  76. package/dist/{chunk-4FWDITQG.js → chunk-UG7TZJIG.js} +1 -1
  77. package/dist/{chunk-AYYZ4HKJ.js → chunk-USHY3SH6.js} +291 -1
  78. package/dist/{chunk-TN53B5AB.js → chunk-WNDBACO7.js} +240 -3
  79. package/dist/{chunk-CBWGUGME.js → chunk-WYMBWCG5.js} +20 -2
  80. package/dist/{chunk-IBGZ6D6R.js → chunk-XCEA5OMI.js} +2 -2
  81. package/dist/{chunk-ZCNKGBIV.js → chunk-YB2GAK32.js} +5 -5
  82. package/dist/{chunk-3FHBPJ5R.js → chunk-YPJCZD5H.js} +4 -4
  83. package/dist/{chunk-GBWCEOZR.js → chunk-ZV6PMFF4.js} +1 -1
  84. package/dist/{citations-3EZTHA65.js → citations-WX4VO6ZI.js} +3 -3
  85. package/dist/{cli-catalog-CBTM3JKP.js → cli-catalog-BTRNR2UP.js} +3 -3
  86. package/dist/{cli-commands-H7BFVUGC.js → cli-commands-5ISZA43S.js} +7 -7
  87. package/dist/cli.js +13 -13
  88. package/dist/{competitor-VH4TXJLT.js → competitor-HZRZWCEN.js} +3 -3
  89. package/dist/{content-TSMNHXJZ.js → content-NOZDHI3M.js} +3 -3
  90. package/dist/{dashboard-KT2ACPI5.js → dashboard-TZLWHXP4.js} +6 -6
  91. package/dist/{demo-LWSLULEZ.js → demo-2PYBQD47.js} +1 -1
  92. package/dist/{demo-server-UENMDVMG.js → demo-server-JEQNGMMV.js} +12 -12
  93. package/dist/{discover-XTJXTKCI.js → discover-A2XFXHOC.js} +3 -3
  94. package/dist/{discover-eval-IVQI5YEW.js → discover-eval-A6SBUYXF.js} +3 -3
  95. package/dist/{doctor-SJ4SHSQO.js → doctor-GZACELPF.js} +3 -3
  96. package/dist/{evidence-C6T556YH.js → evidence-RVFMUWIL.js} +3 -3
  97. package/dist/{export-cmd-JQZ5ZRSI.js → export-cmd-X2TFZGNJ.js} +3 -3
  98. package/dist/{ga-W2WHVRHN.js → ga-TOT3V67A.js} +3 -3
  99. package/dist/{gbp-3AZIV5WF.js → gbp-KP4YZU6S.js} +3 -3
  100. package/dist/{google-3CKWPZT7.js → google-GCFSTV5N.js} +4 -4
  101. package/dist/{google-marketing-PJBGQYYW.js → google-marketing-ANS65KQN.js} +1 -1
  102. package/dist/{health-cmd-4JTQMCXM.js → health-cmd-UKMNLU6D.js} +3 -3
  103. package/dist/{history-TXUJFEO2.js → history-TWGYSAZZ.js} +3 -3
  104. package/dist/index.d.ts +1861 -11
  105. package/dist/index.js +25 -25
  106. package/dist/{init-TF3OPCEC.js → init-K4623VOY.js} +12 -12
  107. package/dist/{insights-XZQO4B45.js → insights-7IOC7WIR.js} +3 -3
  108. package/dist/intelligence-service-42Q3OVI5.js +16 -0
  109. package/dist/{journeys-VFIV5JYV.js → journeys-NWKT45PT.js} +3 -3
  110. package/dist/{keys-PV23G4LW.js → keys-ZZYZUHUK.js} +3 -3
  111. package/dist/{keyword-D76KBIV5.js → keyword-F6EIX5KM.js} +3 -3
  112. package/dist/{logs-DYDZ6IEJ.js → logs-B45FXS6E.js} +3 -3
  113. package/dist/{mcp-GAR5LDQD.js → mcp-WPNCNWA5.js} +4 -4
  114. package/dist/mcp.js +9 -9
  115. package/dist/{measurement-plan-K24EOGMI.js → measurement-plan-QT5HJ3KC.js} +5 -5
  116. package/dist/{notify-XQHMPDQQ.js → notify-Z3LIF3SO.js} +3 -3
  117. package/dist/{organic-evidence-UHHE7AO4.js → organic-evidence-R5TM7XUB.js} +3 -3
  118. package/dist/{overview-AUZ3XRS5.js → overview-6TZHJLQN.js} +4 -4
  119. package/dist/{project-FUCPU2BD.js → project-VMPVOQ2A.js} +3 -3
  120. package/dist/{query-HRMSXDKL.js → query-EXSH5QP7.js} +3 -3
  121. package/dist/{research-R23XLZJ3.js → research-6R6BEL4X.js} +3 -3
  122. package/dist/{results-export-N6IV3KG4.js → results-export-ZJRL3ECU.js} +3 -3
  123. package/dist/{run-CJLG5EXH.js → run-C4VXAJE3.js} +4 -4
  124. package/dist/{schedule-IPDCQ2I5.js → schedule-KC6ETWMO.js} +3 -3
  125. package/dist/{search-ZU4AKJ76.js → search-SUR6BEQD.js} +3 -3
  126. package/dist/{serve-LLIUILD2.js → serve-TVODHNFU.js} +26 -26
  127. package/dist/{session-2NQKSF2N.js → session-D42KUKCZ.js} +13 -13
  128. package/dist/{settings-4FS5NRKP.js → settings-LTCG3D5B.js} +3 -3
  129. package/dist/sitemaps-YMTZLF5S.js +46 -0
  130. package/dist/{skills-GSFHACGN.js → skills-THMG3L64.js} +2 -2
  131. package/dist/{snapshot-4NUVPDK3.js → snapshot-ZEVB3EE4.js} +3 -3
  132. package/dist/{src-JQYZ2TP6.js → src-HPVSTXVF.js} +20 -2
  133. package/dist/{status-ASBLMFP2.js → status-LPCPTWKO.js} +4 -4
  134. package/dist/{technical-aeo-QXHRBGYY.js → technical-aeo-J6LNT45B.js} +3 -3
  135. package/dist/{telemetry-J2I577I3.js → telemetry-BPY34GDV.js} +4 -4
  136. package/dist/{tools-UPJRW4DN.js → tools-K3G43ESI.js} +11 -11
  137. package/dist/{traffic-GWBZKYR5.js → traffic-BOIFAPAR.js} +5 -5
  138. package/dist/{trends-YOLCJBNM.js → trends-A2MDRSQQ.js} +3 -3
  139. package/dist/{users-LPSCZV3M.js → users-VJOQODJK.js} +3 -3
  140. package/dist/{visibility-stats-JJQTZSSK.js → visibility-stats-YNMJYASA.js} +3 -3
  141. package/dist/{wordpress-4IKDT5KT.js → wordpress-BWG6D7VH.js} +3 -3
  142. package/package.json +1 -1
  143. package/assets/assets/AuditHistoryPanel-9B0XpYsN.js +0 -1
  144. package/assets/assets/MeasurementPropertyPage-BObvWjVx.js +0 -4
  145. package/assets/assets/ProjectPage-y378tOaT.js +0 -11
  146. package/assets/assets/SiteHealthSection-DuUE1cB0.js +0 -2
  147. package/assets/assets/ToneBadge-BgTLSTKp.js +0 -60
  148. package/assets/assets/TrafficPage-B_YunwjH.js +0 -40
  149. package/assets/assets/TrafficSourceDetailPage-C51W87fU.js +0 -1
  150. package/assets/assets/agent-trust-copy-BlpC8jo5.js +0 -1
  151. package/assets/assets/extract-error-message-Dqirbrl0.js +0 -1
  152. package/assets/assets/index-CsvEqhK4.js +0 -60
  153. package/assets/assets/query-client-CVc7wMKJ.js +0 -1
  154. package/assets/assets/react-query-CSlTSOjz.js +0 -1
  155. package/dist/bing-A2MUG6AV.js +0 -418
  156. package/dist/intelligence-service-LEH5UVIC.js +0 -16
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  runWithUsageTags
3
- } from "./chunk-TEQF4ZJA.js";
3
+ } from "./chunk-F6WNKKGG.js";
4
4
  import {
5
5
  CanonryMcpToolNames,
6
6
  canonryMcpTools
7
- } from "./chunk-TN53B5AB.js";
7
+ } from "./chunk-WNDBACO7.js";
8
8
  import {
9
9
  CliError
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-AI75KS7G.js";
13
+ } from "./chunk-SDXMG4VX.js";
14
14
  import {
15
15
  DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
16
16
  MeasurementPortfolioLists,
@@ -23,7 +23,7 @@ import {
23
23
  seoDatasetWithoutVendor,
24
24
  seoProviderSchema,
25
25
  truncateUtf16
26
- } from "./chunk-F643WELJ.js";
26
+ } from "./chunk-ETIIPSWL.js";
27
27
 
28
28
  // src/agent/tools.ts
29
29
  import { Type as Type2 } from "@earendil-works/pi-ai";
@@ -2,13 +2,13 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-DOPUEXMC.js";
5
+ } from "./chunk-AFYKUX2X.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-2FJB3CSS.js";
8
+ } from "./chunk-OOVWMWMT.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
- } from "./chunk-GBWCEOZR.js";
11
+ } from "./chunk-ZV6PMFF4.js";
12
12
  import {
13
13
  AGENT_NONE,
14
14
  OutcomeSurfaces,
@@ -19,7 +19,7 @@ import {
19
19
  integrationConnectionPropertiesSchema,
20
20
  normalizeAgentSlug,
21
21
  usageSurfaceSchema
22
- } from "./chunk-F643WELJ.js";
22
+ } from "./chunk-ETIIPSWL.js";
23
23
 
24
24
  // src/outcome-telemetry.ts
25
25
  import fs from "fs";
@@ -6936,6 +6936,7 @@ var runKindSchema = z19.enum([
6936
6936
  "ga-sync",
6937
6937
  "bing-inspect",
6938
6938
  "bing-inspect-sitemap",
6939
+ "bing-sync",
6939
6940
  "backlink-extract",
6940
6941
  "traffic-sync",
6941
6942
  "aeo-discover-seed",
@@ -13510,8 +13511,15 @@ var LIVE_READ_OPERATIONS = /* @__PURE__ */ new Set([
13510
13511
  "GET /api/v1/projects/{name}/gbp/reviews/live",
13511
13512
  "GET /api/v1/projects/{name}/ga/properties",
13512
13513
  "GET /api/v1/projects/{name}/bing/sites",
13513
- // Performance reads query Bing directly rather than the local snapshot.
13514
- "GET /api/v1/projects/{name}/bing/performance",
13514
+ // Bing drill-downs and keyword research: one call to Bing per request.
13515
+ "GET /api/v1/projects/{name}/bing/query-pages",
13516
+ "GET /api/v1/projects/{name}/bing/page-queries",
13517
+ "GET /api/v1/projects/{name}/bing/query-history",
13518
+ "GET /api/v1/projects/{name}/bing/url-traffic",
13519
+ "GET /api/v1/projects/{name}/bing/url-children",
13520
+ "GET /api/v1/projects/{name}/bing/links",
13521
+ "GET /api/v1/projects/{name}/bing/fetched-urls",
13522
+ "GET /api/v1/projects/{name}/bing/keywords",
13515
13523
  "GET /api/v1/projects/{name}/doctor",
13516
13524
  "GET /api/v1/doctor",
13517
13525
  "GET /api/v1/backlinks/latest-release",
@@ -13698,6 +13706,15 @@ var STORED_READ_OPERATIONS = /* @__PURE__ */ new Set([
13698
13706
  "GET /api/v1/projects/{name}/bing/status",
13699
13707
  "GET /api/v1/projects/{name}/bing/coverage/history",
13700
13708
  "GET /api/v1/projects/{name}/bing/inspections",
13709
+ "GET /api/v1/projects/{name}/bing/performance",
13710
+ "GET /api/v1/projects/{name}/bing/traffic",
13711
+ "GET /api/v1/projects/{name}/bing/queries",
13712
+ "GET /api/v1/projects/{name}/bing/pages",
13713
+ "GET /api/v1/projects/{name}/bing/crawl-stats",
13714
+ "GET /api/v1/projects/{name}/bing/sitemaps",
13715
+ "GET /api/v1/projects/{name}/bing/site",
13716
+ "GET /api/v1/projects/{name}/bing/keyword-demand",
13717
+ "GET /api/v1/projects/{name}/sitemaps",
13701
13718
  "GET /api/v1/projects/{name}/traffic/sources",
13702
13719
  "GET /api/v1/projects/{name}/traffic/status",
13703
13720
  "GET /api/v1/projects/{name}/traffic/analytics",
@@ -18670,14 +18687,14 @@ function median(values) {
18670
18687
  const middle = Math.floor(sorted.length / 2);
18671
18688
  return sorted.length % 2 === 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
18672
18689
  }
18673
- function wilsonInterval(successes, n, z96 = 1.96) {
18690
+ function wilsonInterval(successes, n, z97 = 1.96) {
18674
18691
  if (!Number.isFinite(n) || n <= 0) return null;
18675
18692
  const s = Math.max(0, Math.min(successes, n));
18676
18693
  const p = s / n;
18677
- const z210 = z96 * z96;
18694
+ const z210 = z97 * z97;
18678
18695
  const denom = 1 + z210 / n;
18679
18696
  const center = (p + z210 / (2 * n)) / denom;
18680
- const margin = z96 / denom * Math.sqrt(p * (1 - p) / n + z210 / (4 * n * n));
18697
+ const margin = z97 / denom * Math.sqrt(p * (1 - p) / n + z210 / (4 * n * n));
18681
18698
  return {
18682
18699
  low: round(Math.max(0, center - margin)),
18683
18700
  high: round(Math.min(1, center + margin))
@@ -23582,7 +23599,12 @@ var bingKeywordStatsDtoSchema = z77.object({
23582
23599
  impressions: z77.number(),
23583
23600
  clicks: z77.number(),
23584
23601
  ctr: fraction(),
23585
- averagePosition: z77.number()
23602
+ averagePosition: z77.number(),
23603
+ /**
23604
+ * Bing's weekly bucket for this row (YYYY-MM-DD). The live read returns one
23605
+ * row per query per week, so the same query repeats; this tells them apart.
23606
+ */
23607
+ date: z77.string().nullable().optional()
23586
23608
  });
23587
23609
  var bingCoverageSnapshotDtoSchema = z77.object({
23588
23610
  date: z77.string(),
@@ -23602,7 +23624,16 @@ var bingIndexingRequestResponseDtoSchema = z77.object({
23602
23624
  succeeded: z77.number().int().nonnegative(),
23603
23625
  failed: z77.number().int().nonnegative()
23604
23626
  }),
23605
- results: z77.array(bingSubmitResultDtoSchema).default([])
23627
+ results: z77.array(bingSubmitResultDtoSchema).default([]),
23628
+ /**
23629
+ * Bing's submission allowance for the site, read just before submitting:
23630
+ * what is LEFT today and this month. URLs past the allowance are returned
23631
+ * as errors without being sent. Null when the quota could not be read.
23632
+ */
23633
+ quota: z77.object({
23634
+ dailyQuota: z77.number().int().nonnegative(),
23635
+ monthlyQuota: z77.number().int().nonnegative()
23636
+ }).nullable().optional()
23606
23637
  });
23607
23638
  var bingSiteDtoSchema = z77.object({
23608
23639
  url: z77.string(),
@@ -23627,6 +23658,293 @@ var bingConnectResponseDtoSchema = z77.object({
23627
23658
  var bingSetSiteResponseDtoSchema = z77.object({
23628
23659
  siteUrl: z77.string()
23629
23660
  });
23661
+ var bingWindowDtoSchema = z77.object({
23662
+ startDate: z77.string().nullable(),
23663
+ endDate: z77.string().nullable()
23664
+ });
23665
+ var bingTrafficDayDtoSchema = z77.object({
23666
+ date: z77.string(),
23667
+ clicks: z77.number().int().nonnegative(),
23668
+ impressions: z77.number().int().nonnegative(),
23669
+ ctr: fraction()
23670
+ });
23671
+ var bingTrafficResponseDtoSchema = z77.object({
23672
+ rows: z77.array(bingTrafficDayDtoSchema),
23673
+ totals: z77.object({
23674
+ clicks: z77.number().int().nonnegative(),
23675
+ impressions: z77.number().int().nonnegative(),
23676
+ ctr: fraction()
23677
+ }),
23678
+ window: bingWindowDtoSchema,
23679
+ /** Newest stored day for the project, ignoring the window. Null before the first sync. */
23680
+ latestAvailableDate: z77.string().nullable(),
23681
+ /** Oldest stored day. A window that starts earlier is only partly covered. */
23682
+ earliestAvailableDate: z77.string().nullable(),
23683
+ /**
23684
+ * Least-squares fit per metric over one entry per calendar day in the
23685
+ * window (a day Bing sent no row for counts as zero), so every surface draws
23686
+ * the same line. Null for a metric with fewer than two days.
23687
+ */
23688
+ trends: z77.object({
23689
+ clicks: linearTrendSchema.nullable(),
23690
+ impressions: linearTrendSchema.nullable(),
23691
+ ctr: linearTrendSchema.nullable()
23692
+ }),
23693
+ /**
23694
+ * The window against the equal-length period before it (`prior-window`)
23695
+ * when the stored days reach back that far, else the window's own two
23696
+ * halves (`split-window`). Same shape as the Search Console comparison;
23697
+ * `position` is always null because Bing's daily traffic carries none.
23698
+ * Null when there is no span to split or the window ends after the newest
23699
+ * stored day.
23700
+ */
23701
+ periodComparison: gscPeriodComparisonSchema.nullable()
23702
+ });
23703
+ var bingSearchTotalsShape = {
23704
+ clicks: z77.number().int().nonnegative(),
23705
+ impressions: z77.number().int().nonnegative(),
23706
+ ctr: fraction(),
23707
+ /** Impression-weighted average position. Null when Bing sent no position. */
23708
+ avgImpressionPosition: z77.number().nullable(),
23709
+ /** Click-weighted average click position. Null when Bing sent its `-1` "no value". */
23710
+ avgClickPosition: z77.number().nullable(),
23711
+ /** Weekly buckets the row appeared in inside the window. */
23712
+ weeks: z77.number().int().nonnegative()
23713
+ };
23714
+ var bingQueryTotalsRowDtoSchema = z77.object({ query: z77.string(), ...bingSearchTotalsShape });
23715
+ var bingPageTotalsRowDtoSchema = z77.object({ page: z77.string(), ...bingSearchTotalsShape });
23716
+ var bingWeeklyTotalsRowDtoSchema = z77.object({ date: z77.string(), ...bingSearchTotalsShape });
23717
+ var bingSearchTotalsDtoSchema = z77.object(bingSearchTotalsShape);
23718
+ var bingSearchComparisonDtoSchema = z77.object({
23719
+ /** Length of each window in calendar days. */
23720
+ days: z77.number().int().positive(),
23721
+ prior: bingSearchTotalsDtoSchema,
23722
+ difference: z77.object({
23723
+ clicks: z77.number().int(),
23724
+ impressions: z77.number().int(),
23725
+ ctr: fraction(),
23726
+ avgImpressionPosition: z77.number().nullable()
23727
+ })
23728
+ });
23729
+ var bingSearchListEnvelope = {
23730
+ totalMatching: z77.number().int().nonnegative(),
23731
+ truncated: z77.boolean(),
23732
+ window: bingWindowDtoSchema,
23733
+ latestAvailableDate: z77.string().nullable(),
23734
+ /**
23735
+ * The matching rows summed over the window, before paging. Not a site total:
23736
+ * Bing names only some queries (use `/bing/traffic` for the site). Null when
23737
+ * no stored week falls in the window.
23738
+ */
23739
+ totals: bingSearchTotalsDtoSchema.nullable(),
23740
+ /**
23741
+ * `totals` against the equal-length window before it. Null for an open
23742
+ * window (`window=all`), or when the stored weeks do not reach back that far.
23743
+ */
23744
+ comparison: bingSearchComparisonDtoSchema.nullable()
23745
+ };
23746
+ var bingQueryTotalsResponseDtoSchema = z77.object({
23747
+ groupBy: z77.enum(["query", "week"]),
23748
+ rows: z77.array(bingQueryTotalsRowDtoSchema),
23749
+ weekly: z77.array(bingWeeklyTotalsRowDtoSchema),
23750
+ ...bingSearchListEnvelope
23751
+ });
23752
+ var bingPageTotalsResponseDtoSchema = z77.object({
23753
+ groupBy: z77.enum(["page", "week"]),
23754
+ rows: z77.array(bingPageTotalsRowDtoSchema),
23755
+ weekly: z77.array(bingWeeklyTotalsRowDtoSchema),
23756
+ ...bingSearchListEnvelope
23757
+ });
23758
+ var bingCrawlStatsDayDtoSchema = z77.object({
23759
+ date: z77.string(),
23760
+ crawledPages: z77.number().int().nonnegative(),
23761
+ inIndex: z77.number().int().nonnegative(),
23762
+ crawlErrors: z77.number().int().nonnegative(),
23763
+ inLinks: z77.number().int().nonnegative(),
23764
+ code2xx: z77.number().int().nonnegative(),
23765
+ code301: z77.number().int().nonnegative(),
23766
+ code302: z77.number().int().nonnegative(),
23767
+ code4xx: z77.number().int().nonnegative(),
23768
+ code5xx: z77.number().int().nonnegative(),
23769
+ allOtherCodes: z77.number().int().nonnegative(),
23770
+ blockedByRobotsTxt: z77.number().int().nonnegative(),
23771
+ connectionTimeout: z77.number().int().nonnegative(),
23772
+ containsMalware: z77.number().int().nonnegative(),
23773
+ dnsFailures: z77.number().int().nonnegative()
23774
+ });
23775
+ var bingCrawlStatsResponseDtoSchema = z77.object({
23776
+ rows: z77.array(bingCrawlStatsDayDtoSchema),
23777
+ window: bingWindowDtoSchema,
23778
+ latestAvailableDate: z77.string().nullable()
23779
+ });
23780
+ var bingSitemapDtoSchema = z77.object({
23781
+ url: z77.string(),
23782
+ /** The sitemap index this sitemap was listed under; null for a top-level submission. */
23783
+ parentUrl: z77.string().nullable(),
23784
+ type: z77.string(),
23785
+ status: z77.string(),
23786
+ urlCount: z77.number().int().nonnegative(),
23787
+ fileSize: z77.number().int().nonnegative(),
23788
+ compressed: z77.boolean(),
23789
+ submittedAt: z77.string().nullable(),
23790
+ lastCrawledAt: z77.string().nullable(),
23791
+ syncedAt: z77.string()
23792
+ });
23793
+ var bingSitemapsResponseDtoSchema = z77.object({
23794
+ sitemaps: z77.array(bingSitemapDtoSchema),
23795
+ syncedAt: z77.string().nullable()
23796
+ });
23797
+ var bingSiteSnapshotKindSchema = z77.enum([
23798
+ "url-submission-quota",
23799
+ "content-submission-quota",
23800
+ "crawl-settings",
23801
+ "crawl-issues",
23802
+ "blocked-urls",
23803
+ "page-preview-blocks",
23804
+ "deep-link-blocks",
23805
+ "query-parameters",
23806
+ "country-region-settings",
23807
+ "fetched-urls",
23808
+ "connected-pages",
23809
+ "site-roles"
23810
+ ]);
23811
+ var BingSiteSnapshotKinds = bingSiteSnapshotKindSchema.enum;
23812
+ var bingSiteSnapshotStatusSchema = z77.enum(["ok", "unauthorized", "failed"]);
23813
+ var bingSiteSnapshotDtoSchema = z77.object({
23814
+ kind: bingSiteSnapshotKindSchema,
23815
+ status: bingSiteSnapshotStatusSchema,
23816
+ payload: z77.unknown(),
23817
+ error: z77.string().nullable(),
23818
+ syncedAt: z77.string()
23819
+ });
23820
+ var bingSiteResponseDtoSchema = z77.object({
23821
+ snapshots: z77.array(bingSiteSnapshotDtoSchema),
23822
+ syncedAt: z77.string().nullable()
23823
+ });
23824
+ var bingKeywordDemandRowDtoSchema = z77.object({
23825
+ query: z77.string(),
23826
+ country: z77.string(),
23827
+ language: z77.string(),
23828
+ /** Newest stored week for this query and market. */
23829
+ latestWeek: z77.string().nullable(),
23830
+ /** Exact-match Bing searches in the newest week. */
23831
+ latestImpressions: z77.number().int().nonnegative().nullable(),
23832
+ latestBroadImpressions: z77.number().int().nonnegative().nullable(),
23833
+ /** Mean weekly exact-match searches over the stored weeks. */
23834
+ avgWeeklyImpressions: z77.number().nonnegative().nullable(),
23835
+ /**
23836
+ * Weeks stored. A query Bing reports no volume for holds one zero week,
23837
+ * dated the day it was checked, so it is not re-read daily.
23838
+ */
23839
+ weeks: z77.number().int().nonnegative(),
23840
+ syncedAt: z77.string().nullable()
23841
+ });
23842
+ var bingKeywordWeekDtoSchema = z77.object({
23843
+ date: z77.string(),
23844
+ impressions: z77.number().int().nonnegative(),
23845
+ broadImpressions: z77.number().int().nonnegative()
23846
+ });
23847
+ var bingKeywordDemandResponseDtoSchema = z77.object({
23848
+ market: z77.object({ country: z77.string(), language: z77.string() }),
23849
+ rows: z77.array(bingKeywordDemandRowDtoSchema),
23850
+ history: z77.array(bingKeywordWeekDtoSchema)
23851
+ });
23852
+ var bingStatsRowDtoSchema = z77.object({
23853
+ date: z77.string().nullable(),
23854
+ /** The search query (page-queries) or page URL (query-pages). */
23855
+ key: z77.string(),
23856
+ clicks: z77.number().int().nonnegative(),
23857
+ impressions: z77.number().int().nonnegative(),
23858
+ ctr: fraction(),
23859
+ avgImpressionPosition: z77.number().nullable(),
23860
+ avgClickPosition: z77.number().nullable()
23861
+ });
23862
+ var bingQueryPagesResponseDtoSchema = z77.object({
23863
+ query: z77.string(),
23864
+ rows: z77.array(bingStatsRowDtoSchema)
23865
+ });
23866
+ var bingPageQueriesResponseDtoSchema = z77.object({
23867
+ page: z77.string(),
23868
+ rows: z77.array(bingStatsRowDtoSchema)
23869
+ });
23870
+ var bingQueryHistoryResponseDtoSchema = z77.object({
23871
+ query: z77.string(),
23872
+ page: z77.string().nullable(),
23873
+ granularity: z77.enum(["day", "week"]),
23874
+ rows: z77.array(z77.object({
23875
+ date: z77.string().nullable(),
23876
+ clicks: z77.number().int().nonnegative(),
23877
+ impressions: z77.number().int().nonnegative(),
23878
+ ctr: fraction(),
23879
+ position: z77.number().nullable()
23880
+ }))
23881
+ });
23882
+ var bingUrlTrafficDtoSchema = z77.object({
23883
+ url: z77.string(),
23884
+ clicks: z77.number().int().nonnegative(),
23885
+ impressions: z77.number().int().nonnegative(),
23886
+ isPage: z77.boolean()
23887
+ });
23888
+ var bingUrlTrafficResponseDtoSchema = z77.object({
23889
+ url: bingUrlTrafficDtoSchema,
23890
+ /** URLs under this one; empty unless `children` was asked for. */
23891
+ children: z77.array(bingUrlTrafficDtoSchema),
23892
+ page: z77.number().int().nonnegative()
23893
+ });
23894
+ var bingUrlChildrenResponseDtoSchema = z77.object({
23895
+ url: z77.string(),
23896
+ page: z77.number().int().nonnegative(),
23897
+ rows: z77.array(z77.object({
23898
+ url: z77.string(),
23899
+ httpStatus: z77.number().nullable(),
23900
+ documentSize: z77.number().nullable(),
23901
+ anchorCount: z77.number().nullable(),
23902
+ isPage: z77.boolean().nullable(),
23903
+ totalChildUrlCount: z77.number().nullable(),
23904
+ discoveryDate: z77.string().nullable(),
23905
+ lastCrawledDate: z77.string().nullable()
23906
+ }))
23907
+ });
23908
+ var bingLinksResponseDtoSchema = z77.object({
23909
+ url: z77.string().nullable(),
23910
+ page: z77.number().int().nonnegative(),
23911
+ totalPages: z77.number().int().nonnegative(),
23912
+ rows: z77.array(z77.object({
23913
+ url: z77.string(),
23914
+ count: z77.number().int().nonnegative().nullable(),
23915
+ anchorText: z77.string().nullable()
23916
+ }))
23917
+ });
23918
+ var bingFetchedUrlsResponseDtoSchema = z77.object({
23919
+ rows: z77.array(z77.object({
23920
+ url: z77.string(),
23921
+ date: z77.string().nullable(),
23922
+ expired: z77.boolean().nullable(),
23923
+ fetched: z77.boolean().nullable()
23924
+ })),
23925
+ details: z77.object({
23926
+ url: z77.string(),
23927
+ date: z77.string().nullable(),
23928
+ status: z77.string().nullable(),
23929
+ headers: z77.string().nullable(),
23930
+ document: z77.string().nullable()
23931
+ }).nullable()
23932
+ });
23933
+ var bingKeywordResearchResponseDtoSchema = z77.object({
23934
+ keyword: z77.string(),
23935
+ market: z77.object({ country: z77.string(), language: z77.string() }),
23936
+ window: z77.object({ startDate: z77.string(), endDate: z77.string() }),
23937
+ volume: z77.object({
23938
+ impressions: z77.number().int().nonnegative(),
23939
+ broadImpressions: z77.number().int().nonnegative()
23940
+ }).nullable(),
23941
+ history: z77.array(bingKeywordWeekDtoSchema),
23942
+ related: z77.array(z77.object({
23943
+ query: z77.string(),
23944
+ impressions: z77.number().int().nonnegative(),
23945
+ broadImpressions: z77.number().int().nonnegative()
23946
+ }))
23947
+ });
23630
23948
 
23631
23949
  // ../contracts/src/cdp.ts
23632
23950
  import { z as z78 } from "zod";
@@ -23986,7 +24304,7 @@ var LLM_CAPABILITIES = Object.values(LlmCapabilities);
23986
24304
 
23987
24305
  // ../contracts/src/status.ts
23988
24306
  import { z as z80 } from "zod";
23989
- var statusIntegrationSchema = z80.enum(["gsc", "ga", "gbp", "bing", "ads", "google-ads", "gtm", "traffic"]);
24307
+ var statusIntegrationSchema = z80.enum(["gsc", "ga", "gbp", "bing", "bing-search", "ads", "google-ads", "gtm", "traffic"]);
23990
24308
  var StatusIntegrations = statusIntegrationSchema.enum;
23991
24309
  var integrationStateSchema = z80.enum(["ok", "failing", "stale", "never-synced"]);
23992
24310
  var IntegrationStates = integrationStateSchema.enum;
@@ -26222,6 +26540,10 @@ var UI_ACTIONS = [
26222
26540
  "integration.connect",
26223
26541
  "integration.disconnect",
26224
26542
  "traffic.sync",
26543
+ /** A Bing data sync was queued from the dashboard. */
26544
+ "bing.sync",
26545
+ /** A sitemap was submitted to Google or Bing from the dashboard (`integration` says which). */
26546
+ "sitemap.submit",
26225
26547
  "journeys.visitor_open",
26226
26548
  "journeys.visit_open",
26227
26549
  "journeys.agent_open",
@@ -27007,6 +27329,68 @@ function compareSeoKeywordGapsBy(sort) {
27007
27329
  }
27008
27330
  }
27009
27331
 
27332
+ // ../contracts/src/sitemaps.ts
27333
+ import { z as z96 } from "zod";
27334
+ var sitemapEngineSchema = z96.enum(["google", "bing"]);
27335
+ var SitemapEngines = sitemapEngineSchema.enum;
27336
+ var sitemapSourceSchema = z96.enum(["site", "google", "bing"]);
27337
+ var sitemapStateSchema = z96.enum(["ok", "pending", "warnings", "errors", "other"]);
27338
+ var SitemapStates = sitemapStateSchema.enum;
27339
+ var engineSitemapDtoSchema = z96.object({
27340
+ url: z96.string(),
27341
+ /** The index this file was read from; null for a sitemap listed on its own. */
27342
+ parentUrl: z96.string().nullable(),
27343
+ isIndex: z96.boolean(),
27344
+ /** The engine's own type word (Bing: `Sitemap`, `Sitemap Index`, `RSS`; Google: `sitemap`, `rssFeed`). */
27345
+ type: z96.string().nullable(),
27346
+ state: sitemapStateSchema,
27347
+ /** The engine's status as it reads in its own console (Google: Success, Processing, Warnings, Errors; Bing's word as sent). */
27348
+ statusLabel: z96.string(),
27349
+ warnings: z96.number().int().nonnegative().nullable(),
27350
+ errors: z96.number().int().nonnegative().nullable(),
27351
+ /** URLs the engine counted in the sitemap; null when it reported none. */
27352
+ urlCount: z96.number().int().nonnegative().nullable(),
27353
+ /** Null when nobody submitted it: the engine found it itself. */
27354
+ submittedAt: z96.string().nullable(),
27355
+ /** When the engine last read the file (Google: downloaded; Bing: crawled). */
27356
+ lastReadAt: z96.string().nullable()
27357
+ });
27358
+ var sitemapMissingDtoSchema = z96.object({
27359
+ url: z96.string(),
27360
+ /** Where Canonry saw it: the site's own sitemaps, or a submission to the other engine. */
27361
+ foundIn: z96.array(sitemapSourceSchema)
27362
+ });
27363
+ var engineSitemapsDtoSchema = z96.object({
27364
+ /** When this engine's list was last read in full. */
27365
+ syncedAt: z96.string(),
27366
+ /** Every sitemap the engine lists, files inside an index included (`parentUrl`). */
27367
+ sitemaps: z96.array(engineSitemapDtoSchema),
27368
+ /**
27369
+ * Sitemaps the site declares or someone submitted to the other engine that
27370
+ * this engine does not have, by URL. A file inside an index that is itself missing is left
27371
+ * out: adding the index covers it. Google lists only sitemaps inside the
27372
+ * connected property.
27373
+ */
27374
+ missing: z96.array(sitemapMissingDtoSchema)
27375
+ });
27376
+ var sitemapCoverageResponseDtoSchema = z96.object({
27377
+ site: z96.object({
27378
+ /** When the scan behind `sitemaps` ran; null before the first Site Health scan. */
27379
+ scannedAt: z96.string().nullable(),
27380
+ runId: z96.string().nullable(),
27381
+ /** Sitemap files the scan read pages from. An index appears through its files. */
27382
+ sitemaps: z96.array(z96.string())
27383
+ }),
27384
+ /** Null when the engine is not connected or its list was never read. */
27385
+ google: engineSitemapsDtoSchema.nullable(),
27386
+ bing: engineSitemapsDtoSchema.nullable()
27387
+ });
27388
+ var bingSubmitSitemapResponseDtoSchema = z96.object({
27389
+ sitemapUrl: z96.string(),
27390
+ /** Bing accepted the request. It lists a new sitemap after it reads it, so it shows from the next sync. */
27391
+ accepted: z96.literal(true)
27392
+ });
27393
+
27010
27394
  export {
27011
27395
  GBP_POSTS_WRITE_SCOPE,
27012
27396
  GBP_LIVE_READ_SCOPE,
@@ -27776,6 +28160,23 @@ export {
27776
28160
  bingStatusDtoSchema,
27777
28161
  bingConnectResponseDtoSchema,
27778
28162
  bingSetSiteResponseDtoSchema,
28163
+ bingTrafficResponseDtoSchema,
28164
+ bingQueryTotalsResponseDtoSchema,
28165
+ bingPageTotalsResponseDtoSchema,
28166
+ bingCrawlStatsResponseDtoSchema,
28167
+ bingSitemapsResponseDtoSchema,
28168
+ bingSiteSnapshotKindSchema,
28169
+ BingSiteSnapshotKinds,
28170
+ bingSiteResponseDtoSchema,
28171
+ bingKeywordDemandResponseDtoSchema,
28172
+ bingQueryPagesResponseDtoSchema,
28173
+ bingPageQueriesResponseDtoSchema,
28174
+ bingQueryHistoryResponseDtoSchema,
28175
+ bingUrlTrafficResponseDtoSchema,
28176
+ bingUrlChildrenResponseDtoSchema,
28177
+ bingLinksResponseDtoSchema,
28178
+ bingFetchedUrlsResponseDtoSchema,
28179
+ bingKeywordResearchResponseDtoSchema,
27779
28180
  cdpStatusDtoSchema,
27780
28181
  wordpressEnvSchema,
27781
28182
  wordpressStatusDtoSchema,
@@ -28322,5 +28723,7 @@ export {
28322
28723
  countMarketRankings,
28323
28724
  groupMarketRankings,
28324
28725
  compareSeoCompetitorsBy,
28325
- compareSeoKeywordGapsBy
28726
+ compareSeoKeywordGapsBy,
28727
+ sitemapCoverageResponseDtoSchema,
28728
+ bingSubmitSitemapResponseDtoSchema
28326
28729
  };
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-VJWDBFSL.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-TEQF4ZJA.js";
7
+ } from "./chunk-F6WNKKGG.js";
8
8
  import {
9
9
  CliError,
10
10
  isMachineFormat
11
11
  } from "./chunk-HGMYEDAQ.js";
12
12
  import {
13
13
  describeError
14
- } from "./chunk-F643WELJ.js";
14
+ } from "./chunk-ETIIPSWL.js";
15
15
 
16
16
  // src/commands/mcp.ts
17
17
  import fs from "fs";