@canonry/canonry 7.77.2 → 7.78.2

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 (139) hide show
  1. package/assets/agent-workspace/skills/aero/references/seo-analysis.md +13 -2
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +4 -2
  3. package/assets/assets/{AgentSetupPage-BZXWC3x6.js → AgentSetupPage-BGdvyQFL.js} +4 -4
  4. package/assets/assets/{AuditHistoryPanel-DcrUuwRu.js → AuditHistoryPanel-Bb5wq-Bk.js} +1 -1
  5. package/assets/assets/{BacklinksPage-BSpHJBiy.js → BacklinksPage-i1cfxTDj.js} +1 -1
  6. package/assets/assets/{HistoryPage-0a0CK9zF.js → HistoryPage-C2NRdNrn.js} +1 -1
  7. package/assets/assets/MeasurementPropertyPage-CwPuJMBy.js +4 -0
  8. package/assets/assets/ProjectPage-Bbnbg7c9.js +11 -0
  9. package/assets/assets/{RunsPage-D0vbz1Ho.js → RunsPage-CJHJ7kHk.js} +1 -1
  10. package/assets/assets/{SettingsPage-DjRm5cmn.js → SettingsPage-r8VrtFyJ.js} +1 -1
  11. package/assets/assets/SiteHealthSection-D1oSuo9O.js +2 -0
  12. package/assets/assets/ToneBadge-CUe-WrzN.js +60 -0
  13. package/assets/assets/{TrafficPage-Z8Z_z0k9.js → TrafficPage-DY2ykwH1.js} +1 -1
  14. package/assets/assets/TrafficSourceDetailPage-D3KHgRvF.js +1 -0
  15. package/assets/assets/{account-context-zaSxLBst.js → account-context-B50QqDEA.js} +1 -1
  16. package/assets/assets/{card-COqALGzB.js → card-BE2fqwVq.js} +1 -1
  17. package/assets/assets/{extract-error-message-DKve0SNr.js → extract-error-message-xuN_xeRJ.js} +1 -1
  18. package/assets/assets/{format-helpers-DKrHlaV7.js → format-helpers-CiC6gALY.js} +1 -1
  19. package/assets/assets/{index-CKZK95pI.css → index-CHHZDc6d.css} +1 -1
  20. package/assets/assets/{index-fzqtwr6m.js → index-Dfm8z5cG.js} +23 -23
  21. package/assets/assets/{query-client-COM9uzxL.js → query-client-C5GhDMY7.js} +1 -1
  22. package/assets/assets/react-query-CmHyfYFq.js +1 -0
  23. package/assets/assets/{react-sigma_core.esm.min-e91U3Myi.js → react-sigma_core.esm.min-Bjdtl0TQ.js} +1 -1
  24. package/assets/assets/{service-BgFTYqJA.js → service-B2i_ZzWP.js} +1 -1
  25. package/assets/index.html +8 -8
  26. package/dist/{ads-5K5IQDCD.js → ads-MNMND5VH.js} +3 -3
  27. package/dist/{agent-Q4PKMBEJ.js → agent-4KNDL3D3.js} +7 -7
  28. package/dist/{agent-ask-JEPVVW2J.js → agent-ask-32RTOL2M.js} +3 -3
  29. package/dist/{agent-conversations-EHE7QEBC.js → agent-conversations-BXVWHUZC.js} +3 -3
  30. package/dist/{agent-memory-AB72YQET.js → agent-memory-7R7UVFS5.js} +3 -3
  31. package/dist/{agent-providers-NQ7HJYAQ.js → agent-providers-QGVLCCH4.js} +3 -3
  32. package/dist/{agent-transcript-PRTWIQ2A.js → agent-transcript-7Y6BJCIT.js} +3 -3
  33. package/dist/{analytics-IY3J4VZE.js → analytics-YOGEHW6J.js} +3 -3
  34. package/dist/{apply-HNOG674K.js → apply-TB3MF3PH.js} +3 -3
  35. package/dist/{backfill-TO7TPPO6.js → backfill-IRVLT6VT.js} +9 -9
  36. package/dist/{backlinks-3NY5GNT4.js → backlinks-6GTL324T.js} +3 -3
  37. package/dist/{bing-Z7W7U2CT.js → bing-OMQACSDY.js} +3 -3
  38. package/dist/{bootstrap-DXXS3LRH.js → bootstrap-WZ6YDQIG.js} +10 -10
  39. package/dist/{cdp-CKPRS6VE.js → cdp-3WBLAWOL.js} +7 -7
  40. package/dist/{chunk-G26YB6JK.js → chunk-2EWZ3DJ4.js} +3 -3
  41. package/dist/{chunk-JPOIDGGF.js → chunk-3MGM3U6V.js} +1 -1
  42. package/dist/{chunk-7JC4Z6FQ.js → chunk-3QJWOF2B.js} +4 -3
  43. package/dist/{chunk-2BDWXHYF.js → chunk-45RGH7XI.js} +3 -3
  44. package/dist/{chunk-6KPBYCPE.js → chunk-4GEEYY3N.js} +2 -2
  45. package/dist/{chunk-C3UFOS7J.js → chunk-5NBXPO4G.js} +2 -2
  46. package/dist/{chunk-RPJJOBKN.js → chunk-6ACWXQNZ.js} +3 -1
  47. package/dist/{chunk-4XVXP6VR.js → chunk-72YPSNCG.js} +2 -2
  48. package/dist/{chunk-5QR7D4RQ.js → chunk-7HB6QLX4.js} +1 -1
  49. package/dist/{chunk-EM2HAM2U.js → chunk-7HE4LAJY.js} +8 -8
  50. package/dist/{chunk-JRVKW4OO.js → chunk-7OAXEMOF.js} +26 -2
  51. package/dist/{chunk-7UVCZZQJ.js → chunk-AI44ZCMK.js} +1 -1
  52. package/dist/{chunk-LKEFPJQ2.js → chunk-BKOG3GEI.js} +4 -4
  53. package/dist/{chunk-CMS4YM5M.js → chunk-BLZCNL3B.js} +3 -3
  54. package/dist/{chunk-HD2VVIPD.js → chunk-BTMLE3EN.js} +5 -5
  55. package/dist/{chunk-CHTKK43G.js → chunk-COUM462G.js} +152 -24
  56. package/dist/{chunk-2WBT6TEJ.js → chunk-FCYGY4FT.js} +1 -1
  57. package/dist/{chunk-JMCURBZG.js → chunk-GEHRGKQT.js} +4 -4
  58. package/dist/{chunk-ORZBHCZR.js → chunk-IYMTQHPD.js} +4 -4
  59. package/dist/{chunk-XYYWKCJQ.js → chunk-JERATA5R.js} +1 -1
  60. package/dist/{chunk-AAUMUHUI.js → chunk-KF7I7FBI.js} +2 -2
  61. package/dist/{chunk-PSNTEGNY.js → chunk-KZB6HLFT.js} +1 -1
  62. package/dist/{chunk-46KV7CZU.js → chunk-LBNUTWPK.js} +2 -2
  63. package/dist/{chunk-4QHTXT4A.js → chunk-MUYTDD35.js} +40 -4
  64. package/dist/{chunk-TESDUMVK.js → chunk-O4WBYEGV.js} +1 -1
  65. package/dist/{chunk-5LKK2MCJ.js → chunk-OES6PSQK.js} +7 -7
  66. package/dist/{chunk-D5XPB7MM.js → chunk-PH4AESRE.js} +3 -1
  67. package/dist/{chunk-JEXBP7CR.js → chunk-PLLDJUG2.js} +4 -4
  68. package/dist/{chunk-FCGYYZHL.js → chunk-PM2DB3HE.js} +164 -10
  69. package/dist/{chunk-GDKMVOZI.js → chunk-PRCBHOVR.js} +146 -19
  70. package/dist/{chunk-JZ4UFSVR.js → chunk-R26CF4WT.js} +2 -2
  71. package/dist/{chunk-Z2FY6AGZ.js → chunk-TZRYVW75.js} +2 -2
  72. package/dist/{chunk-WFFZAQRG.js → chunk-UHCOJCT3.js} +371 -340
  73. package/dist/{chunk-ZXYCPRNY.js → chunk-WSWHLKKJ.js} +1 -1
  74. package/dist/{chunk-NDTU7FGL.js → chunk-WVCDUKJ2.js} +1 -1
  75. package/dist/{chunk-JSCO223C.js → chunk-ZHFE6J3A.js} +1 -1
  76. package/dist/{citations-4AV6HLUZ.js → citations-PGG7JEIN.js} +3 -3
  77. package/dist/{cli-catalog-ZVFLJXID.js → cli-catalog-KC6JYHSW.js} +3 -3
  78. package/dist/{cli-commands-NJDUBQ3R.js → cli-commands-NGXSLPIA.js} +7 -7
  79. package/dist/cli.js +13 -13
  80. package/dist/{competitor-SG4N37UD.js → competitor-B3CZOKZU.js} +3 -3
  81. package/dist/{content-EDLZAPUV.js → content-Z4XJMZB4.js} +3 -3
  82. package/dist/{dashboard-5ZFVJPHX.js → dashboard-6MMYA2GG.js} +6 -6
  83. package/dist/{demo-5CU3JDHC.js → demo-3R2SHQPO.js} +1 -1
  84. package/dist/{demo-server-43QV3UKM.js → demo-server-ISJOEJN5.js} +12 -12
  85. package/dist/{discover-7X2WMNFV.js → discover-OT3K7KQK.js} +3 -3
  86. package/dist/{discover-eval-ECOPSJJ4.js → discover-eval-DN4J4KD5.js} +3 -3
  87. package/dist/{doctor-NMFBKNYR.js → doctor-UDF6OCSR.js} +3 -3
  88. package/dist/{evidence-C52ZPRYB.js → evidence-Z364UFOD.js} +3 -3
  89. package/dist/{export-cmd-2WSEETUC.js → export-cmd-K27XN4G5.js} +3 -3
  90. package/dist/{ga-YG4O2FT5.js → ga-Q2CELDLG.js} +3 -3
  91. package/dist/{gbp-BDGV6F74.js → gbp-V2APGSIQ.js} +3 -3
  92. package/dist/{google-P2AX6CUF.js → google-WFHYA3QT.js} +4 -4
  93. package/dist/{google-marketing-XPE6CVQI.js → google-marketing-5ROIKBC7.js} +1 -1
  94. package/dist/{health-cmd-MIQT2JNL.js → health-cmd-RGFAJ4YP.js} +3 -3
  95. package/dist/{history-3XDDJDAV.js → history-RUSU66BZ.js} +3 -3
  96. package/dist/index.d.ts +208 -13
  97. package/dist/index.js +26 -26
  98. package/dist/{init-GT3QM7FC.js → init-SMBVJSP6.js} +12 -12
  99. package/dist/{insights-ZJUDCBBP.js → insights-4IFQLPS3.js} +3 -3
  100. package/dist/intelligence-service-MPNONLCW.js +16 -0
  101. package/dist/{journeys-L2CXQXRP.js → journeys-PTC2QY57.js} +3 -3
  102. package/dist/{keys-ODRGIQS7.js → keys-JASXI2SR.js} +3 -3
  103. package/dist/{keyword-LE3CAXO2.js → keyword-SK2HJXCJ.js} +3 -3
  104. package/dist/{logs-OXK43XN2.js → logs-AS5I5V2A.js} +3 -3
  105. package/dist/{mcp-6OTPCDGW.js → mcp-BQSOYHEX.js} +4 -4
  106. package/dist/mcp.js +10 -10
  107. package/dist/{measurement-plan-NXRCDUYL.js → measurement-plan-LZYYH3OD.js} +5 -5
  108. package/dist/{notify-VNNJTNC6.js → notify-JM6252F6.js} +3 -3
  109. package/dist/{organic-evidence-LYDB7IID.js → organic-evidence-L3Y6RZIH.js} +3 -3
  110. package/dist/{overview-2GPPQ6JP.js → overview-VIF2GXYW.js} +4 -4
  111. package/dist/{project-CQJPXC66.js → project-FQEPFPRD.js} +3 -3
  112. package/dist/{query-PPE4EHMY.js → query-VKRESS6B.js} +3 -3
  113. package/dist/{research-GDYZKQY2.js → research-6A6QWKN3.js} +3 -3
  114. package/dist/{results-export-OAJHDEIQ.js → results-export-VUB2ZD5B.js} +3 -3
  115. package/dist/{run-XDPDQS44.js → run-PG5GYZT7.js} +4 -4
  116. package/dist/{schedule-C6SYV54I.js → schedule-EBGOLCQZ.js} +3 -3
  117. package/dist/{search-DONTDHQK.js → search-NS4XPZRL.js} +3 -3
  118. package/dist/{serve-PJXATOSY.js → serve-J7WR3J6I.js} +27 -27
  119. package/dist/{session-PMZV27GX.js → session-FBHHWILQ.js} +14 -14
  120. package/dist/{settings-PMATG7GG.js → settings-LNCAYCDF.js} +3 -3
  121. package/dist/{skills-CYHWYN42.js → skills-DWXA55QA.js} +2 -2
  122. package/dist/{snapshot-E4GHH6DD.js → snapshot-LX7OR7SO.js} +3 -3
  123. package/dist/{src-SXB3MOP3.js → src-AQ5MHQGQ.js} +2 -2
  124. package/dist/{status-MEGXEEW6.js → status-DQ6FNWUT.js} +4 -4
  125. package/dist/{technical-aeo-GE6KOFKT.js → technical-aeo-5GU2IY6W.js} +3 -3
  126. package/dist/{telemetry-Y63F4XFX.js → telemetry-QK2GPII3.js} +4 -4
  127. package/dist/{tools-V546ALG7.js → tools-3ACR2D2V.js} +11 -11
  128. package/dist/{traffic-5ELSKXBM.js → traffic-2JFQKVAX.js} +5 -5
  129. package/dist/{users-7YK7XYWY.js → users-7OJ2RGV3.js} +3 -3
  130. package/dist/{visibility-stats-GYPUKXVS.js → visibility-stats-VR25XMMY.js} +3 -3
  131. package/dist/{wordpress-WUGJT5NN.js → wordpress-JYXTF4PL.js} +3 -3
  132. package/package.json +1 -1
  133. package/assets/assets/MeasurementPropertyPage-DbfTFN3F.js +0 -4
  134. package/assets/assets/ProjectPage-D0m-Xpp3.js +0 -9
  135. package/assets/assets/SiteHealthSection-BCdPVFEJ.js +0 -2
  136. package/assets/assets/ToneBadge-DSJSzqI6.js +0 -60
  137. package/assets/assets/TrafficSourceDetailPage-DJyDO527.js +0 -1
  138. package/assets/assets/react-query-BVRWpXWq.js +0 -1
  139. package/dist/intelligence-service-NXZYQJBH.js +0 -16
@@ -20,7 +20,7 @@ import {
20
20
  resolveProviderModel,
21
21
  schedulableRunKindSchema,
22
22
  sentimentEvaluatorProviderSchema
23
- } from "./chunk-FCGYYZHL.js";
23
+ } from "./chunk-PM2DB3HE.js";
24
24
 
25
25
  // ../config/src/index.ts
26
26
  import { z as z5 } from "zod";
@@ -208,7 +208,8 @@ var mcpGatewayConfigSchema = z5.object({
208
208
  return false;
209
209
  }
210
210
  }),
211
- workspace: z5.string().trim().min(1).max(253).nullish()
211
+ workspace: z5.string().trim().min(1).max(253).nullish(),
212
+ clientId: z5.string().regex(/^[\w-]{1,256}$/).nullish()
212
213
  }).strict().nullish();
213
214
  function resolveOperatorApiKeyIds(source) {
214
215
  const raw = source.CANONRY_OPERATOR_KEY_IDS?.trim();
@@ -1045,7 +1046,7 @@ Do not use "canonry init --force" for recovery. It replaces credentials without
1045
1046
  if (!mcpGatewayConfigSchema.safeParse(parsed.mcpGateway).success) {
1046
1047
  throw new CliError({
1047
1048
  code: "CONFIG_INVALID",
1048
- message: `Invalid config at ${configPath}: mcpGateway needs an HTTPS url without credentials, query or fragment, and an optional non-empty workspace.`
1049
+ message: `Invalid config at ${configPath}: mcpGateway needs an HTTPS url without credentials, query or fragment, an optional non-empty workspace, and an optional clientId of letters, digits, underscores or hyphens.`
1049
1050
  });
1050
1051
  }
1051
1052
  if (!dashboardManagedSweepsSchema.safeParse(parsed.dashboard?.managedSweeps).success) {
@@ -3,7 +3,7 @@ import {
3
3
  resolveCliAccess,
4
4
  resolveCliAccessForInvocation,
5
5
  windowOptions
6
- } from "./chunk-RPJJOBKN.js";
6
+ } from "./chunk-6ACWXQNZ.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-FCGYYZHL.js";
17
+ } from "./chunk-PM2DB3HE.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-ZVFLJXID.js");
114
+ const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-KC6JYHSW.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
  loadConfig,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-7JC4Z6FQ.js";
8
+ } from "./chunk-3QJWOF2B.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-FCGYYZHL.js";
21
+ } from "./chunk-PM2DB3HE.js";
22
22
 
23
23
  // src/runtime-context.ts
24
24
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseJsonColumn
3
- } from "./chunk-D5XPB7MM.js";
3
+ } from "./chunk-PH4AESRE.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-FCGYYZHL.js";
29
+ } from "./chunk-PM2DB3HE.js";
30
30
 
31
31
  // ../provider-openai/src/normalize.ts
32
32
  import OpenAI from "openai";
@@ -5,7 +5,7 @@ import {
5
5
  AppError,
6
6
  parseWindowIn,
7
7
  resolveDateRange
8
- } from "./chunk-FCGYYZHL.js";
8
+ } from "./chunk-PM2DB3HE.js";
9
9
 
10
10
  // src/cli-access.ts
11
11
  var CLI_ACCESS_BY_ID = Object.freeze({
@@ -329,8 +329,10 @@ var CLI_ACCESS_BY_ID = Object.freeze({
329
329
  "sentiment.job": "stored",
330
330
  "sentiment.jobs": "stored",
331
331
  "sentiment.settings": "stored",
332
+ "seo.competitors": "stored",
332
333
  "seo.context": "stored",
333
334
  "seo.domain-intelligence": "stored",
335
+ "seo.keyword-gaps": "stored",
334
336
  "seo.keyword-metrics": "stored",
335
337
  "seo.market-rankings": "stored",
336
338
  "seo.market-summary": "stored",
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-JRVKW4OO.js";
3
+ } from "./chunk-7OAXEMOF.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-FCGYYZHL.js";
22
+ } from "./chunk-PM2DB3HE.js";
23
23
 
24
24
  // src/commands/run.ts
25
25
  function getClient() {
@@ -23,7 +23,7 @@ import {
23
23
  measurementDraftUpsertGroupRequestSchema,
24
24
  measurementDraftUpsertMarketRequestSchema,
25
25
  measurementDraftUpsertTargetRequestSchema
26
- } from "./chunk-FCGYYZHL.js";
26
+ } from "./chunk-PM2DB3HE.js";
27
27
 
28
28
  // src/measurement-draft-actions.ts
29
29
  import { z } from "zod";
@@ -7,27 +7,27 @@ import {
7
7
  reparseStoredResult4,
8
8
  reparseStoredResult5,
9
9
  resolveStoredApiResponse
10
- } from "./chunk-C3UFOS7J.js";
10
+ } from "./chunk-5NBXPO4G.js";
11
11
  import {
12
12
  loadConfig
13
- } from "./chunk-7JC4Z6FQ.js";
13
+ } from "./chunk-3QJWOF2B.js";
14
14
  import {
15
15
  isMachineFormat
16
16
  } from "./chunk-HGMYEDAQ.js";
17
17
  import {
18
18
  determineCitationState
19
- } from "./chunk-XYYWKCJQ.js";
19
+ } from "./chunk-JERATA5R.js";
20
20
  import {
21
21
  backfillProjectAnswerMentions,
22
22
  competitorIdentityColumns,
23
23
  createRunCompetitorResolver,
24
24
  readMarketCompetitorNames,
25
25
  refreshSnapshotMentionIdentity
26
- } from "./chunk-GDKMVOZI.js";
26
+ } from "./chunk-PRCBHOVR.js";
27
27
  import {
28
28
  classifyAiUserFetch,
29
29
  classifyCrawler
30
- } from "./chunk-TESDUMVK.js";
30
+ } from "./chunk-O4WBYEGV.js";
31
31
  import {
32
32
  aiUserFetchEventsHourly,
33
33
  auditLog,
@@ -42,7 +42,7 @@ import {
42
42
  querySnapshots,
43
43
  rawEventSamples,
44
44
  runs
45
- } from "./chunk-D5XPB7MM.js";
45
+ } from "./chunk-PH4AESRE.js";
46
46
  import {
47
47
  ProviderNames,
48
48
  RetrievalContracts,
@@ -59,7 +59,7 @@ import {
59
59
  extractRecommendedCompetitors,
60
60
  normalizeUrlPath,
61
61
  openRouterRouteModel
62
- } from "./chunk-FCGYYZHL.js";
62
+ } from "./chunk-PM2DB3HE.js";
63
63
 
64
64
  // src/commands/backfill.ts
65
65
  import { setImmediate as yieldToEventLoop } from "timers/promises";
@@ -437,7 +437,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
437
437
  }
438
438
  }
439
439
  async function backfillInsightsCommand(project, opts) {
440
- const { IntelligenceService } = await import("./intelligence-service-NXZYQJBH.js");
440
+ const { IntelligenceService } = await import("./intelligence-service-MPNONLCW.js");
441
441
  const config = loadConfig();
442
442
  const db = createClient(config.database);
443
443
  migrate(db);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadConfig
3
- } from "./chunk-7JC4Z6FQ.js";
3
+ } from "./chunk-3QJWOF2B.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-FCGYYZHL.js";
39
+ } from "./chunk-PM2DB3HE.js";
40
40
 
41
41
  // ../api-client-generated/src/generated/core/bodySerializer.gen.ts
42
42
  var jsonBodySerializer = {
@@ -900,6 +900,16 @@ var getApiV1ProjectsByNameSeoRankedKeywords = (options) => (options.client ?? cl
900
900
  url: "/api/v1/projects/{name}/seo/ranked-keywords",
901
901
  ...options
902
902
  });
903
+ var getApiV1ProjectsByNameSeoCompetitors = (options) => (options.client ?? client).get({
904
+ security: [{ scheme: "bearer", type: "http" }],
905
+ url: "/api/v1/projects/{name}/seo/competitors",
906
+ ...options
907
+ });
908
+ var getApiV1ProjectsByNameSeoKeywordGaps = (options) => (options.client ?? client).get({
909
+ security: [{ scheme: "bearer", type: "http" }],
910
+ url: "/api/v1/projects/{name}/seo/keyword-gaps",
911
+ ...options
912
+ });
903
913
  var getApiV1ProjectsByNameSeoMarketRankings = (options) => (options.client ?? client).get({
904
914
  security: [{ scheme: "bearer", type: "http" }],
905
915
  url: "/api/v1/projects/{name}/seo/market-rankings",
@@ -6220,6 +6230,20 @@ var ApiClient = class {
6220
6230
  query
6221
6231
  }));
6222
6232
  }
6233
+ async getSeoCompetitors(project, query) {
6234
+ return this.invoke(() => getApiV1ProjectsByNameSeoCompetitors({
6235
+ client: this.heyClient,
6236
+ path: { name: project },
6237
+ query
6238
+ }));
6239
+ }
6240
+ async getSeoKeywordGaps(project, query) {
6241
+ return this.invoke(() => getApiV1ProjectsByNameSeoKeywordGaps({
6242
+ client: this.heyClient,
6243
+ path: { name: project },
6244
+ query
6245
+ }));
6246
+ }
6223
6247
  async getSeoMarketRankings(project, query) {
6224
6248
  return this.invoke(() => getApiV1ProjectsByNameSeoMarketRankings({
6225
6249
  client: this.heyClient,
@@ -15,7 +15,7 @@ import {
15
15
  formatCanonryPluginUpdateHint,
16
16
  formatCanonryPluginVersionMismatch,
17
17
  skillsClientSchema
18
- } from "./chunk-FCGYYZHL.js";
18
+ } from "./chunk-PM2DB3HE.js";
19
19
 
20
20
  // src/commands/skills.ts
21
21
  import crypto from "crypto";
@@ -2,16 +2,16 @@ import {
2
2
  CANONRY_MCP_TOOLKITS,
3
3
  CANONRY_MCP_TOOLKIT_NAMES,
4
4
  isCanonryMcpToolkitName
5
- } from "./chunk-NDTU7FGL.js";
5
+ } from "./chunk-WVCDUKJ2.js";
6
6
  import {
7
7
  createApiClient,
8
8
  runWithUsageTags
9
- } from "./chunk-JRVKW4OO.js";
9
+ } from "./chunk-7OAXEMOF.js";
10
10
  import {
11
11
  canonryMcpTools,
12
12
  mcpOutputSchema,
13
13
  toolOperationAccess
14
- } from "./chunk-4QHTXT4A.js";
14
+ } from "./chunk-MUYTDD35.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-FCGYYZHL.js";
27
+ } from "./chunk-PM2DB3HE.js";
28
28
 
29
29
  // src/mcp/server.ts
30
30
  import { randomUUID } from "crypto";
@@ -2,18 +2,18 @@ import {
2
2
  configExists,
3
3
  loadConfigRaw,
4
4
  saveConfigPatch
5
- } from "./chunk-7JC4Z6FQ.js";
5
+ } from "./chunk-3QJWOF2B.js";
6
6
  import {
7
7
  BUNDLED_SKILL_NAMES,
8
8
  installSkills
9
- } from "./chunk-7UVCZZQJ.js";
9
+ } from "./chunk-AI44ZCMK.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-FCGYYZHL.js";
16
+ } from "./chunk-PM2DB3HE.js";
17
17
 
18
18
  // src/skills-autosync.ts
19
19
  import fs from "fs";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createLogger
3
- } from "./chunk-Z2FY6AGZ.js";
3
+ } from "./chunk-TZRYVW75.js";
4
4
  import {
5
5
  pickProjectCitedDomain
6
- } from "./chunk-XYYWKCJQ.js";
6
+ } from "./chunk-JERATA5R.js";
7
7
  import {
8
8
  GBP_INSIGHT_PROVIDER,
9
9
  PERSISTENT_GAP_THRESHOLD,
@@ -17,7 +17,7 @@ import {
17
17
  mergeGscQueryTotalsWithFallback,
18
18
  readGscQueryDailyRows,
19
19
  readLatestGscDataDate
20
- } from "./chunk-GDKMVOZI.js";
20
+ } from "./chunk-PRCBHOVR.js";
21
21
  import {
22
22
  competitors,
23
23
  gbpDailyMetrics,
@@ -35,14 +35,14 @@ import {
35
35
  queries,
36
36
  querySnapshots,
37
37
  runs
38
- } from "./chunk-D5XPB7MM.js";
38
+ } from "./chunk-PH4AESRE.js";
39
39
  import {
40
40
  CitationStates,
41
41
  RunKinds,
42
42
  RunStatuses,
43
43
  RunTriggers,
44
44
  effectiveDomains
45
- } from "./chunk-FCGYYZHL.js";
45
+ } from "./chunk-PM2DB3HE.js";
46
46
 
47
47
  // src/intelligence-service.ts
48
48
  import { eq, desc, asc, and, ne, or, inArray, gte, lte, isNull, sql, exists } from "drizzle-orm";