@canonry/canonry 7.90.2 → 7.91.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 (136) hide show
  1. package/README.md +182 -125
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +4 -0
  3. package/assets/assets/{AgentSetupPage-FfxjZWI8.js → AgentSetupPage-DpBlChWi.js} +1 -1
  4. package/assets/assets/{AuditHistoryPanel-YrEggsyA.js → AuditHistoryPanel-DAotR_zD.js} +1 -1
  5. package/assets/assets/{BacklinksPage-vXUxxplH.js → BacklinksPage-CFoi9mrt.js} +1 -1
  6. package/assets/assets/{HistoryPage-VJ_JQ7R3.js → HistoryPage-DIGmY4wi.js} +1 -1
  7. package/assets/assets/{MeasurementPropertyPage-DVm7CHU8.js → MeasurementPropertyPage-C6o9U2R6.js} +1 -1
  8. package/assets/assets/{ProjectPage-D6mHRRSs.js → ProjectPage-00Vsnxv4.js} +1 -1
  9. package/assets/assets/{RunsPage-DwtYzU9w.js → RunsPage-ChSbIrF9.js} +1 -1
  10. package/assets/assets/{SettingsPage-DsmgLFb7.js → SettingsPage-CIrzXeP8.js} +1 -1
  11. package/assets/assets/{SiteHealthSection-CFu6JBTb.js → SiteHealthSection-HZXdeAOx.js} +2 -2
  12. package/assets/assets/ToneBadge-ht0n6RUH.js +60 -0
  13. package/assets/assets/{TrafficPage-DGPSaWTl.js → TrafficPage-ZYsFSEuq.js} +1 -1
  14. package/assets/assets/{TrafficSourceDetailPage-C79eQilP.js → TrafficSourceDetailPage-D5uJZpZ4.js} +1 -1
  15. package/assets/assets/{account-context-GstYbqpX.js → account-context-DMLbDVNZ.js} +1 -1
  16. package/assets/assets/{agent-trust-copy-Ca4ys8J2.js → agent-trust-copy-DbpAXPxc.js} +1 -1
  17. package/assets/assets/{card-CgdGerYK.js → card-Be_eN_-Q.js} +1 -1
  18. package/assets/assets/{format-helpers-ByAY4dv0.js → format-helpers-IKCsn-Iw.js} +1 -1
  19. package/assets/assets/{index-D1ox2bx5.js → index-3jdPlyTf.js} +4 -4
  20. package/assets/assets/{query-client-DjRrRIsq.js → query-client-CoKNm49W.js} +1 -1
  21. package/assets/assets/{react-query-B8JD_K7g.js → react-query-DIdeX4Dn.js} +1 -1
  22. package/assets/assets/{react-sigma_core.esm.min-BGXzc_-G.js → react-sigma_core.esm.min-De3OcL3T.js} +1 -1
  23. package/assets/assets/{server-traffic-Bt9bexaP.js → server-traffic-DvN44H1n.js} +1 -1
  24. package/assets/assets/{service-SgtD5EOS.js → service-RpR2yqfP.js} +1 -1
  25. package/assets/index.html +7 -7
  26. package/dist/{ads-6BAITIBY.js → ads-QS4QEBHX.js} +3 -3
  27. package/dist/{agent-BE3D65U4.js → agent-TTGLGLPD.js} +7 -7
  28. package/dist/{agent-ask-TT6BAV2T.js → agent-ask-EBYJSSGR.js} +3 -3
  29. package/dist/{agent-conversations-GJDAWU36.js → agent-conversations-LPBMYN4F.js} +3 -3
  30. package/dist/{agent-journeys-UEL27GNY.js → agent-journeys-EL27YZKQ.js} +3 -3
  31. package/dist/{agent-memory-PB74OP46.js → agent-memory-YNWTLZGS.js} +3 -3
  32. package/dist/{agent-providers-5WFMNRRK.js → agent-providers-T7HJEQYM.js} +3 -3
  33. package/dist/{agent-transcript-IAGB3JXG.js → agent-transcript-EY6KUYYG.js} +3 -3
  34. package/dist/{analytics-5BVE7KUN.js → analytics-NTO6DGQ2.js} +3 -3
  35. package/dist/{apply-YJJWQ4JX.js → apply-UGT7DZHG.js} +3 -3
  36. package/dist/{backfill-6OLGZIEV.js → backfill-KDTC6JEP.js} +10 -10
  37. package/dist/{backlinks-4JK26OIO.js → backlinks-JRG57JRJ.js} +3 -3
  38. package/dist/{bing-NZYYPB2M.js → bing-ZV6QDFTJ.js} +3 -3
  39. package/dist/{bootstrap-6KHK63W3.js → bootstrap-GJHNMV5P.js} +10 -10
  40. package/dist/{cdp-PTXWVX6T.js → cdp-ZN47QU5O.js} +7 -7
  41. package/dist/{chunk-N7LRPMWR.js → chunk-2N7BYEZO.js} +2 -2
  42. package/dist/{chunk-ZV6PMFF4.js → chunk-3HNHOS6O.js} +1 -1
  43. package/dist/{chunk-HUQDD26S.js → chunk-3MIZP4IB.js} +7 -7
  44. package/dist/{chunk-SDXMG4VX.js → chunk-42OW42AR.js} +33 -7
  45. package/dist/{chunk-WYMBWCG5.js → chunk-4FFIIZB5.js} +1 -1
  46. package/dist/{chunk-AFYKUX2X.js → chunk-56EXMS52.js} +2 -2
  47. package/dist/{chunk-DZO6CATO.js → chunk-6DP2YPZY.js} +4 -4
  48. package/dist/{chunk-NKGQCCUS.js → chunk-6PNFPMLD.js} +6 -6
  49. package/dist/{chunk-7VJJXLRP.js → chunk-7KHSKOV6.js} +3 -3
  50. package/dist/{chunk-TA4L7U2M.js → chunk-AXWUCOYT.js} +1 -1
  51. package/dist/{chunk-USHY3SH6.js → chunk-C3BSCGUH.js} +15 -1
  52. package/dist/{chunk-K34Y6HQZ.js → chunk-DXXHZHPE.js} +390 -362
  53. package/dist/{chunk-QWNDNZJ3.js → chunk-EOIH5XHT.js} +2 -2
  54. package/dist/{chunk-DF4B6OGX.js → chunk-FAXYDTV5.js} +4 -4
  55. package/dist/{chunk-WNDBACO7.js → chunk-IHMODTQ7.js} +4 -4
  56. package/dist/{chunk-7ASKZHS4.js → chunk-IQ5RKJKQ.js} +1 -1
  57. package/dist/{chunk-PID3C4B7.js → chunk-L5U7VT4A.js} +1 -1
  58. package/dist/{chunk-UG7TZJIG.js → chunk-LSIE5MHG.js} +1 -1
  59. package/dist/{chunk-MGBUQHQZ.js → chunk-M322ZEOQ.js} +4 -4
  60. package/dist/{chunk-NPX5SL54.js → chunk-NAPFULBT.js} +1 -1
  61. package/dist/{chunk-YB2GAK32.js → chunk-NL2WM6OB.js} +5 -5
  62. package/dist/{chunk-2UULABPI.js → chunk-OI6YQMSB.js} +3 -3
  63. package/dist/{chunk-GKX5F7NX.js → chunk-P4MNYMJJ.js} +1 -1
  64. package/dist/{chunk-I7DAEE3L.js → chunk-PAXP5KZC.js} +5 -5
  65. package/dist/{chunk-ETIIPSWL.js → chunk-PQNT2JUO.js} +25 -0
  66. package/dist/{chunk-LTZNUDSI.js → chunk-QUS7755A.js} +3 -3
  67. package/dist/{chunk-XCEA5OMI.js → chunk-SYOQULRL.js} +2 -2
  68. package/dist/{chunk-Q6EZEVXE.js → chunk-UQVUDSAV.js} +1 -1
  69. package/dist/{chunk-K2B64IEQ.js → chunk-VFQMRUGN.js} +30 -23
  70. package/dist/{chunk-L2MDMZFT.js → chunk-W6H7WDHW.js} +3 -3
  71. package/dist/{chunk-LQWMNDZR.js → chunk-WOEGZKXQ.js} +1 -1
  72. package/dist/{chunk-F6WNKKGG.js → chunk-WTKGSKCS.js} +2 -2
  73. package/dist/{chunk-QLVTMPFW.js → chunk-YCRSIOIN.js} +2 -2
  74. package/dist/{chunk-F442MSX2.js → chunk-YFOTI7LJ.js} +2 -2
  75. package/dist/{chunk-OOVWMWMT.js → chunk-YVY23HNW.js} +1 -1
  76. package/dist/{citations-WX4VO6ZI.js → citations-6723MJLH.js} +3 -3
  77. package/dist/{cli-catalog-BTRNR2UP.js → cli-catalog-RVBNEPWA.js} +3 -3
  78. package/dist/{cli-commands-TJBEUBBX.js → cli-commands-6ZOUHE3V.js} +7 -7
  79. package/dist/cli.js +13 -13
  80. package/dist/{competitor-HZRZWCEN.js → competitor-ENYN5RAD.js} +3 -3
  81. package/dist/{content-NOZDHI3M.js → content-TT3PF4CR.js} +3 -3
  82. package/dist/{dashboard-TZLWHXP4.js → dashboard-JLCJDU2V.js} +6 -6
  83. package/dist/{demo-2PYBQD47.js → demo-KMVR3ZWW.js} +1 -1
  84. package/dist/{demo-server-JEQNGMMV.js → demo-server-QXI7BGMM.js} +12 -12
  85. package/dist/{discover-A2XFXHOC.js → discover-HATQTTDG.js} +3 -3
  86. package/dist/{discover-eval-A6SBUYXF.js → discover-eval-64TWPB5Z.js} +3 -3
  87. package/dist/{doctor-GZACELPF.js → doctor-6C5TXOG3.js} +3 -3
  88. package/dist/{evidence-RVFMUWIL.js → evidence-K43NRSOT.js} +3 -3
  89. package/dist/{export-cmd-X2TFZGNJ.js → export-cmd-KU64GUQ5.js} +3 -3
  90. package/dist/{ga-TOT3V67A.js → ga-KXKLUQBQ.js} +3 -3
  91. package/dist/{gbp-KP4YZU6S.js → gbp-5CZTROVP.js} +3 -3
  92. package/dist/{google-GCFSTV5N.js → google-6TNU7SVF.js} +4 -4
  93. package/dist/{google-marketing-ANS65KQN.js → google-marketing-UCUIJBQG.js} +1 -1
  94. package/dist/{health-cmd-UKMNLU6D.js → health-cmd-ZFJ7ZOWI.js} +3 -3
  95. package/dist/{history-TWGYSAZZ.js → history-V664SORR.js} +3 -3
  96. package/dist/index.d.ts +59 -32
  97. package/dist/index.js +25 -25
  98. package/dist/{init-3GSNOIUH.js → init-TAIUP5GV.js} +12 -12
  99. package/dist/{insights-7IOC7WIR.js → insights-JFW7HBPR.js} +3 -3
  100. package/dist/intelligence-service-RRKHXZ2N.js +16 -0
  101. package/dist/{journeys-NWKT45PT.js → journeys-QTZXBKBT.js} +3 -3
  102. package/dist/{keys-ZZYZUHUK.js → keys-KGI5S2IE.js} +3 -3
  103. package/dist/{keyword-F6EIX5KM.js → keyword-XU6Y4XVH.js} +3 -3
  104. package/dist/{logs-B45FXS6E.js → logs-E2DQXWQQ.js} +3 -3
  105. package/dist/{mcp-WPNCNWA5.js → mcp-PQE6WFED.js} +4 -4
  106. package/dist/mcp.js +9 -9
  107. package/dist/{measurement-plan-QT5HJ3KC.js → measurement-plan-NBGLF7BI.js} +5 -5
  108. package/dist/{notify-Z3LIF3SO.js → notify-SHEAQNUJ.js} +3 -3
  109. package/dist/{organic-evidence-R5TM7XUB.js → organic-evidence-LMXCFABG.js} +3 -3
  110. package/dist/{overview-6TZHJLQN.js → overview-MXEBDUCA.js} +4 -4
  111. package/dist/{project-VMPVOQ2A.js → project-MWZGTK4S.js} +3 -3
  112. package/dist/{query-EXSH5QP7.js → query-EZQY45JT.js} +3 -3
  113. package/dist/{research-6R6BEL4X.js → research-PSPDLEQL.js} +3 -3
  114. package/dist/{results-export-ZJRL3ECU.js → results-export-7FLSFC7J.js} +3 -3
  115. package/dist/{run-C4VXAJE3.js → run-MASOXS63.js} +4 -4
  116. package/dist/{schedule-KC6ETWMO.js → schedule-V32G7TBR.js} +21 -5
  117. package/dist/{search-SUR6BEQD.js → search-R2S5CAVK.js} +3 -3
  118. package/dist/{serve-SEHH35PJ.js → serve-PGPQOVGC.js} +26 -26
  119. package/dist/{session-D42KUKCZ.js → session-MNEWM2CT.js} +13 -13
  120. package/dist/{settings-LTCG3D5B.js → settings-KBY4766O.js} +3 -3
  121. package/dist/{sitemaps-YMTZLF5S.js → sitemaps-FLMA6DMY.js} +3 -3
  122. package/dist/{skills-THMG3L64.js → skills-WAHOLVYH.js} +2 -2
  123. package/dist/{snapshot-ZEVB3EE4.js → snapshot-VJYM7UX2.js} +3 -3
  124. package/dist/{src-HPVSTXVF.js → src-XVBKS6UX.js} +2 -2
  125. package/dist/{status-LPCPTWKO.js → status-YFAUBVEA.js} +4 -4
  126. package/dist/{technical-aeo-J6LNT45B.js → technical-aeo-656NEU3A.js} +3 -3
  127. package/dist/{telemetry-BPY34GDV.js → telemetry-CJ7ENZDY.js} +4 -4
  128. package/dist/{tools-K3G43ESI.js → tools-4STRCC7Q.js} +11 -11
  129. package/dist/{traffic-BOIFAPAR.js → traffic-NN6ECPRS.js} +5 -5
  130. package/dist/{trends-A2MDRSQQ.js → trends-HXZVTQ3I.js} +3 -3
  131. package/dist/{users-VJOQODJK.js → users-PELDCAXQ.js} +3 -3
  132. package/dist/{visibility-stats-YNMJYASA.js → visibility-stats-W3AELURT.js} +3 -3
  133. package/dist/{wordpress-BWG6D7VH.js → wordpress-TAVEI2XQ.js} +3 -3
  134. package/package.json +1 -1
  135. package/assets/assets/ToneBadge-B3rD6bDF.js +0 -60
  136. package/dist/intelligence-service-42Q3OVI5.js +0 -16
@@ -1,25 +1,25 @@
1
1
  import {
2
2
  trackCliConnection
3
- } from "./chunk-QLVTMPFW.js";
3
+ } from "./chunk-YCRSIOIN.js";
4
4
  import {
5
5
  answerServiceDescriptors
6
- } from "./chunk-TA4L7U2M.js";
6
+ } from "./chunk-AXWUCOYT.js";
7
7
  import {
8
8
  outcomeFailure
9
- } from "./chunk-DZO6CATO.js";
9
+ } from "./chunk-6DP2YPZY.js";
10
10
  import {
11
11
  isLoopbackBindHost
12
12
  } from "./chunk-TSENU4GG.js";
13
13
  import {
14
14
  registeredProviderNames
15
- } from "./chunk-LQWMNDZR.js";
15
+ } from "./chunk-WOEGZKXQ.js";
16
16
  import {
17
17
  isTelemetryEnabled,
18
18
  recordInstallRef
19
- } from "./chunk-AFYKUX2X.js";
19
+ } from "./chunk-56EXMS52.js";
20
20
  import {
21
21
  createApiClient
22
- } from "./chunk-F6WNKKGG.js";
22
+ } from "./chunk-WTKGSKCS.js";
23
23
  import {
24
24
  configExists,
25
25
  getAnswerServiceEnv,
@@ -30,7 +30,7 @@ import {
30
30
  loadConfigRaw,
31
31
  saveConfig,
32
32
  withBootstrapProviderDefaults
33
- } from "./chunk-OOVWMWMT.js";
33
+ } from "./chunk-YVY23HNW.js";
34
34
  import "./chunk-AOJU5LKX.js";
35
35
  import {
36
36
  CliError,
@@ -38,17 +38,17 @@ import {
38
38
  isMachineFormat,
39
39
  systemError
40
40
  } from "./chunk-HGMYEDAQ.js";
41
- import "./chunk-ZV6PMFF4.js";
41
+ import "./chunk-3HNHOS6O.js";
42
42
  import {
43
43
  apiKeys,
44
44
  createClient,
45
45
  dashboardSessions,
46
46
  migrate
47
- } from "./chunk-USHY3SH6.js";
47
+ } from "./chunk-C3BSCGUH.js";
48
48
  import {
49
49
  ProviderNames,
50
50
  ProviderReloadErrorReasons
51
- } from "./chunk-ETIIPSWL.js";
51
+ } from "./chunk-PQNT2JUO.js";
52
52
  import "./chunk-MLKGABMK.js";
53
53
 
54
54
  // src/commands/bootstrap.ts
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  trackCliConnection
3
- } from "./chunk-QLVTMPFW.js";
3
+ } from "./chunk-YCRSIOIN.js";
4
4
  import {
5
5
  outcomeFailure
6
- } from "./chunk-DZO6CATO.js";
7
- import "./chunk-AFYKUX2X.js";
6
+ } from "./chunk-6DP2YPZY.js";
7
+ import "./chunk-56EXMS52.js";
8
8
  import {
9
9
  createApiClient
10
- } from "./chunk-F6WNKKGG.js";
10
+ } from "./chunk-WTKGSKCS.js";
11
11
  import {
12
12
  loadConfig,
13
13
  saveConfigPatch
14
- } from "./chunk-OOVWMWMT.js";
14
+ } from "./chunk-YVY23HNW.js";
15
15
  import "./chunk-AOJU5LKX.js";
16
16
  import {
17
17
  CliError,
18
18
  isMachineFormat
19
19
  } from "./chunk-HGMYEDAQ.js";
20
- import "./chunk-ZV6PMFF4.js";
20
+ import "./chunk-3HNHOS6O.js";
21
21
  import {
22
22
  describeError
23
- } from "./chunk-ETIIPSWL.js";
23
+ } from "./chunk-PQNT2JUO.js";
24
24
  import "./chunk-MLKGABMK.js";
25
25
 
26
26
  // src/commands/cdp.ts
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-USHY3SH6.js";
8
+ } from "./chunk-C3BSCGUH.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-ETIIPSWL.js";
18
+ } from "./chunk-PQNT2JUO.js";
19
19
 
20
20
  // src/site-audit-factors.ts
21
21
  function recordedSharePct(factor) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  USAGE_TELEMETRY_HEADERS,
3
3
  redactLogString
4
- } from "./chunk-ETIIPSWL.js";
4
+ } from "./chunk-PQNT2JUO.js";
5
5
 
6
6
  // ../api-routes/src/request-context.ts
7
7
  import { AsyncLocalStorage } from "async_hooks";
@@ -8,23 +8,23 @@ import {
8
8
  reparseStoredResult4,
9
9
  reparseStoredResult5,
10
10
  resolveStoredApiResponse
11
- } from "./chunk-I7DAEE3L.js";
11
+ } from "./chunk-PAXP5KZC.js";
12
12
  import {
13
13
  loadConfig
14
- } from "./chunk-OOVWMWMT.js";
14
+ } from "./chunk-YVY23HNW.js";
15
15
  import {
16
16
  isMachineFormat
17
17
  } from "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  determineCitationState
20
- } from "./chunk-GKX5F7NX.js";
20
+ } from "./chunk-P4MNYMJJ.js";
21
21
  import {
22
22
  backfillProjectAnswerMentions,
23
23
  competitorIdentityColumns,
24
24
  createRunCompetitorResolver,
25
25
  readMarketCompetitorNames,
26
26
  refreshSnapshotMentionIdentity
27
- } from "./chunk-SDXMG4VX.js";
27
+ } from "./chunk-42OW42AR.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-USHY3SH6.js";
41
+ } from "./chunk-C3BSCGUH.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-ETIIPSWL.js";
54
+ } from "./chunk-PQNT2JUO.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-42Q3OVI5.js");
432
+ const { IntelligenceService } = await import("./intelligence-service-RRKHXZ2N.js");
433
433
  const config = loadConfig();
434
434
  const db = createClient(config.database);
435
435
  migrate(db);
@@ -15,14 +15,14 @@ import {
15
15
  normalizeCloudflareWorkerEvent,
16
16
  sessionizeJourneyRequests,
17
17
  verifyRequestSignature
18
- } from "./chunk-NPX5SL54.js";
18
+ } from "./chunk-NAPFULBT.js";
19
19
  import {
20
20
  currentOutcomeAttribution,
21
21
  getRequestContext,
22
22
  registerRequestContext,
23
23
  requestAuditIdentity,
24
24
  sanitizeRequestContext
25
- } from "./chunk-ZV6PMFF4.js";
25
+ } from "./chunk-3HNHOS6O.js";
26
26
  import {
27
27
  RawEventSampleEventTypes,
28
28
  SentimentIdempotencyConflict,
@@ -180,7 +180,7 @@ import {
180
180
  userSessions,
181
181
  users,
182
182
  writeNegativeReviewMaxStars
183
- } from "./chunk-USHY3SH6.js";
183
+ } from "./chunk-C3BSCGUH.js";
184
184
  import {
185
185
  ADS_ACTIVATE_SCOPE,
186
186
  ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
@@ -1171,6 +1171,7 @@ import {
1171
1171
  siteAuditRunProgressSchema,
1172
1172
  siteAuditRunRequestSchema,
1173
1173
  siteAuditRunResponseSchema,
1174
+ siteAuditScheduleChecks,
1174
1175
  siteAuditScoreSchema,
1175
1176
  siteAuditTrendResponseSchema,
1176
1177
  siteCrawlAuditFactorSchema,
@@ -1274,7 +1275,7 @@ import {
1274
1275
  wordpressSchemaDeployResultDtoSchema,
1275
1276
  wordpressSchemaStatusResultDtoSchema,
1276
1277
  wordpressStatusDtoSchema
1277
- } from "./chunk-ETIIPSWL.js";
1278
+ } from "./chunk-PQNT2JUO.js";
1278
1279
 
1279
1280
  // ../api-routes/src/user-session.ts
1280
1281
  import crypto2 from "crypto";
@@ -39464,6 +39465,17 @@ var routeCatalog = [
39464
39465
  providers: stringArraySchema,
39465
39466
  enabled: booleanSchema,
39466
39467
  sourceId: stringSchema,
39468
+ siteAudit: {
39469
+ type: "object",
39470
+ nullable: true,
39471
+ additionalProperties: false,
39472
+ description: "kind=site-audit only. What each scheduled scan checks; unset fields take the defaults (checkDeadLinks false, includeGeo false, includeAgentSkills true). Omit to keep the current checks; null resets them to the defaults.",
39473
+ properties: {
39474
+ checkDeadLinks: booleanSchema,
39475
+ includeGeo: booleanSchema,
39476
+ includeAgentSkills: booleanSchema
39477
+ }
39478
+ },
39467
39479
  expectedUpdatedAt: {
39468
39480
  type: "string",
39469
39481
  format: "date-time",
@@ -39478,7 +39490,7 @@ var routeCatalog = [
39478
39490
  responses: {
39479
39491
  200: jsonResponse("Schedule updated.", "ScheduleDto"),
39480
39492
  201: jsonResponse("Schedule created.", "ScheduleDto"),
39481
- 400: errorResponse("Invalid payload (e.g. sourceId missing for kind=traffic-sync, or providers set for kind=traffic-sync)."),
39493
+ 400: errorResponse("Invalid payload (e.g. sourceId missing for kind=traffic-sync, providers set for kind=traffic-sync, or siteAudit set for a kind other than site-audit)."),
39482
39494
  409: errorResponse("The schedule changed since the caller loaded it.")
39483
39495
  }
39484
39496
  },
@@ -45081,7 +45093,7 @@ async function scheduleRoutes(app, opts) {
45081
45093
  });
45082
45094
  }
45083
45095
  const kind = parsedBody.data.kind ?? parseKindParam(request.query?.kind);
45084
- const { preset, cron, recurrence, timezone, providers, enabled, sourceId, expectedUpdatedAt } = parsedBody.data;
45096
+ const { preset, cron, recurrence, timezone, providers, enabled, sourceId, siteAudit, expectedUpdatedAt } = parsedBody.data;
45085
45097
  if (kind === SchedulableRunKinds["traffic-sync"]) {
45086
45098
  if (!sourceId) {
45087
45099
  throw validationError('"sourceId" is required when kind is "traffic-sync"');
@@ -45102,6 +45114,9 @@ async function scheduleRoutes(app, opts) {
45102
45114
  if (kind === SchedulableRunKinds["site-audit"] && providers && providers.length > 0) {
45103
45115
  throw validationError('"providers" is not valid for kind "site-audit"');
45104
45116
  }
45117
+ if (siteAudit !== void 0 && kind !== SchedulableRunKinds["site-audit"]) {
45118
+ throw validationError('"siteAudit" is only valid when kind is "site-audit"');
45119
+ }
45105
45120
  if (kind === SchedulableRunKinds["seo-sync"]) {
45106
45121
  if (providers && providers.length > 0) {
45107
45122
  throw validationError('"providers" is not valid for kind "seo-sync"');
@@ -45157,6 +45172,7 @@ async function scheduleRoutes(app, opts) {
45157
45172
  }
45158
45173
  const now = nextScheduleUpdatedAt(existing?.updatedAt);
45159
45174
  const scheduleId = existing?.id ?? crypto35.randomUUID();
45175
+ const siteAuditChecks = kind !== SchedulableRunKinds["site-audit"] ? null : siteAudit === void 0 ? existing?.siteAuditChecks ?? null : siteAudit === null ? null : siteAuditScheduleChecks(siteAudit);
45160
45176
  const values = {
45161
45177
  cronExpr,
45162
45178
  recurrence: recurrence ?? null,
@@ -45165,6 +45181,7 @@ async function scheduleRoutes(app, opts) {
45165
45181
  timezone,
45166
45182
  providers: providers ?? [],
45167
45183
  sourceId: sourceId ?? null,
45184
+ siteAuditChecks,
45168
45185
  enabled: enabledBool,
45169
45186
  enabledAt: scheduleEnabledAt(existing, enabledBool, now),
45170
45187
  updatedAt: now
@@ -45196,7 +45213,9 @@ async function scheduleRoutes(app, opts) {
45196
45213
  actor: "api",
45197
45214
  action: existing ? "schedule.updated" : "schedule.created",
45198
45215
  entityType: "schedule",
45199
- diff: { kind, cronExpr, preset, recurrence, timezone, providers, sourceId }
45216
+ // A scan schedule logs the checks it ends up with, so a reset to the
45217
+ // defaults is as visible as turning deep checks on.
45218
+ diff: { kind, cronExpr, preset, recurrence, timezone, providers, sourceId, ...kind === SchedulableRunKinds["site-audit"] ? { siteAudit: siteAuditScheduleChecks(siteAuditChecks) } : {} }
45200
45219
  });
45201
45220
  return {
45202
45221
  existed: existing !== void 0
@@ -45265,6 +45284,7 @@ function formatSchedule(row) {
45265
45284
  enabled: row.enabled,
45266
45285
  providers: row.providers,
45267
45286
  sourceId: row.sourceId,
45287
+ siteAudit: row.kind === SchedulableRunKinds["site-audit"] ? siteAuditScheduleChecks(row.siteAuditChecks) : null,
45268
45288
  lastRunAt: row.lastRunAt,
45269
45289
  nextRunAt: row.nextRunAt,
45270
45290
  createdAt: row.createdAt,
@@ -75036,6 +75056,7 @@ async function technicalAeoRoutes(app, opts) {
75036
75056
  const resolveCrawl = (projectId, runId, requestedDate, scope = {}) => {
75037
75057
  const filters = visibleCrawlFilters(projectId);
75038
75058
  if (scope.recordedBefore) filters.push(lt17(siteCrawlSnapshots.createdAt, scope.recordedBefore));
75059
+ const newestIfComplete = sql43`case when ${siteCrawlSnapshots.complete} then ${siteCrawlSnapshots.createdAt} end`;
75039
75060
  if (requestedDate) {
75040
75061
  const nextDate2 = /* @__PURE__ */ new Date(`${requestedDate}T00:00:00.000Z`);
75041
75062
  nextDate2.setUTCDate(nextDate2.getUTCDate() + 1);
@@ -75045,6 +75066,7 @@ async function technicalAeoRoutes(app, opts) {
75045
75066
  const selected = app.db.select({ snapshot: siteCrawlSnapshots, runStatus: runs.status }).from(siteCrawlSnapshots).innerJoin(runs, eq109(siteCrawlSnapshots.runId, runs.id)).where(and92(...selectionFilters, runId ? eq109(siteCrawlSnapshots.runId, runId) : void 0)).orderBy(
75046
75067
  desc50(sql43`substr(${siteCrawlSnapshots.createdAt}, 1, 10)`),
75047
75068
  desc50(siteCrawlSnapshots.complete),
75069
+ desc50(newestIfComplete),
75048
75070
  desc50(siteCrawlSnapshots.pagesFetched),
75049
75071
  desc50(siteCrawlSnapshots.createdAt),
75050
75072
  desc50(siteCrawlSnapshots.runId)
@@ -75066,6 +75088,7 @@ async function technicalAeoRoutes(app, opts) {
75066
75088
  pages: siteCrawlSnapshots.pagesFetched
75067
75089
  }).from(siteCrawlSnapshots).innerJoin(runs, eq109(siteCrawlSnapshots.runId, runs.id)).where(sameDate).orderBy(
75068
75090
  desc50(siteCrawlSnapshots.complete),
75091
+ desc50(newestIfComplete),
75069
75092
  desc50(siteCrawlSnapshots.pagesFetched),
75070
75093
  desc50(siteCrawlSnapshots.createdAt),
75071
75094
  desc50(siteCrawlSnapshots.runId)
@@ -75086,9 +75109,11 @@ async function technicalAeoRoutes(app, opts) {
75086
75109
  ...recordedBefore ? [lt17(siteAuditSnapshots.createdAt, recordedBefore)] : []
75087
75110
  ];
75088
75111
  const complete = sql43`case when ${runs.status} = ${RunStatuses.completed} then 1 else 0 end`;
75112
+ const newestIfComplete = sql43`case when ${runs.status} = ${RunStatuses.completed} then ${siteAuditSnapshots.createdAt} end`;
75089
75113
  const selectAudit = (pinnedRunId) => app.db.select({ snap: siteAuditSnapshots, runStatus: runs.status }).from(siteAuditSnapshots).innerJoin(runs, eq109(siteAuditSnapshots.runId, runs.id)).where(and92(...filters, pinnedRunId ? eq109(siteAuditSnapshots.runId, pinnedRunId) : void 0)).orderBy(
75090
75114
  desc50(sql43`substr(${siteAuditSnapshots.createdAt}, 1, 10)`),
75091
75115
  desc50(complete),
75116
+ desc50(newestIfComplete),
75092
75117
  desc50(siteAuditSnapshots.pagesAudited),
75093
75118
  desc50(siteAuditSnapshots.createdAt),
75094
75119
  desc50(siteAuditSnapshots.runId)
@@ -75120,6 +75145,7 @@ async function technicalAeoRoutes(app, opts) {
75120
75145
  pages: siteAuditSnapshots.pagesAudited
75121
75146
  }).from(siteAuditSnapshots).innerJoin(runs, eq109(siteAuditSnapshots.runId, runs.id)).where(sameDate).orderBy(
75122
75147
  desc50(complete),
75148
+ desc50(newestIfComplete),
75123
75149
  desc50(siteAuditSnapshots.pagesAudited),
75124
75150
  desc50(siteAuditSnapshots.createdAt),
75125
75151
  desc50(siteAuditSnapshots.runId)
@@ -5,7 +5,7 @@ import {
5
5
  AppError,
6
6
  parseWindowIn,
7
7
  resolveDateRange
8
- } from "./chunk-ETIIPSWL.js";
8
+ } from "./chunk-PQNT2JUO.js";
9
9
 
10
10
  // src/cli-access.ts
11
11
  var CLI_ACCESS_BY_ID = Object.freeze({
@@ -5,7 +5,7 @@ import {
5
5
  loadConfig,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-OOVWMWMT.js";
8
+ } from "./chunk-YVY23HNW.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-ETIIPSWL.js";
21
+ } from "./chunk-PQNT2JUO.js";
22
22
 
23
23
  // src/runtime-context.ts
24
24
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -2,13 +2,13 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-AFYKUX2X.js";
5
+ } from "./chunk-56EXMS52.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-OOVWMWMT.js";
8
+ } from "./chunk-YVY23HNW.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
- } from "./chunk-ZV6PMFF4.js";
11
+ } from "./chunk-3HNHOS6O.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-ETIIPSWL.js";
22
+ } from "./chunk-PQNT2JUO.js";
23
23
 
24
24
  // src/outcome-telemetry.ts
25
25
  import fs from "fs";
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-DF4B6OGX.js";
8
+ } from "./chunk-FAXYDTV5.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-OOVWMWMT.js";
26
+ } from "./chunk-YVY23HNW.js";
27
27
  import {
28
28
  CanonryMcpToolNames,
29
29
  canonryMcpTools
30
- } from "./chunk-WNDBACO7.js";
30
+ } from "./chunk-IHMODTQ7.js";
31
31
  import {
32
32
  createLogger
33
- } from "./chunk-XCEA5OMI.js";
33
+ } from "./chunk-SYOQULRL.js";
34
34
  import {
35
35
  agentToolEvents,
36
36
  llmUsageEvents
37
- } from "./chunk-USHY3SH6.js";
37
+ } from "./chunk-C3BSCGUH.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-ETIIPSWL.js";
46
+ } from "./chunk-PQNT2JUO.js";
47
47
 
48
48
  // src/agent/session.ts
49
49
  import fs2 from "fs";
@@ -7,12 +7,12 @@ import {
7
7
  import {
8
8
  createApiClient,
9
9
  runWithUsageTags
10
- } from "./chunk-F6WNKKGG.js";
10
+ } from "./chunk-WTKGSKCS.js";
11
11
  import {
12
12
  canonryMcpTools,
13
13
  mcpOutputSchema,
14
14
  toolOperationAccess
15
- } from "./chunk-WNDBACO7.js";
15
+ } from "./chunk-IHMODTQ7.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-ETIIPSWL.js";
28
+ } from "./chunk-PQNT2JUO.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-ETIIPSWL.js";
31
+ } from "./chunk-PQNT2JUO.js";
32
32
 
33
33
  // ../provider-answer-services/src/core/http.ts
34
34
  var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-ETIIPSWL.js";
23
+ } from "./chunk-PQNT2JUO.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";
@@ -1011,6 +1011,11 @@ var schedules = sqliteTable2("schedules", {
1011
1011
  providers: text2("providers", { mode: "json" }).$type().notNull().default([]),
1012
1012
  /** Optional traffic-source UUID for traffic-sync schedules. Null for other kinds. */
1013
1013
  sourceId: text2("source_id"),
1014
+ /**
1015
+ * Scan checks for site-audit schedules (dead links, location, agent checks).
1016
+ * Null means the defaults, and is always null for other kinds.
1017
+ */
1018
+ siteAuditChecks: text2("site_audit_checks", { mode: "json" }).$type(),
1014
1019
  lastRunAt: text2("last_run_at"),
1015
1020
  nextRunAt: text2("next_run_at"),
1016
1021
  /**
@@ -8919,6 +8924,15 @@ var MIGRATION_VERSIONS = [
8919
8924
  )`,
8920
8925
  `CREATE UNIQUE INDEX IF NOT EXISTS idx_sitemap_list_syncs_project_engine ON sitemap_list_syncs(project_id, engine)`
8921
8926
  ]
8927
+ },
8928
+ {
8929
+ version: 210,
8930
+ name: "schedule-site-audit-checks",
8931
+ // A site-audit schedule's scan checks (dead links, location, agent checks).
8932
+ // Null keeps the defaults, so existing schedules scan exactly as before.
8933
+ statements: [
8934
+ `ALTER TABLE schedules ADD COLUMN site_audit_checks TEXT`
8935
+ ]
8922
8936
  }
8923
8937
  ];
8924
8938
  var AERO_LEDGER_REBUILDS = [