@canonry/canonry 7.91.2 → 7.92.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 (135) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +1 -1
  2. package/assets/assets/{AgentSetupPage-DpBlChWi.js → AgentSetupPage-Dr5ZoPYi.js} +1 -1
  3. package/assets/assets/{AuditHistoryPanel-DAotR_zD.js → AuditHistoryPanel-Dc8pGeZT.js} +1 -1
  4. package/assets/assets/{BacklinksPage-CFoi9mrt.js → BacklinksPage-zEaP7G6s.js} +1 -1
  5. package/assets/assets/{HistoryPage-DIGmY4wi.js → HistoryPage-9OaxBSY8.js} +1 -1
  6. package/assets/assets/{MeasurementPropertyPage-C6o9U2R6.js → MeasurementPropertyPage-k_mqkoWn.js} +1 -1
  7. package/assets/assets/{ProjectPage-00Vsnxv4.js → ProjectPage-vgHaFT7S.js} +1 -1
  8. package/assets/assets/{RunsPage-ChSbIrF9.js → RunsPage-CXkefezd.js} +1 -1
  9. package/assets/assets/{SettingsPage-CIrzXeP8.js → SettingsPage-C8FUNUN5.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-HZXdeAOx.js → SiteHealthSection-C94uYTE3.js} +2 -2
  11. package/assets/assets/ToneBadge-COrS2zpP.js +60 -0
  12. package/assets/assets/{TrafficPage-ZYsFSEuq.js → TrafficPage-KlGx3-bc.js} +1 -1
  13. package/assets/assets/{TrafficSourceDetailPage-D5uJZpZ4.js → TrafficSourceDetailPage-BMs9kd7S.js} +1 -1
  14. package/assets/assets/{account-context-DMLbDVNZ.js → account-context-F2VRKRtu.js} +1 -1
  15. package/assets/assets/{agent-trust-copy-DbpAXPxc.js → agent-trust-copy-Hb775a57.js} +1 -1
  16. package/assets/assets/{card-Be_eN_-Q.js → card-P1VA-JnV.js} +1 -1
  17. package/assets/assets/{format-helpers-IKCsn-Iw.js → format-helpers-COfTmLRL.js} +1 -1
  18. package/assets/assets/{index-3jdPlyTf.js → index-DHrWeA6k.js} +4 -4
  19. package/assets/assets/{query-client-CoKNm49W.js → query-client-BHtq57Sw.js} +1 -1
  20. package/assets/assets/{react-query-DIdeX4Dn.js → react-query-IhpEAOba.js} +1 -1
  21. package/assets/assets/{react-sigma_core.esm.min-De3OcL3T.js → react-sigma_core.esm.min-B4NX5_aX.js} +1 -1
  22. package/assets/assets/{server-traffic-DvN44H1n.js → server-traffic-ykAWQo0I.js} +1 -1
  23. package/assets/assets/{service-RpR2yqfP.js → service-m9l8my0x.js} +1 -1
  24. package/assets/index.html +7 -7
  25. package/dist/{ads-RC5EHP6E.js → ads-LRHVFP2J.js} +3 -3
  26. package/dist/{agent-JYG5XPUJ.js → agent-P7HWL7VX.js} +7 -7
  27. package/dist/{agent-ask-FGPGEOEI.js → agent-ask-S374MIJS.js} +3 -3
  28. package/dist/{agent-conversations-Q3EKETCC.js → agent-conversations-3SSKVUYG.js} +3 -3
  29. package/dist/{agent-journeys-IHBTU6SZ.js → agent-journeys-ZEO7Z4QR.js} +3 -3
  30. package/dist/{agent-memory-RXEPKF5K.js → agent-memory-E5YVW5WY.js} +3 -3
  31. package/dist/{agent-providers-LDMGD7TD.js → agent-providers-BWWB42XJ.js} +3 -3
  32. package/dist/{agent-transcript-NXSXOYNE.js → agent-transcript-YG7TTHWS.js} +3 -3
  33. package/dist/{analytics-4BILIAM5.js → analytics-AIKX4BUM.js} +3 -3
  34. package/dist/{apply-ENLWU4Z2.js → apply-5MPSMIKM.js} +3 -3
  35. package/dist/{backfill-HHG3Z46F.js → backfill-2BFEE6XJ.js} +10 -10
  36. package/dist/{backlinks-5MMWYPFW.js → backlinks-L6BYIJIK.js} +3 -3
  37. package/dist/{bing-KO3PDNXZ.js → bing-E4ZSEVQV.js} +3 -3
  38. package/dist/{bootstrap-E76JLH63.js → bootstrap-V7OE6XXB.js} +10 -10
  39. package/dist/{cdp-BZRWX3MX.js → cdp-LWNX6UZF.js} +7 -7
  40. package/dist/{chunk-MNIQFFLL.js → chunk-2D3JYWFX.js} +4 -4
  41. package/dist/{chunk-MM3OYQ53.js → chunk-3WWSOWXP.js} +2 -2
  42. package/dist/{chunk-OK6MKE4B.js → chunk-4HLR3DRQ.js} +1 -1
  43. package/dist/{chunk-V4MRQPV2.js → chunk-4QYGB5IC.js} +1 -1
  44. package/dist/{chunk-XFVB3UCE.js → chunk-7534NXSP.js} +1 -1
  45. package/dist/{chunk-7LN6QPV7.js → chunk-76KBMLPR.js} +1 -1
  46. package/dist/{chunk-SMH4FUXJ.js → chunk-AUC47DFW.js} +1 -1
  47. package/dist/{chunk-PIOCF5GN.js → chunk-BRNZ3G3B.js} +5 -5
  48. package/dist/{chunk-PIDL7OJ4.js → chunk-BTYOU24P.js} +2 -2
  49. package/dist/{chunk-QZM44MJL.js → chunk-BYDJIBAB.js} +358 -357
  50. package/dist/{chunk-KVNGLXG7.js → chunk-CIP3CE2C.js} +3 -3
  51. package/dist/{chunk-5MBZUPY3.js → chunk-DEFHTBJV.js} +1 -1
  52. package/dist/{chunk-B23XQ5OP.js → chunk-ERSHLW5J.js} +4 -4
  53. package/dist/{chunk-KKVIRNFF.js → chunk-EWZOL56J.js} +3 -3
  54. package/dist/{chunk-2REKLGYS.js → chunk-FYYOX7UY.js} +18 -1
  55. package/dist/{chunk-ZYHP6QZO.js → chunk-GNHXSSQM.js} +2 -2
  56. package/dist/{chunk-ZR4WEKEC.js → chunk-H3PWMM4K.js} +1 -1
  57. package/dist/{chunk-FX5H2PD5.js → chunk-IDISBRPO.js} +7 -7
  58. package/dist/{chunk-5DMCGBIT.js → chunk-JZVTSC2V.js} +2 -2
  59. package/dist/{chunk-JC2MAKWO.js → chunk-K7ZG6K7J.js} +1 -1
  60. package/dist/{chunk-JXGVPQA5.js → chunk-KKSE52CI.js} +6 -6
  61. package/dist/{chunk-ML3KDUHO.js → chunk-MDYFHX5Y.js} +70 -22
  62. package/dist/{chunk-UHCRUGI5.js → chunk-N2EWSWZD.js} +1 -1
  63. package/dist/{chunk-6SEWKBDC.js → chunk-O7D7KV75.js} +3 -3
  64. package/dist/{chunk-JKBQ3G25.js → chunk-P6ZDIVFZ.js} +1 -1
  65. package/dist/{chunk-FYJMNYVR.js → chunk-T5DH6FEH.js} +1 -1
  66. package/dist/{chunk-SMSTXGJX.js → chunk-TY5YTNLU.js} +2 -2
  67. package/dist/{chunk-SC7WEHEK.js → chunk-U3T37P7H.js} +3 -3
  68. package/dist/{chunk-PAC5EE5X.js → chunk-UMTYAPCQ.js} +4 -4
  69. package/dist/{chunk-FLP4XMWI.js → chunk-WONUYAKB.js} +4 -4
  70. package/dist/{chunk-IPFSY55D.js → chunk-XYQMPYWE.js} +1 -1
  71. package/dist/{chunk-T6ZYAUJX.js → chunk-ZEZPTUUB.js} +31 -14
  72. package/dist/{chunk-EIYNZOQA.js → chunk-ZPVJ5PVB.js} +2 -2
  73. package/dist/{chunk-QS57GCF4.js → chunk-ZTCQVHQV.js} +2 -2
  74. package/dist/{chunk-HMNQTF3E.js → chunk-ZTRGUTUP.js} +5 -5
  75. package/dist/{citations-UEKKVKBV.js → citations-BYSB6NON.js} +3 -3
  76. package/dist/{cli-catalog-HJOVIDG6.js → cli-catalog-CFCLMVSK.js} +3 -3
  77. package/dist/{cli-commands-5FUTLXQS.js → cli-commands-G5LDZRUU.js} +7 -7
  78. package/dist/cli.js +13 -13
  79. package/dist/{competitor-3TX3GOLA.js → competitor-DUYU7EL7.js} +3 -3
  80. package/dist/{content-BKICG6BP.js → content-OGURKOCE.js} +3 -3
  81. package/dist/{dashboard-HOCPAGFO.js → dashboard-UOIHD75S.js} +6 -6
  82. package/dist/{demo-IXNY4QU4.js → demo-UTXZOVOZ.js} +1 -1
  83. package/dist/{demo-server-HGKXT27V.js → demo-server-4TRTOGKP.js} +12 -12
  84. package/dist/{discover-LBULUEYL.js → discover-SHUCBUDJ.js} +3 -3
  85. package/dist/{discover-eval-V7UJGWHK.js → discover-eval-3ZTYLTGU.js} +3 -3
  86. package/dist/{doctor-O45PQVTM.js → doctor-FRSV5GAR.js} +3 -3
  87. package/dist/{evidence-FCNEZ7OV.js → evidence-7UJHNILW.js} +3 -3
  88. package/dist/{export-cmd-CFC3HYWQ.js → export-cmd-2DAWSD52.js} +3 -3
  89. package/dist/{ga-V643BFQV.js → ga-K2EVI3KO.js} +3 -3
  90. package/dist/{gbp-L5PCSFCF.js → gbp-NXFINC7N.js} +3 -3
  91. package/dist/{google-TO6R7PKD.js → google-J4T52EIG.js} +4 -4
  92. package/dist/{google-marketing-BOSOBO4T.js → google-marketing-PZGKZPEB.js} +1 -1
  93. package/dist/{health-cmd-UZKM4AB7.js → health-cmd-5IHX5GRQ.js} +3 -3
  94. package/dist/{history-WRVANB63.js → history-IVO5IVH2.js} +3 -3
  95. package/dist/index.d.ts +71 -71
  96. package/dist/index.js +25 -25
  97. package/dist/{init-CYKAYU6A.js → init-TNCLNDMS.js} +12 -12
  98. package/dist/{insights-UQ76TUH7.js → insights-SPA2BVMV.js} +3 -3
  99. package/dist/intelligence-service-YPKAM4JJ.js +16 -0
  100. package/dist/{journeys-6S235DIK.js → journeys-7FAHZRGP.js} +3 -3
  101. package/dist/{keys-VXQWKBDR.js → keys-PPBHRYPZ.js} +3 -3
  102. package/dist/{keyword-VM26Z6Z7.js → keyword-C4ULYIWF.js} +3 -3
  103. package/dist/{logs-B4UKUNNS.js → logs-X7NQN4UT.js} +3 -3
  104. package/dist/{mcp-NFRDBPMW.js → mcp-ERMFW6WJ.js} +4 -4
  105. package/dist/mcp.js +9 -9
  106. package/dist/{measurement-plan-PH4S4NL4.js → measurement-plan-7IPWYNIC.js} +5 -5
  107. package/dist/{notify-XCFFEECP.js → notify-AC4ZHLUK.js} +3 -3
  108. package/dist/{organic-evidence-P6YKEE5J.js → organic-evidence-GDDMNJHN.js} +3 -3
  109. package/dist/{overview-XA7WM5QI.js → overview-7VCUIYQE.js} +4 -4
  110. package/dist/{project-US5UT3TO.js → project-N4RGX5CT.js} +3 -3
  111. package/dist/{query-MVLTNGDG.js → query-Y7LGD6PG.js} +3 -3
  112. package/dist/{research-XWJOXQDW.js → research-WTZO3D7B.js} +3 -3
  113. package/dist/{results-export-QMNLDPOB.js → results-export-BYUFBWEK.js} +3 -3
  114. package/dist/{run-U7Y3UINV.js → run-SXMD6GW5.js} +4 -4
  115. package/dist/{schedule-WO72K2TA.js → schedule-UQFPQBHI.js} +3 -3
  116. package/dist/{search-VFN7HC4Q.js → search-EJUJRZEE.js} +3 -3
  117. package/dist/{serve-R5SZLLJ7.js → serve-ON5OOCRY.js} +26 -26
  118. package/dist/{session-IF7IXHSS.js → session-4RJTRXIO.js} +13 -13
  119. package/dist/{settings-RTPDTKM3.js → settings-ZBP3KDJK.js} +3 -3
  120. package/dist/{sitemaps-5CCNCMM4.js → sitemaps-KVROUSLB.js} +3 -3
  121. package/dist/{skills-ZWET6NI7.js → skills-AGAHFQD5.js} +2 -2
  122. package/dist/{snapshot-CCQ62PWI.js → snapshot-WDK6ZSJA.js} +3 -3
  123. package/dist/{src-G42HKGIS.js → src-XGUBO65J.js} +2 -2
  124. package/dist/{status-YE6MWDYD.js → status-IFUJIB73.js} +4 -4
  125. package/dist/{technical-aeo-LIEMDI5R.js → technical-aeo-6KR3YH4X.js} +3 -3
  126. package/dist/{telemetry-D5OR6DKJ.js → telemetry-EZNMZMH6.js} +4 -4
  127. package/dist/{tools-R63V5YCE.js → tools-HRHCCGJ5.js} +11 -11
  128. package/dist/{traffic-6JJNWQZL.js → traffic-7OSHD23C.js} +5 -5
  129. package/dist/{trends-QZEDEIQE.js → trends-I3NWFNHX.js} +3 -3
  130. package/dist/{users-UYTKWYR6.js → users-VBLZGMML.js} +3 -3
  131. package/dist/{visibility-stats-ESDTTTAE.js → visibility-stats-6YAV2MTM.js} +18 -3
  132. package/dist/{wordpress-EJLVQNNU.js → wordpress-EM3S3NDA.js} +3 -3
  133. package/package.json +1 -1
  134. package/assets/assets/ToneBadge-ht0n6RUH.js +0 -60
  135. package/dist/intelligence-service-LVOX33SJ.js +0 -16
@@ -7,12 +7,12 @@ import {
7
7
  import {
8
8
  createApiClient,
9
9
  runWithUsageTags
10
- } from "./chunk-EIYNZOQA.js";
10
+ } from "./chunk-ZPVJ5PVB.js";
11
11
  import {
12
12
  canonryMcpTools,
13
13
  mcpOutputSchema,
14
14
  toolOperationAccess
15
- } from "./chunk-PAC5EE5X.js";
15
+ } from "./chunk-UMTYAPCQ.js";
16
16
  import {
17
17
  PACKAGE_VERSION
18
18
  } from "./chunk-AOJU5LKX.js";
@@ -25,7 +25,7 @@ import {
25
25
  isReadOnlyKey,
26
26
  restrictedWriteScopes,
27
27
  upgradeCaveatFor
28
- } from "./chunk-2REKLGYS.js";
28
+ } from "./chunk-FYYOX7UY.js";
29
29
 
30
30
  // src/mcp/server.ts
31
31
  import { randomUUID } from "crypto";
@@ -28,7 +28,7 @@ import {
28
28
  unknownUsageObservation,
29
29
  usdToMicros,
30
30
  withRetry
31
- } from "./chunk-2REKLGYS.js";
31
+ } from "./chunk-FYYOX7UY.js";
32
32
 
33
33
  // ../provider-answer-services/src/core/http.ts
34
34
  var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  runWithUsageTags
3
- } from "./chunk-EIYNZOQA.js";
3
+ } from "./chunk-ZPVJ5PVB.js";
4
4
  import {
5
5
  CanonryMcpToolNames,
6
6
  canonryMcpTools
7
- } from "./chunk-PAC5EE5X.js";
7
+ } from "./chunk-UMTYAPCQ.js";
8
8
  import {
9
9
  CliError
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-T6ZYAUJX.js";
13
+ } from "./chunk-ZEZPTUUB.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-2REKLGYS.js";
26
+ } from "./chunk-FYYOX7UY.js";
27
27
 
28
28
  // src/agent/tools.ts
29
29
  import { Type as Type2 } from "@earendil-works/pi-ai";
@@ -2,18 +2,18 @@ import {
2
2
  configExists,
3
3
  loadConfigRaw,
4
4
  saveConfigPatch
5
- } from "./chunk-V4MRQPV2.js";
5
+ } from "./chunk-4QYGB5IC.js";
6
6
  import {
7
7
  BUNDLED_SKILL_NAMES,
8
8
  installSkills
9
- } from "./chunk-FYJMNYVR.js";
9
+ } from "./chunk-T5DH6FEH.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-2REKLGYS.js";
16
+ } from "./chunk-FYYOX7UY.js";
17
17
 
18
18
  // src/skills-autosync.ts
19
19
  import fs from "fs";
@@ -11719,6 +11719,12 @@ var visibilityStatsQueryEntrySchema = visibilityStatsCountsSchema.extend({
11719
11719
  query: z29.string(),
11720
11720
  firstObserved: z29.string(),
11721
11721
  lastObserved: z29.string(),
11722
+ /**
11723
+ * The class the query is measured under, as the query list reports it:
11724
+ * `branded` or `non-brand`, `null` when it has no single class (a project
11725
+ * with no brand name, or an Advanced query assigned under both or neither).
11726
+ */
11727
+ queryClass: queryClassSchema.nullable().optional(),
11722
11728
  /**
11723
11729
  * Per-provider breakdown — present only when `groupBy=provider`. Each
11724
11730
  * entry's counts sum to this query's pooled counts.
@@ -11772,8 +11778,19 @@ var visibilityStatsDtoSchema = z29.object({
11772
11778
  */
11773
11779
  groupBy: visibilityStatsGroupBySchema.optional(),
11774
11780
  window: visibilityStatsWindowSchema,
11775
- /** Pooled counts across every tracked query in the window. */
11781
+ /** Pooled counts across every tracked query in the window, branded and non-brand together. */
11776
11782
  totals: visibilityStatsCountsSchema,
11783
+ /**
11784
+ * `totals` split by each query's class. Branded and non-brand answers never
11785
+ * share a rate, so compare these, not `totals`. `unclassified` holds queries
11786
+ * with no single class. `queryClass` does not change it: that parameter
11787
+ * scopes share of voice only.
11788
+ */
11789
+ byQueryClass: z29.object({
11790
+ branded: visibilityStatsCountsSchema,
11791
+ nonBrand: visibilityStatsCountsSchema,
11792
+ unclassified: visibilityStatsCountsSchema
11793
+ }).optional(),
11777
11794
  /**
11778
11795
  * Pooled per-provider counts across every tracked query — present only when
11779
11796
  * `groupBy=provider`. Each entry's counts sum to `totals`.
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-VJWDBFSL.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-EIYNZOQA.js";
7
+ } from "./chunk-ZPVJ5PVB.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-2REKLGYS.js";
14
+ } from "./chunk-FYYOX7UY.js";
15
15
 
16
16
  // src/commands/mcp.ts
17
17
  import fs from "fs";
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-2REKLGYS.js";
23
+ } from "./chunk-FYYOX7UY.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";
@@ -8,23 +8,23 @@ import {
8
8
  reparseStoredResult4,
9
9
  reparseStoredResult5,
10
10
  resolveStoredApiResponse
11
- } from "./chunk-PIOCF5GN.js";
11
+ } from "./chunk-BRNZ3G3B.js";
12
12
  import {
13
13
  loadConfig
14
- } from "./chunk-V4MRQPV2.js";
14
+ } from "./chunk-4QYGB5IC.js";
15
15
  import {
16
16
  isMachineFormat
17
17
  } from "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  determineCitationState
20
- } from "./chunk-SMH4FUXJ.js";
20
+ } from "./chunk-AUC47DFW.js";
21
21
  import {
22
22
  backfillProjectAnswerMentions,
23
23
  competitorIdentityColumns,
24
24
  createRunCompetitorResolver,
25
25
  readMarketCompetitorNames,
26
26
  refreshSnapshotMentionIdentity
27
- } from "./chunk-T6ZYAUJX.js";
27
+ } from "./chunk-ZEZPTUUB.js";
28
28
  import {
29
29
  RawEventSampleEventTypes,
30
30
  auditLog,
@@ -38,7 +38,7 @@ import {
38
38
  querySnapshots,
39
39
  rawEventSamples,
40
40
  runs
41
- } from "./chunk-ZR4WEKEC.js";
41
+ } from "./chunk-H3PWMM4K.js";
42
42
  import {
43
43
  ProviderNames,
44
44
  RetrievalContracts,
@@ -51,7 +51,7 @@ import {
51
51
  extractRecommendedCompetitors,
52
52
  normalizeUrlPath,
53
53
  openRouterRouteModel
54
- } from "./chunk-2REKLGYS.js";
54
+ } from "./chunk-FYYOX7UY.js";
55
55
 
56
56
  // src/commands/backfill.ts
57
57
  import { setImmediate as yieldToEventLoop } from "timers/promises";
@@ -429,7 +429,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
429
429
  }
430
430
  }
431
431
  async function backfillInsightsCommand(project, opts) {
432
- const { IntelligenceService } = await import("./intelligence-service-LVOX33SJ.js");
432
+ const { IntelligenceService } = await import("./intelligence-service-YPKAM4JJ.js");
433
433
  const config = loadConfig();
434
434
  const db = createClient(config.database);
435
435
  migrate(db);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-EIYNZOQA.js";
3
+ } from "./chunk-ZPVJ5PVB.js";
4
4
  import {
5
5
  emitJsonl
6
6
  } from "./chunk-Z7IUAJOF.js";
@@ -19,7 +19,7 @@ import {
19
19
  formatMicros,
20
20
  formatRunErrorOneLine,
21
21
  resolveProviderInput
22
- } from "./chunk-2REKLGYS.js";
22
+ } from "./chunk-FYYOX7UY.js";
23
23
 
24
24
  // src/commands/run.ts
25
25
  function getClient() {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  USAGE_TELEMETRY_HEADERS,
3
3
  redactLogString
4
- } from "./chunk-2REKLGYS.js";
4
+ } from "./chunk-FYYOX7UY.js";
5
5
 
6
6
  // ../api-routes/src/request-context.ts
7
7
  import { AsyncLocalStorage } from "async_hooks";
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-B23XQ5OP.js";
8
+ } from "./chunk-ERSHLW5J.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-V4MRQPV2.js";
26
+ } from "./chunk-4QYGB5IC.js";
27
27
  import {
28
28
  CanonryMcpToolNames,
29
29
  canonryMcpTools
30
- } from "./chunk-PAC5EE5X.js";
30
+ } from "./chunk-UMTYAPCQ.js";
31
31
  import {
32
32
  createLogger
33
- } from "./chunk-PIDL7OJ4.js";
33
+ } from "./chunk-BTYOU24P.js";
34
34
  import {
35
35
  agentToolEvents,
36
36
  llmUsageEvents
37
- } from "./chunk-ZR4WEKEC.js";
37
+ } from "./chunk-H3PWMM4K.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-2REKLGYS.js";
46
+ } from "./chunk-FYYOX7UY.js";
47
47
 
48
48
  // src/agent/session.ts
49
49
  import fs2 from "fs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  answerServiceAdapters,
3
3
  answerServiceDescriptors
4
- } from "./chunk-5MBZUPY3.js";
4
+ } from "./chunk-DEFHTBJV.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-JXGVPQA5.js";
30
+ } from "./chunk-KKSE52CI.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-B23XQ5OP.js";
37
+ } from "./chunk-ERSHLW5J.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-OK6MKE4B.js";
56
+ } from "./chunk-4HLR3DRQ.js";
57
57
  import {
58
58
  claudeAdapter,
59
59
  embedQueries,
@@ -65,7 +65,7 @@ import {
65
65
  openrouterAdapter,
66
66
  perplexityAdapter,
67
67
  startTrafficReclassification
68
- } from "./chunk-PIOCF5GN.js";
68
+ } from "./chunk-BRNZ3G3B.js";
69
69
  import {
70
70
  classifyUsageSurface,
71
71
  createApiUsageTelemetry,
@@ -77,7 +77,7 @@ import {
77
77
  startOutcomeTimer,
78
78
  trackFeatureCompleted,
79
79
  trackInstallState
80
- } from "./chunk-FLP4XMWI.js";
80
+ } from "./chunk-WONUYAKB.js";
81
81
  import {
82
82
  isLoopbackBindHost
83
83
  } from "./chunk-TSENU4GG.js";
@@ -85,7 +85,7 @@ import {
85
85
  isApiProviderRegistrable,
86
86
  isCdpProviderRegistrable,
87
87
  registeredProviderNames
88
- } from "./chunk-UHCRUGI5.js";
88
+ } from "./chunk-N2EWSWZD.js";
89
89
  import {
90
90
  checkLatestVersionForServer,
91
91
  getOrCreateAnonymousId,
@@ -97,17 +97,17 @@ import {
97
97
  recordDashboardEvent,
98
98
  setTelemetryPreference,
99
99
  trackEvent
100
- } from "./chunk-SMSTXGJX.js";
100
+ } from "./chunk-TY5YTNLU.js";
101
101
  import {
102
102
  createCanonryMcpServer
103
- } from "./chunk-KVNGLXG7.js";
103
+ } from "./chunk-CIP3CE2C.js";
104
104
  import {
105
105
  CANONRY_MCP_TIERS,
106
106
  CANONRY_MCP_TOOLKIT_NAMES
107
107
  } from "./chunk-MTW37GXF.js";
108
108
  import {
109
109
  ApiClient
110
- } from "./chunk-EIYNZOQA.js";
110
+ } from "./chunk-ZPVJ5PVB.js";
111
111
  import {
112
112
  AGENT_PROVIDERS,
113
113
  adapterSupportsBatch,
@@ -139,21 +139,21 @@ import {
139
139
  saveConfigPatch,
140
140
  sentimentInstallReadiness,
141
141
  updateSharedProviderExecutionGate
142
- } from "./chunk-V4MRQPV2.js";
142
+ } from "./chunk-4QYGB5IC.js";
143
143
  import {
144
144
  getBundledSkillSnapshots
145
- } from "./chunk-FYJMNYVR.js";
145
+ } from "./chunk-T5DH6FEH.js";
146
146
  import {
147
147
  computeFactorAverages,
148
148
  deleteSiteCrawlGraphLayout,
149
149
  persistSiteCrawlGraphLayout,
150
150
  prepareSiteCrawlGraphLayout,
151
151
  recordedSharePct
152
- } from "./chunk-MM3OYQ53.js";
152
+ } from "./chunk-3WWSOWXP.js";
153
153
  import {
154
154
  CanonryMcpToolNames,
155
155
  canonryMcpTools
156
- } from "./chunk-PAC5EE5X.js";
156
+ } from "./chunk-UMTYAPCQ.js";
157
157
  import {
158
158
  PACKAGE_VERSION
159
159
  } from "./chunk-AOJU5LKX.js";
@@ -162,16 +162,16 @@ import {
162
162
  } from "./chunk-HGMYEDAQ.js";
163
163
  import {
164
164
  IntelligenceService
165
- } from "./chunk-HMNQTF3E.js";
165
+ } from "./chunk-ZTRGUTUP.js";
166
166
  import {
167
167
  computeCitedCompetitorDomains,
168
168
  determineCitationState
169
- } from "./chunk-SMH4FUXJ.js";
169
+ } from "./chunk-AUC47DFW.js";
170
170
  import {
171
171
  addLogListener,
172
172
  createFastifyLogger,
173
173
  createLogger
174
- } from "./chunk-PIDL7OJ4.js";
174
+ } from "./chunk-BTYOU24P.js";
175
175
  import {
176
176
  BingApiError,
177
177
  CC_CACHE_DIR,
@@ -316,7 +316,7 @@ import {
316
316
  webhookResponseReason,
317
317
  webhookTargetRefusalReason,
318
318
  writeAuditLog
319
- } from "./chunk-T6ZYAUJX.js";
319
+ } from "./chunk-ZEZPTUUB.js";
320
320
  import {
321
321
  OperationalLogStore,
322
322
  SentimentIdempotencyConflict,
@@ -413,7 +413,7 @@ import {
413
413
  unrecognizedAgentEventsHourly,
414
414
  unrecognizedAgentNotifyState,
415
415
  usageCounters
416
- } from "./chunk-ZR4WEKEC.js";
416
+ } from "./chunk-H3PWMM4K.js";
417
417
  import {
418
418
  AGENT_MEMORY_VALUE_MAX_BYTES,
419
419
  AI_ENGINE_DOMAINS,
@@ -597,6 +597,7 @@ import {
597
597
  isEligibleFor,
598
598
  isNegativeReviewRating,
599
599
  isOpenRouterRoute,
600
+ isProviderAccountFailure,
600
601
  isReadOnlyKey,
601
602
  isRetryableHttpError,
602
603
  isSearchLocationIgnored,
@@ -671,7 +672,7 @@ import {
671
672
  winnabilityClassLabel,
672
673
  withRetry,
673
674
  withSkippedProviders
674
- } from "./chunk-2REKLGYS.js";
675
+ } from "./chunk-FYYOX7UY.js";
675
676
 
676
677
  // src/google-marketing-runtime.ts
677
678
  import crypto2 from "crypto";
@@ -5975,7 +5976,7 @@ function nonBlank(value) {
5975
5976
  return trimmed ? trimmed : void 0;
5976
5977
  }
5977
5978
  function resolveBuildCommit(env = process.env) {
5978
- const embedded = true ? "58dfc17ce0b02c4bfb281a4f75f22335765791ef" : void 0;
5979
+ const embedded = true ? "20ec7e4563f5d7afaa5657f6bedc2f8ec4b18727" : void 0;
5979
5980
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5980
5981
  }
5981
5982
  function resolveInstanceIdentity(env = process.env) {
@@ -10695,7 +10696,7 @@ function bingRunFailure(err) {
10695
10696
  }
10696
10697
  var BING_INSPECT_SPACING_MS = 2e3;
10697
10698
  async function executeBingInspectSitemap(db, runId, projectId, opts) {
10698
- const reportOutcome = startRunOutcome(db, runId, FeatureNames.bing, "sync");
10699
+ const reportOutcome = startRunOutcome(db, runId, FeatureNames.bing, "inspect");
10699
10700
  let abortCause;
10700
10701
  const startedAt = (/* @__PURE__ */ new Date()).toISOString();
10701
10702
  db.update(runs).set({ status: RunStatuses.running, startedAt }).where(eq12(runs.id, runId)).run();
@@ -16875,6 +16876,7 @@ async function compactMessages(args) {
16875
16876
  // src/agent/session-registry.ts
16876
16877
  var log27 = createLogger("SessionRegistry");
16877
16878
  var MAX_HYDRATE_NOTES = 20;
16879
+ var PROVIDER_ACCOUNT_COOLDOWN_MS = 24 * 60 * 60 * 1e3;
16878
16880
  var MAX_HYDRATE_BYTES = 32 * 1024;
16879
16881
  function escapeMemoryFragment(value) {
16880
16882
  return value.replace(/<(\/?)memory>/gi, "<$1\u200Cmemory>");
@@ -16891,6 +16893,8 @@ function withoutPersistedToolDetails(messages) {
16891
16893
  var SessionRegistry = class {
16892
16894
  live = /* @__PURE__ */ new Map();
16893
16895
  pending = /* @__PURE__ */ new Map();
16896
+ /** Shared across projects, scoped to the provider and a digest of its credential. */
16897
+ providerCooldowns = /* @__PURE__ */ new Map();
16894
16898
  /** Last tool scope used on the live Agent for a project. Read in getOrCreate to know when to swap. */
16895
16899
  scopes = /* @__PURE__ */ new Map();
16896
16900
  /** Last profile used on the live Agent for a project. Paired with scopes when rebuilding tools. */
@@ -17341,6 +17345,7 @@ ${lines.join("\n")}
17341
17345
  */
17342
17346
  queueFollowUp(projectName, message) {
17343
17347
  if (!this.proactive) return;
17348
+ if (this.providerCoolingDown(projectName)) return;
17344
17349
  if (this.live.has(projectName)) {
17345
17350
  this.appendPending(projectName, [message]);
17346
17351
  } else {
@@ -17371,6 +17376,7 @@ ${lines.join("\n")}
17371
17376
  async drainNow(projectName) {
17372
17377
  if (!this.proactive) return;
17373
17378
  if (!this.hasPendingWork(projectName)) return;
17379
+ if (this.providerCoolingDown(projectName)) return;
17374
17380
  try {
17375
17381
  let agent;
17376
17382
  try {
@@ -17381,6 +17387,7 @@ ${lines.join("\n")}
17381
17387
  if (err.code === "AGENT_BUSY") return;
17382
17388
  throw err;
17383
17389
  }
17390
+ if (this.providerCoolingDown(projectName)) return;
17384
17391
  const msgs = this.consumePending(projectName);
17385
17392
  if (msgs.length === 0) return;
17386
17393
  await agent.prompt(msgs);
@@ -17477,12 +17484,53 @@ ${lines.join("\n")}
17477
17484
  * arrives mid-CLI-turn would sit in pending until someone called drainNow.
17478
17485
  */
17479
17486
  registerDrainHook(agent, projectName) {
17487
+ let lastRequest;
17488
+ const resolveApiKey = agent.getApiKey;
17489
+ agent.getApiKey = async (provider) => {
17490
+ lastRequest = void 0;
17491
+ const apiKey = await resolveApiKey?.(provider);
17492
+ const accountKey = this.providerAccountKey(provider, apiKey);
17493
+ lastRequest = { accountKey, cooldown: this.providerCooldowns.get(accountKey) };
17494
+ return apiKey;
17495
+ };
17480
17496
  agent.subscribe((event) => {
17497
+ if (event.type === "agent_start") lastRequest = void 0;
17481
17498
  if (event.type !== "agent_end") return;
17499
+ if (lastRequest) {
17500
+ const { accountKey, cooldown } = lastRequest;
17501
+ const reason = classifyProviderErrorMessage(agent.state.errorMessage ?? "");
17502
+ if (isProviderAccountFailure(reason)) {
17503
+ const retryAt = Date.now() + PROVIDER_ACCOUNT_COOLDOWN_MS;
17504
+ this.providerCooldowns.set(accountKey, { retryAt });
17505
+ log27.warn("provider.background-paused", {
17506
+ projectName,
17507
+ provider: agent.state.model.provider,
17508
+ reason,
17509
+ retryAt: new Date(retryAt).toISOString(),
17510
+ recovery: "Fix the provider credentials or billing, then send Aero a prompt to retry now."
17511
+ });
17512
+ } else if (aeroTurnStatus(agent)?.reason === "completed" && this.providerCooldowns.get(accountKey) === cooldown) {
17513
+ this.providerCooldowns.delete(accountKey);
17514
+ }
17515
+ }
17482
17516
  if ((this.pending.get(projectName) ?? []).length === 0) return;
17483
17517
  void this.drainNow(projectName);
17484
17518
  });
17485
17519
  }
17520
+ providerAccountKey(provider, apiKey) {
17521
+ const canonical = coerceAgentProvider(provider);
17522
+ const vendor = canonical ? getAgentProvider(canonical).piAiProvider : provider;
17523
+ return crypto24.createHash("sha256").update(JSON.stringify([vendor, apiKey ?? ""])).digest("hex");
17524
+ }
17525
+ providerCoolingDown(projectName) {
17526
+ for (const [key, cooldown] of this.providerCooldowns) {
17527
+ if (cooldown.retryAt <= Date.now()) this.providerCooldowns.delete(key);
17528
+ }
17529
+ const provider = this.turnProvider(projectName);
17530
+ if (provider === void 0) return false;
17531
+ const vendor = getAgentProvider(provider).piAiProvider;
17532
+ return this.providerCooldowns.has(this.providerAccountKey(vendor, resolveApiKeyFor(vendor, this.opts.config)));
17533
+ }
17486
17534
  resolveProjectId(projectName) {
17487
17535
  const id = this.tryResolveProjectId(projectName);
17488
17536
  if (!id) throw new Error(`Project "${projectName}" not found`);
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  API_PROVIDER_NAMES,
3
3
  ProviderNames
4
- } from "./chunk-2REKLGYS.js";
4
+ } from "./chunk-FYYOX7UY.js";
5
5
 
6
6
  // src/provider-registration.ts
7
7
  function isApiProviderRegistrable(name, entry) {
@@ -3,7 +3,7 @@ import {
3
3
  resolveCliAccess,
4
4
  resolveCliAccessForInvocation,
5
5
  windowOptions
6
- } from "./chunk-JKBQ3G25.js";
6
+ } from "./chunk-P6ZDIVFZ.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-2REKLGYS.js";
17
+ } from "./chunk-FYYOX7UY.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-HJOVIDG6.js");
114
+ const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-CFCLMVSK.js");
115
115
  const group2 = argsWithoutHelp.find((arg) => !arg.startsWith("--"));
116
116
  printCliCatalog2(specs, fallbackFormat, group2, accessValue);
117
117
  return true;
@@ -5,7 +5,7 @@ import {
5
5
  AppError,
6
6
  parseWindowIn,
7
7
  resolveDateRange
8
- } from "./chunk-2REKLGYS.js";
8
+ } from "./chunk-FYYOX7UY.js";
9
9
 
10
10
  // src/cli-access.ts
11
11
  var CLI_ACCESS_BY_ID = Object.freeze({
@@ -15,7 +15,7 @@ import {
15
15
  formatCanonryPluginUpdateHint,
16
16
  formatCanonryPluginVersionMismatch,
17
17
  skillsClientSchema
18
- } from "./chunk-2REKLGYS.js";
18
+ } from "./chunk-FYYOX7UY.js";
19
19
 
20
20
  // src/commands/skills.ts
21
21
  import crypto from "crypto";
@@ -5,7 +5,7 @@ import {
5
5
  loadConfig,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-V4MRQPV2.js";
8
+ } from "./chunk-4QYGB5IC.js";
9
9
  import {
10
10
  CANONRY_NPM_PACKAGE_URL,
11
11
  compareSemver,
@@ -18,7 +18,7 @@ import {
18
18
  updateCheckEnvOptOut,
19
19
  upgradeCaveatFor,
20
20
  upgradeCommandFor
21
- } from "./chunk-2REKLGYS.js";
21
+ } from "./chunk-FYYOX7UY.js";
22
22
 
23
23
  // src/runtime-context.ts
24
24
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-EIYNZOQA.js";
3
+ } from "./chunk-ZPVJ5PVB.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-IPFSY55D.js";
10
+ } from "./chunk-XYQMPYWE.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-2REKLGYS.js";
40
+ } from "./chunk-FYYOX7UY.js";
41
41
 
42
42
  // src/commands/measurement-plan.ts
43
43
  import crypto from "crypto";
@@ -2,11 +2,11 @@ import {
2
2
  dedupeGscSitemapUrls,
3
3
  resolveDiscoveredGscSitemapUrls,
4
4
  submitGscSitemapBatches
5
- } from "./chunk-7LN6QPV7.js";
5
+ } from "./chunk-76KBMLPR.js";
6
6
  import {
7
7
  measurementDraftOperationSchema,
8
8
  runMeasurementDraftAction
9
- } from "./chunk-IPFSY55D.js";
9
+ } from "./chunk-XYQMPYWE.js";
10
10
  import {
11
11
  CliError
12
12
  } from "./chunk-HGMYEDAQ.js";
@@ -187,7 +187,7 @@ import {
187
187
  trendSurfaceSchema,
188
188
  visibilityCompareSelectionSchema,
189
189
  visibilityReportRequestSchema
190
- } from "./chunk-2REKLGYS.js";
190
+ } from "./chunk-FYYOX7UY.js";
191
191
 
192
192
  // src/mcp/tool-registry.ts
193
193
  import { z as z2 } from "zod";
@@ -2087,7 +2087,7 @@ var rawCanonryMcpTools = [
2087
2087
  month: z2.string().optional().describe("Aggregate one calendar month (YYYY-MM), expanded to that month's inclusive UTC bounds. Mutually exclusive with since/until/lastRuns."),
2088
2088
  groupBy: z2.enum(["provider"]).optional().describe('Set to "provider" for a per-provider breakdown.'),
2089
2089
  shareOfVoice: z2.boolean().optional().describe("Include brand-mention share with tracked/observed basis and availability across the same window (non-brand queries unless queryClass says otherwise)."),
2090
- queryClass: z2.enum(["branded", "non-brand"]).optional().describe('Query class for shareOfVoice. Defaults to non-brand. There is no "all": branded and non-brand never share a denominator.')
2090
+ queryClass: z2.enum(["branded", "non-brand"]).optional().describe('Query class for shareOfVoice. Defaults to non-brand. There is no "all": branded and non-brand never share a denominator. It does not filter the counts: `totals` pools both classes, and `byQueryClass` (plus `queryClass` on each query) carries the split.')
2091
2091
  }),
2092
2092
  annotations: readAnnotations(),
2093
2093
  openApiOperations: ["GET /api/v1/projects/{name}/visibility-stats"],