@canonry/canonry 7.64.5 → 7.65.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 (131) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +2 -1
  2. package/assets/assets/{AgentSetupPage-DYw_Srwu.js → AgentSetupPage-DPHRo4OR.js} +1 -1
  3. package/assets/assets/{AuditHistoryPanel-6_-mgHbw.js → AuditHistoryPanel-qhIB8KRK.js} +1 -1
  4. package/assets/assets/{BacklinksPage-DFzYKntv.js → BacklinksPage-iWrZ0-Pp.js} +1 -1
  5. package/assets/assets/{HistoryPage-C4pZxBYX.js → HistoryPage-BP1_GGlT.js} +1 -1
  6. package/assets/assets/{MeasurementPropertyPage-C7TkC3Ja.js → MeasurementPropertyPage-DfPHZNGo.js} +1 -1
  7. package/assets/assets/{ProjectPage-CmT2Vghx.js → ProjectPage-D4n2oqPP.js} +2 -2
  8. package/assets/assets/RunsPage-Cc98Px3T.js +1 -0
  9. package/assets/assets/{SettingsPage-Cl6ni4_w.js → SettingsPage-CMyCE-H2.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-D8D2mIsJ.js → SiteHealthSection-CGKKUtqQ.js} +2 -2
  11. package/assets/assets/ToneBadge-CJ6ObMRe.js +60 -0
  12. package/assets/assets/{TrafficPage-jAQRK1Xq.js → TrafficPage-DAef3d2A.js} +1 -1
  13. package/assets/assets/{TrafficSourceDetailPage-VuKDrAGn.js → TrafficSourceDetailPage-CdoL5Dt9.js} +1 -1
  14. package/assets/assets/{account-context-haz0f6Tu.js → account-context-CWRd3KeS.js} +1 -1
  15. package/assets/assets/{card-BAimTqa8.js → card-Cb_fM36G.js} +1 -1
  16. package/assets/assets/{extract-error-message-BBG79rN-.js → extract-error-message-DSIAoHTR.js} +1 -1
  17. package/assets/assets/{format-helpers-DQRYsYjD.js → format-helpers-CxNDa1oa.js} +1 -1
  18. package/assets/assets/{index-DyLlYKrZ.js → index-DEXKV7TW.js} +6 -6
  19. package/assets/assets/{query-client-DhJ8vlMi.js → query-client-DLdAMlsX.js} +1 -1
  20. package/assets/assets/{react-query-CRJlZpE1.js → react-query-BktZZtSC.js} +1 -1
  21. package/assets/assets/{react-sigma_core.esm.min-Ctdaaevn.js → react-sigma_core.esm.min-DgK5sRqv.js} +1 -1
  22. package/assets/assets/{service-83e6qD-8.js → service-Dv9FDyFY.js} +1 -1
  23. package/assets/index.html +7 -7
  24. package/dist/{ads-XBJFILES.js → ads-D4WQOT5K.js} +3 -3
  25. package/dist/{agent-LWL4G3YX.js → agent-E3IYC7OJ.js} +7 -7
  26. package/dist/{agent-ask-2SBUWTSS.js → agent-ask-ZSKRPB2Z.js} +3 -3
  27. package/dist/{agent-conversations-S465NNT2.js → agent-conversations-YHPYPQE2.js} +3 -3
  28. package/dist/{agent-memory-KS26TRAX.js → agent-memory-6OWOOD5O.js} +3 -3
  29. package/dist/{agent-providers-GLKRFX7S.js → agent-providers-7KZK37UO.js} +3 -3
  30. package/dist/{agent-transcript-WBDL4RTP.js → agent-transcript-3O7GPML6.js} +3 -3
  31. package/dist/{analytics-UUINEXLR.js → analytics-P2LLIUYK.js} +3 -3
  32. package/dist/{apply-HOEJMCHJ.js → apply-VBNNJOCT.js} +3 -3
  33. package/dist/{backfill-X46FWWGQ.js → backfill-F5SSURCH.js} +9 -9
  34. package/dist/{backlinks-NKZXQWXU.js → backlinks-4RE3TNNA.js} +3 -3
  35. package/dist/{bing-JVHVTKGP.js → bing-V6UN7D44.js} +3 -3
  36. package/dist/{bootstrap-SL2I6R6N.js → bootstrap-SHTSPAI5.js} +10 -10
  37. package/dist/{cdp-QBXJ3CN3.js → cdp-GDL2VFI3.js} +7 -7
  38. package/dist/{chunk-7RZFTNWT.js → chunk-2AROR73F.js} +5 -5
  39. package/dist/{chunk-56ISY5RC.js → chunk-2Y7RN5HG.js} +3 -3
  40. package/dist/{chunk-ZTNH6H2F.js → chunk-3QKKHU7D.js} +8 -8
  41. package/dist/{chunk-ZZIFS4RW.js → chunk-66DPEVLJ.js} +3 -3
  42. package/dist/{chunk-YXXJFOVG.js → chunk-6FN2OQKL.js} +340 -340
  43. package/dist/{chunk-VXKMJFPV.js → chunk-737TOG2F.js} +1 -1
  44. package/dist/{chunk-BMOMIECJ.js → chunk-AE6HJZBU.js} +3 -3
  45. package/dist/{chunk-C2DURF57.js → chunk-BV6NXSAH.js} +3 -3
  46. package/dist/{chunk-VXTI3APQ.js → chunk-C2PYKUD3.js} +1 -1
  47. package/dist/{chunk-XRE7XAYH.js → chunk-CRKOGLKJ.js} +18 -4
  48. package/dist/{chunk-T3QZVIPV.js → chunk-DQVJB6CZ.js} +1 -1
  49. package/dist/{chunk-IQVD3UND.js → chunk-F7NZEUXP.js} +2 -2
  50. package/dist/{chunk-S42DBIIC.js → chunk-GM5ZOWBK.js} +3 -3
  51. package/dist/{chunk-LEGBODMN.js → chunk-GQXSZE2Z.js} +62 -20
  52. package/dist/{chunk-UL2XEPI6.js → chunk-GZPGDAAF.js} +2 -2
  53. package/dist/{chunk-DEO75ZSC.js → chunk-H6HIJAIU.js} +2 -2
  54. package/dist/{chunk-XQTLLBJG.js → chunk-HI2HCYLB.js} +2 -2
  55. package/dist/{chunk-LITW7QNO.js → chunk-HO5W6QC7.js} +1 -1
  56. package/dist/{chunk-UGVEFUZ4.js → chunk-HPUZMBS6.js} +2 -2
  57. package/dist/{chunk-R62SF6QP.js → chunk-IJKKK7F4.js} +1 -1
  58. package/dist/{chunk-565ZI72D.js → chunk-IYB3EGSD.js} +1 -1
  59. package/dist/{chunk-STEYZ24N.js → chunk-LTX3TJ3E.js} +1 -1
  60. package/dist/{chunk-NE4KRQYV.js → chunk-M3OZL6PQ.js} +4 -4
  61. package/dist/{chunk-SSBJIBK7.js → chunk-O3INLME6.js} +4 -4
  62. package/dist/{chunk-Q62B3ISV.js → chunk-Q2WZAD5W.js} +1 -1
  63. package/dist/{chunk-PNDART6A.js → chunk-QNRMYDK6.js} +1 -1
  64. package/dist/{chunk-SFHUS5N4.js → chunk-S4VCXCRQ.js} +1 -1
  65. package/dist/{chunk-FBHW62IM.js → chunk-SL3Y7IOX.js} +1 -1
  66. package/dist/{chunk-GPNOJVM2.js → chunk-X4AHYJCE.js} +5 -5
  67. package/dist/{chunk-XFZPSZKU.js → chunk-XMKXXWMO.js} +2 -2
  68. package/dist/{chunk-DMNRYTX7.js → chunk-XOMUSIM7.js} +2 -2
  69. package/dist/{chunk-PKRH4UKJ.js → chunk-Z2EENWM3.js} +96 -30
  70. package/dist/{chunk-EII2VL22.js → chunk-ZPRJCSSR.js} +1 -1
  71. package/dist/{chunk-BTWB3ZAW.js → chunk-ZWZOQNLD.js} +1 -1
  72. package/dist/{citations-AW63LMXP.js → citations-GO4SPZYS.js} +3 -3
  73. package/dist/{cli-catalog-FBB6DN3W.js → cli-catalog-6XYQY3PI.js} +3 -3
  74. package/dist/{cli-commands-MXWXQSSX.js → cli-commands-AMURHC27.js} +7 -7
  75. package/dist/cli.js +13 -13
  76. package/dist/{competitor-YVI2IA7R.js → competitor-JBTKRJ6Y.js} +3 -3
  77. package/dist/{content-EJVE6ZCL.js → content-LKXXQ7X4.js} +3 -3
  78. package/dist/{dashboard-XPVUV6UT.js → dashboard-LUA7UX6B.js} +6 -6
  79. package/dist/{demo-6XBNMZ6F.js → demo-I7JDZJUW.js} +1 -1
  80. package/dist/{demo-server-S3XRNSHH.js → demo-server-GNGGWERV.js} +11 -11
  81. package/dist/{discover-4GZERX62.js → discover-TODAYYJ2.js} +3 -3
  82. package/dist/{discover-eval-F5RD6Q3H.js → discover-eval-FWQESEYB.js} +3 -3
  83. package/dist/{doctor-P2MOEW3V.js → doctor-AXNJT2UC.js} +3 -3
  84. package/dist/{evidence-SUWXYKIW.js → evidence-2XGEY4ZC.js} +3 -3
  85. package/dist/{export-cmd-F3VXILID.js → export-cmd-7RMYBIBZ.js} +3 -3
  86. package/dist/{ga-44LAMZLT.js → ga-HZDIZGCO.js} +3 -3
  87. package/dist/{gbp-WUMYLWJR.js → gbp-SMRBWJEL.js} +3 -3
  88. package/dist/{google-L7YBFK2M.js → google-2CN345XS.js} +4 -4
  89. package/dist/{google-marketing-ZSXMIOO5.js → google-marketing-W7T2VTVW.js} +1 -1
  90. package/dist/{health-cmd-IIE77FT5.js → health-cmd-W7OWZ4ZI.js} +3 -3
  91. package/dist/{history-RK4UG5YE.js → history-UVNCBHTE.js} +3 -3
  92. package/dist/index.d.ts +9 -5
  93. package/dist/index.js +24 -24
  94. package/dist/{init-X2ADJGSC.js → init-MDGOTK2L.js} +11 -11
  95. package/dist/{insights-Z5IGGJMR.js → insights-PQ52G5LU.js} +3 -3
  96. package/dist/intelligence-service-IAUGKMDO.js +15 -0
  97. package/dist/{journeys-CHA56BCH.js → journeys-3PP5GYVJ.js} +3 -3
  98. package/dist/{keys-ATLI7E4N.js → keys-CWZUX7IQ.js} +3 -3
  99. package/dist/{keyword-MICVFKNQ.js → keyword-5OMMULLY.js} +3 -3
  100. package/dist/{logs-BTAFJPMJ.js → logs-3FTE42E3.js} +3 -3
  101. package/dist/{mcp-6GPRFCSX.js → mcp-FK5DTI7I.js} +2 -2
  102. package/dist/mcp.js +9 -9
  103. package/dist/{measurement-plan-PC2YTZ5L.js → measurement-plan-ICO2BQNT.js} +5 -5
  104. package/dist/{notify-UUO7K7PR.js → notify-ML4PYD3L.js} +3 -3
  105. package/dist/{organic-evidence-NLJZMQEH.js → organic-evidence-4U4H3DCR.js} +3 -3
  106. package/dist/{overview-B6NHPCSJ.js → overview-NF427VFO.js} +4 -4
  107. package/dist/{project-TZRDJVYR.js → project-AAO65OF7.js} +3 -3
  108. package/dist/{query-IS5DNPEZ.js → query-7ZOUQNF5.js} +3 -3
  109. package/dist/{research-4Q25MXA6.js → research-UQ7AF5N3.js} +3 -3
  110. package/dist/{results-export-AQXKBDV2.js → results-export-CZCLC4ZH.js} +3 -3
  111. package/dist/{run-NFQRNNMQ.js → run-4XJZW52R.js} +4 -4
  112. package/dist/{schedule-VID5OMNW.js → schedule-D3E5FDBE.js} +3 -3
  113. package/dist/{search-YKIYLRSE.js → search-DYET2IL4.js} +3 -3
  114. package/dist/{serve-DSPCXBV3.js → serve-R2CI3RWQ.js} +25 -25
  115. package/dist/{session-PZ5TREWF.js → session-7CW2V5EH.js} +12 -12
  116. package/dist/{settings-RMGOJNRU.js → settings-ZISHACFX.js} +3 -3
  117. package/dist/{skills-Q3FCYWQK.js → skills-WU6IN3NL.js} +2 -2
  118. package/dist/{snapshot-ZWWYWBMG.js → snapshot-KCKQDJ2W.js} +3 -3
  119. package/dist/{src-IBMZTBVL.js → src-WIOU5G4V.js} +2 -2
  120. package/dist/{status-6MTUPM2Y.js → status-CYZFVMYA.js} +4 -4
  121. package/dist/{technical-aeo-7CWV55RA.js → technical-aeo-P5CS22AR.js} +3 -3
  122. package/dist/{telemetry-PBRCF7MV.js → telemetry-LPK5F2WU.js} +4 -4
  123. package/dist/{tools-AUPH4K65.js → tools-E3B2GZ6Q.js} +11 -11
  124. package/dist/{traffic-24T4MSRG.js → traffic-5KZYXXIQ.js} +5 -5
  125. package/dist/{users-4WBWD7IO.js → users-2F346HIW.js} +3 -3
  126. package/dist/{visibility-stats-H6QWQUNH.js → visibility-stats-ITA6DNF3.js} +3 -3
  127. package/dist/{wordpress-QSAHAV7S.js → wordpress-ZHCFT6V3.js} +3 -3
  128. package/package.json +1 -1
  129. package/assets/assets/RunsPage-B-eTk2cT.js +0 -1
  130. package/assets/assets/ToneBadge-yx6FMD6v.js +0 -60
  131. package/dist/intelligence-service-JYOJ63Z2.js +0 -15
@@ -28,7 +28,7 @@ import {
28
28
  unknownUsageObservation,
29
29
  usdToMicros,
30
30
  withRetry
31
- } from "./chunk-T3QZVIPV.js";
31
+ } from "./chunk-DQVJB6CZ.js";
32
32
 
33
33
  // ../provider-answer-services/src/core/http.ts
34
34
  var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
@@ -3,7 +3,7 @@ import {
3
3
  resolveCliAccess,
4
4
  resolveCliAccessForInvocation,
5
5
  windowOptions
6
- } from "./chunk-LITW7QNO.js";
6
+ } from "./chunk-HO5W6QC7.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-T3QZVIPV.js";
17
+ } from "./chunk-DQVJB6CZ.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-FBB6DN3W.js");
114
+ const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-6XYQY3PI.js");
115
115
  const group2 = argsWithoutHelp.find((arg) => !arg.startsWith("--"));
116
116
  printCliCatalog2(specs, fallbackFormat, group2, accessValue);
117
117
  return true;
@@ -2,11 +2,11 @@ import {
2
2
  dedupeGscSitemapUrls,
3
3
  resolveDiscoveredGscSitemapUrls,
4
4
  submitGscSitemapBatches
5
- } from "./chunk-BTWB3ZAW.js";
5
+ } from "./chunk-ZWZOQNLD.js";
6
6
  import {
7
7
  measurementDraftOperationSchema,
8
8
  runMeasurementDraftAction
9
- } from "./chunk-EII2VL22.js";
9
+ } from "./chunk-ZPRJCSSR.js";
10
10
  import {
11
11
  CliError
12
12
  } from "./chunk-HGMYEDAQ.js";
@@ -173,7 +173,7 @@ import {
173
173
  trafficSeriesGranularitySchema,
174
174
  visibilityCompareSelectionSchema,
175
175
  visibilityReportRequestSchema
176
- } from "./chunk-T3QZVIPV.js";
176
+ } from "./chunk-DQVJB6CZ.js";
177
177
 
178
178
  // src/mcp/tool-registry.ts
179
179
  import { z as z2 } from "zod";
@@ -20,7 +20,7 @@ import {
20
20
  resolveProviderModel,
21
21
  schedulableRunKindSchema,
22
22
  sentimentEvaluatorProviderSchema
23
- } from "./chunk-T3QZVIPV.js";
23
+ } from "./chunk-DQVJB6CZ.js";
24
24
 
25
25
  // ../config/src/index.ts
26
26
  import { z as z4 } from "zod";
@@ -1,28 +1,29 @@
1
1
  import {
2
2
  runWithUsageTags
3
- } from "./chunk-IQVD3UND.js";
3
+ } from "./chunk-F7NZEUXP.js";
4
4
  import {
5
5
  CanonryMcpToolNames,
6
6
  canonryMcpTools
7
- } from "./chunk-C2DURF57.js";
7
+ } from "./chunk-BV6NXSAH.js";
8
8
  import {
9
9
  CliError
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-PKRH4UKJ.js";
13
+ } from "./chunk-Z2EENWM3.js";
14
14
  import {
15
15
  DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
16
16
  MeasurementPortfolioLists,
17
17
  RATIO_UNIT_META_KEY,
18
18
  RunKinds,
19
+ SchedulableRunKinds,
19
20
  describeError,
20
21
  formatPercent,
21
22
  ratioUnitSchema,
22
23
  seoDatasetWithoutVendor,
23
24
  seoProviderSchema,
24
25
  truncateUtf16
25
- } from "./chunk-T3QZVIPV.js";
26
+ } from "./chunk-DQVJB6CZ.js";
26
27
 
27
28
  // src/agent/tools.ts
28
29
  import { Type as Type2 } from "@earendil-works/pi-ai";
@@ -814,6 +815,18 @@ function refuseManagedSweepCancel(tool, ctx) {
814
815
  }
815
816
  };
816
817
  }
818
+ var SEO_SCHEDULE_REFUSAL = "Aero cannot schedule paid SEO refreshes. Ask the operator to set the seo-sync schedule.";
819
+ function refuseSeoScheduleWrite(tool) {
820
+ const write = tool.execute;
821
+ return {
822
+ ...tool,
823
+ execute: async (toolCallId, params, ...rest) => {
824
+ const schedule = isRecord2(params) && isRecord2(params.schedule) ? params.schedule : {};
825
+ if (schedule.kind === SchedulableRunKinds["seo-sync"] && schedule.enabled !== false) throw new Error(SEO_SCHEDULE_REFUSAL);
826
+ return write(toolCallId, params, ...rest);
827
+ }
828
+ };
829
+ }
817
830
  var COMPETITOR_AUTO_ALIAS_MODE_REFUSAL = "Aero cannot change a project's competitorAutoAliases mode. Omit competitorAutoAliases to keep the stored mode, or ask the operator to change it.";
818
831
  var COMPETITOR_AUTO_ALIAS_MODE_WRITES = /* @__PURE__ */ new Set([
819
832
  CanonryMcpToolNames.canonry_project_upsert,
@@ -875,6 +888,7 @@ function buildMcpAgentTools(registry, ctx, opts = {}) {
875
888
  const agentTool = mcpToAgentTool(tool, ctx);
876
889
  if (COMPETITOR_AUTO_ALIAS_MODE_WRITES.has(tool.name)) return refuseCompetitorAutoAliasModeChange(agentTool, ctx);
877
890
  if (tool.name === "canonry_competitors_add") return refuseCompetitorBulkAddAcknowledgement(agentTool);
891
+ if (tool.name === CanonryMcpToolNames.canonry_schedule_set) return refuseSeoScheduleWrite(agentTool);
878
892
  return opts.managedSweeps && tool.name === CanonryMcpToolNames.canonry_run_cancel ? refuseManagedSweepCancel(agentTool, ctx) : agentTool;
879
893
  });
880
894
  }
@@ -21518,7 +21518,7 @@ import { z as z69 } from "zod";
21518
21518
 
21519
21519
  // ../contracts/src/schedule.ts
21520
21520
  import { z as z68 } from "zod";
21521
- var schedulableRunKindSchema = z68.enum(["answer-visibility", "traffic-sync", "gbp-sync", "data-refresh", "backlinks-sync", "site-audit", "ads-sync", "doctor"]);
21521
+ var schedulableRunKindSchema = z68.enum(["answer-visibility", "traffic-sync", "gbp-sync", "data-refresh", "backlinks-sync", "site-audit", "ads-sync", "doctor", "seo-sync"]);
21522
21522
  var SchedulableRunKinds = schedulableRunKindSchema.enum;
21523
21523
  var calendarRecurrenceSchema = z68.object({
21524
21524
  everyDays: z68.number().int().min(1).max(3650),
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadConfig
3
- } from "./chunk-VXTI3APQ.js";
3
+ } from "./chunk-C2PYKUD3.js";
4
4
  import {
5
5
  PACKAGE_VERSION
6
6
  } from "./chunk-AOJU5LKX.js";
@@ -36,7 +36,7 @@ import {
36
36
  sentimentSettingsReadSchema,
37
37
  sentimentSummaryReadSchema,
38
38
  upgradeCommandFor
39
- } from "./chunk-T3QZVIPV.js";
39
+ } from "./chunk-DQVJB6CZ.js";
40
40
 
41
41
  // ../api-client-generated/src/generated/core/bodySerializer.gen.ts
42
42
  var jsonBodySerializer = {
@@ -6,12 +6,12 @@ import {
6
6
  import {
7
7
  createApiClient,
8
8
  runWithUsageTags
9
- } from "./chunk-IQVD3UND.js";
9
+ } from "./chunk-F7NZEUXP.js";
10
10
  import {
11
11
  canonryMcpTools,
12
12
  mcpOutputSchema,
13
13
  toolOperationAccess
14
- } from "./chunk-C2DURF57.js";
14
+ } from "./chunk-BV6NXSAH.js";
15
15
  import {
16
16
  PACKAGE_VERSION
17
17
  } from "./chunk-AOJU5LKX.js";
@@ -24,7 +24,7 @@ import {
24
24
  isReadOnlyKey,
25
25
  restrictedWriteScopes,
26
26
  upgradeCaveatFor
27
- } from "./chunk-T3QZVIPV.js";
27
+ } from "./chunk-DQVJB6CZ.js";
28
28
 
29
29
  // src/mcp/server.ts
30
30
  import { randomUUID } from "crypto";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  answerServiceAdapters,
3
3
  answerServiceDescriptors
4
- } from "./chunk-VXKMJFPV.js";
4
+ } from "./chunk-737TOG2F.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-7RZFTNWT.js";
30
+ } from "./chunk-2AROR73F.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-XRE7XAYH.js";
37
+ } from "./chunk-CRKOGLKJ.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-PNDART6A.js";
56
+ } from "./chunk-QNRMYDK6.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-UGVEFUZ4.js";
67
+ } from "./chunk-HPUZMBS6.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-NE4KRQYV.js";
79
+ } from "./chunk-M3OZL6PQ.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-565ZI72D.js";
87
+ } from "./chunk-IYB3EGSD.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-XFZPSZKU.js";
98
+ } from "./chunk-XMKXXWMO.js";
99
99
  import {
100
100
  createCanonryMcpServer
101
- } from "./chunk-S42DBIIC.js";
101
+ } from "./chunk-GM5ZOWBK.js";
102
102
  import {
103
103
  CANONRY_MCP_TIERS,
104
104
  CANONRY_MCP_TOOLKIT_NAMES
105
105
  } from "./chunk-NDTU7FGL.js";
106
106
  import {
107
107
  ApiClient
108
- } from "./chunk-IQVD3UND.js";
108
+ } from "./chunk-F7NZEUXP.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-VXTI3APQ.js";
139
+ } from "./chunk-C2PYKUD3.js";
140
140
  import {
141
141
  getBundledSkillSnapshots
142
- } from "./chunk-FBHW62IM.js";
142
+ } from "./chunk-SL3Y7IOX.js";
143
143
  import {
144
144
  computeFactorAverages,
145
145
  deleteSiteCrawlGraphLayout,
146
146
  persistSiteCrawlGraphLayout,
147
147
  prepareSiteCrawlGraphLayout,
148
148
  recordedSharePct
149
- } from "./chunk-DEO75ZSC.js";
149
+ } from "./chunk-H6HIJAIU.js";
150
150
  import {
151
151
  CanonryMcpToolNames,
152
152
  canonryMcpTools
153
- } from "./chunk-C2DURF57.js";
153
+ } from "./chunk-BV6NXSAH.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-GPNOJVM2.js";
165
+ } from "./chunk-X4AHYJCE.js";
166
166
  import {
167
167
  computeCitedCompetitorDomains,
168
168
  determineCitationState
169
- } from "./chunk-SFHUS5N4.js";
169
+ } from "./chunk-S4VCXCRQ.js";
170
170
  import {
171
171
  BingApiError,
172
172
  CC_CACHE_DIR,
@@ -278,6 +278,7 @@ import {
278
278
  sentimentClassifierInput,
279
279
  sentimentHash,
280
280
  serializeUserSessionCookie,
281
+ startScheduledSeoRefreshes,
281
282
  stripIpv6Brackets,
282
283
  syncRunClaimKey,
283
284
  toAlertView,
@@ -285,7 +286,7 @@ import {
285
286
  webhookResponseReason,
286
287
  webhookTargetRefusalReason,
287
288
  writeAuditLog
288
- } from "./chunk-PKRH4UKJ.js";
289
+ } from "./chunk-Z2EENWM3.js";
289
290
  import {
290
291
  OperationalLogStore,
291
292
  SentimentIdempotencyConflict,
@@ -371,7 +372,7 @@ import {
371
372
  siteLivenessState,
372
373
  trafficSources,
373
374
  usageCounters
374
- } from "./chunk-DMNRYTX7.js";
375
+ } from "./chunk-XOMUSIM7.js";
375
376
  import {
376
377
  AGENT_MEMORY_VALUE_MAX_BYTES,
377
378
  AI_ENGINE_DOMAINS,
@@ -617,7 +618,7 @@ import {
617
618
  winnabilityClassLabel,
618
619
  withRetry,
619
620
  withSkippedProviders
620
- } from "./chunk-T3QZVIPV.js";
621
+ } from "./chunk-DQVJB6CZ.js";
621
622
 
622
623
  // src/google-marketing-runtime.ts
623
624
  import crypto2 from "crypto";
@@ -5658,7 +5659,7 @@ function nonBlank(value) {
5658
5659
  return trimmed ? trimmed : void 0;
5659
5660
  }
5660
5661
  function resolveBuildCommit(env = process.env) {
5661
- const embedded = true ? "46743eebf70a09339eb539187ee3b76e134516e6" : void 0;
5662
+ const embedded = true ? "d690131dbffb56d442cbb05eb5b318e6f7e9f499" : void 0;
5662
5663
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5663
5664
  }
5664
5665
  function resolveInstanceIdentity(env = process.env) {
@@ -13423,6 +13424,29 @@ var Scheduler = class {
13423
13424
  this.callbacks.onAdsSyncRequested(runId2, projectId);
13424
13425
  return SLOT_FIRED;
13425
13426
  }
13427
+ if (kind === SchedulableRunKinds["seo-sync"]) {
13428
+ if (!this.callbacks.onSeoSyncRequested) {
13429
+ log17.warn("seo-sync.no-callback", { scheduleId, projectId, msg: "host did not register onSeoSyncRequested" });
13430
+ return slotFailed(OutcomeReasonCodes.UNSUPPORTED);
13431
+ }
13432
+ const activeSeoRun = this.db.select({ id: runs.id }).from(runs).where(and17(
13433
+ eq20(runs.projectId, projectId),
13434
+ eq20(runs.kind, RunKinds["seo-sync"]),
13435
+ inArray10(runs.status, [RunStatuses.queued, RunStatuses.running])
13436
+ )).get();
13437
+ if (activeSeoRun) {
13438
+ log17.info("seo-sync.skipped-active", { projectName: project.name, activeRunId: activeSeoRun.id });
13439
+ this.updateScheduleTiming(currentSchedule.id, { nextRunAt });
13440
+ return slotSkipped(OutcomeReasonCodes.OPERATION_IN_PROGRESS);
13441
+ }
13442
+ this.updateScheduleTiming(currentSchedule.id, {
13443
+ lastRunAt: now,
13444
+ nextRunAt
13445
+ });
13446
+ log17.info("seo-sync.triggered", { projectName: project.name });
13447
+ this.callbacks.onSeoSyncRequested({ scheduleId, projectId, occurrence: now.slice(0, 16) });
13448
+ return SLOT_FIRED;
13449
+ }
13426
13450
  if (kind === SchedulableRunKinds["data-refresh"]) {
13427
13451
  if (!this.callbacks.onDataRefreshRequested) {
13428
13452
  log17.warn("data-refresh.no-callback", { scheduleId, projectId, msg: "host did not register onDataRefreshRequested" });
@@ -19776,6 +19800,24 @@ async function createServer(opts) {
19776
19800
  },
19777
19801
  onSiteAuditRequested: (runId, projectId, auditOpts) => {
19778
19802
  runSiteAudit(runId, projectId, auditOpts);
19803
+ },
19804
+ onSeoSyncRequested: ({ scheduleId, projectId, occurrence }) => {
19805
+ try {
19806
+ const outcomes = startScheduledSeoRefreshes(
19807
+ opts.db,
19808
+ { getSeoRuntime: seoRuntime.getRuntime, onSeoRunRequested: () => seoRuntime.wake() },
19809
+ { scheduleId, projectId, occurrence }
19810
+ );
19811
+ for (const outcome of outcomes) {
19812
+ if (outcome.status === "skipped") {
19813
+ app.log.warn({ projectId, profileId: outcome.profileId, runId: outcome.runId, reason: outcome.reason, detail: outcome.detail }, "Scheduled SEO refresh did not start");
19814
+ } else {
19815
+ app.log.info({ projectId, profileId: outcome.profileId, runId: outcome.runId, status: outcome.status }, "Scheduled SEO refresh admitted");
19816
+ }
19817
+ }
19818
+ } catch (err) {
19819
+ app.log.error({ projectId, err: describeError(err) }, "Scheduled SEO refresh failed");
19820
+ }
19779
19821
  }
19780
19822
  }, { spreadMs: opts.scheduleSpreadMs ?? SCHEDULE_SPREAD_MS });
19781
19823
  const providerSummary = providerSummaries(registry, opts.config);
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  trackIntegrationConnection
3
- } from "./chunk-NE4KRQYV.js";
3
+ } from "./chunk-M3OZL6PQ.js";
4
4
  import {
5
5
  cliRuntimeContext
6
- } from "./chunk-XFZPSZKU.js";
6
+ } from "./chunk-XMKXXWMO.js";
7
7
 
8
8
  // src/cli-connection-telemetry.ts
9
9
  function trackCliConnection(properties) {
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-DMNRYTX7.js";
8
+ } from "./chunk-XOMUSIM7.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-T3QZVIPV.js";
18
+ } from "./chunk-DQVJB6CZ.js";
19
19
 
20
20
  // src/site-audit-factors.ts
21
21
  function recordedSharePct(factor) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-IQVD3UND.js";
3
+ } from "./chunk-F7NZEUXP.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-T3QZVIPV.js";
22
+ } from "./chunk-DQVJB6CZ.js";
23
23
 
24
24
  // src/commands/run.ts
25
25
  function getClient() {
@@ -5,7 +5,7 @@ import {
5
5
  AppError,
6
6
  parseWindowIn,
7
7
  resolveDateRange
8
- } from "./chunk-T3QZVIPV.js";
8
+ } from "./chunk-DQVJB6CZ.js";
9
9
 
10
10
  // src/cli-access.ts
11
11
  var CLI_ACCESS_BY_ID = Object.freeze({
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseJsonColumn
3
- } from "./chunk-DMNRYTX7.js";
3
+ } from "./chunk-XOMUSIM7.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-T3QZVIPV.js";
29
+ } from "./chunk-DQVJB6CZ.js";
30
30
 
31
31
  // ../provider-openai/src/normalize.ts
32
32
  import OpenAI from "openai";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  USAGE_TELEMETRY_HEADERS,
3
3
  redactLogString
4
- } from "./chunk-T3QZVIPV.js";
4
+ } from "./chunk-DQVJB6CZ.js";
5
5
 
6
6
  // ../api-routes/src/request-context.ts
7
7
  import { AsyncLocalStorage } from "async_hooks";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  API_PROVIDER_NAMES,
3
3
  ProviderNames
4
- } from "./chunk-T3QZVIPV.js";
4
+ } from "./chunk-DQVJB6CZ.js";
5
5
 
6
6
  // src/provider-registration.ts
7
7
  function isApiProviderRegistrable(name, entry) {
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-HGMYEDAQ.js";
9
9
  import {
10
10
  describeError
11
- } from "./chunk-T3QZVIPV.js";
11
+ } from "./chunk-DQVJB6CZ.js";
12
12
 
13
13
  // src/commands/mcp.ts
14
14
  import fs from "fs";
@@ -2,13 +2,13 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-XFZPSZKU.js";
5
+ } from "./chunk-XMKXXWMO.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-VXTI3APQ.js";
8
+ } from "./chunk-C2PYKUD3.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
- } from "./chunk-R62SF6QP.js";
11
+ } from "./chunk-IJKKK7F4.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-T3QZVIPV.js";
22
+ } from "./chunk-DQVJB6CZ.js";
23
23
 
24
24
  // src/outcome-telemetry.ts
25
25
  import fs from "fs";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registeredProviderNames
3
- } from "./chunk-565ZI72D.js";
3
+ } from "./chunk-IYB3EGSD.js";
4
4
  import {
5
5
  configExists,
6
6
  loadConfigRaw
7
- } from "./chunk-VXTI3APQ.js";
7
+ } from "./chunk-C2PYKUD3.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-IBMZTBVL.js");
31
+ const { createClient, projects, queries: queriesTable } = await import("./src-WIOU5G4V.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-DSPCXBV3.js");
50
+ const { serveCommand } = await import("./serve-R2CI3RWQ.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -8,7 +8,7 @@ import {
8
8
  classifyJourneyEntry,
9
9
  hostMatchesDomain,
10
10
  hostOf
11
- } from "./chunk-T3QZVIPV.js";
11
+ } from "./chunk-DQVJB6CZ.js";
12
12
 
13
13
  // ../integration-traffic/src/ip-ranges/amazonbot.json
14
14
  var amazonbot_default = {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cloudflareQueueNameSchema
3
- } from "./chunk-T3QZVIPV.js";
3
+ } from "./chunk-DQVJB6CZ.js";
4
4
 
5
5
  // src/cloudflare-traffic-config.ts
6
6
  function unsupportedDeliveryMode(deliveryMode) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hostMatchesDomain
3
- } from "./chunk-T3QZVIPV.js";
3
+ } from "./chunk-DQVJB6CZ.js";
4
4
 
5
5
  // src/citation-utils.ts
6
6
  function pickProjectCitedDomain(citedDomains, projectDomains) {
@@ -15,7 +15,7 @@ import {
15
15
  formatCanonryPluginUpdateHint,
16
16
  formatCanonryPluginVersionMismatch,
17
17
  skillsClientSchema
18
- } from "./chunk-T3QZVIPV.js";
18
+ } from "./chunk-DQVJB6CZ.js";
19
19
 
20
20
  // src/commands/skills.ts
21
21
  import crypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pickProjectCitedDomain
3
- } from "./chunk-SFHUS5N4.js";
3
+ } from "./chunk-S4VCXCRQ.js";
4
4
  import {
5
5
  GBP_INSIGHT_PROVIDER,
6
6
  PERSISTENT_GAP_THRESHOLD,
@@ -14,10 +14,10 @@ import {
14
14
  mergeGscQueryTotalsWithFallback,
15
15
  readGscQueryDailyRows,
16
16
  readLatestGscDataDate
17
- } from "./chunk-PKRH4UKJ.js";
17
+ } from "./chunk-Z2EENWM3.js";
18
18
  import {
19
19
  getRequestContext
20
- } from "./chunk-R62SF6QP.js";
20
+ } from "./chunk-IJKKK7F4.js";
21
21
  import {
22
22
  competitors,
23
23
  gbpDailyMetrics,
@@ -35,7 +35,7 @@ import {
35
35
  queries,
36
36
  querySnapshots,
37
37
  runs
38
- } from "./chunk-DMNRYTX7.js";
38
+ } from "./chunk-XOMUSIM7.js";
39
39
  import {
40
40
  CitationStates,
41
41
  RunKinds,
@@ -45,7 +45,7 @@ import {
45
45
  effectiveDomains,
46
46
  redactLogString,
47
47
  redactLogValue
48
- } from "./chunk-T3QZVIPV.js";
48
+ } from "./chunk-DQVJB6CZ.js";
49
49
 
50
50
  // src/intelligence-service.ts
51
51
  import { eq, desc, asc, and, ne, or, inArray, gte, lte, isNull, sql, exists } from "drizzle-orm";
@@ -5,7 +5,7 @@ import {
5
5
  loadConfig,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-VXTI3APQ.js";
8
+ } from "./chunk-C2PYKUD3.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-T3QZVIPV.js";
21
+ } from "./chunk-DQVJB6CZ.js";
22
22
 
23
23
  // src/runtime-context.ts
24
24
  function cliRuntimeContext(env = process.env, stdio = process) {