@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
package/dist/index.d.ts CHANGED
@@ -1095,8 +1095,8 @@ declare const googleMarketingProviderSchema: z.ZodEnum<{
1095
1095
  type GoogleMarketingProvider = z.infer<typeof googleMarketingProviderSchema>;
1096
1096
 
1097
1097
  declare const gbpReviewOriginSchema: z.ZodEnum<{
1098
- gbp: "gbp";
1099
1098
  places: "places";
1099
+ gbp: "gbp";
1100
1100
  }>;
1101
1101
  type GbpReviewOrigin = z.infer<typeof gbpReviewOriginSchema>;
1102
1102
 
@@ -1297,6 +1297,8 @@ declare const seoCapabilitySchema: z.ZodEnum<{
1297
1297
  "domain-intelligence": "domain-intelligence";
1298
1298
  "ranked-keywords": "ranked-keywords";
1299
1299
  "market-rankings": "market-rankings";
1300
+ "competitor-discovery": "competitor-discovery";
1301
+ "keyword-gaps": "keyword-gaps";
1300
1302
  }>;
1301
1303
  type SeoCapability = z.infer<typeof seoCapabilitySchema>;
1302
1304
  declare const seoTargetSchema: z.ZodObject<{
@@ -1314,6 +1316,92 @@ declare const seoDeviceSchema: z.ZodEnum<{
1314
1316
  mobile: "mobile";
1315
1317
  }>;
1316
1318
  type SeoDevice = z.infer<typeof seoDeviceSchema>;
1319
+ /** A competing domain observed in the provider's organic search database for this target and locale. */
1320
+ declare const seoCompetitorSchema: z.ZodObject<{
1321
+ target: z.ZodObject<{
1322
+ kind: z.ZodEnum<{
1323
+ domain: "domain";
1324
+ host: "host";
1325
+ }>;
1326
+ value: z.ZodString;
1327
+ includeSubdomains: z.ZodBoolean;
1328
+ }, z.core.$strict>;
1329
+ domain: z.ZodString;
1330
+ sharedKeywords: z.ZodNullable<z.ZodNumber>;
1331
+ averagePosition: z.ZodNullable<z.ZodNumber>;
1332
+ organicKeywords: z.ZodNullable<z.ZodNumber>;
1333
+ estimatedOrganicTraffic: z.ZodNullable<z.ZodNumber>;
1334
+ provenance: z.ZodObject<{
1335
+ provider: z.ZodEnum<{
1336
+ dataforseo: "dataforseo";
1337
+ }>;
1338
+ dataset: z.ZodString;
1339
+ engine: z.ZodLiteral<"google">;
1340
+ locationCode: z.ZodNumber;
1341
+ languageCode: z.ZodString;
1342
+ device: z.ZodUnion<readonly [z.ZodLiteral<"unspecified">, z.ZodEnum<{
1343
+ desktop: "desktop";
1344
+ mobile: "mobile";
1345
+ }>]>;
1346
+ collectedAt: z.ZodString;
1347
+ sourceUpdatedAt: z.ZodNullable<z.ZodString>;
1348
+ }, z.core.$strict>;
1349
+ }, z.core.$strict>;
1350
+ type SeoCompetitor = z.infer<typeof seoCompetitorSchema>;
1351
+ declare const seoKeywordGapModeSchema: z.ZodEnum<{
1352
+ shared: "shared";
1353
+ missing: "missing";
1354
+ }>;
1355
+ type SeoKeywordGapMode = z.infer<typeof seoKeywordGapModeSchema>;
1356
+ /** Missing means absent from the provider's database result for this pair, never a fresh Google rank check. */
1357
+ declare const seoKeywordGapSchema: z.ZodObject<{
1358
+ target: z.ZodObject<{
1359
+ kind: z.ZodEnum<{
1360
+ domain: "domain";
1361
+ host: "host";
1362
+ }>;
1363
+ value: z.ZodString;
1364
+ includeSubdomains: z.ZodBoolean;
1365
+ }, z.core.$strict>;
1366
+ competitor: z.ZodObject<{
1367
+ kind: z.ZodEnum<{
1368
+ domain: "domain";
1369
+ host: "host";
1370
+ }>;
1371
+ value: z.ZodString;
1372
+ includeSubdomains: z.ZodBoolean;
1373
+ }, z.core.$strict>;
1374
+ keyword: z.ZodString;
1375
+ targetRankOrganic: z.ZodNullable<z.ZodNumber>;
1376
+ competitorRankOrganic: z.ZodNumber;
1377
+ targetUrl: z.ZodNullable<z.ZodString>;
1378
+ competitorUrl: z.ZodNullable<z.ZodString>;
1379
+ searchVolume: z.ZodNullable<z.ZodNumber>;
1380
+ keywordDifficulty: z.ZodNullable<z.ZodNumber>;
1381
+ cpcUsd: z.ZodNullable<z.ZodNumber>;
1382
+ kind: z.ZodEnum<{
1383
+ shared: "shared";
1384
+ missing: "missing";
1385
+ outranked: "outranked";
1386
+ }>;
1387
+ rankGap: z.ZodNullable<z.ZodNumber>;
1388
+ provenance: z.ZodObject<{
1389
+ provider: z.ZodEnum<{
1390
+ dataforseo: "dataforseo";
1391
+ }>;
1392
+ dataset: z.ZodString;
1393
+ engine: z.ZodLiteral<"google">;
1394
+ locationCode: z.ZodNumber;
1395
+ languageCode: z.ZodString;
1396
+ device: z.ZodUnion<readonly [z.ZodLiteral<"unspecified">, z.ZodEnum<{
1397
+ desktop: "desktop";
1398
+ mobile: "mobile";
1399
+ }>]>;
1400
+ collectedAt: z.ZodString;
1401
+ sourceUpdatedAt: z.ZodNullable<z.ZodString>;
1402
+ }, z.core.$strict>;
1403
+ }, z.core.$strict>;
1404
+ type SeoKeywordGap = z.infer<typeof seoKeywordGapSchema>;
1317
1405
  /** The market and tracked query one market-rankings search answers. */
1318
1406
  declare const seoMarketRankingContextSchema: z.ZodObject<{
1319
1407
  marketKey: z.ZodString;
@@ -1533,13 +1621,92 @@ declare const seoResultsSchema: z.ZodObject<{
1533
1621
  sourceUpdatedAt: z.ZodNullable<z.ZodString>;
1534
1622
  }, z.core.$strict>>;
1535
1623
  }, z.core.$strict>>;
1624
+ competitors: z.ZodArray<z.ZodObject<{
1625
+ target: z.ZodObject<{
1626
+ kind: z.ZodEnum<{
1627
+ domain: "domain";
1628
+ host: "host";
1629
+ }>;
1630
+ value: z.ZodString;
1631
+ includeSubdomains: z.ZodBoolean;
1632
+ }, z.core.$strict>;
1633
+ domain: z.ZodString;
1634
+ sharedKeywords: z.ZodNullable<z.ZodNumber>;
1635
+ averagePosition: z.ZodNullable<z.ZodNumber>;
1636
+ organicKeywords: z.ZodNullable<z.ZodNumber>;
1637
+ estimatedOrganicTraffic: z.ZodNullable<z.ZodNumber>;
1638
+ provenance: z.ZodObject<{
1639
+ provider: z.ZodEnum<{
1640
+ dataforseo: "dataforseo";
1641
+ }>;
1642
+ dataset: z.ZodString;
1643
+ engine: z.ZodLiteral<"google">;
1644
+ locationCode: z.ZodNumber;
1645
+ languageCode: z.ZodString;
1646
+ device: z.ZodUnion<readonly [z.ZodLiteral<"unspecified">, z.ZodEnum<{
1647
+ desktop: "desktop";
1648
+ mobile: "mobile";
1649
+ }>]>;
1650
+ collectedAt: z.ZodString;
1651
+ sourceUpdatedAt: z.ZodNullable<z.ZodString>;
1652
+ }, z.core.$strict>;
1653
+ }, z.core.$strict>>;
1654
+ keywordGaps: z.ZodArray<z.ZodObject<{
1655
+ target: z.ZodObject<{
1656
+ kind: z.ZodEnum<{
1657
+ domain: "domain";
1658
+ host: "host";
1659
+ }>;
1660
+ value: z.ZodString;
1661
+ includeSubdomains: z.ZodBoolean;
1662
+ }, z.core.$strict>;
1663
+ competitor: z.ZodObject<{
1664
+ kind: z.ZodEnum<{
1665
+ domain: "domain";
1666
+ host: "host";
1667
+ }>;
1668
+ value: z.ZodString;
1669
+ includeSubdomains: z.ZodBoolean;
1670
+ }, z.core.$strict>;
1671
+ keyword: z.ZodString;
1672
+ targetRankOrganic: z.ZodNullable<z.ZodNumber>;
1673
+ competitorRankOrganic: z.ZodNumber;
1674
+ targetUrl: z.ZodNullable<z.ZodString>;
1675
+ competitorUrl: z.ZodNullable<z.ZodString>;
1676
+ searchVolume: z.ZodNullable<z.ZodNumber>;
1677
+ keywordDifficulty: z.ZodNullable<z.ZodNumber>;
1678
+ cpcUsd: z.ZodNullable<z.ZodNumber>;
1679
+ kind: z.ZodEnum<{
1680
+ shared: "shared";
1681
+ missing: "missing";
1682
+ outranked: "outranked";
1683
+ }>;
1684
+ rankGap: z.ZodNullable<z.ZodNumber>;
1685
+ provenance: z.ZodObject<{
1686
+ provider: z.ZodEnum<{
1687
+ dataforseo: "dataforseo";
1688
+ }>;
1689
+ dataset: z.ZodString;
1690
+ engine: z.ZodLiteral<"google">;
1691
+ locationCode: z.ZodNumber;
1692
+ languageCode: z.ZodString;
1693
+ device: z.ZodUnion<readonly [z.ZodLiteral<"unspecified">, z.ZodEnum<{
1694
+ desktop: "desktop";
1695
+ mobile: "mobile";
1696
+ }>]>;
1697
+ collectedAt: z.ZodString;
1698
+ sourceUpdatedAt: z.ZodNullable<z.ZodString>;
1699
+ }, z.core.$strict>;
1700
+ }, z.core.$strict>>;
1536
1701
  }, z.core.$strict>;
1537
1702
  type SeoResults = z.infer<typeof seoResultsSchema>;
1538
1703
  /** A market-rankings row as stored: rows saved before `searchStatus` existed are completed searches without it. */
1539
1704
  type StoredSeoMarketRanking = Omit<SeoMarketRanking, 'searchStatus'> & Partial<Pick<SeoMarketRanking, 'searchStatus'>>;
1540
- /** SEO results as a task stores them: tasks saved before market rankings existed have no `marketRankings`. */
1541
- type StoredSeoResults = Omit<SeoResults, 'marketRankings'> & {
1705
+ /** Stored tasks can predate market rankings, competitor discovery, or keyword-gap datasets. */
1706
+ type StoredSeoResults = Omit<SeoResults, 'marketRankings' | 'competitors' | 'keywordGaps'> & {
1542
1707
  marketRankings?: StoredSeoMarketRanking[];
1708
+ competitors?: SeoCompetitor[];
1709
+ keywordGaps?: SeoKeywordGap[];
1543
1710
  };
1544
1711
  /** One market and tracked query a market-rankings search answers, with the competitors its row reports. */
1545
1712
  interface SeoMarketRankingSearchMarket {
@@ -1569,6 +1736,11 @@ interface SeoAdapterRequest {
1569
1736
  tag: string;
1570
1737
  /** Market rankings only: `keywords` holds the one search text, searched at `locationCode`. */
1571
1738
  search?: SeoMarketRankingSearch;
1739
+ /** Keyword gaps only: one frozen target/competitor comparison and one disjoint database population. */
1740
+ comparison?: {
1741
+ competitor: SeoTarget;
1742
+ mode: SeoKeywordGapMode;
1743
+ };
1572
1744
  }
1573
1745
  interface SeoAdapterReceipt {
1574
1746
  remoteTaskId: string | null;
@@ -1648,7 +1820,7 @@ declare const seoProfiles: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1648
1820
  data: {
1649
1821
  name: string;
1650
1822
  connectionId: string;
1651
- capabilities: ("keyword-metrics" | "domain-intelligence" | "ranked-keywords" | "market-rankings")[];
1823
+ capabilities: ("keyword-metrics" | "domain-intelligence" | "ranked-keywords" | "market-rankings" | "competitor-discovery" | "keyword-gaps")[];
1652
1824
  targets: {
1653
1825
  kind: "domain" | "host";
1654
1826
  value: string;
@@ -1663,6 +1835,11 @@ declare const seoProfiles: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1663
1835
  key?: string | undefined;
1664
1836
  expectedPlanRevision?: number | undefined;
1665
1837
  };
1838
+ competitors?: {
1839
+ kind: "domain" | "host";
1840
+ value: string;
1841
+ includeSubdomains: boolean;
1842
+ }[] | undefined;
1666
1843
  rankings?: {
1667
1844
  locations: {
1668
1845
  key: string;
@@ -1688,7 +1865,7 @@ declare const seoProfiles: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1688
1865
  $type: {
1689
1866
  name: string;
1690
1867
  connectionId: string;
1691
- capabilities: ("keyword-metrics" | "domain-intelligence" | "ranked-keywords" | "market-rankings")[];
1868
+ capabilities: ("keyword-metrics" | "domain-intelligence" | "ranked-keywords" | "market-rankings" | "competitor-discovery" | "keyword-gaps")[];
1692
1869
  targets: {
1693
1870
  kind: "domain" | "host";
1694
1871
  value: string;
@@ -1703,6 +1880,11 @@ declare const seoProfiles: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1703
1880
  key?: string | undefined;
1704
1881
  expectedPlanRevision?: number | undefined;
1705
1882
  };
1883
+ competitors?: {
1884
+ kind: "domain" | "host";
1885
+ value: string;
1886
+ includeSubdomains: boolean;
1887
+ }[] | undefined;
1706
1888
  rankings?: {
1707
1889
  locations: {
1708
1890
  key: string;
@@ -1880,7 +2062,7 @@ declare const seoJobs: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1880
2062
  data: {
1881
2063
  name: string;
1882
2064
  connectionId: string;
1883
- capabilities: ("keyword-metrics" | "domain-intelligence" | "ranked-keywords" | "market-rankings")[];
2065
+ capabilities: ("keyword-metrics" | "domain-intelligence" | "ranked-keywords" | "market-rankings" | "competitor-discovery" | "keyword-gaps")[];
1884
2066
  targets: {
1885
2067
  kind: "domain" | "host";
1886
2068
  value: string;
@@ -1895,6 +2077,11 @@ declare const seoJobs: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1895
2077
  key?: string | undefined;
1896
2078
  expectedPlanRevision?: number | undefined;
1897
2079
  };
2080
+ competitors?: {
2081
+ kind: "domain" | "host";
2082
+ value: string;
2083
+ includeSubdomains: boolean;
2084
+ }[] | undefined;
1898
2085
  rankings?: {
1899
2086
  locations: {
1900
2087
  key: string;
@@ -1920,7 +2107,7 @@ declare const seoJobs: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1920
2107
  $type: {
1921
2108
  name: string;
1922
2109
  connectionId: string;
1923
- capabilities: ("keyword-metrics" | "domain-intelligence" | "ranked-keywords" | "market-rankings")[];
2110
+ capabilities: ("keyword-metrics" | "domain-intelligence" | "ranked-keywords" | "market-rankings" | "competitor-discovery" | "keyword-gaps")[];
1924
2111
  targets: {
1925
2112
  kind: "domain" | "host";
1926
2113
  value: string;
@@ -1935,6 +2122,11 @@ declare const seoJobs: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
1935
2122
  key?: string | undefined;
1936
2123
  expectedPlanRevision?: number | undefined;
1937
2124
  };
2125
+ competitors?: {
2126
+ kind: "domain" | "host";
2127
+ value: string;
2128
+ includeSubdomains: boolean;
2129
+ }[] | undefined;
1938
2130
  rankings?: {
1939
2131
  locations: {
1940
2132
  key: string;
@@ -6945,7 +7137,7 @@ declare const providerBatches: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
6945
7137
  tableName: "provider_batches";
6946
7138
  dataType: "string";
6947
7139
  columnType: "SQLiteText";
6948
- data: "unknown" | "failed" | "submitted" | "submitting" | "ended" | "ingested" | "cancelled";
7140
+ data: "unknown" | "failed" | "submitted" | "cancelled" | "submitting" | "ended" | "ingested";
6949
7141
  driverParam: string;
6950
7142
  notNull: true;
6951
7143
  hasDefault: false;
@@ -6958,7 +7150,7 @@ declare const providerBatches: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
6958
7150
  generated: undefined;
6959
7151
  }, {}, {
6960
7152
  length: number | undefined;
6961
- $type: "unknown" | "failed" | "submitted" | "submitting" | "ended" | "ingested" | "cancelled";
7153
+ $type: "unknown" | "failed" | "submitted" | "cancelled" | "submitting" | "ended" | "ingested";
6962
7154
  }>;
6963
7155
  requestCount: drizzle_orm_sqlite_core.SQLiteColumn<{
6964
7156
  name: "request_count";
@@ -29349,7 +29541,7 @@ declare const gbpReviews: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
29349
29541
  tableName: "gbp_reviews";
29350
29542
  dataType: "string";
29351
29543
  columnType: "SQLiteText";
29352
- data: "gbp" | "places";
29544
+ data: "places" | "gbp";
29353
29545
  driverParam: string;
29354
29546
  notNull: true;
29355
29547
  hasDefault: false;
@@ -29362,7 +29554,7 @@ declare const gbpReviews: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
29362
29554
  generated: undefined;
29363
29555
  }, {}, {
29364
29556
  length: number | undefined;
29365
- $type: "gbp" | "places";
29557
+ $type: "places" | "gbp";
29366
29558
  }>;
29367
29559
  reviewName: drizzle_orm_sqlite_core.SQLiteColumn<{
29368
29560
  name: "review_name";
@@ -29760,7 +29952,7 @@ declare const gbpReviewRatings: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
29760
29952
  tableName: "gbp_review_ratings";
29761
29953
  dataType: "string";
29762
29954
  columnType: "SQLiteText";
29763
- data: "gbp" | "places";
29955
+ data: "places" | "gbp";
29764
29956
  driverParam: string;
29765
29957
  notNull: true;
29766
29958
  hasDefault: false;
@@ -29773,7 +29965,7 @@ declare const gbpReviewRatings: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
29773
29965
  generated: undefined;
29774
29966
  }, {}, {
29775
29967
  length: number | undefined;
29776
- $type: "gbp" | "places";
29968
+ $type: "places" | "gbp";
29777
29969
  }>;
29778
29970
  rating: drizzle_orm_sqlite_core.SQLiteColumn<{
29779
29971
  name: "rating";
@@ -37463,10 +37655,13 @@ type AgentReasoningLevel = (typeof AGENT_REASONING_LEVELS)[number];
37463
37655
  * The shared MCP gateway an operator registered this instance with, so Agent
37464
37656
  * setup can show Canonry plugin instructions for this workspace. `workspace`
37465
37657
  * is what a user enters at the gateway; blank uses this instance's public host.
37658
+ * `clientId` is the OAuth client the gateway registered here, which the consent
37659
+ * page then shows as the operator's rather than as self-registered.
37466
37660
  */
37467
37661
  declare const mcpGatewayConfigSchema: z.ZodOptional<z.ZodNullable<z.ZodObject<{
37468
37662
  url: z.ZodURL;
37469
37663
  workspace: z.ZodOptional<z.ZodNullable<z.ZodString>>;
37664
+ clientId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
37470
37665
  }, z.core.$strict>>>;
37471
37666
  type McpGatewayConfig = NonNullable<z.infer<typeof mcpGatewayConfigSchema>>;
37472
37667
 
package/dist/index.js CHANGED
@@ -3,39 +3,39 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-CHTKK43G.js";
7
- import "./chunk-ZXYCPRNY.js";
8
- import "./chunk-5LKK2MCJ.js";
9
- import "./chunk-ORZBHCZR.js";
6
+ } from "./chunk-COUM462G.js";
7
+ import "./chunk-WSWHLKKJ.js";
8
+ import "./chunk-OES6PSQK.js";
9
+ import "./chunk-IYMTQHPD.js";
10
10
  import "./chunk-ELCLGWUT.js";
11
11
  import "./chunk-XEBKF4N5.js";
12
- import "./chunk-PSNTEGNY.js";
13
- import "./chunk-C3UFOS7J.js";
14
- import "./chunk-JEXBP7CR.js";
12
+ import "./chunk-KZB6HLFT.js";
13
+ import "./chunk-5NBXPO4G.js";
14
+ import "./chunk-PLLDJUG2.js";
15
15
  import "./chunk-TSENU4GG.js";
16
- import "./chunk-2WBT6TEJ.js";
17
- import "./chunk-6KPBYCPE.js";
18
- import "./chunk-LKEFPJQ2.js";
19
- import "./chunk-NDTU7FGL.js";
20
- import "./chunk-JRVKW4OO.js";
16
+ import "./chunk-FCYGY4FT.js";
17
+ import "./chunk-4GEEYY3N.js";
18
+ import "./chunk-BKOG3GEI.js";
19
+ import "./chunk-WVCDUKJ2.js";
20
+ import "./chunk-7OAXEMOF.js";
21
21
  import {
22
22
  loadConfig
23
- } from "./chunk-7JC4Z6FQ.js";
24
- import "./chunk-7UVCZZQJ.js";
25
- import "./chunk-46KV7CZU.js";
26
- import "./chunk-4QHTXT4A.js";
27
- import "./chunk-JSCO223C.js";
28
- import "./chunk-5QR7D4RQ.js";
23
+ } from "./chunk-3QJWOF2B.js";
24
+ import "./chunk-AI44ZCMK.js";
25
+ import "./chunk-LBNUTWPK.js";
26
+ import "./chunk-MUYTDD35.js";
27
+ import "./chunk-ZHFE6J3A.js";
28
+ import "./chunk-7HB6QLX4.js";
29
29
  import "./chunk-AOJU5LKX.js";
30
30
  import "./chunk-HGMYEDAQ.js";
31
- import "./chunk-HD2VVIPD.js";
32
- import "./chunk-Z2FY6AGZ.js";
33
- import "./chunk-XYYWKCJQ.js";
34
- import "./chunk-GDKMVOZI.js";
35
- import "./chunk-TESDUMVK.js";
36
- import "./chunk-JPOIDGGF.js";
37
- import "./chunk-D5XPB7MM.js";
38
- import "./chunk-FCGYYZHL.js";
31
+ import "./chunk-BTMLE3EN.js";
32
+ import "./chunk-TZRYVW75.js";
33
+ import "./chunk-JERATA5R.js";
34
+ import "./chunk-PRCBHOVR.js";
35
+ import "./chunk-O4WBYEGV.js";
36
+ import "./chunk-3MGM3U6V.js";
37
+ import "./chunk-PH4AESRE.js";
38
+ import "./chunk-PM2DB3HE.js";
39
39
  import "./chunk-MLKGABMK.js";
40
40
  export {
41
41
  GoogleMarketingRuntimeError,
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  installMcp
3
- } from "./chunk-JZ4UFSVR.js";
3
+ } from "./chunk-R26CF4WT.js";
4
4
  import {
5
5
  trackCliConnection
6
- } from "./chunk-AAUMUHUI.js";
6
+ } from "./chunk-KF7I7FBI.js";
7
7
  import {
8
8
  buildSetupState,
9
9
  queueServeHandoff
10
- } from "./chunk-JMCURBZG.js";
10
+ } from "./chunk-GEHRGKQT.js";
11
11
  import "./chunk-VJWDBFSL.js";
12
- import "./chunk-JEXBP7CR.js";
13
- import "./chunk-2WBT6TEJ.js";
12
+ import "./chunk-PLLDJUG2.js";
13
+ import "./chunk-FCYGY4FT.js";
14
14
  import {
15
15
  cliRuntimeContext,
16
16
  installAttribution,
@@ -18,8 +18,8 @@ import {
18
18
  recordInstallRef,
19
19
  showFirstRunNotice,
20
20
  trackEvent
21
- } from "./chunk-6KPBYCPE.js";
22
- import "./chunk-JRVKW4OO.js";
21
+ } from "./chunk-4GEEYY3N.js";
22
+ import "./chunk-7OAXEMOF.js";
23
23
  import {
24
24
  configExists,
25
25
  getBootstrapEnv,
@@ -27,24 +27,24 @@ import {
27
27
  getConfigPath,
28
28
  saveConfig,
29
29
  withBootstrapProviderDefaults
30
- } from "./chunk-7JC4Z6FQ.js";
30
+ } from "./chunk-3QJWOF2B.js";
31
31
  import {
32
32
  installSkills
33
- } from "./chunk-7UVCZZQJ.js";
33
+ } from "./chunk-AI44ZCMK.js";
34
34
  import "./chunk-AOJU5LKX.js";
35
35
  import {
36
36
  CliError,
37
37
  isMachineFormat
38
38
  } from "./chunk-HGMYEDAQ.js";
39
- import "./chunk-JPOIDGGF.js";
39
+ import "./chunk-3MGM3U6V.js";
40
40
  import {
41
41
  apiKeys,
42
42
  createClient,
43
43
  migrate
44
- } from "./chunk-D5XPB7MM.js";
44
+ } from "./chunk-PH4AESRE.js";
45
45
  import {
46
46
  describeError
47
- } from "./chunk-FCGYYZHL.js";
47
+ } from "./chunk-PM2DB3HE.js";
48
48
  import "./chunk-MLKGABMK.js";
49
49
 
50
50
  // src/commands/init.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-JRVKW4OO.js";
4
- import "./chunk-7JC4Z6FQ.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -9,7 +9,7 @@ import "./chunk-AOJU5LKX.js";
9
9
  import {
10
10
  isMachineFormat
11
11
  } from "./chunk-HGMYEDAQ.js";
12
- import "./chunk-FCGYYZHL.js";
12
+ import "./chunk-PM2DB3HE.js";
13
13
  import "./chunk-MLKGABMK.js";
14
14
 
15
15
  // src/commands/insights.ts
@@ -0,0 +1,16 @@
1
+ import {
2
+ HISTORY_WINDOW_RUNS,
3
+ IntelligenceService
4
+ } from "./chunk-BTMLE3EN.js";
5
+ import "./chunk-TZRYVW75.js";
6
+ import "./chunk-JERATA5R.js";
7
+ import "./chunk-PRCBHOVR.js";
8
+ import "./chunk-O4WBYEGV.js";
9
+ import "./chunk-3MGM3U6V.js";
10
+ import "./chunk-PH4AESRE.js";
11
+ import "./chunk-PM2DB3HE.js";
12
+ import "./chunk-MLKGABMK.js";
13
+ export {
14
+ HISTORY_WINDOW_RUNS,
15
+ IntelligenceService
16
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-JRVKW4OO.js";
4
- import "./chunk-7JC4Z6FQ.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -17,7 +17,7 @@ import {
17
17
  journeyDetailQuerySchema,
18
18
  journeySummaryQuerySchema,
19
19
  journeysQuerySchema
20
- } from "./chunk-FCGYYZHL.js";
20
+ } from "./chunk-PM2DB3HE.js";
21
21
  import "./chunk-MLKGABMK.js";
22
22
 
23
23
  // src/commands/journeys.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-JRVKW4OO.js";
4
- import "./chunk-7JC4Z6FQ.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  READ_ONLY_SCOPE,
15
15
  formatIsoDate
16
- } from "./chunk-FCGYYZHL.js";
16
+ } from "./chunk-PM2DB3HE.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
 
19
19
  // src/commands/keys.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-JRVKW4OO.js";
4
- import "./chunk-7JC4Z6FQ.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -10,7 +10,7 @@ import {
10
10
  CliError,
11
11
  isMachineFormat
12
12
  } from "./chunk-HGMYEDAQ.js";
13
- import "./chunk-FCGYYZHL.js";
13
+ import "./chunk-PM2DB3HE.js";
14
14
  import "./chunk-MLKGABMK.js";
15
15
 
16
16
  // src/commands/keyword.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-JRVKW4OO.js";
4
- import "./chunk-7JC4Z6FQ.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  isMachineFormat,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-HGMYEDAQ.js";
10
10
  import {
11
11
  logQuerySchema
12
- } from "./chunk-FCGYYZHL.js";
12
+ } from "./chunk-PM2DB3HE.js";
13
13
  import "./chunk-MLKGABMK.js";
14
14
 
15
15
  // src/commands/logs.ts
@@ -3,13 +3,13 @@ import {
3
3
  printMcpConfig,
4
4
  renderClientSnippet,
5
5
  showMcpProfile
6
- } from "./chunk-JZ4UFSVR.js";
6
+ } from "./chunk-R26CF4WT.js";
7
7
  import "./chunk-VJWDBFSL.js";
8
- import "./chunk-JRVKW4OO.js";
9
- import "./chunk-7JC4Z6FQ.js";
8
+ import "./chunk-7OAXEMOF.js";
9
+ import "./chunk-3QJWOF2B.js";
10
10
  import "./chunk-AOJU5LKX.js";
11
11
  import "./chunk-HGMYEDAQ.js";
12
- import "./chunk-FCGYYZHL.js";
12
+ import "./chunk-PM2DB3HE.js";
13
13
  import "./chunk-MLKGABMK.js";
14
14
  export {
15
15
  installMcp,
package/dist/mcp.js CHANGED
@@ -1,25 +1,25 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-CMS4YM5M.js";
3
+ } from "./chunk-BLZCNL3B.js";
4
4
  import {
5
5
  createCanonryMcpServer
6
- } from "./chunk-LKEFPJQ2.js";
7
- import "./chunk-NDTU7FGL.js";
6
+ } from "./chunk-BKOG3GEI.js";
7
+ import "./chunk-WVCDUKJ2.js";
8
8
  import {
9
9
  createApiClient
10
- } from "./chunk-JRVKW4OO.js";
11
- import "./chunk-7JC4Z6FQ.js";
12
- import "./chunk-7UVCZZQJ.js";
13
- import "./chunk-4QHTXT4A.js";
14
- import "./chunk-JSCO223C.js";
15
- import "./chunk-5QR7D4RQ.js";
10
+ } from "./chunk-7OAXEMOF.js";
11
+ import "./chunk-3QJWOF2B.js";
12
+ import "./chunk-AI44ZCMK.js";
13
+ import "./chunk-MUYTDD35.js";
14
+ import "./chunk-ZHFE6J3A.js";
15
+ import "./chunk-7HB6QLX4.js";
16
16
  import "./chunk-AOJU5LKX.js";
17
17
  import "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  describeError,
20
20
  isReadOnlyKey,
21
21
  updateCheckEnvOptOut
22
- } from "./chunk-FCGYYZHL.js";
22
+ } from "./chunk-PM2DB3HE.js";
23
23
  import "./chunk-MLKGABMK.js";
24
24
 
25
25
  // src/mcp/cli.ts