@canonry/canonry 7.60.0 → 7.61.1

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 (134) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +1 -0
  2. package/assets/assets/{AgentSetupPage-xAe2RSTQ.js → AgentSetupPage-CCMNQwRE.js} +1 -1
  3. package/assets/assets/{AuditHistoryPanel-DRGMxc1o.js → AuditHistoryPanel-B8mIRI3I.js} +1 -1
  4. package/assets/assets/{BacklinksPage-OS6r_MtQ.js → BacklinksPage-BNLyIR97.js} +1 -1
  5. package/assets/assets/{HistoryPage-RDxUN7rD.js → HistoryPage-DSr9KE16.js} +1 -1
  6. package/assets/assets/InfoTooltip-BbdxCAup.js +1 -0
  7. package/assets/assets/{MeasurementPropertyPage-BVAmJBKa.js → MeasurementPropertyPage-BTg-SFW7.js} +1 -1
  8. package/assets/assets/{ProjectPage-BWY9eFFx.js → ProjectPage-SqE0fkEq.js} +7 -7
  9. package/assets/assets/{RunsPage-Fb7IM6iV.js → RunsPage-gJR17ho1.js} +1 -1
  10. package/assets/assets/{SettingsPage-Dz_agQCf.js → SettingsPage-DY5f_oN4.js} +1 -1
  11. package/assets/assets/{SiteHealthSection-TXp2Cszl.js → SiteHealthSection-BYx91hP-.js} +2 -2
  12. package/assets/assets/ToneBadge-C3S7aVf3.js +60 -0
  13. package/assets/assets/{TrafficPage-BKfgooKl.js → TrafficPage-CCXH5nhh.js} +1 -1
  14. package/assets/assets/{TrafficSourceDetailPage-C1HM_4Mh.js → TrafficSourceDetailPage-DTjCsu4-.js} +1 -1
  15. package/assets/assets/{account-context-sj3dKq-a.js → account-context-DozTQM44.js} +1 -1
  16. package/assets/assets/{card-DKV0mNmm.js → card-D8MU7RYV.js} +1 -1
  17. package/assets/assets/{extract-error-message-Tfdo6vAJ.js → extract-error-message-CsVYPTyt.js} +1 -1
  18. package/assets/assets/{format-helpers-BagbvnfZ.js → format-helpers-CWBooMJJ.js} +1 -1
  19. package/assets/assets/{index-7G0DHKIO.js → index-D5o-caTl.js} +4 -4
  20. package/assets/assets/index-DqhMdZUM.css +1 -0
  21. package/assets/assets/{query-client-7P_Wczfa.js → query-client-DbxlHfUm.js} +1 -1
  22. package/assets/assets/{react-query-agN8P-yg.js → react-query-D4ZSMg7h.js} +1 -1
  23. package/assets/assets/{react-sigma_core.esm.min-CHz1PIYq.js → react-sigma_core.esm.min-CSRp4hew.js} +1 -1
  24. package/assets/assets/{service-CAV4dMit.js → service-CYzJmCXU.js} +1 -1
  25. package/assets/index.html +9 -9
  26. package/dist/{ads-A42JBQ5Q.js → ads-Z2SNR2F5.js} +3 -3
  27. package/dist/{agent-ZKKHPMOB.js → agent-UUDYXXRD.js} +7 -7
  28. package/dist/{agent-ask-SMV76QZM.js → agent-ask-KCZKPBY7.js} +3 -3
  29. package/dist/{agent-conversations-O5QA3MHR.js → agent-conversations-CDQA7HOU.js} +3 -3
  30. package/dist/{agent-memory-ZRJQ6SZU.js → agent-memory-MER75L4L.js} +3 -3
  31. package/dist/{agent-providers-EOXIPRXN.js → agent-providers-RH7W5HYA.js} +3 -3
  32. package/dist/{agent-transcript-4TB2VI5E.js → agent-transcript-VU2VHSZ6.js} +3 -3
  33. package/dist/{analytics-KSHS32RJ.js → analytics-BDVOFX6O.js} +30 -8
  34. package/dist/{apply-4ZZMONED.js → apply-XJULCLGT.js} +3 -3
  35. package/dist/{backfill-DJIIN5ZR.js → backfill-SCB3KOTF.js} +9 -9
  36. package/dist/{backlinks-XIAPORR5.js → backlinks-HCSL6KKT.js} +3 -3
  37. package/dist/{bing-QDZXI334.js → bing-AEUPBLV6.js} +3 -3
  38. package/dist/{bootstrap-7RAGKHJZ.js → bootstrap-J73OTQWI.js} +10 -10
  39. package/dist/{cdp-3OX3WGWN.js → cdp-2UQER2VR.js} +7 -7
  40. package/dist/{chunk-O7KIDW4H.js → chunk-34HGKT6I.js} +1 -1
  41. package/dist/{chunk-Z7WG6F7Q.js → chunk-3A7LI5KI.js} +3 -3
  42. package/dist/{chunk-QRC6SDPF.js → chunk-3E7NFLYB.js} +338 -336
  43. package/dist/{chunk-7KEIZ5OO.js → chunk-4UTPB5KB.js} +8 -8
  44. package/dist/{chunk-IDPAYZHR.js → chunk-5AV2OUCJ.js} +1 -1
  45. package/dist/{chunk-GLFE3Q3C.js → chunk-5PYPNDIE.js} +3 -3
  46. package/dist/{chunk-FCPIOH6P.js → chunk-7VEXNHRX.js} +1 -1
  47. package/dist/{chunk-HV5MGQYI.js → chunk-B5KK54RE.js} +3 -3
  48. package/dist/{chunk-OA6N3BI7.js → chunk-BKNIXYMI.js} +4 -4
  49. package/dist/{chunk-QEG7BSLH.js → chunk-CZSHCZHW.js} +1 -1
  50. package/dist/{chunk-XJF7LMGU.js → chunk-EKY6GHJ4.js} +4 -4
  51. package/dist/{chunk-Z63ZR6AD.js → chunk-FWRHDY4R.js} +1 -1
  52. package/dist/{chunk-L7WQTD3D.js → chunk-G3DZSUYD.js} +5 -5
  53. package/dist/{chunk-UHE4RLFW.js → chunk-G3ZNUINX.js} +1 -1
  54. package/dist/{chunk-DUYENNUI.js → chunk-GAA7JGB7.js} +2 -2
  55. package/dist/{chunk-3JV3PWNA.js → chunk-HD7AZIOP.js} +1 -1
  56. package/dist/{chunk-JDL4QAPT.js → chunk-IG6ISQYD.js} +12 -2
  57. package/dist/{chunk-66C7YITH.js → chunk-KX5IRN55.js} +1 -1
  58. package/dist/{chunk-D7ZU5LMK.js → chunk-MRNMDQRB.js} +1 -1
  59. package/dist/{chunk-QCSNNKFI.js → chunk-P5DZ56CR.js} +1 -1
  60. package/dist/{chunk-FKQPVB5B.js → chunk-QGXPQHDN.js} +20 -20
  61. package/dist/{chunk-4IV4FO3O.js → chunk-QP36LXT5.js} +36 -11
  62. package/dist/{chunk-7XSGAPN5.js → chunk-RL7LPPFU.js} +7 -6
  63. package/dist/{chunk-TLNHDCJF.js → chunk-SA4CG775.js} +2 -2
  64. package/dist/{chunk-2IBFY7KQ.js → chunk-SQ6AOE57.js} +2 -2
  65. package/dist/{chunk-SJNF5GN2.js → chunk-SZXYGJMI.js} +5 -4
  66. package/dist/{chunk-RLXNZRHD.js → chunk-TGZKOIZ3.js} +5 -5
  67. package/dist/{chunk-I32IFAB3.js → chunk-TYWTIYYM.js} +3 -3
  68. package/dist/{chunk-ADY24WBX.js → chunk-V7Q2FUHQ.js} +4 -4
  69. package/dist/{chunk-HGBIJIVM.js → chunk-VCSJHXW6.js} +1 -1
  70. package/dist/{chunk-7HZ7KRHT.js → chunk-VHHFAAMI.js} +1 -1
  71. package/dist/{chunk-ZK5WIVGA.js → chunk-W5FR6AJP.js} +2 -2
  72. package/dist/{chunk-NQTUPEBQ.js → chunk-XCA546YC.js} +1 -1
  73. package/dist/{chunk-G7VJEPDZ.js → chunk-YHTU4XBR.js} +2 -2
  74. package/dist/{citations-L3HFNQVU.js → citations-3X5EJNJ3.js} +3 -3
  75. package/dist/{cli-catalog-DJPRREDK.js → cli-catalog-F3IOEPJK.js} +3 -3
  76. package/dist/{cli-commands-4KG4X76Z.js → cli-commands-J7CI2RNW.js} +7 -7
  77. package/dist/cli.js +13 -13
  78. package/dist/{competitor-Q5LZ26U5.js → competitor-CUPGN4NZ.js} +3 -3
  79. package/dist/{content-WRVFNQSO.js → content-FYQT7V5A.js} +3 -3
  80. package/dist/{dashboard-GBP2T2AG.js → dashboard-WHWMMX7W.js} +6 -6
  81. package/dist/{demo-JMLMPLJ6.js → demo-CNTR3ZXS.js} +1 -1
  82. package/dist/{demo-server-AOVPBGZ7.js → demo-server-ZOV5HCDE.js} +11 -11
  83. package/dist/{discover-SKUNZE4Y.js → discover-4IGXLRRE.js} +3 -3
  84. package/dist/{discover-eval-57BEDSQN.js → discover-eval-DGLZO5MD.js} +3 -3
  85. package/dist/{doctor-DMLJGH6G.js → doctor-3MFTUIEU.js} +3 -3
  86. package/dist/{evidence-J4XF4W7O.js → evidence-ANE4SFP5.js} +3 -3
  87. package/dist/{export-cmd-3JXT2YAP.js → export-cmd-X6S5F463.js} +3 -3
  88. package/dist/{ga-KHILAPMC.js → ga-2UKFAVDJ.js} +3 -3
  89. package/dist/{gbp-PHOFQZNT.js → gbp-Q3V3SQMV.js} +3 -3
  90. package/dist/{google-QOLM2NBI.js → google-D4O4JCM4.js} +4 -4
  91. package/dist/{google-marketing-N37WUWNL.js → google-marketing-6L5327YK.js} +1 -1
  92. package/dist/{health-cmd-2FUEPUJZ.js → health-cmd-7TPQHGKK.js} +3 -3
  93. package/dist/{history-MOSRCLAD.js → history-NNUOPNA7.js} +3 -3
  94. package/dist/index.d.ts +6 -6
  95. package/dist/index.js +24 -24
  96. package/dist/{init-V6ER2PJV.js → init-NCJ6KXTS.js} +11 -11
  97. package/dist/{insights-F3MT66IV.js → insights-DDAP3MRC.js} +3 -3
  98. package/dist/intelligence-service-O4BALXZK.js +15 -0
  99. package/dist/{journeys-DNS3EZNK.js → journeys-I7H25PPF.js} +3 -3
  100. package/dist/{keys-NPOLKCWZ.js → keys-YUJNNNV3.js} +3 -3
  101. package/dist/{keyword-AXEPIJQ7.js → keyword-25DDYT45.js} +3 -3
  102. package/dist/{logs-ECEDVUTX.js → logs-FKPJ4L5R.js} +3 -3
  103. package/dist/{mcp-HUIRIY74.js → mcp-ZPLVNLL3.js} +2 -2
  104. package/dist/mcp.js +9 -9
  105. package/dist/{measurement-plan-5Y2IHH43.js → measurement-plan-CDY63CLU.js} +5 -5
  106. package/dist/{notify-PIFCJ7WM.js → notify-67IIWOSF.js} +3 -3
  107. package/dist/{organic-evidence-S2IE5XV6.js → organic-evidence-P2BQK2BV.js} +3 -3
  108. package/dist/{overview-TZT7C4U4.js → overview-WHSTSNS2.js} +4 -4
  109. package/dist/{project-HIY673Y5.js → project-7AMXFZMD.js} +3 -3
  110. package/dist/{query-FUJIMFJQ.js → query-RLKE6JHY.js} +3 -3
  111. package/dist/{research-ECGEXWID.js → research-PDOE77HZ.js} +3 -3
  112. package/dist/{results-export-7DRGFNUX.js → results-export-5VKTQLOR.js} +3 -3
  113. package/dist/{run-4JEDD5VT.js → run-QXCB4AWO.js} +4 -4
  114. package/dist/{schedule-NRHQXHTW.js → schedule-NDM2GBBW.js} +3 -3
  115. package/dist/{search-M7PNZZZL.js → search-DDRSJUWZ.js} +3 -3
  116. package/dist/{serve-RXLQEALQ.js → serve-YWBWBUBR.js} +25 -25
  117. package/dist/{session-MCSZQR5V.js → session-HCGHUWAV.js} +12 -12
  118. package/dist/{settings-JXOYI7VV.js → settings-Q2ZOEA7H.js} +3 -3
  119. package/dist/{skills-SRUXD2PV.js → skills-PKSEX44J.js} +2 -2
  120. package/dist/{snapshot-7N4BEGGM.js → snapshot-URNBVDTA.js} +3 -3
  121. package/dist/{src-ZAAE3NIM.js → src-MAMJVGSJ.js} +2 -2
  122. package/dist/{status-5OYYSMAY.js → status-DDXVX4KE.js} +4 -4
  123. package/dist/{technical-aeo-464OUUWT.js → technical-aeo-OS6KQXAP.js} +3 -3
  124. package/dist/{telemetry-BZFNXACR.js → telemetry-G7GX2LIY.js} +4 -4
  125. package/dist/{tools-YVWC3NTG.js → tools-C3I2X3IS.js} +11 -11
  126. package/dist/{traffic-WXJHRB7H.js → traffic-A4QW7455.js} +5 -5
  127. package/dist/{users-U2UNKGDY.js → users-4WPDDCCR.js} +3 -3
  128. package/dist/{visibility-stats-AHGME46N.js → visibility-stats-5BY7GVUV.js} +3 -3
  129. package/dist/{wordpress-FUVFZKH2.js → wordpress-T5EYN2WX.js} +3 -3
  130. package/package.json +1 -1
  131. package/assets/assets/InfoTooltip-DV3_9Qp1.js +0 -1
  132. package/assets/assets/ToneBadge-DZzQvXs_.js +0 -60
  133. package/assets/assets/index-DElT2Fss.css +0 -1
  134. package/dist/intelligence-service-S5DI74LD.js +0 -15
@@ -7,27 +7,27 @@ import {
7
7
  reparseStoredResult4,
8
8
  reparseStoredResult5,
9
9
  resolveStoredApiResponse
10
- } from "./chunk-DUYENNUI.js";
10
+ } from "./chunk-GAA7JGB7.js";
11
11
  import {
12
12
  loadConfig
13
- } from "./chunk-QEG7BSLH.js";
13
+ } from "./chunk-CZSHCZHW.js";
14
14
  import {
15
15
  isMachineFormat
16
16
  } from "./chunk-HGMYEDAQ.js";
17
17
  import {
18
18
  determineCitationState
19
- } from "./chunk-UHE4RLFW.js";
19
+ } from "./chunk-G3ZNUINX.js";
20
20
  import {
21
21
  backfillProjectAnswerMentions,
22
22
  competitorIdentityColumns,
23
23
  createRunCompetitorResolver,
24
24
  readMarketCompetitorNames,
25
25
  refreshSnapshotMentionIdentity
26
- } from "./chunk-4IV4FO3O.js";
26
+ } from "./chunk-QP36LXT5.js";
27
27
  import {
28
28
  classifyAiUserFetch,
29
29
  classifyCrawler
30
- } from "./chunk-O7KIDW4H.js";
30
+ } from "./chunk-34HGKT6I.js";
31
31
  import {
32
32
  aiUserFetchEventsHourly,
33
33
  auditLog,
@@ -42,7 +42,7 @@ import {
42
42
  querySnapshots,
43
43
  rawEventSamples,
44
44
  runs
45
- } from "./chunk-3JV3PWNA.js";
45
+ } from "./chunk-HD7AZIOP.js";
46
46
  import {
47
47
  ProviderNames,
48
48
  RetrievalContracts,
@@ -59,7 +59,7 @@ import {
59
59
  extractRecommendedCompetitors,
60
60
  normalizeUrlPath,
61
61
  openRouterRouteModel
62
- } from "./chunk-JDL4QAPT.js";
62
+ } from "./chunk-IG6ISQYD.js";
63
63
 
64
64
  // src/commands/backfill.ts
65
65
  import { setImmediate as yieldToEventLoop } from "timers/promises";
@@ -437,7 +437,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
437
437
  }
438
438
  }
439
439
  async function backfillInsightsCommand(project, opts) {
440
- const { IntelligenceService } = await import("./intelligence-service-S5DI74LD.js");
440
+ const { IntelligenceService } = await import("./intelligence-service-O4BALXZK.js");
441
441
  const config = loadConfig();
442
442
  const db = createClient(config.database);
443
443
  migrate(db);
@@ -15,7 +15,7 @@ import {
15
15
  formatCanonryPluginUpdateHint,
16
16
  formatCanonryPluginVersionMismatch,
17
17
  skillsClientSchema
18
- } from "./chunk-JDL4QAPT.js";
18
+ } from "./chunk-IG6ISQYD.js";
19
19
 
20
20
  // src/commands/skills.ts
21
21
  import crypto from "crypto";
@@ -3,7 +3,7 @@ import {
3
3
  resolveCliAccess,
4
4
  resolveCliAccessForInvocation,
5
5
  windowOptions
6
- } from "./chunk-7HZ7KRHT.js";
6
+ } from "./chunk-VHHFAAMI.js";
7
7
  import {
8
8
  emitJsonl
9
9
  } from "./chunk-Z7IUAJOF.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-HGMYEDAQ.js";
15
15
  import {
16
16
  OperationAccesses
17
- } from "./chunk-JDL4QAPT.js";
17
+ } from "./chunk-IG6ISQYD.js";
18
18
 
19
19
  // src/cli-catalog.ts
20
20
  import { createRequire } from "module";
@@ -111,7 +111,7 @@ async function dispatchRegisteredCommand(args, fallbackFormat, specs) {
111
111
  const accessValue = accessFilterFromArgs(argsWithoutHelp);
112
112
  validateAccessFilter(accessValue);
113
113
  if (fallbackFormat !== "text") {
114
- const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-DJPRREDK.js");
114
+ const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-F3IOEPJK.js");
115
115
  const group2 = argsWithoutHelp.find((arg) => !arg.startsWith("--"));
116
116
  printCliCatalog2(specs, fallbackFormat, group2, accessValue);
117
117
  return true;
@@ -28,7 +28,7 @@ import {
28
28
  unknownUsageObservation,
29
29
  usdToMicros,
30
30
  withRetry
31
- } from "./chunk-JDL4QAPT.js";
31
+ } from "./chunk-IG6ISQYD.js";
32
32
 
33
33
  // ../provider-answer-services/src/core/http.ts
34
34
  var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-SJNF5GN2.js";
3
+ } from "./chunk-SZXYGJMI.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-D7ZU5LMK.js";
10
+ } from "./chunk-MRNMDQRB.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-JDL4QAPT.js";
40
+ } from "./chunk-IG6ISQYD.js";
41
41
 
42
42
  // src/commands/measurement-plan.ts
43
43
  import crypto from "crypto";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  runWithUsageTags
3
- } from "./chunk-SJNF5GN2.js";
3
+ } from "./chunk-SZXYGJMI.js";
4
4
  import {
5
5
  CanonryMcpToolNames,
6
6
  canonryMcpTools
7
- } from "./chunk-7XSGAPN5.js";
7
+ } from "./chunk-RL7LPPFU.js";
8
8
  import {
9
9
  CliError
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-4IV4FO3O.js";
13
+ } from "./chunk-QP36LXT5.js";
14
14
  import {
15
15
  DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
16
16
  MeasurementPortfolioLists,
@@ -20,7 +20,7 @@ import {
20
20
  formatPercent,
21
21
  ratioUnitSchema,
22
22
  truncateUtf16
23
- } from "./chunk-JDL4QAPT.js";
23
+ } from "./chunk-IG6ISQYD.js";
24
24
 
25
25
  // src/agent/tools.ts
26
26
  import { Type as Type2 } from "@earendil-works/pi-ai";
@@ -20,7 +20,7 @@ import {
20
20
  resolveProviderModel,
21
21
  schedulableRunKindSchema,
22
22
  sentimentEvaluatorProviderSchema
23
- } from "./chunk-JDL4QAPT.js";
23
+ } from "./chunk-IG6ISQYD.js";
24
24
 
25
25
  // ../config/src/index.ts
26
26
  import { z as z4 } from "zod";
@@ -2,13 +2,13 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-G7VJEPDZ.js";
5
+ } from "./chunk-YHTU4XBR.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-QEG7BSLH.js";
8
+ } from "./chunk-CZSHCZHW.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
- } from "./chunk-66C7YITH.js";
11
+ } from "./chunk-KX5IRN55.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-JDL4QAPT.js";
22
+ } from "./chunk-IG6ISQYD.js";
23
23
 
24
24
  // src/outcome-telemetry.ts
25
25
  import fs from "fs";
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-HGMYEDAQ.js";
9
9
  import {
10
10
  describeError
11
- } from "./chunk-JDL4QAPT.js";
11
+ } from "./chunk-IG6ISQYD.js";
12
12
 
13
13
  // src/commands/mcp.ts
14
14
  import fs from "fs";
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-OA6N3BI7.js";
8
+ } from "./chunk-BKNIXYMI.js";
9
9
  import {
10
10
  CANONRY_MCP_TOOLKITS
11
11
  } from "./chunk-NCIPNVD6.js";
@@ -22,15 +22,15 @@ import {
22
22
  resolveApiKeyFor,
23
23
  resolveModelForProvider,
24
24
  validateAgentProviderRegistry
25
- } from "./chunk-QEG7BSLH.js";
25
+ } from "./chunk-CZSHCZHW.js";
26
26
  import {
27
27
  CanonryMcpToolNames,
28
28
  canonryMcpTools
29
- } from "./chunk-7XSGAPN5.js";
29
+ } from "./chunk-RL7LPPFU.js";
30
30
  import {
31
31
  agentToolEvents,
32
32
  llmUsageEvents
33
- } from "./chunk-3JV3PWNA.js";
33
+ } from "./chunk-HD7AZIOP.js";
34
34
  import {
35
35
  MeasurementPortfolioLists,
36
36
  agentTurnLimitsSchema,
@@ -38,7 +38,7 @@ import {
38
38
  describeError,
39
39
  validationError,
40
40
  visibilityReportRequestSchema
41
- } from "./chunk-JDL4QAPT.js";
41
+ } from "./chunk-IG6ISQYD.js";
42
42
 
43
43
  // src/agent/session.ts
44
44
  import fs3 from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hostMatchesDomain
3
- } from "./chunk-JDL4QAPT.js";
3
+ } from "./chunk-IG6ISQYD.js";
4
4
 
5
5
  // src/citation-utils.ts
6
6
  function pickProjectCitedDomain(citedDomains, projectDomains) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseJsonColumn
3
- } from "./chunk-3JV3PWNA.js";
3
+ } from "./chunk-HD7AZIOP.js";
4
4
  import {
5
5
  AI_ENGINE_DOMAINS,
6
6
  AI_ENGINE_SELF_DOMAINS,
@@ -26,7 +26,7 @@ import {
26
26
  retryAfterDelayMs,
27
27
  usageCount,
28
28
  withRetry
29
- } from "./chunk-JDL4QAPT.js";
29
+ } from "./chunk-IG6ISQYD.js";
30
30
 
31
31
  // ../provider-openai/src/normalize.ts
32
32
  import OpenAI from "openai";
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-JDL4QAPT.js";
23
+ } from "./chunk-IG6ISQYD.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";
@@ -10901,6 +10901,13 @@ var brandMetricsDtoSchema = z26.object({
10901
10901
  window: metricsWindowSchema,
10902
10902
  /** Scope that applies even when `buckets` is empty. `pooled` means classification was unavailable. */
10903
10903
  mentionShareScope: z26.enum(["non-brand", "pooled"]),
10904
+ /**
10905
+ * The answers every rate, bucket, change and query-set event in this response
10906
+ * reads: `branded` or `non-brand` only, or `all` for both pooled. Mention
10907
+ * share is always non-brand, so it is empty under `branded`. A server that
10908
+ * predates the field read `all`.
10909
+ */
10910
+ queryClass: queryClassFilterSchema.default("all"),
10904
10911
  buckets: z26.array(timeBucketSchema),
10905
10912
  overall: providerMetricSchema,
10906
10913
  byProvider: z26.record(z26.string(), providerMetricSchema),
@@ -19049,6 +19056,7 @@ function classifyJourneyEntry(signal) {
19049
19056
  if (signal.clickNetwork) return { entryClass: "social", entryName: signal.clickNetwork, entryHost: null, paid: false };
19050
19057
  return { entryClass: "direct", entryName: null, entryHost: null, paid: false };
19051
19058
  }
19059
+ var SAFARI_FROZEN_IOS_VERSION_FROM = 26;
19052
19060
  function journeyDeviceLabel(userAgent) {
19053
19061
  const ua = userAgent ?? "";
19054
19062
  if (!ua) return "Unknown device";
@@ -19067,8 +19075,10 @@ function journeyDeviceLabel(userAgent) {
19067
19075
  })();
19068
19076
  const ios = /(iPhone|iPad|iPod).*?OS (\d+)_(\d+)/.exec(ua);
19069
19077
  if (ios) {
19070
- const iosBrowser = /CriOS|FxiOS|EdgiOS/.test(ua) ? browser : "Safari";
19071
- return [ios[1], `iOS ${ios[2]}.${ios[3]}`, iosBrowser].filter(Boolean).join(" \xB7 ");
19078
+ const thirdParty = /CriOS|FxiOS|EdgiOS/.test(ua);
19079
+ const safariMajor = thirdParty ? NaN : Number(/Version\/(\d+)/.exec(ua)?.[1]);
19080
+ const iosVersion = safariMajor >= SAFARI_FROZEN_IOS_VERSION_FROM ? String(safariMajor) : `${ios[2]}.${ios[3]}`;
19081
+ return [ios[1], `iOS ${iosVersion}`, thirdParty ? browser : "Safari"].filter(Boolean).join(" \xB7 ");
19072
19082
  }
19073
19083
  const android = /Android (\d+(?:\.\d+)?)/.exec(ua);
19074
19084
  if (android) return ["Android " + android[1], browser].filter(Boolean).join(" \xB7 ");
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  USAGE_TELEMETRY_HEADERS,
3
3
  redactLogString
4
- } from "./chunk-JDL4QAPT.js";
4
+ } from "./chunk-IG6ISQYD.js";
5
5
 
6
6
  // ../api-routes/src/request-context.ts
7
7
  import { AsyncLocalStorage } from "async_hooks";
@@ -23,7 +23,7 @@ import {
23
23
  measurementDraftUpsertGroupRequestSchema,
24
24
  measurementDraftUpsertMarketRequestSchema,
25
25
  measurementDraftUpsertTargetRequestSchema
26
- } from "./chunk-JDL4QAPT.js";
26
+ } from "./chunk-IG6ISQYD.js";
27
27
 
28
28
  // src/measurement-draft-actions.ts
29
29
  import { z } from "zod";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  API_PROVIDER_NAMES,
3
3
  ProviderNames
4
- } from "./chunk-JDL4QAPT.js";
4
+ } from "./chunk-IG6ISQYD.js";
5
5
 
6
6
  // src/provider-registration.ts
7
7
  function isApiProviderRegistrable(name, entry) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  answerServiceAdapters,
3
3
  answerServiceDescriptors
4
- } from "./chunk-FCPIOH6P.js";
4
+ } from "./chunk-7VEXNHRX.js";
5
5
  import {
6
6
  AeroLlmUsageFeatures,
7
7
  aeroTurnStatus,
@@ -27,14 +27,14 @@ import {
27
27
  resolveConfiguredAgentProvider,
28
28
  resolveSessionProviderAndModel,
29
29
  setAeroSystemPrompt
30
- } from "./chunk-L7WQTD3D.js";
30
+ } from "./chunk-G3DZSUYD.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-OA6N3BI7.js";
37
+ } from "./chunk-BKNIXYMI.js";
38
38
  import {
39
39
  getGoogleAuthConfig,
40
40
  getGoogleConnection,
@@ -53,7 +53,7 @@ import {
53
53
  removeCloudflareTrafficConnection,
54
54
  removeCloudflareTrafficConnectionBySourceId,
55
55
  upsertCloudflareTrafficConnection
56
- } from "./chunk-NQTUPEBQ.js";
56
+ } from "./chunk-XCA546YC.js";
57
57
  import {
58
58
  claudeAdapter,
59
59
  embedQueries,
@@ -64,7 +64,7 @@ import {
64
64
  openaiAdapter,
65
65
  openrouterAdapter,
66
66
  perplexityAdapter
67
- } from "./chunk-DUYENNUI.js";
67
+ } from "./chunk-GAA7JGB7.js";
68
68
  import {
69
69
  classifyUsageSurface,
70
70
  createApiUsageTelemetry,
@@ -76,7 +76,7 @@ import {
76
76
  startOutcomeTimer,
77
77
  trackFeatureCompleted,
78
78
  trackInstallState
79
- } from "./chunk-XJF7LMGU.js";
79
+ } from "./chunk-EKY6GHJ4.js";
80
80
  import {
81
81
  isLoopbackBindHost
82
82
  } from "./chunk-TSENU4GG.js";
@@ -84,7 +84,7 @@ import {
84
84
  isApiProviderRegistrable,
85
85
  isCdpProviderRegistrable,
86
86
  registeredProviderNames
87
- } from "./chunk-QCSNNKFI.js";
87
+ } from "./chunk-P5DZ56CR.js";
88
88
  import {
89
89
  checkLatestVersionForServer,
90
90
  getOrCreateAnonymousId,
@@ -95,17 +95,17 @@ import {
95
95
  recordDashboardEvent,
96
96
  setTelemetryPreference,
97
97
  trackEvent
98
- } from "./chunk-G7VJEPDZ.js";
98
+ } from "./chunk-YHTU4XBR.js";
99
99
  import {
100
100
  createCanonryMcpServer
101
- } from "./chunk-Z7WG6F7Q.js";
101
+ } from "./chunk-3A7LI5KI.js";
102
102
  import {
103
103
  CANONRY_MCP_TIERS,
104
104
  CANONRY_MCP_TOOLKIT_NAMES
105
105
  } from "./chunk-NCIPNVD6.js";
106
106
  import {
107
107
  ApiClient
108
- } from "./chunk-SJNF5GN2.js";
108
+ } from "./chunk-SZXYGJMI.js";
109
109
  import {
110
110
  AGENT_PROVIDERS,
111
111
  adapterSupportsBatch,
@@ -136,21 +136,21 @@ import {
136
136
  saveConfigPatch,
137
137
  sentimentInstallReadiness,
138
138
  updateSharedProviderExecutionGate
139
- } from "./chunk-QEG7BSLH.js";
139
+ } from "./chunk-CZSHCZHW.js";
140
140
  import {
141
141
  getBundledSkillSnapshots
142
- } from "./chunk-IDPAYZHR.js";
142
+ } from "./chunk-5AV2OUCJ.js";
143
143
  import {
144
144
  computeFactorAverages,
145
145
  deleteSiteCrawlGraphLayout,
146
146
  persistSiteCrawlGraphLayout,
147
147
  prepareSiteCrawlGraphLayout,
148
148
  recordedSharePct
149
- } from "./chunk-ZK5WIVGA.js";
149
+ } from "./chunk-W5FR6AJP.js";
150
150
  import {
151
151
  CanonryMcpToolNames,
152
152
  canonryMcpTools
153
- } from "./chunk-7XSGAPN5.js";
153
+ } from "./chunk-RL7LPPFU.js";
154
154
  import {
155
155
  PACKAGE_VERSION
156
156
  } from "./chunk-AOJU5LKX.js";
@@ -162,11 +162,11 @@ import {
162
162
  addLogListener,
163
163
  createFastifyLogger,
164
164
  createLogger
165
- } from "./chunk-RLXNZRHD.js";
165
+ } from "./chunk-TGZKOIZ3.js";
166
166
  import {
167
167
  computeCitedCompetitorDomains,
168
168
  determineCitationState
169
- } from "./chunk-UHE4RLFW.js";
169
+ } from "./chunk-G3ZNUINX.js";
170
170
  import {
171
171
  BingApiError,
172
172
  CC_CACHE_DIR,
@@ -285,7 +285,7 @@ import {
285
285
  webhookResponseReason,
286
286
  webhookTargetRefusalReason,
287
287
  writeAuditLog
288
- } from "./chunk-4IV4FO3O.js";
288
+ } from "./chunk-QP36LXT5.js";
289
289
  import {
290
290
  OperationalLogStore,
291
291
  SentimentIdempotencyConflict,
@@ -371,7 +371,7 @@ import {
371
371
  siteLivenessState,
372
372
  trafficSources,
373
373
  usageCounters
374
- } from "./chunk-3JV3PWNA.js";
374
+ } from "./chunk-HD7AZIOP.js";
375
375
  import {
376
376
  AGENT_MEMORY_VALUE_MAX_BYTES,
377
377
  AI_ENGINE_DOMAINS,
@@ -616,7 +616,7 @@ import {
616
616
  winnabilityClassLabel,
617
617
  withRetry,
618
618
  withSkippedProviders
619
- } from "./chunk-JDL4QAPT.js";
619
+ } from "./chunk-IG6ISQYD.js";
620
620
 
621
621
  // src/google-marketing-runtime.ts
622
622
  import crypto2 from "crypto";
@@ -5657,7 +5657,7 @@ function nonBlank(value) {
5657
5657
  return trimmed ? trimmed : void 0;
5658
5658
  }
5659
5659
  function resolveBuildCommit(env = process.env) {
5660
- const embedded = true ? "f07ffb8d5bf311a4b65733f81f887459cf1aa259" : void 0;
5660
+ const embedded = true ? "702b9edacd9f89400cd610bf68d54b10bb1d246e" : void 0;
5661
5661
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5662
5662
  }
5663
5663
  function resolveInstanceIdentity(env = process.env) {
@@ -9,14 +9,14 @@ import {
9
9
  normalizeCloudflareWorkerEvent,
10
10
  sessionizeJourneyRequests,
11
11
  verifyRequestSignature
12
- } from "./chunk-O7KIDW4H.js";
12
+ } from "./chunk-34HGKT6I.js";
13
13
  import {
14
14
  currentOutcomeAttribution,
15
15
  getRequestContext,
16
16
  registerRequestContext,
17
17
  requestAuditIdentity,
18
18
  sanitizeRequestContext
19
- } from "./chunk-66C7YITH.js";
19
+ } from "./chunk-KX5IRN55.js";
20
20
  import {
21
21
  SentimentIdempotencyConflict,
22
22
  SentimentRepository,
@@ -154,7 +154,7 @@ import {
154
154
  userSessions,
155
155
  users,
156
156
  writeNegativeReviewMaxStars
157
- } from "./chunk-3JV3PWNA.js";
157
+ } from "./chunk-HD7AZIOP.js";
158
158
  import {
159
159
  ADS_ACTIVATE_SCOPE,
160
160
  ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
@@ -939,6 +939,7 @@ import {
939
939
  providerSummaryEntryDtoSchema,
940
940
  providersFailing,
941
941
  qualifiedNameIncludesName,
942
+ queryClassFilterSchema,
942
943
  queryDtoSchema,
943
944
  queryGenerateRequestSchema,
944
945
  queryGenerateResponseSchema,
@@ -1156,7 +1157,7 @@ import {
1156
1157
  wordpressSchemaDeployResultDtoSchema,
1157
1158
  wordpressSchemaStatusResultDtoSchema,
1158
1159
  wordpressStatusDtoSchema
1159
- } from "./chunk-JDL4QAPT.js";
1160
+ } from "./chunk-IG6ISQYD.js";
1160
1161
 
1161
1162
  // ../api-routes/src/user-session.ts
1162
1163
  import crypto2 from "crypto";
@@ -27368,6 +27369,22 @@ async function analyticsRoutes(app) {
27368
27369
  const project = resolveProject(app.db, request.params.name);
27369
27370
  const classifyQuery = projectQueryClassifier(project);
27370
27371
  const mentionShareScope = classifyQuery ? "non-brand" : "pooled";
27372
+ const parsedQueryClass = queryClassFilterSchema.safeParse(request.query.queryClass ?? "all");
27373
+ if (!parsedQueryClass.success) {
27374
+ throw validationError('"queryClass" must be one of: all, branded, non-brand', { issues: parsedQueryClass.error.issues });
27375
+ }
27376
+ const queryClass = parsedQueryClass.data;
27377
+ if (queryClass !== "all" && activeMeasurementPlan(app.db, project.id)?.plan.schemaVersion === 2) {
27378
+ throw validationError(
27379
+ `Query class "${queryClass}" on a published measurement plan follows its assignments. Read the split from GET /projects/${project.name}/visibility-report, or omit queryClass for pooled trends.`
27380
+ );
27381
+ }
27382
+ if (queryClass !== "all" && !classifyQuery) {
27383
+ throw validationError(
27384
+ `Query class "${queryClass}" needs a brand name or alias on this project. Add one, or omit queryClass for pooled trends.`
27385
+ );
27386
+ }
27387
+ const inQueryClass = (text) => queryClass === "all" || classifyQuery(text) === queryClass;
27371
27388
  const window2 = parseWindow(request.query.window);
27372
27389
  const cutoff = windowCutoff(window2);
27373
27390
  const projectRuns = app.db.select().from(runs).where(and37(
@@ -27381,6 +27398,7 @@ async function analyticsRoutes(app) {
27381
27398
  return reply.send({
27382
27399
  window: window2,
27383
27400
  mentionShareScope,
27401
+ queryClass,
27384
27402
  buckets: [],
27385
27403
  overall: { citationRate: 0, cited: 0, total: 0, mentionRate: 0, mentionedCount: 0 },
27386
27404
  byProvider: {},
@@ -27437,7 +27455,7 @@ async function analyticsRoutes(app) {
27437
27455
  // this far when its text matched the basket, so its key is never empty.)
27438
27456
  basketKey: normalizeQueryText(s.queryText ?? (s.queryId ? queryTextById.get(s.queryId) ?? "" : "")) || s.queryId || "",
27439
27457
  runBasketRevision: runBasketRevision.get(s.runId) ?? null
27440
- }));
27458
+ })).filter((s) => queryClass === "all" || s.queryClass === queryClass);
27441
27459
  const mentionShareCompetitors2 = mentionShareCompetitors(
27442
27460
  app.db.select(competitorIdentityColumns).from(competitors).where(eq46(competitors.projectId, project.id)).orderBy(competitors.domain).all()
27443
27461
  );
@@ -27603,17 +27621,17 @@ async function analyticsRoutes(app) {
27603
27621
  const trend = computeTrend(buckets, "citationRate");
27604
27622
  const mentionTrend = computeTrend(buckets, "mentionRate");
27605
27623
  const windowChange = computeWindowChange(buckets);
27606
- const queryChanges = computeQueryChanges(projectQueries, cutoff);
27624
+ const queryChanges = computeQueryChanges(projectQueries.filter((q) => inQueryClass(q.query)), cutoff);
27607
27625
  const basketChanges = basketRevisions.slice(1).map((rev, i) => {
27608
27626
  const previous = new Set(basketRevisions[i].members);
27609
27627
  const current = new Set(rev.members);
27610
27628
  return {
27611
27629
  revision: rev.revision,
27612
27630
  at: rev.createdAt,
27613
- added: rev.members.filter((m) => !previous.has(m)),
27614
- removed: basketRevisions[i].members.filter((m) => !current.has(m))
27631
+ added: rev.members.filter((m) => !previous.has(m) && inQueryClass(m)),
27632
+ removed: basketRevisions[i].members.filter((m) => !current.has(m) && inQueryClass(m))
27615
27633
  };
27616
- }).filter((change) => !cutoff || change.at >= cutoff);
27634
+ }).filter((change) => queryClass === "all" || change.added.length + change.removed.length > 0).filter((change) => !cutoff || change.at >= cutoff);
27617
27635
  const executionIdentityChanges = [];
27618
27636
  let previousExecutionChecksum = null;
27619
27637
  for (const run of projectRuns) {
@@ -27624,7 +27642,7 @@ async function analyticsRoutes(app) {
27624
27642
  }
27625
27643
  previousExecutionChecksum = identity.checksum;
27626
27644
  }
27627
- return reply.send({ window: window2, mentionShareScope, buckets, overall, byProvider, trend, mentionTrend, windowChange, queryChanges, basketChanges, executionIdentityChanges, referenceBasketRevision: latestBasket?.revision ?? null, modelAttribution, servedModelAttribution, modelServiceMismatch, modelPointerChanges, competitorIdentityChangedAt: readCompetitorIdentityChangedAt(app.db, project.id), competitorSetChangedAt: readCompetitorSetChangedAt(app.db, project.id) });
27645
+ return reply.send({ window: window2, mentionShareScope, queryClass, buckets, overall, byProvider, trend, mentionTrend, windowChange, queryChanges, basketChanges, executionIdentityChanges, referenceBasketRevision: latestBasket?.revision ?? null, modelAttribution, servedModelAttribution, modelServiceMismatch, modelPointerChanges, competitorIdentityChangedAt: readCompetitorIdentityChangedAt(app.db, project.id), competitorSetChangedAt: readCompetitorSetChangedAt(app.db, project.id) });
27628
27646
  });
27629
27647
  app.get("/projects/:name/analytics/gaps", async (request, reply) => {
27630
27648
  const project = resolveProject(app.db, request.params.name);
@@ -34290,6 +34308,12 @@ var sourcesQueryClassParameter = {
34290
34308
  description: "Restrict to branded or non-brand answers. With an active v2 measurement plan the class comes from each run's frozen plan assignments (the same answers as the competitor landscape at scope=all-markets); otherwise from the project's brand-name classifier over the query text. Answers neither basis can place are excluded and counted in unclassifiedAnswers. Defaults to all, which pools both classes.",
34291
34309
  schema: { type: "string", enum: ["all", "branded", "non-brand"] }
34292
34310
  };
34311
+ var metricsQueryClassParameter = {
34312
+ name: "queryClass",
34313
+ in: "query",
34314
+ description: "Restrict every rate, bucket, change and query-set event to branded or non-brand answers, classified from the query text by the project's brand names (the same split mention share uses). Mention share stays non-brand, so it is empty under branded. Bucket boundaries do not move with the class, so the two classes plot on the same dates. 400 when the project has no brand name or alias to classify with, or has a published v2 measurement plan (its classes live on the plan assignments; read the split from the visibility report). Defaults to all, which pools both classes.",
34315
+ schema: { type: "string", enum: ["all", "branded", "non-brand"] }
34316
+ };
34293
34317
  var sourcesIncludeByQueryParameter = {
34294
34318
  name: "includeByQuery",
34295
34319
  in: "query",
@@ -36804,9 +36828,10 @@ var routeCatalog = [
36804
36828
  path: "/api/v1/projects/{name}/analytics/metrics",
36805
36829
  summary: "Get citation trend analytics",
36806
36830
  tags: ["analytics"],
36807
- parameters: [nameParameter, analyticsWindowParameter],
36831
+ parameters: [nameParameter, analyticsWindowParameter, metricsQueryClassParameter],
36808
36832
  responses: {
36809
36833
  200: jsonResponse("Citation metrics returned.", "BrandMetricsDto"),
36834
+ 400: errorResponse("Invalid query parameters."),
36810
36835
  404: errorResponse("Project not found.")
36811
36836
  }
36812
36837
  },