@canonry/canonry 7.88.0 → 7.89.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 (152) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +4 -4
  2. package/assets/assets/{AgentSetupPage-DV06oPTd.js → AgentSetupPage-BU1supL8.js} +6 -6
  3. package/assets/assets/AuditHistoryPanel-D7or_J3j.js +1 -0
  4. package/assets/assets/{BacklinksPage-Dw0wgYlg.js → BacklinksPage-SOls3ew4.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-DsDx15am.js → HistoryPage-LNKtQ6a8.js} +1 -1
  8. package/assets/assets/{InfoTooltip-DrBIPuSU.js → InfoTooltip-CNLlIWeP.js} +1 -1
  9. package/assets/assets/MeasurementPropertyPage-CTZzlHWE.js +4 -0
  10. package/assets/assets/ProjectPage-D79zuY-M.js +11 -0
  11. package/assets/assets/{RunsPage-BggqKbOG.js → RunsPage-B8zUD2gr.js} +1 -1
  12. package/assets/assets/{SettingsPage-B7ns_ECx.js → SettingsPage-BOQgT_7N.js} +1 -1
  13. package/assets/assets/SiteHealthSection-G3_MShnD.js +2 -0
  14. package/assets/assets/{ToneBadge-B8hKcr8p.js → ToneBadge-DawS8vMp.js} +6 -6
  15. package/assets/assets/TrafficPage-DJUqxtrQ.js +40 -0
  16. package/assets/assets/TrafficSourceDetailPage-OVY_L73m.js +1 -0
  17. package/assets/assets/{account-context-pzV-boTi.js → account-context-DoI9S9qY.js} +1 -1
  18. package/assets/assets/agent-trust-copy-CZpfPr4M.js +1 -0
  19. package/assets/assets/{card-Mu_5i5fM.js → card-ClURYmZN.js} +1 -1
  20. package/assets/assets/{format-helpers-C8QYorwm.js → format-helpers-CscAFAMJ.js} +2 -2
  21. package/assets/assets/{index-BOUrrC9J.css → index-Bhpq6fUo.css} +1 -1
  22. package/assets/assets/index-y0Wx0ZWq.js +60 -0
  23. package/assets/assets/{query-client-CdG4DC3B.js → query-client-Dm_GqsTu.js} +1 -1
  24. package/assets/assets/react-query-BwhgbuS1.js +1 -0
  25. package/assets/assets/{react-sigma_core.esm.min-BfnfPCis.js → react-sigma_core.esm.min-6J0MSvMJ.js} +1 -1
  26. package/assets/assets/server-traffic-C-_D6pdo.js +1 -0
  27. package/assets/assets/{service-B85wjZQP.js → service-C7qDx_qB.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-4TAIMWZC.js → ads-XEW2LBKV.js} +3 -3
  35. package/dist/{agent-C7NKP2TO.js → agent-VYADMMPT.js} +7 -7
  36. package/dist/{agent-ask-EPH5FDM6.js → agent-ask-4G57GM3S.js} +3 -3
  37. package/dist/{agent-conversations-LPBBVRKK.js → agent-conversations-MRKRCXQI.js} +3 -3
  38. package/dist/{agent-journeys-MBORINJA.js → agent-journeys-WEUEYRMK.js} +3 -3
  39. package/dist/{agent-memory-NJIZO75R.js → agent-memory-YLAOXQQ6.js} +3 -3
  40. package/dist/{agent-providers-ZQVUOCX6.js → agent-providers-AWKQRJDZ.js} +3 -3
  41. package/dist/{agent-transcript-67HFY5GT.js → agent-transcript-HXYFVCUD.js} +3 -3
  42. package/dist/{analytics-TUO6BVB6.js → analytics-5G5G5OJU.js} +3 -3
  43. package/dist/{apply-V7A5O7YS.js → apply-FCKZG7A2.js} +3 -3
  44. package/dist/{backfill-PGKYR6NA.js → backfill-3CTZHCJS.js} +10 -10
  45. package/dist/{backlinks-5GGPQNR4.js → backlinks-Q53JT63C.js} +3 -3
  46. package/dist/{bing-PQOLIW2X.js → bing-FOY2UVIM.js} +34 -8
  47. package/dist/{bootstrap-IH3XX6PI.js → bootstrap-FXIT7LDW.js} +10 -10
  48. package/dist/{cdp-B3PFQ5RB.js → cdp-WWQW3LIZ.js} +7 -7
  49. package/dist/{chunk-FLJVGHTQ.js → chunk-2BZJ4W27.js} +3 -3
  50. package/dist/{chunk-DILCH7RL.js → chunk-3H5VURTU.js} +1 -1
  51. package/dist/{chunk-CYQCO5NY.js → chunk-3IC7PRTW.js} +1 -1
  52. package/dist/{chunk-N6AWKBLY.js → chunk-4INNOSWU.js} +5 -5
  53. package/dist/{chunk-FNQFM3TK.js → chunk-5GQ2AGWS.js} +3 -3
  54. package/dist/{chunk-TAQHHXBC.js → chunk-7522CQ2E.js} +4 -4
  55. package/dist/{chunk-5KDJJO2N.js → chunk-A6DKZ4KQ.js} +1 -1
  56. package/dist/{chunk-TL52ELES.js → chunk-DPKA5CWK.js} +1 -1
  57. package/dist/{chunk-FL76YWYN.js → chunk-DX46HM7S.js} +1 -1
  58. package/dist/{chunk-PBOIN52J.js → chunk-EWR25OVQ.js} +2 -2
  59. package/dist/{chunk-2KL2XHS6.js → chunk-GDEYX6E3.js} +4 -4
  60. package/dist/{chunk-E4DUE2PW.js → chunk-GSNKBXGN.js} +6 -6
  61. package/dist/{chunk-4VMHN5LL.js → chunk-HSOZSLIZ.js} +99 -30
  62. package/dist/{chunk-DVWAA3ES.js → chunk-IK3PYAQU.js} +21 -21
  63. package/dist/{chunk-UVXQQZB5.js → chunk-J7V7TYX7.js} +2 -2
  64. package/dist/{chunk-PZLEKWYA.js → chunk-JLBJEQPV.js} +1 -1
  65. package/dist/{chunk-6DIDDYG6.js → chunk-KAGMYJYG.js} +5 -5
  66. package/dist/{chunk-4T2VZPDG.js → chunk-MNLQY5WG.js} +2 -2
  67. package/dist/{chunk-D354CQ6T.js → chunk-MXGME7NG.js} +1 -1
  68. package/dist/{chunk-OKLDBQYW.js → chunk-RE24YYIY.js} +4 -4
  69. package/dist/{chunk-R7K24KY7.js → chunk-S7D2ELTC.js} +3 -3
  70. package/dist/{chunk-EGUJNHAZ.js → chunk-TCANF22P.js} +2 -2
  71. package/dist/{chunk-5WWEZ26Y.js → chunk-UIULMWJX.js} +2 -2
  72. package/dist/{chunk-O7OZVZWR.js → chunk-VBM6T5ZP.js} +21 -13
  73. package/dist/{chunk-IR3MYKIA.js → chunk-VL4AZGUA.js} +1 -1
  74. package/dist/{chunk-MEN27RAJ.js → chunk-WE6FSG7J.js} +1 -1
  75. package/dist/{chunk-EYSQMZ6L.js → chunk-WHN4RF2Y.js} +373 -369
  76. package/dist/{chunk-4A4X7VXE.js → chunk-WPTCWNA6.js} +2 -2
  77. package/dist/{chunk-LBZYPZAA.js → chunk-X6XFWQCE.js} +7 -7
  78. package/dist/{chunk-BDLC3DFM.js → chunk-Y35D3ZCH.js} +2 -2
  79. package/dist/{chunk-Q2SJRZA3.js → chunk-YKLYWVLL.js} +46 -2
  80. package/dist/{chunk-IPOYH4WE.js → chunk-YW2IQEWS.js} +1 -1
  81. package/dist/{chunk-ZQGWB7VJ.js → chunk-ZEWOPHTA.js} +1 -1
  82. package/dist/{chunk-MCQK432C.js → chunk-ZX4TZNP4.js} +1 -1
  83. package/dist/{chunk-EL4HRIID.js → chunk-ZYEWB5BK.js} +3 -3
  84. package/dist/{citations-J3IGPX4L.js → citations-ZZ6ODCGZ.js} +3 -3
  85. package/dist/{cli-catalog-2PCRGKPH.js → cli-catalog-HEX47BKL.js} +3 -3
  86. package/dist/{cli-commands-4MUJZCZO.js → cli-commands-6OLN355M.js} +7 -7
  87. package/dist/cli.js +13 -13
  88. package/dist/{competitor-X7Q2AZGL.js → competitor-6MRHORU2.js} +3 -3
  89. package/dist/{content-HTR3PJPX.js → content-S2UOGTLN.js} +3 -3
  90. package/dist/{dashboard-LSO57ZEE.js → dashboard-J4H3FVKH.js} +6 -6
  91. package/dist/{demo-P25N4SKK.js → demo-7PJJQMLO.js} +1 -1
  92. package/dist/{demo-server-6Z5XSHFS.js → demo-server-55I5LNNS.js} +12 -12
  93. package/dist/{discover-KE6TQPOC.js → discover-O4NFDHGP.js} +3 -3
  94. package/dist/{discover-eval-XKOYGCRW.js → discover-eval-PE2MW42B.js} +3 -3
  95. package/dist/{doctor-RL2J54I3.js → doctor-GT4MMJQJ.js} +3 -3
  96. package/dist/{evidence-CYJ4AKUZ.js → evidence-Z344KVJX.js} +3 -3
  97. package/dist/{export-cmd-2YM3PXCW.js → export-cmd-Z6WWLI6H.js} +3 -3
  98. package/dist/{ga-XAB66MJO.js → ga-SXIGAF5F.js} +3 -3
  99. package/dist/{gbp-CDGBLRVV.js → gbp-CSLWSEKF.js} +3 -3
  100. package/dist/{google-XHCUKQ3J.js → google-EAQJ46AR.js} +4 -4
  101. package/dist/{google-marketing-ZR6NTWEY.js → google-marketing-NVKB4NLG.js} +1 -1
  102. package/dist/{health-cmd-VS3EIFJD.js → health-cmd-6IYRMZS3.js} +3 -3
  103. package/dist/{history-YIGYYNZJ.js → history-KLZI7IKJ.js} +3 -3
  104. package/dist/index.d.ts +14 -14
  105. package/dist/index.js +25 -25
  106. package/dist/{init-ST3BXHQF.js → init-LFLCM6KJ.js} +12 -12
  107. package/dist/{insights-KZS6TYYL.js → insights-C7NN64E2.js} +3 -3
  108. package/dist/intelligence-service-ENI35JFR.js +16 -0
  109. package/dist/{journeys-USOPWGW5.js → journeys-C34YDOM6.js} +3 -3
  110. package/dist/{keys-XY7LSM3S.js → keys-4RDLFHXO.js} +3 -3
  111. package/dist/{keyword-PKBFHHF5.js → keyword-BZEJEYAG.js} +3 -3
  112. package/dist/{logs-PROW5TQJ.js → logs-5FPZRSZM.js} +3 -3
  113. package/dist/{mcp-OQGC62QU.js → mcp-574UA5Y3.js} +4 -4
  114. package/dist/mcp.js +9 -9
  115. package/dist/{measurement-plan-AI4NNBTO.js → measurement-plan-2H4KHD2Y.js} +5 -5
  116. package/dist/{notify-6HRPNJZ5.js → notify-TFXL4CSH.js} +3 -3
  117. package/dist/{organic-evidence-IXCSUGGY.js → organic-evidence-R55KSYFN.js} +3 -3
  118. package/dist/{overview-2WS3CFHK.js → overview-NJTCLHAB.js} +4 -4
  119. package/dist/{project-ENUZG62V.js → project-PV36DZDG.js} +3 -3
  120. package/dist/{query-WE3ZWTIB.js → query-5SVITJ4K.js} +3 -3
  121. package/dist/{research-DZSD5UZ2.js → research-JSET5FNY.js} +3 -3
  122. package/dist/{results-export-JMUMYNUE.js → results-export-5EFMXTPG.js} +3 -3
  123. package/dist/{run-QXOO7CRK.js → run-NOSOG3YH.js} +4 -4
  124. package/dist/{schedule-3RJKGUDN.js → schedule-I3ACQC2C.js} +3 -3
  125. package/dist/{search-SGS4H7I4.js → search-EE53K7J5.js} +3 -3
  126. package/dist/{serve-T24QKEUY.js → serve-SDU77HVC.js} +26 -26
  127. package/dist/{session-HPH2A4AZ.js → session-FYZCUPVX.js} +13 -13
  128. package/dist/{settings-K44RK2TW.js → settings-CEI7EKPO.js} +3 -3
  129. package/dist/{skills-HGPPGBXG.js → skills-TRTFFZU3.js} +2 -2
  130. package/dist/{snapshot-FEHHQRY3.js → snapshot-2RXVTDTZ.js} +3 -3
  131. package/dist/{src-4PAYI7GE.js → src-DYJHW2HG.js} +2 -2
  132. package/dist/{status-L5HVFWTS.js → status-2VHBSIRY.js} +4 -4
  133. package/dist/{technical-aeo-Z43UCW6E.js → technical-aeo-3OMGT4ZT.js} +3 -3
  134. package/dist/{telemetry-D47SSSG7.js → telemetry-5F4EHGR2.js} +4 -4
  135. package/dist/{tools-WCWUY2ZJ.js → tools-C3IIMXBJ.js} +11 -11
  136. package/dist/{traffic-5KH62P43.js → traffic-S3VUYBG6.js} +5 -5
  137. package/dist/{trends-RMAXZKRO.js → trends-RQ4B2QWA.js} +3 -3
  138. package/dist/{users-WT54XNEI.js → users-T6OOG5YB.js} +3 -3
  139. package/dist/{visibility-stats-HU62U5MA.js → visibility-stats-2O24MQCV.js} +3 -3
  140. package/dist/{wordpress-BDAKQ4MU.js → wordpress-SDENOBFI.js} +3 -3
  141. package/package.json +1 -1
  142. package/assets/assets/AuditHistoryPanel-C1JnxBFK.js +0 -1
  143. package/assets/assets/MeasurementPropertyPage-Bkxt3QcY.js +0 -4
  144. package/assets/assets/ProjectPage-CzrD1lpf.js +0 -11
  145. package/assets/assets/SiteHealthSection-B2YibqCs.js +0 -2
  146. package/assets/assets/TrafficPage-DRTbgzKI.js +0 -40
  147. package/assets/assets/TrafficSourceDetailPage-sgLE2gdJ.js +0 -1
  148. package/assets/assets/agent-trust-copy-DBtiOpFu.js +0 -1
  149. package/assets/assets/extract-error-message-D_ptq0tW.js +0 -1
  150. package/assets/assets/index-fN5qDR8H.js +0 -60
  151. package/assets/assets/react-query-CxeygwoL.js +0 -1
  152. package/dist/intelligence-service-LCTP5BC7.js +0 -16
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-EGUJNHAZ.js";
4
- import "./chunk-5KDJJO2N.js";
3
+ } from "./chunk-TCANF22P.js";
4
+ import "./chunk-A6DKZ4KQ.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  CliError,
8
8
  isMachineFormat,
9
9
  printCliError
10
10
  } from "./chunk-HGMYEDAQ.js";
11
- import "./chunk-Q2SJRZA3.js";
11
+ import "./chunk-YKLYWVLL.js";
12
12
  import "./chunk-MLKGABMK.js";
13
13
 
14
14
  // src/commands/agent-transcript.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-EGUJNHAZ.js";
4
- import "./chunk-5KDJJO2N.js";
3
+ } from "./chunk-TCANF22P.js";
4
+ import "./chunk-A6DKZ4KQ.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  CliError,
@@ -13,7 +13,7 @@ import {
13
13
  formatPercent,
14
14
  formatSignedPointDelta,
15
15
  queryClassFilterSchema
16
- } from "./chunk-Q2SJRZA3.js";
16
+ } from "./chunk-YKLYWVLL.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
 
19
19
  // src/commands/analytics.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-EGUJNHAZ.js";
4
- import "./chunk-5KDJJO2N.js";
3
+ } from "./chunk-TCANF22P.js";
4
+ import "./chunk-A6DKZ4KQ.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  CliError,
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  describeError
13
- } from "./chunk-Q2SJRZA3.js";
13
+ } from "./chunk-YKLYWVLL.js";
14
14
  import "./chunk-MLKGABMK.js";
15
15
 
16
16
  // src/commands/apply.ts
@@ -10,20 +10,20 @@ import {
10
10
  backfillSnapshotAttributionCommand,
11
11
  backfillTrafficClassificationCommand,
12
12
  replayQueryAuditLog
13
- } from "./chunk-LBZYPZAA.js";
14
- import "./chunk-N6AWKBLY.js";
15
- import "./chunk-5KDJJO2N.js";
13
+ } from "./chunk-X6XFWQCE.js";
14
+ import "./chunk-4INNOSWU.js";
15
+ import "./chunk-A6DKZ4KQ.js";
16
16
  import "./chunk-HGMYEDAQ.js";
17
- import "./chunk-TL52ELES.js";
18
- import "./chunk-BDLC3DFM.js";
17
+ import "./chunk-DPKA5CWK.js";
18
+ import "./chunk-Y35D3ZCH.js";
19
19
  import {
20
20
  backfillProjectAnswerMentions,
21
21
  backfillProjectAnswerMentionsInChunks
22
- } from "./chunk-4VMHN5LL.js";
23
- import "./chunk-IR3MYKIA.js";
24
- import "./chunk-IPOYH4WE.js";
25
- import "./chunk-ZQGWB7VJ.js";
26
- import "./chunk-Q2SJRZA3.js";
22
+ } from "./chunk-HSOZSLIZ.js";
23
+ import "./chunk-VL4AZGUA.js";
24
+ import "./chunk-YW2IQEWS.js";
25
+ import "./chunk-ZEWOPHTA.js";
26
+ import "./chunk-YKLYWVLL.js";
27
27
  import "./chunk-MLKGABMK.js";
28
28
  export {
29
29
  activeQueriesAt,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-EGUJNHAZ.js";
4
- import "./chunk-5KDJJO2N.js";
3
+ } from "./chunk-TCANF22P.js";
4
+ import "./chunk-A6DKZ4KQ.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -17,7 +17,7 @@ import {
17
17
  backlinkSourceSchema,
18
18
  formatPercent,
19
19
  formatRunErrorOneLine
20
- } from "./chunk-Q2SJRZA3.js";
20
+ } from "./chunk-YKLYWVLL.js";
21
21
  import "./chunk-MLKGABMK.js";
22
22
 
23
23
  // src/commands/backlinks.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-EGUJNHAZ.js";
4
- import "./chunk-5KDJJO2N.js";
3
+ } from "./chunk-TCANF22P.js";
4
+ import "./chunk-A6DKZ4KQ.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -14,7 +14,7 @@ import {
14
14
  describeError,
15
15
  formatPercent,
16
16
  formatRunErrorOneLine
17
- } from "./chunk-Q2SJRZA3.js";
17
+ } from "./chunk-YKLYWVLL.js";
18
18
  import "./chunk-MLKGABMK.js";
19
19
 
20
20
  // src/commands/bing.ts
@@ -452,16 +452,30 @@ async function bingSync(project, opts) {
452
452
  }
453
453
  console.log(current.status === "partial" ? `Bing data sync finished with some sections missing: ${current.error ? formatRunErrorOneLine(current.error) : "see the run for details"}` : "Bing data sync completed.");
454
454
  }
455
+ function windowOption(value) {
456
+ return value === void 0 ? void 0 : value;
457
+ }
458
+ function trafficComparisonLines(comparison) {
459
+ if (!comparison) return [" No comparison period."];
460
+ const basis = comparison.basis === "split-window" ? `last ${comparison.days} days vs the ${comparison.days} days before, inside this window` : `vs prior ${comparison.days} days`;
461
+ const pct = (ratio) => ratio === null ? "n/a" : `${ratio >= 0 ? "+" : ""}${formatPercent(ratio)}`;
462
+ return [
463
+ ` Change, ${basis}:`,
464
+ ` clicks ${pct(comparison.change.clicks)} (${comparison.prior.clicks} -> ${comparison.trailing.clicks})`,
465
+ ` impressions ${pct(comparison.change.impressions)} (${comparison.prior.impressions} -> ${comparison.trailing.impressions})`
466
+ ];
467
+ }
455
468
  async function bingTraffic(project, opts) {
456
469
  const client = getClient();
457
- const result = await client.bingTraffic(project, { startDate: opts.startDate, endDate: opts.endDate, days: opts.days });
470
+ const result = await client.bingTraffic(project, { startDate: opts.startDate, endDate: opts.endDate, days: opts.days, window: windowOption(opts.window) });
458
471
  if (printJson(opts.format, result, result.rows.map((row) => ({ project, ...row })))) return;
459
472
  if (result.rows.length === 0) {
460
473
  console.log('No stored Bing traffic. Run "canonry bing sync <project>" first.');
461
474
  return;
462
475
  }
463
- console.log(`Bing search traffic, ${windowLabel(result.window)}: ${result.totals.clicks} clicks, ${result.totals.impressions} impressions, ${formatPercent(result.totals.ctr)} CTR
464
- `);
476
+ console.log(`Bing search traffic, ${windowLabel(result.window)}: ${result.totals.clicks} clicks, ${result.totals.impressions} impressions, ${formatPercent(result.totals.ctr)} CTR`);
477
+ for (const line of trafficComparisonLines(result.periodComparison)) console.log(line);
478
+ console.log("");
465
479
  console.log(` ${pad("DATE", 12)}${pad("CLICKS", 9)}${pad("IMPR", 10)}CTR`);
466
480
  for (const row of result.rows) {
467
481
  console.log(` ${pad(row.date, 12)}${pad(row.clicks, 9)}${pad(row.impressions, 10)}${formatPercent(row.ctr)}`);
@@ -473,7 +487,9 @@ async function bingQueries(project, opts) {
473
487
  startDate: opts.startDate,
474
488
  endDate: opts.endDate,
475
489
  days: opts.days,
490
+ window: windowOption(opts.window),
476
491
  query: opts.query,
492
+ match: opts.exact ? "exact" : void 0,
477
493
  groupBy: opts.groupBy,
478
494
  limit: opts.limit,
479
495
  offset: opts.offset
@@ -488,7 +504,9 @@ async function bingPages(project, opts) {
488
504
  startDate: opts.startDate,
489
505
  endDate: opts.endDate,
490
506
  days: opts.days,
507
+ window: windowOption(opts.window),
491
508
  page: opts.page,
509
+ match: opts.exact ? "exact" : void 0,
492
510
  groupBy: opts.groupBy,
493
511
  limit: opts.limit,
494
512
  offset: opts.offset
@@ -516,8 +534,16 @@ function printWeeklyTable(noun, groupBy, keyed, weekly, meta) {
516
534
  return;
517
535
  }
518
536
  const width = noun === "page" ? 60 : 42;
519
- console.log(`Bing ${noun} stats, ${windowLabel(meta.window)} (${meta.totalMatching} ${noun === "page" ? "pages" : "queries"}; Bing reports these per week):
520
- `);
537
+ console.log(`Bing ${noun} stats, ${windowLabel(meta.window)} (${meta.totalMatching} ${noun === "page" ? "pages" : "queries"}; Bing reports these per week):`);
538
+ if (meta.totals) {
539
+ console.log(` All matching: ${meta.totals.clicks} clicks, ${meta.totals.impressions} impressions, position ${position(meta.totals.avgImpressionPosition)}`);
540
+ }
541
+ if (meta.comparison) {
542
+ const change = meta.comparison.difference;
543
+ const signed = (n) => `${n >= 0 ? "+" : ""}${n}`;
544
+ console.log(` vs prior ${meta.comparison.days} days: clicks ${signed(change.clicks)}, impressions ${signed(change.impressions)}, position ${change.avgImpressionPosition === null ? "n/a" : signed(change.avgImpressionPosition)}`);
545
+ }
546
+ console.log("");
521
547
  console.log(` ${pad(noun.toUpperCase(), width)}${pad("CLICKS", 9)}${pad("IMPR", 10)}${pad("CTR", 9)}${pad("POS", 7)}WEEKS`);
522
548
  for (const row of keyed) {
523
549
  console.log(` ${pad(row.key, width)}${pad(row.clicks, 9)}${pad(row.impressions, 10)}${pad(formatPercent(row.ctr), 9)}${pad(position(row.avgImpressionPosition), 7)}${row.weeks}`);
@@ -1,25 +1,25 @@
1
1
  import {
2
2
  trackCliConnection
3
- } from "./chunk-UVXQQZB5.js";
3
+ } from "./chunk-J7V7TYX7.js";
4
4
  import {
5
5
  answerServiceDescriptors
6
- } from "./chunk-CYQCO5NY.js";
6
+ } from "./chunk-3IC7PRTW.js";
7
7
  import {
8
8
  outcomeFailure
9
- } from "./chunk-OKLDBQYW.js";
9
+ } from "./chunk-RE24YYIY.js";
10
10
  import {
11
11
  isLoopbackBindHost
12
12
  } from "./chunk-TSENU4GG.js";
13
13
  import {
14
14
  registeredProviderNames
15
- } from "./chunk-DILCH7RL.js";
15
+ } from "./chunk-3H5VURTU.js";
16
16
  import {
17
17
  isTelemetryEnabled,
18
18
  recordInstallRef
19
- } from "./chunk-4A4X7VXE.js";
19
+ } from "./chunk-WPTCWNA6.js";
20
20
  import {
21
21
  createApiClient
22
- } from "./chunk-EGUJNHAZ.js";
22
+ } from "./chunk-TCANF22P.js";
23
23
  import {
24
24
  configExists,
25
25
  getAnswerServiceEnv,
@@ -30,7 +30,7 @@ import {
30
30
  loadConfigRaw,
31
31
  saveConfig,
32
32
  withBootstrapProviderDefaults
33
- } from "./chunk-5KDJJO2N.js";
33
+ } from "./chunk-A6DKZ4KQ.js";
34
34
  import "./chunk-AOJU5LKX.js";
35
35
  import {
36
36
  CliError,
@@ -38,17 +38,17 @@ import {
38
38
  isMachineFormat,
39
39
  systemError
40
40
  } from "./chunk-HGMYEDAQ.js";
41
- import "./chunk-IPOYH4WE.js";
41
+ import "./chunk-YW2IQEWS.js";
42
42
  import {
43
43
  apiKeys,
44
44
  createClient,
45
45
  dashboardSessions,
46
46
  migrate
47
- } from "./chunk-ZQGWB7VJ.js";
47
+ } from "./chunk-ZEWOPHTA.js";
48
48
  import {
49
49
  ProviderNames,
50
50
  ProviderReloadErrorReasons
51
- } from "./chunk-Q2SJRZA3.js";
51
+ } from "./chunk-YKLYWVLL.js";
52
52
  import "./chunk-MLKGABMK.js";
53
53
 
54
54
  // src/commands/bootstrap.ts
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  trackCliConnection
3
- } from "./chunk-UVXQQZB5.js";
3
+ } from "./chunk-J7V7TYX7.js";
4
4
  import {
5
5
  outcomeFailure
6
- } from "./chunk-OKLDBQYW.js";
7
- import "./chunk-4A4X7VXE.js";
6
+ } from "./chunk-RE24YYIY.js";
7
+ import "./chunk-WPTCWNA6.js";
8
8
  import {
9
9
  createApiClient
10
- } from "./chunk-EGUJNHAZ.js";
10
+ } from "./chunk-TCANF22P.js";
11
11
  import {
12
12
  loadConfig,
13
13
  saveConfigPatch
14
- } from "./chunk-5KDJJO2N.js";
14
+ } from "./chunk-A6DKZ4KQ.js";
15
15
  import "./chunk-AOJU5LKX.js";
16
16
  import {
17
17
  CliError,
18
18
  isMachineFormat
19
19
  } from "./chunk-HGMYEDAQ.js";
20
- import "./chunk-IPOYH4WE.js";
20
+ import "./chunk-YW2IQEWS.js";
21
21
  import {
22
22
  describeError
23
- } from "./chunk-Q2SJRZA3.js";
23
+ } from "./chunk-YKLYWVLL.js";
24
24
  import "./chunk-MLKGABMK.js";
25
25
 
26
26
  // src/commands/cdp.ts
@@ -2,18 +2,18 @@ import {
2
2
  configExists,
3
3
  loadConfigRaw,
4
4
  saveConfigPatch
5
- } from "./chunk-5KDJJO2N.js";
5
+ } from "./chunk-A6DKZ4KQ.js";
6
6
  import {
7
7
  BUNDLED_SKILL_NAMES,
8
8
  installSkills
9
- } from "./chunk-D354CQ6T.js";
9
+ } from "./chunk-MXGME7NG.js";
10
10
  import {
11
11
  PACKAGE_VERSION
12
12
  } from "./chunk-AOJU5LKX.js";
13
13
  import {
14
14
  SKILL_MANIFEST_FILENAME,
15
15
  SkillsClients
16
- } from "./chunk-Q2SJRZA3.js";
16
+ } from "./chunk-YKLYWVLL.js";
17
17
 
18
18
  // src/skills-autosync.ts
19
19
  import fs from "fs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  API_PROVIDER_NAMES,
3
3
  ProviderNames
4
- } from "./chunk-Q2SJRZA3.js";
4
+ } from "./chunk-YKLYWVLL.js";
5
5
 
6
6
  // src/provider-registration.ts
7
7
  function isApiProviderRegistrable(name, entry) {
@@ -28,7 +28,7 @@ import {
28
28
  unknownUsageObservation,
29
29
  usdToMicros,
30
30
  withRetry
31
- } from "./chunk-Q2SJRZA3.js";
31
+ } from "./chunk-YKLYWVLL.js";
32
32
 
33
33
  // ../provider-answer-services/src/core/http.ts
34
34
  var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  createLogger
3
- } from "./chunk-BDLC3DFM.js";
3
+ } from "./chunk-Y35D3ZCH.js";
4
4
  import {
5
5
  addLikelyFakeAgentHits,
6
6
  correctBackgroundCallJourneys,
7
7
  mergeSplitJourneyVisitors,
8
8
  writeUnrecognizedAgentBuckets
9
- } from "./chunk-4VMHN5LL.js";
9
+ } from "./chunk-HSOZSLIZ.js";
10
10
  import {
11
11
  AGENT_TRUST_RULES_VERSION,
12
12
  BROWSER_SHAPED_AGENT_MARKERS,
@@ -23,7 +23,7 @@ import {
23
23
  isSelfTraffic,
24
24
  normalizeTrafficPathPattern,
25
25
  unrecognizedAgentName
26
- } from "./chunk-IR3MYKIA.js";
26
+ } from "./chunk-VL4AZGUA.js";
27
27
  import {
28
28
  RawEventSampleEventTypes,
29
29
  agentJourneyCaptureDays,
@@ -36,7 +36,7 @@ import {
36
36
  rawEventSamples,
37
37
  trafficReclassificationState,
38
38
  unrecognizedAgentEventsHourly
39
- } from "./chunk-ZQGWB7VJ.js";
39
+ } from "./chunk-ZEWOPHTA.js";
40
40
  import {
41
41
  AI_ENGINE_DOMAINS,
42
42
  AI_ENGINE_SELF_DOMAINS,
@@ -69,7 +69,7 @@ import {
69
69
  retryAfterDelayMs,
70
70
  usageCount,
71
71
  withRetry
72
- } from "./chunk-Q2SJRZA3.js";
72
+ } from "./chunk-YKLYWVLL.js";
73
73
 
74
74
  // ../provider-openai/src/normalize.ts
75
75
  import OpenAI from "openai";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-EGUJNHAZ.js";
3
+ } from "./chunk-TCANF22P.js";
4
4
  import {
5
5
  emitJsonl
6
6
  } from "./chunk-Z7IUAJOF.js";
7
7
  import {
8
8
  measurementDraftOperationSchema,
9
9
  runMeasurementDraftAction
10
- } from "./chunk-FL76YWYN.js";
10
+ } from "./chunk-DX46HM7S.js";
11
11
  import {
12
12
  isMachineFormat,
13
13
  systemError
@@ -37,7 +37,7 @@ import {
37
37
  unattributedAnswersLabel,
38
38
  uncheckedSourcesLabel,
39
39
  visibilityReportRequestSchema
40
- } from "./chunk-Q2SJRZA3.js";
40
+ } from "./chunk-YKLYWVLL.js";
41
41
 
42
42
  // src/commands/measurement-plan.ts
43
43
  import crypto from "crypto";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registeredProviderNames
3
- } from "./chunk-DILCH7RL.js";
3
+ } from "./chunk-3H5VURTU.js";
4
4
  import {
5
5
  configExists,
6
6
  loadConfigRaw
7
- } from "./chunk-5KDJJO2N.js";
7
+ } from "./chunk-A6DKZ4KQ.js";
8
8
 
9
9
  // src/setup-state.ts
10
10
  import fs from "fs";
@@ -28,7 +28,7 @@ async function buildSetupState() {
28
28
  }
29
29
  if (dbPath && fs.existsSync(dbPath)) {
30
30
  try {
31
- const { createClient, projects, queries: queriesTable } = await import("./src-4PAYI7GE.js");
31
+ const { createClient, projects, queries: queriesTable } = await import("./src-DYJHW2HG.js");
32
32
  const db = createClient(dbPath);
33
33
  project_count = db.select({ id: projects.id }).from(projects).all().length;
34
34
  const firstQuery = db.select({ id: queriesTable.id }).from(queriesTable).limit(1).all();
@@ -47,7 +47,7 @@ function queueServeHandoff() {
47
47
  async function runPendingServeHandoff(format) {
48
48
  if (!pendingServeHandoff) return;
49
49
  pendingServeHandoff = false;
50
- const { serveCommand } = await import("./serve-T24QKEUY.js");
50
+ const { serveCommand } = await import("./serve-SDU77HVC.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -20,7 +20,7 @@ import {
20
20
  resolveProviderModel,
21
21
  schedulableRunKindSchema,
22
22
  sentimentEvaluatorProviderSchema
23
- } from "./chunk-Q2SJRZA3.js";
23
+ } from "./chunk-YKLYWVLL.js";
24
24
 
25
25
  // ../config/src/index.ts
26
26
  import { z as z5 } from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hostMatchesDomain
3
- } from "./chunk-Q2SJRZA3.js";
3
+ } from "./chunk-YKLYWVLL.js";
4
4
 
5
5
  // src/citation-utils.ts
6
6
  function pickProjectCitedDomain(citedDomains, projectDomains) {
@@ -23,7 +23,7 @@ import {
23
23
  measurementDraftUpsertGroupRequestSchema,
24
24
  measurementDraftUpsertMarketRequestSchema,
25
25
  measurementDraftUpsertTargetRequestSchema
26
- } from "./chunk-Q2SJRZA3.js";
26
+ } from "./chunk-YKLYWVLL.js";
27
27
 
28
28
  // src/measurement-draft-actions.ts
29
29
  import { z } from "zod";
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-ZQGWB7VJ.js";
8
+ } from "./chunk-ZEWOPHTA.js";
9
9
  import {
10
10
  SITE_CRAWL_GRAPH_MAX_EDGES,
11
11
  SITE_CRAWL_GRAPH_MAX_NODES,
@@ -15,7 +15,7 @@ import {
15
15
  factorStatusFromDistribution,
16
16
  factorStatusFromScore,
17
17
  roundPreservingTotal
18
- } from "./chunk-Q2SJRZA3.js";
18
+ } from "./chunk-YKLYWVLL.js";
19
19
 
20
20
  // src/site-audit-factors.ts
21
21
  function recordedSharePct(factor) {
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  runWithUsageTags
3
- } from "./chunk-EGUJNHAZ.js";
3
+ } from "./chunk-TCANF22P.js";
4
4
  import {
5
5
  CanonryMcpToolNames,
6
6
  canonryMcpTools
7
- } from "./chunk-O7OZVZWR.js";
7
+ } from "./chunk-VBM6T5ZP.js";
8
8
  import {
9
9
  CliError
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-4VMHN5LL.js";
13
+ } from "./chunk-HSOZSLIZ.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-Q2SJRZA3.js";
26
+ } from "./chunk-YKLYWVLL.js";
27
27
 
28
28
  // src/agent/tools.ts
29
29
  import { Type as Type2 } from "@earendil-works/pi-ai";
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-2KL2XHS6.js";
8
+ } from "./chunk-GDEYX6E3.js";
9
9
  import {
10
10
  CANONRY_MCP_TOOLKITS,
11
11
  resolveAeroSkillDir
@@ -23,18 +23,18 @@ import {
23
23
  resolveApiKeyFor,
24
24
  resolveModelForProvider,
25
25
  validateAgentProviderRegistry
26
- } from "./chunk-5KDJJO2N.js";
26
+ } from "./chunk-A6DKZ4KQ.js";
27
27
  import {
28
28
  CanonryMcpToolNames,
29
29
  canonryMcpTools
30
- } from "./chunk-O7OZVZWR.js";
30
+ } from "./chunk-VBM6T5ZP.js";
31
31
  import {
32
32
  createLogger
33
- } from "./chunk-BDLC3DFM.js";
33
+ } from "./chunk-Y35D3ZCH.js";
34
34
  import {
35
35
  agentToolEvents,
36
36
  llmUsageEvents
37
- } from "./chunk-ZQGWB7VJ.js";
37
+ } from "./chunk-ZEWOPHTA.js";
38
38
  import {
39
39
  MeasurementPortfolioLists,
40
40
  SeoCapabilities,
@@ -43,7 +43,7 @@ import {
43
43
  describeError,
44
44
  validationError,
45
45
  visibilityReportRequestSchema
46
- } from "./chunk-Q2SJRZA3.js";
46
+ } from "./chunk-YKLYWVLL.js";
47
47
 
48
48
  // src/agent/session.ts
49
49
  import fs2 from "fs";