@canonry/canonry 7.66.0 → 7.68.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.
- package/assets/agent-workspace/skills/aero/references/seo-analysis.md +12 -4
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +2 -2
- package/assets/assets/{AgentSetupPage-DXFxOJ1W.js → AgentSetupPage-DyssdZ1J.js} +3 -3
- package/assets/assets/{AuditHistoryPanel-CS8UfTHc.js → AuditHistoryPanel-Bma4Q6p0.js} +1 -1
- package/assets/assets/{BacklinksPage-D5IA2tNY.js → BacklinksPage-C3GoO2Wf.js} +1 -1
- package/assets/assets/{HistoryPage-DsQAUkgR.js → HistoryPage-6iYvYCL7.js} +1 -1
- package/assets/assets/MeasurementPropertyPage-CjI5eB3b.js +4 -0
- package/assets/assets/ProjectPage-GYIgNPxn.js +9 -0
- package/assets/assets/{RunsPage-BgjN1N3t.js → RunsPage-Cw0GTxgx.js} +1 -1
- package/assets/assets/{SettingsPage-BQuqnEvm.js → SettingsPage-Cvg8BvZn.js} +1 -1
- package/assets/assets/SiteHealthSection-vejp2Igj.js +2 -0
- package/assets/assets/ToneBadge-c2bgjqqz.js +60 -0
- package/assets/assets/{TrafficPage-BBqpvwl5.js → TrafficPage-BUb0xr-b.js} +1 -1
- package/assets/assets/TrafficSourceDetailPage-DmrtEYs8.js +1 -0
- package/assets/assets/{account-context-wRthfm6K.js → account-context-qhg8esXw.js} +1 -1
- package/assets/assets/{card-Bq64-UB5.js → card-BNthgfAY.js} +1 -1
- package/assets/assets/{extract-error-message-BRDc8As2.js → extract-error-message-DuYEL09s.js} +1 -1
- package/assets/assets/{format-helpers-D5wFtgg2.js → format-helpers-6v-a8B3S.js} +1 -1
- package/assets/assets/index-BUigRGam.js +60 -0
- package/assets/assets/{index-C6U4u18w.css → index-CqNwsqjm.css} +1 -1
- package/assets/assets/{query-client-IopmAOx0.js → query-client-COFiuVJB.js} +1 -1
- package/assets/assets/react-query-ZdpN7cFt.js +1 -0
- package/assets/assets/{react-sigma_core.esm.min-d72rX0Uo.js → react-sigma_core.esm.min-EbeNATny.js} +1 -1
- package/assets/assets/service-DGFjEsYR.js +1 -0
- package/assets/index.html +8 -8
- package/dist/{ads-IFKZU7SC.js → ads-AHM5LMVT.js} +3 -3
- package/dist/{agent-3KMENHL3.js → agent-2FSGY7SD.js} +7 -7
- package/dist/{agent-ask-7WVQLLD5.js → agent-ask-GIK7T2HD.js} +3 -3
- package/dist/{agent-conversations-5LR67TBD.js → agent-conversations-JEIFZHT3.js} +3 -3
- package/dist/{agent-memory-GKUCCKVX.js → agent-memory-JC3JJXON.js} +3 -3
- package/dist/{agent-providers-TVCRM3YZ.js → agent-providers-JRL3VZA7.js} +3 -3
- package/dist/{agent-transcript-MUTCOOWG.js → agent-transcript-ZQDNW3IE.js} +3 -3
- package/dist/{analytics-2IXSG5ML.js → analytics-HMYE6EIX.js} +3 -3
- package/dist/{apply-7RIYK4VC.js → apply-F5CHVFC3.js} +3 -3
- package/dist/{backfill-VU3FV6DQ.js → backfill-JZDQKZHY.js} +9 -9
- package/dist/{backlinks-DLSRYEX2.js → backlinks-L7XEHBAP.js} +3 -3
- package/dist/{bing-4CXTZUH4.js → bing-XTMKLVRJ.js} +3 -3
- package/dist/{bootstrap-OOHSBSDQ.js → bootstrap-AEHBYC77.js} +10 -10
- package/dist/{cdp-Y53SRSRV.js → cdp-SSIHU3PU.js} +7 -7
- package/dist/{chunk-6ASEI24F.js → chunk-2D7O5UHJ.js} +1 -1
- package/dist/{chunk-LBRG6RKI.js → chunk-33LH4ZGF.js} +2 -1
- package/dist/{chunk-VGUZPC3I.js → chunk-4KMUJOYL.js} +4 -4
- package/dist/{chunk-2YBEI6LE.js → chunk-5SK27UE7.js} +1 -1
- package/dist/{chunk-JYOMHNRP.js → chunk-6W3ENB2X.js} +758 -467
- package/dist/{chunk-IHOVPHUW.js → chunk-7AXVACK6.js} +2 -2
- package/dist/{chunk-TJZLICMB.js → chunk-7NMCRHQL.js} +3 -3
- package/dist/{chunk-YRX5UOM3.js → chunk-7SGZHGZ2.js} +1 -1
- package/dist/{chunk-JALKQREN.js → chunk-ARIYTYOM.js} +83 -11
- package/dist/{chunk-PFKBQTYD.js → chunk-ARYBII44.js} +1 -1
- package/dist/{chunk-743NYXIK.js → chunk-CZUPNWLH.js} +2 -2
- package/dist/{chunk-EIMXB6UH.js → chunk-FDRZQH3Y.js} +14 -2
- package/dist/{chunk-OSF27DCY.js → chunk-IVBJEVHS.js} +2 -2
- package/dist/{chunk-BCRRAH5C.js → chunk-J4CNNYRQ.js} +1 -1
- package/dist/{chunk-DH5QRKFW.js → chunk-JPVG5LIE.js} +3 -3
- package/dist/{chunk-QRBZBJ4U.js → chunk-K2P2XO6P.js} +1 -1
- package/dist/{chunk-ZRSNMEB3.js → chunk-K54WGCZV.js} +409 -340
- package/dist/{chunk-L7DQYID4.js → chunk-LABVR6K7.js} +4 -4
- package/dist/{chunk-FNI3QSVD.js → chunk-LTMQ4MHF.js} +1 -1
- package/dist/{chunk-EYWC24VC.js → chunk-MVRPFLEL.js} +1 -1
- package/dist/{chunk-CKTA5374.js → chunk-PAVSKSKA.js} +1 -1
- package/dist/{chunk-AVQQRTMD.js → chunk-QXCQSRHL.js} +72 -33
- package/dist/{chunk-K2HDTMRI.js → chunk-R42VEDCB.js} +3 -3
- package/dist/{chunk-H37CDAZX.js → chunk-RNA6ZCM6.js} +2 -2
- package/dist/{chunk-FG7KMVA6.js → chunk-U3EJ5RW7.js} +12 -6
- package/dist/{chunk-DE2UI37M.js → chunk-V6ALEP33.js} +2 -2
- package/dist/{chunk-WNCOBSPN.js → chunk-VPZMSV3Q.js} +254 -9
- package/dist/{chunk-DVYS2RMM.js → chunk-W7PA35VJ.js} +4 -4
- package/dist/{chunk-YJYLFIVT.js → chunk-XMXYUP7X.js} +1 -1
- package/dist/{chunk-J5YZXRD5.js → chunk-Y42G2YKT.js} +8 -8
- package/dist/{chunk-ALQEGGYM.js → chunk-YIIIYNPW.js} +22 -4
- package/dist/{chunk-XC44Q5XR.js → chunk-ZD5G5QEV.js} +1 -1
- package/dist/{chunk-SGZWOUIZ.js → chunk-ZU6X4SN2.js} +5 -5
- package/dist/{chunk-IPF2S5G2.js → chunk-ZUXFHO4T.js} +4 -4
- package/dist/{citations-ZTQIYYDB.js → citations-NIFKIG6Y.js} +3 -3
- package/dist/{cli-catalog-IZJXAHFQ.js → cli-catalog-ONYERYPV.js} +3 -3
- package/dist/{cli-commands-XYM2VMAK.js → cli-commands-LWI2NEWW.js} +7 -7
- package/dist/cli.js +13 -13
- package/dist/{competitor-SIXAPHOM.js → competitor-NSUSTLNW.js} +3 -3
- package/dist/{content-XPS3D3Y6.js → content-W5VYYMAW.js} +3 -3
- package/dist/{dashboard-FMJDM5PA.js → dashboard-NNA3P645.js} +6 -6
- package/dist/{demo-QQKSHTPO.js → demo-5M4YGVV4.js} +1 -1
- package/dist/{demo-server-LQ3QXUAS.js → demo-server-FDR4RKLM.js} +14 -11
- package/dist/{discover-K5HFEU2T.js → discover-VCKMXFOR.js} +3 -3
- package/dist/{discover-eval-6536Z2YN.js → discover-eval-CPVP7EK5.js} +3 -3
- package/dist/{doctor-STNH3PHH.js → doctor-EVCP6PDM.js} +3 -3
- package/dist/{evidence-W2EWKBAV.js → evidence-ZWRGNZWN.js} +3 -3
- package/dist/{export-cmd-EGHMY3M6.js → export-cmd-AM6SIRUW.js} +3 -3
- package/dist/{ga-DVIG3PVW.js → ga-6J67NDMZ.js} +3 -3
- package/dist/{gbp-SNS4XZBO.js → gbp-ERTWK26L.js} +3 -3
- package/dist/{google-KGPHZG6E.js → google-O6VQFK4L.js} +4 -4
- package/dist/{google-marketing-VZR6W3L6.js → google-marketing-OEW2YGUR.js} +1 -1
- package/dist/{health-cmd-2KWO2GOM.js → health-cmd-OPGK37MK.js} +3 -3
- package/dist/{history-ZY27B7JE.js → history-WTU4ETCU.js} +3 -3
- package/dist/index.d.ts +114 -8
- package/dist/index.js +24 -24
- package/dist/{init-5TXIKII2.js → init-WTAVKFGR.js} +11 -11
- package/dist/{insights-MUYEOSOG.js → insights-LPEDLSEV.js} +3 -3
- package/dist/intelligence-service-4OO2VQ2I.js +15 -0
- package/dist/{journeys-YO54IRVC.js → journeys-TWVQNRLT.js} +3 -3
- package/dist/{keys-M4QZGYVJ.js → keys-C6FPREBZ.js} +3 -3
- package/dist/{keyword-MU62MGWT.js → keyword-PBSE65DK.js} +3 -3
- package/dist/{logs-BAQM334Q.js → logs-62RUOAKT.js} +3 -3
- package/dist/{mcp-LYS5P3PB.js → mcp-P4LNENKX.js} +2 -2
- package/dist/mcp.js +9 -9
- package/dist/{measurement-plan-HVSTZWTW.js → measurement-plan-HKW3IVIE.js} +5 -5
- package/dist/{notify-XSP5JXU3.js → notify-A3I3G7NK.js} +3 -3
- package/dist/{organic-evidence-4HYW4PVO.js → organic-evidence-OFUJBDCK.js} +3 -3
- package/dist/{overview-XH72WTZT.js → overview-NSRODN2X.js} +4 -4
- package/dist/{project-UKH7FTQX.js → project-B5G2HEAB.js} +3 -3
- package/dist/{query-RRD5M4QV.js → query-UQHJVYUJ.js} +3 -3
- package/dist/{research-V2IGDUKL.js → research-ZWBJDLJY.js} +3 -3
- package/dist/{results-export-5FC7ZT6O.js → results-export-FOJYT4MK.js} +3 -3
- package/dist/{run-B2A4LMWU.js → run-ZIUQ2TNN.js} +4 -4
- package/dist/{schedule-PLY6CHQT.js → schedule-B5CORKGT.js} +3 -3
- package/dist/{search-ACVK3WH5.js → search-2XCZKP6A.js} +3 -3
- package/dist/{serve-2LTQZPEK.js → serve-3BSLRICO.js} +25 -25
- package/dist/{session-IHXMPETX.js → session-PILSYOTX.js} +12 -12
- package/dist/{settings-ZHBNX2I5.js → settings-Y3LVGZH4.js} +3 -3
- package/dist/{skills-KWRTCXTF.js → skills-6E3RVQAQ.js} +2 -2
- package/dist/{snapshot-GBDCCV6L.js → snapshot-RAV2HCL7.js} +3 -3
- package/dist/{src-NOTQWGYV.js → src-VUD6WO5N.js} +6 -2
- package/dist/{status-FGDDGBMJ.js → status-2WCUV6C2.js} +4 -4
- package/dist/{technical-aeo-AK4QI63Q.js → technical-aeo-2TJEHHBR.js} +3 -3
- package/dist/{telemetry-6QPWYMCR.js → telemetry-LQAD26UJ.js} +4 -4
- package/dist/{tools-PBNTVVN7.js → tools-U6VGYZV2.js} +11 -11
- package/dist/{traffic-AS4PIOQL.js → traffic-3TBXSHPV.js} +5 -5
- package/dist/{users-BNYKF35J.js → users-2HDDA5GT.js} +3 -3
- package/dist/{visibility-stats-TWL3GJMD.js → visibility-stats-HSGT3OL3.js} +3 -3
- package/dist/{wordpress-XBWXAACD.js → wordpress-ALODIEFK.js} +3 -3
- package/package.json +1 -1
- package/assets/assets/MeasurementPropertyPage-CdCnjCaS.js +0 -4
- package/assets/assets/ProjectPage-D3oFKnBG.js +0 -9
- package/assets/assets/SiteHealthSection-C6QE9xNk.js +0 -2
- package/assets/assets/ToneBadge-DNva5_AM.js +0 -60
- package/assets/assets/TrafficSourceDetailPage-uxd0ojry.js +0 -1
- package/assets/assets/index-Ttz5_bL3.js +0 -60
- package/assets/assets/react-query-CISHjSch.js +0 -1
- package/assets/assets/service-DsDxSQuN.js +0 -1
- package/dist/intelligence-service-U4NSGZUH.js +0 -15
|
@@ -13366,6 +13366,7 @@ var STORED_READ_OPERATIONS = /* @__PURE__ */ new Set([
|
|
|
13366
13366
|
"GET /api/v1/projects/{name}/seo/domain-intelligence",
|
|
13367
13367
|
"GET /api/v1/projects/{name}/seo/ranked-keywords",
|
|
13368
13368
|
"GET /api/v1/projects/{name}/seo/market-rankings",
|
|
13369
|
+
"GET /api/v1/projects/{name}/seo/market-rankings/summary",
|
|
13369
13370
|
"GET /api/v1/projects/{name}/gbp/local-post-attempt",
|
|
13370
13371
|
"GET /api/v1/openapi.json",
|
|
13371
13372
|
"GET /api/v1/screenshots/{snapshotId}",
|
|
@@ -21386,18 +21387,31 @@ var seoMarketRankingContextSchema = z66.object({
|
|
|
21386
21387
|
queryText: z66.string(),
|
|
21387
21388
|
queryClass: queryClassSchema
|
|
21388
21389
|
}).strict();
|
|
21390
|
+
var seoMarketRankingCompetitorSchema = z66.object({ domain: z66.string(), rankOrganic: z66.number().int().positive() }).strict();
|
|
21391
|
+
var seoMarketRankingSearchStatusSchema = z66.enum(["completed", "partial", "failed", "cancelled"]);
|
|
21392
|
+
var SeoMarketRankingSearchStatuses = seoMarketRankingSearchStatusSchema.enum;
|
|
21389
21393
|
var seoMarketRankingSchema = seoMarketRankingContextSchema.extend({
|
|
21390
21394
|
/** The exact text searched on Google for `queryText` (see `seoSearchTextSchema`). */
|
|
21391
21395
|
searchText: z66.string(),
|
|
21392
21396
|
locationLabel: z66.string(),
|
|
21393
21397
|
target: seoTargetSchema,
|
|
21398
|
+
searchStatus: seoMarketRankingSearchStatusSchema,
|
|
21394
21399
|
rankOrganic: z66.number().int().positive().nullable(),
|
|
21395
21400
|
rankAbsolute: z66.number().int().positive().nullable(),
|
|
21396
21401
|
url: z66.string().nullable(),
|
|
21397
|
-
|
|
21398
|
-
|
|
21399
|
-
competitors
|
|
21400
|
-
|
|
21402
|
+
/** Organic results the search checked: the requested depth, less when partial, 0 when it failed or never ran. */
|
|
21403
|
+
depth: z66.number().int().nonnegative(),
|
|
21404
|
+
/** Tracked competitors found in the same results at their best organic position, best first. */
|
|
21405
|
+
competitors: z66.array(seoMarketRankingCompetitorSchema),
|
|
21406
|
+
/** Where the results came from; null when the search returned none. */
|
|
21407
|
+
provenance: seoProvenanceSchema.nullable()
|
|
21408
|
+
}).strict();
|
|
21409
|
+
var seoMarketRankingOutcomeSchema = z66.enum(["page-1", "ranks-11-20", "ranks-21-plus", "not-ranked", "partly-checked", "failed", "cancelled"]);
|
|
21410
|
+
var SeoMarketRankingOutcomes = seoMarketRankingOutcomeSchema.enum;
|
|
21411
|
+
var seoMarketRankingRowSchema = seoMarketRankingSchema.extend({
|
|
21412
|
+
outcome: seoMarketRankingOutcomeSchema,
|
|
21413
|
+
/** A tracked competitor ranks above the target in these results, or ranks while the target is not in them. */
|
|
21414
|
+
rivalAhead: z66.boolean()
|
|
21401
21415
|
}).strict();
|
|
21402
21416
|
var seoResultsSchema = z66.object({
|
|
21403
21417
|
keywordMetrics: z66.array(seoKeywordMetricsSchema),
|
|
@@ -21448,7 +21462,12 @@ var seoTaskSchema = z66.object({
|
|
|
21448
21462
|
target: seoTargetSchema.nullable(),
|
|
21449
21463
|
status: seoRunStatusSchema,
|
|
21450
21464
|
error: z66.string().nullable(),
|
|
21451
|
-
remoteTaskId: z66.string().nullable()
|
|
21465
|
+
remoteTaskId: z66.string().nullable(),
|
|
21466
|
+
/** Market rankings: the text searched on Google and where from, so a failed search can be named. Null for other datasets. */
|
|
21467
|
+
searchText: z66.string().nullable(),
|
|
21468
|
+
locationLabel: z66.string().nullable(),
|
|
21469
|
+
/** A second attempt at a search whose first attempt hit a search-engine error. It replaces that attempt, which is not listed. */
|
|
21470
|
+
retried: z66.boolean()
|
|
21452
21471
|
}).strict();
|
|
21453
21472
|
var seoResultCountsSchema = z66.object({
|
|
21454
21473
|
keywordMetrics: z66.number().int().nonnegative(),
|
|
@@ -21478,11 +21497,57 @@ var seoPageShape = {
|
|
|
21478
21497
|
var seoKeywordMetricsListSchema = z66.object({ ...seoPageShape, items: z66.array(seoKeywordMetricsSchema) }).strict();
|
|
21479
21498
|
var seoDomainIntelligenceListSchema = z66.object({ ...seoPageShape, items: z66.array(seoDomainIntelligenceSchema) }).strict();
|
|
21480
21499
|
var seoRankedKeywordListSchema = z66.object({ ...seoPageShape, items: z66.array(seoRankedKeywordSchema) }).strict();
|
|
21500
|
+
var seoMarketRankingFilterSchema = z66.enum(["needs-work", "page-1", "ranks-11-20", "ranks-21-plus", "not-ranked", "partly-checked", "rival-ahead", "failed", "cancelled"]);
|
|
21501
|
+
var SeoMarketRankingFilters = seoMarketRankingFilterSchema.enum;
|
|
21502
|
+
var seoMarketRankingSortSchema = z66.enum(["market", "rank", "-rank", "query", "-query"]);
|
|
21503
|
+
var SeoMarketRankingSorts = seoMarketRankingSortSchema.enum;
|
|
21481
21504
|
var seoMarketRankingQuerySchema = seoEvidenceQuerySchema.extend({
|
|
21505
|
+
marketKey: z66.string().min(1).max(200).optional(),
|
|
21506
|
+
regionKey: z66.string().min(1).max(200).optional(),
|
|
21507
|
+
outcome: seoMarketRankingFilterSchema.optional(),
|
|
21508
|
+
/** Case-insensitive text found in the query, its searched text or its market label. */
|
|
21509
|
+
q: z66.string().trim().min(1).max(200).optional(),
|
|
21510
|
+
sort: seoMarketRankingSortSchema.optional()
|
|
21511
|
+
}).strict();
|
|
21512
|
+
var seoMarketRankingListSchema = z66.object({ ...seoPageShape, items: z66.array(seoMarketRankingRowSchema) }).strict();
|
|
21513
|
+
var seoMarketRankingCountsSchema = z66.object({
|
|
21514
|
+
queries: z66.number().int().nonnegative(),
|
|
21515
|
+
page1: z66.number().int().nonnegative(),
|
|
21516
|
+
ranks11To20: z66.number().int().nonnegative(),
|
|
21517
|
+
ranks21Plus: z66.number().int().nonnegative(),
|
|
21518
|
+
/** Not in the requested depth: only searches that checked all of it, never a partial one. */
|
|
21519
|
+
notRanked: z66.number().int().nonnegative(),
|
|
21520
|
+
/** A partial search that did not reach the site; ranks past what it checked are unknown. */
|
|
21521
|
+
partlyChecked: z66.number().int().nonnegative(),
|
|
21522
|
+
failed: z66.number().int().nonnegative(),
|
|
21523
|
+
cancelled: z66.number().int().nonnegative(),
|
|
21524
|
+
needsWork: z66.number().int().nonnegative(),
|
|
21525
|
+
/** Rows where a tracked competitor ranks above the target; overlaps the outcome counts. */
|
|
21526
|
+
rivalAhead: z66.number().int().nonnegative()
|
|
21527
|
+
}).strict();
|
|
21528
|
+
var seoMarketRankingGroupKindSchema = z66.enum(["region", "market"]);
|
|
21529
|
+
var SeoMarketRankingGroupKinds = seoMarketRankingGroupKindSchema.enum;
|
|
21530
|
+
var seoMarketRankingGroupSchema = z66.object({
|
|
21531
|
+
key: z66.string(),
|
|
21532
|
+
label: z66.string(),
|
|
21533
|
+
kind: seoMarketRankingGroupKindSchema,
|
|
21534
|
+
counts: seoMarketRankingCountsSchema
|
|
21535
|
+
}).strict();
|
|
21536
|
+
var seoMarketRankingSummaryQuerySchema = seoEvidenceQuerySchema.pick({ profileId: true, runId: true }).extend({
|
|
21482
21537
|
marketKey: z66.string().min(1).max(200).optional(),
|
|
21483
21538
|
regionKey: z66.string().min(1).max(200).optional()
|
|
21484
21539
|
}).strict();
|
|
21485
|
-
var
|
|
21540
|
+
var seoMarketRankingSummarySchema = z66.object({
|
|
21541
|
+
runId: z66.string().nullable(),
|
|
21542
|
+
depth: z66.number().int().positive().nullable(),
|
|
21543
|
+
regionKey: z66.string().nullable(),
|
|
21544
|
+
marketKey: z66.string().nullable(),
|
|
21545
|
+
/** Names of the selected region and market; null when none is selected or the refresh has no rows for it. */
|
|
21546
|
+
regionLabel: z66.string().nullable(),
|
|
21547
|
+
marketLabel: z66.string().nullable(),
|
|
21548
|
+
totals: seoMarketRankingCountsSchema,
|
|
21549
|
+
groups: z66.array(seoMarketRankingGroupSchema)
|
|
21550
|
+
}).strict();
|
|
21486
21551
|
var seoOverviewSchema = z66.object({
|
|
21487
21552
|
status: seoStatusSchema,
|
|
21488
21553
|
profiles: z66.array(seoProfileSchema),
|
|
@@ -21499,6 +21564,7 @@ var seoOverviewSchema = z66.object({
|
|
|
21499
21564
|
keywordMetricsCount: z66.number().int().nonnegative(),
|
|
21500
21565
|
domainIntelligenceCount: z66.number().int().nonnegative(),
|
|
21501
21566
|
rankedKeywordCount: z66.number().int().nonnegative(),
|
|
21567
|
+
/** Rows the market-rankings read returns for the evidence refresh, searches that failed or never ran included. */
|
|
21502
21568
|
marketRankingCount: z66.number().int().nonnegative()
|
|
21503
21569
|
}).strict();
|
|
21504
21570
|
var seoMicrosSchema = z66.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
|
|
@@ -21612,6 +21678,10 @@ var scheduleDtoSchema = z68.object({
|
|
|
21612
21678
|
updatedAt: z68.string()
|
|
21613
21679
|
});
|
|
21614
21680
|
var scheduleExpectedUpdatedAtSchema = z68.string().datetime();
|
|
21681
|
+
function scheduleEnabledAt(previous, enabled, now) {
|
|
21682
|
+
if (!enabled) return null;
|
|
21683
|
+
return previous?.enabled ? previous.enabledAt : now;
|
|
21684
|
+
}
|
|
21615
21685
|
function nextScheduleUpdatedAt(previous, nowMs = Date.now()) {
|
|
21616
21686
|
const previousMs = previous === void 0 ? Number.NaN : Date.parse(previous);
|
|
21617
21687
|
return new Date(Number.isFinite(previousMs) ? Math.max(nowMs, previousMs + 1) : nowMs).toISOString();
|
|
@@ -23297,11 +23367,11 @@ function resolveModelPrice(provider, model, overrides) {
|
|
|
23297
23367
|
}
|
|
23298
23368
|
return null;
|
|
23299
23369
|
}
|
|
23300
|
-
function estimateAnswerCostMicros(usage, price,
|
|
23370
|
+
function estimateAnswerCostMicros(usage, price, tier2) {
|
|
23301
23371
|
const cachedInputRate = price.cachedInputPerMTok ?? DEFAULT_CACHED_INPUT_MULTIPLIER * price.inputPerMTok;
|
|
23302
23372
|
const cacheWriteRate = price.cacheWritePerMTok ?? DEFAULT_CACHE_WRITE_MULTIPLIER * price.inputPerMTok;
|
|
23303
23373
|
const tokenMicros = usage.inputTokens * price.inputPerMTok + usage.cachedInputTokens * cachedInputRate + usage.cacheWriteTokens * cacheWriteRate + usage.outputTokens * price.outputPerMTok;
|
|
23304
|
-
const tierMultiplier =
|
|
23374
|
+
const tierMultiplier = tier2 === PricingTiers.batch ? price.batchTokenDiscount ?? DEFAULT_BATCH_TOKEN_DISCOUNT : 1;
|
|
23305
23375
|
const billedSearchUnits = price.searchUnit === SearchUnits.prompt ? usage.searchCount > 0 ? 1 : 0 : usage.searchCount;
|
|
23306
23376
|
const searchMicros = billedSearchUnits * (price.searchPer1k ?? 0) * 1e3;
|
|
23307
23377
|
return Math.round(tokenMicros * tierMultiplier + searchMicros);
|
|
@@ -23807,6 +23877,9 @@ var agentViewContextSchema = z82.object({
|
|
|
23807
23877
|
view: z82.enum(["project", "visibility", "property", "queries", "site-health", "seo"]),
|
|
23808
23878
|
seoProfileId: z82.string().trim().min(1).max(128).optional(),
|
|
23809
23879
|
seoRunId: z82.string().trim().min(1).max(128).optional(),
|
|
23880
|
+
/** The market-rankings region and market the SEO view is narrowed to. */
|
|
23881
|
+
seoRegionKey: z82.string().trim().min(1).max(200).optional(),
|
|
23882
|
+
seoMarketKey: z82.string().trim().min(1).max(200).optional(),
|
|
23810
23883
|
unavailableReason: z82.string().trim().min(1).max(512).optional(),
|
|
23811
23884
|
selection: visibilityReportRequestSchema.optional(),
|
|
23812
23885
|
page: z82.object({
|
|
@@ -23816,6 +23889,7 @@ var agentViewContextSchema = z82.object({
|
|
|
23816
23889
|
}).strict().superRefine((value, ctx) => {
|
|
23817
23890
|
if (value.seoProfileId && value.view !== "seo") ctx.addIssue({ code: "custom", message: "SEO profile context requires the SEO view." });
|
|
23818
23891
|
if (value.seoRunId && value.view !== "seo") ctx.addIssue({ code: "custom", message: "SEO run context requires the SEO view." });
|
|
23892
|
+
if ((value.seoRegionKey || value.seoMarketKey) && value.view !== "seo") ctx.addIssue({ code: "custom", message: "SEO market context requires the SEO view." });
|
|
23819
23893
|
if (value.page && value.view !== "site-health") ctx.addIssue({ code: "custom", message: "Page context requires Site Health." });
|
|
23820
23894
|
if (value.selection && !["visibility", "property", "queries"].includes(value.view)) ctx.addIssue({ code: "custom", message: "Measurement selection requires a measurement view." });
|
|
23821
23895
|
});
|
|
@@ -26138,6 +26212,162 @@ var cliCatalogSchema = z92.object({
|
|
|
26138
26212
|
}))
|
|
26139
26213
|
});
|
|
26140
26214
|
|
|
26215
|
+
// ../contracts/src/seo-market-rankings.ts
|
|
26216
|
+
var PAGE_ONE_LAST_RANK = 10;
|
|
26217
|
+
var CLOSE_LAST_RANK = 20;
|
|
26218
|
+
function bestCompetitorRank(competitors) {
|
|
26219
|
+
return competitors.reduce((best, competitor) => best === null || competitor.rankOrganic < best ? competitor.rankOrganic : best, null);
|
|
26220
|
+
}
|
|
26221
|
+
function outcomeOf(row) {
|
|
26222
|
+
switch (row.searchStatus) {
|
|
26223
|
+
case SeoMarketRankingSearchStatuses.failed:
|
|
26224
|
+
return SeoMarketRankingOutcomes.failed;
|
|
26225
|
+
case SeoMarketRankingSearchStatuses.cancelled:
|
|
26226
|
+
return SeoMarketRankingOutcomes.cancelled;
|
|
26227
|
+
case SeoMarketRankingSearchStatuses.completed:
|
|
26228
|
+
case SeoMarketRankingSearchStatuses.partial: {
|
|
26229
|
+
const rank = row.rankOrganic;
|
|
26230
|
+
if (rank === null) return row.searchStatus === SeoMarketRankingSearchStatuses.partial ? SeoMarketRankingOutcomes["partly-checked"] : SeoMarketRankingOutcomes["not-ranked"];
|
|
26231
|
+
if (rank <= PAGE_ONE_LAST_RANK) return SeoMarketRankingOutcomes["page-1"];
|
|
26232
|
+
return rank <= CLOSE_LAST_RANK ? SeoMarketRankingOutcomes["ranks-11-20"] : SeoMarketRankingOutcomes["ranks-21-plus"];
|
|
26233
|
+
}
|
|
26234
|
+
default: {
|
|
26235
|
+
const unknown = row.searchStatus;
|
|
26236
|
+
return unknown;
|
|
26237
|
+
}
|
|
26238
|
+
}
|
|
26239
|
+
}
|
|
26240
|
+
function marketRankingRow(row) {
|
|
26241
|
+
const best = bestCompetitorRank(row.competitors);
|
|
26242
|
+
return { ...row, outcome: outcomeOf(row), rivalAhead: best !== null && (row.rankOrganic === null || best < row.rankOrganic) };
|
|
26243
|
+
}
|
|
26244
|
+
function matchesMarketRankingFilter(row, filter) {
|
|
26245
|
+
switch (filter) {
|
|
26246
|
+
case SeoMarketRankingFilters["needs-work"]:
|
|
26247
|
+
return row.outcome === SeoMarketRankingOutcomes["ranks-11-20"] || row.outcome === SeoMarketRankingOutcomes["ranks-21-plus"] || row.outcome === SeoMarketRankingOutcomes["not-ranked"] || row.outcome === SeoMarketRankingOutcomes["partly-checked"];
|
|
26248
|
+
case SeoMarketRankingFilters["rival-ahead"]:
|
|
26249
|
+
return row.rivalAhead;
|
|
26250
|
+
case SeoMarketRankingFilters["page-1"]:
|
|
26251
|
+
case SeoMarketRankingFilters["ranks-11-20"]:
|
|
26252
|
+
case SeoMarketRankingFilters["ranks-21-plus"]:
|
|
26253
|
+
case SeoMarketRankingFilters["not-ranked"]:
|
|
26254
|
+
case SeoMarketRankingFilters["partly-checked"]:
|
|
26255
|
+
case SeoMarketRankingFilters.failed:
|
|
26256
|
+
case SeoMarketRankingFilters.cancelled:
|
|
26257
|
+
return row.outcome === filter;
|
|
26258
|
+
default: {
|
|
26259
|
+
const unknown = filter;
|
|
26260
|
+
return unknown;
|
|
26261
|
+
}
|
|
26262
|
+
}
|
|
26263
|
+
}
|
|
26264
|
+
function matchesMarketRankingText(row, text) {
|
|
26265
|
+
const needle = text.trim().toLowerCase();
|
|
26266
|
+
return !needle || [row.queryText, row.searchText, row.marketLabel].some((value) => value.toLowerCase().includes(needle));
|
|
26267
|
+
}
|
|
26268
|
+
var byMarket = (a, b) => compareText(a.regionLabel ?? "", b.regionLabel ?? "") || compareText(a.marketLabel, b.marketLabel) || compareText(a.searchText, b.searchText) || compareText(a.queryText, b.queryText);
|
|
26269
|
+
var byQuery = (a, b) => compareText(a.queryText.toLowerCase(), b.queryText.toLowerCase()) || byMarket(a, b);
|
|
26270
|
+
function tier(row) {
|
|
26271
|
+
switch (row.outcome) {
|
|
26272
|
+
case SeoMarketRankingOutcomes["page-1"]:
|
|
26273
|
+
case SeoMarketRankingOutcomes["ranks-11-20"]:
|
|
26274
|
+
case SeoMarketRankingOutcomes["ranks-21-plus"]:
|
|
26275
|
+
return 0;
|
|
26276
|
+
case SeoMarketRankingOutcomes["partly-checked"]:
|
|
26277
|
+
return 1;
|
|
26278
|
+
case SeoMarketRankingOutcomes["not-ranked"]:
|
|
26279
|
+
return 2;
|
|
26280
|
+
case SeoMarketRankingOutcomes.failed:
|
|
26281
|
+
return 3;
|
|
26282
|
+
case SeoMarketRankingOutcomes.cancelled:
|
|
26283
|
+
return 4;
|
|
26284
|
+
default: {
|
|
26285
|
+
const unknown = row.outcome;
|
|
26286
|
+
return unknown;
|
|
26287
|
+
}
|
|
26288
|
+
}
|
|
26289
|
+
}
|
|
26290
|
+
function worst(row) {
|
|
26291
|
+
const order = tier(row);
|
|
26292
|
+
return order === 2 ? 0 : order === 0 ? 2 : order;
|
|
26293
|
+
}
|
|
26294
|
+
var unranked = (row) => tier(row) === 1 || tier(row) === 2;
|
|
26295
|
+
var rivalOrder = (a, b) => (bestCompetitorRank(a.competitors) ?? Number.MAX_SAFE_INTEGER) - (bestCompetitorRank(b.competitors) ?? Number.MAX_SAFE_INTEGER);
|
|
26296
|
+
function compareMarketRankingsBy(sort) {
|
|
26297
|
+
switch (sort) {
|
|
26298
|
+
case SeoMarketRankingSorts.market:
|
|
26299
|
+
return byMarket;
|
|
26300
|
+
case SeoMarketRankingSorts.query:
|
|
26301
|
+
return byQuery;
|
|
26302
|
+
case SeoMarketRankingSorts["-query"]:
|
|
26303
|
+
return (a, b) => byQuery(b, a);
|
|
26304
|
+
case SeoMarketRankingSorts.rank:
|
|
26305
|
+
return (a, b) => tier(a) - tier(b) || (a.rankOrganic !== null && b.rankOrganic !== null ? a.rankOrganic - b.rankOrganic : 0) || (unranked(a) ? rivalOrder(a, b) : 0) || byQuery(a, b);
|
|
26306
|
+
case SeoMarketRankingSorts["-rank"]:
|
|
26307
|
+
return (a, b) => worst(a) - worst(b) || (a.rankOrganic !== null && b.rankOrganic !== null ? b.rankOrganic - a.rankOrganic : 0) || (unranked(a) ? rivalOrder(a, b) : 0) || byQuery(a, b);
|
|
26308
|
+
default: {
|
|
26309
|
+
const unknown = sort;
|
|
26310
|
+
return unknown;
|
|
26311
|
+
}
|
|
26312
|
+
}
|
|
26313
|
+
}
|
|
26314
|
+
function marketRankingBands(depth, totals) {
|
|
26315
|
+
const fills = (count3, firstRank) => depth === null || depth >= firstRank || (totals?.[count3] ?? 0) > 0;
|
|
26316
|
+
const bands = [{ count: "page1", filter: SeoMarketRankingFilters["page-1"], label: "Page 1" }];
|
|
26317
|
+
if (fills("ranks11To20", 11)) bands.push({ count: "ranks11To20", filter: SeoMarketRankingFilters["ranks-11-20"], label: "11-20" });
|
|
26318
|
+
if (fills("ranks21Plus", 21)) bands.push({ count: "ranks21Plus", filter: SeoMarketRankingFilters["ranks-21-plus"], label: depth === null || depth <= 21 ? "21 and deeper" : `21-${depth}` });
|
|
26319
|
+
bands.push({ count: "notRanked", filter: SeoMarketRankingFilters["not-ranked"], label: depth === null ? "Not ranked" : `Not in top ${depth}` });
|
|
26320
|
+
return bands;
|
|
26321
|
+
}
|
|
26322
|
+
function countMarketRankings(rows) {
|
|
26323
|
+
const counts = { queries: rows.length, page1: 0, ranks11To20: 0, ranks21Plus: 0, notRanked: 0, partlyChecked: 0, failed: 0, cancelled: 0, needsWork: 0, rivalAhead: 0 };
|
|
26324
|
+
for (const row of rows) {
|
|
26325
|
+
switch (row.outcome) {
|
|
26326
|
+
case SeoMarketRankingOutcomes["page-1"]:
|
|
26327
|
+
counts.page1++;
|
|
26328
|
+
break;
|
|
26329
|
+
case SeoMarketRankingOutcomes["ranks-11-20"]:
|
|
26330
|
+
counts.ranks11To20++;
|
|
26331
|
+
break;
|
|
26332
|
+
case SeoMarketRankingOutcomes["ranks-21-plus"]:
|
|
26333
|
+
counts.ranks21Plus++;
|
|
26334
|
+
break;
|
|
26335
|
+
case SeoMarketRankingOutcomes["not-ranked"]:
|
|
26336
|
+
counts.notRanked++;
|
|
26337
|
+
break;
|
|
26338
|
+
case SeoMarketRankingOutcomes["partly-checked"]:
|
|
26339
|
+
counts.partlyChecked++;
|
|
26340
|
+
break;
|
|
26341
|
+
case SeoMarketRankingOutcomes.failed:
|
|
26342
|
+
counts.failed++;
|
|
26343
|
+
break;
|
|
26344
|
+
case SeoMarketRankingOutcomes.cancelled:
|
|
26345
|
+
counts.cancelled++;
|
|
26346
|
+
break;
|
|
26347
|
+
default: {
|
|
26348
|
+
const unknown = row.outcome;
|
|
26349
|
+
return unknown;
|
|
26350
|
+
}
|
|
26351
|
+
}
|
|
26352
|
+
if (row.rivalAhead) counts.rivalAhead++;
|
|
26353
|
+
}
|
|
26354
|
+
counts.needsWork = counts.ranks11To20 + counts.ranks21Plus + counts.notRanked + counts.partlyChecked;
|
|
26355
|
+
return counts;
|
|
26356
|
+
}
|
|
26357
|
+
function groupMarketRankings(rows, scope) {
|
|
26358
|
+
if (scope.marketKey !== void 0) return [];
|
|
26359
|
+
const groups = /* @__PURE__ */ new Map();
|
|
26360
|
+
for (const row of rows) {
|
|
26361
|
+
const region = scope.regionKey === void 0 && row.regionKey !== null;
|
|
26362
|
+
const key = region ? row.regionKey : row.marketKey;
|
|
26363
|
+
const id2 = `${region ? "region" : "market"}\0${key}`;
|
|
26364
|
+
const group = groups.get(id2) ?? { key, label: region ? row.regionLabel ?? key : row.marketLabel, kind: region ? SeoMarketRankingGroupKinds.region : SeoMarketRankingGroupKinds.market, rows: [] };
|
|
26365
|
+
group.rows.push(row);
|
|
26366
|
+
groups.set(id2, group);
|
|
26367
|
+
}
|
|
26368
|
+
return [...groups.values()].map((group) => ({ key: group.key, label: group.label, kind: group.kind, counts: countMarketRankings(group.rows) })).sort((a, b) => b.counts.ranks11To20 - a.counts.ranks11To20 || b.counts.ranks21Plus - a.counts.ranks21Plus || compareText(a.label, b.label) || compareText(a.key, b.key));
|
|
26369
|
+
}
|
|
26370
|
+
|
|
26141
26371
|
export {
|
|
26142
26372
|
apiKeyDtoSchema,
|
|
26143
26373
|
apiKeyListDtoSchema,
|
|
@@ -26175,6 +26405,7 @@ export {
|
|
|
26175
26405
|
calendarRecurrenceSchema,
|
|
26176
26406
|
scheduleDtoSchema,
|
|
26177
26407
|
scheduleExpectedUpdatedAtSchema,
|
|
26408
|
+
scheduleEnabledAt,
|
|
26178
26409
|
nextScheduleUpdatedAt,
|
|
26179
26410
|
scheduleUpsertRequestSchema,
|
|
26180
26411
|
buildRedactedNotificationUrl,
|
|
@@ -27371,6 +27602,8 @@ export {
|
|
|
27371
27602
|
seoRefreshIntentInputSchema,
|
|
27372
27603
|
seoQuoteSchema,
|
|
27373
27604
|
seoSyncInputSchema,
|
|
27605
|
+
SeoMarketRankingSearchStatuses,
|
|
27606
|
+
SeoMarketRankingOutcomes,
|
|
27374
27607
|
emptySeoResults,
|
|
27375
27608
|
seoSearchTextForQuery,
|
|
27376
27609
|
seoRunSchema,
|
|
@@ -27380,11 +27613,23 @@ export {
|
|
|
27380
27613
|
seoKeywordMetricsListSchema,
|
|
27381
27614
|
seoDomainIntelligenceListSchema,
|
|
27382
27615
|
seoRankedKeywordListSchema,
|
|
27616
|
+
seoMarketRankingFilterSchema,
|
|
27617
|
+
seoMarketRankingSortSchema,
|
|
27618
|
+
SeoMarketRankingSorts,
|
|
27383
27619
|
seoMarketRankingQuerySchema,
|
|
27384
27620
|
seoMarketRankingListSchema,
|
|
27621
|
+
seoMarketRankingSummaryQuerySchema,
|
|
27622
|
+
seoMarketRankingSummarySchema,
|
|
27385
27623
|
seoOverviewSchema,
|
|
27386
27624
|
seoOperatorTaskSchema,
|
|
27387
27625
|
seoReconcileInputSchema,
|
|
27388
27626
|
seoReconcileResultSchema,
|
|
27389
|
-
SeoAdapterOutcomes
|
|
27627
|
+
SeoAdapterOutcomes,
|
|
27628
|
+
marketRankingRow,
|
|
27629
|
+
matchesMarketRankingFilter,
|
|
27630
|
+
matchesMarketRankingText,
|
|
27631
|
+
compareMarketRankingsBy,
|
|
27632
|
+
marketRankingBands,
|
|
27633
|
+
countMarketRankings,
|
|
27634
|
+
groupMarketRankings
|
|
27390
27635
|
};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runWithUsageTags
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FDRZQH3Y.js";
|
|
4
4
|
import {
|
|
5
5
|
CanonryMcpToolNames,
|
|
6
6
|
canonryMcpTools
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-YIIIYNPW.js";
|
|
8
8
|
import {
|
|
9
9
|
CliError
|
|
10
10
|
} from "./chunk-HGMYEDAQ.js";
|
|
11
11
|
import {
|
|
12
12
|
buildOpenApiDocument
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-6W3ENB2X.js";
|
|
14
14
|
import {
|
|
15
15
|
DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
|
|
16
16
|
MeasurementPortfolioLists,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
seoDatasetWithoutVendor,
|
|
24
24
|
seoProviderSchema,
|
|
25
25
|
truncateUtf16
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-VPZMSV3Q.js";
|
|
27
27
|
|
|
28
28
|
// src/agent/tools.ts
|
|
29
29
|
import { Type as Type2 } from "@earendil-works/pi-ai";
|
|
@@ -7,27 +7,27 @@ import {
|
|
|
7
7
|
reparseStoredResult4,
|
|
8
8
|
reparseStoredResult5,
|
|
9
9
|
resolveStoredApiResponse
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-IVBJEVHS.js";
|
|
11
11
|
import {
|
|
12
12
|
loadConfig
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-MVRPFLEL.js";
|
|
14
14
|
import {
|
|
15
15
|
isMachineFormat
|
|
16
16
|
} from "./chunk-HGMYEDAQ.js";
|
|
17
17
|
import {
|
|
18
18
|
determineCitationState
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-K2P2XO6P.js";
|
|
20
20
|
import {
|
|
21
21
|
backfillProjectAnswerMentions,
|
|
22
22
|
competitorIdentityColumns,
|
|
23
23
|
createRunCompetitorResolver,
|
|
24
24
|
readMarketCompetitorNames,
|
|
25
25
|
refreshSnapshotMentionIdentity
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-6W3ENB2X.js";
|
|
27
27
|
import {
|
|
28
28
|
classifyAiUserFetch,
|
|
29
29
|
classifyCrawler
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-J4CNNYRQ.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-
|
|
45
|
+
} from "./chunk-ARIYTYOM.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-
|
|
62
|
+
} from "./chunk-VPZMSV3Q.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-
|
|
440
|
+
const { IntelligenceService } = await import("./intelligence-service-4OO2VQ2I.js");
|
|
441
441
|
const config = loadConfig();
|
|
442
442
|
const db = createClient(config.database);
|
|
443
443
|
migrate(db);
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
dedupeGscSitemapUrls,
|
|
3
3
|
resolveDiscoveredGscSitemapUrls,
|
|
4
4
|
submitGscSitemapBatches
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-5SK27UE7.js";
|
|
6
6
|
import {
|
|
7
7
|
measurementDraftOperationSchema,
|
|
8
8
|
runMeasurementDraftAction
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-PAVSKSKA.js";
|
|
10
10
|
import {
|
|
11
11
|
CliError
|
|
12
12
|
} from "./chunk-HGMYEDAQ.js";
|
|
@@ -143,6 +143,8 @@ import {
|
|
|
143
143
|
seoKeywordMetricsListSchema,
|
|
144
144
|
seoMarketRankingListSchema,
|
|
145
145
|
seoMarketRankingQuerySchema,
|
|
146
|
+
seoMarketRankingSummaryQuerySchema,
|
|
147
|
+
seoMarketRankingSummarySchema,
|
|
146
148
|
seoOperatorTaskSchema,
|
|
147
149
|
seoOverviewSchema,
|
|
148
150
|
seoProfileInputSchema,
|
|
@@ -175,7 +177,7 @@ import {
|
|
|
175
177
|
trafficSeriesGranularitySchema,
|
|
176
178
|
visibilityCompareSelectionSchema,
|
|
177
179
|
visibilityReportRequestSchema
|
|
178
|
-
} from "./chunk-
|
|
180
|
+
} from "./chunk-VPZMSV3Q.js";
|
|
179
181
|
|
|
180
182
|
// src/mcp/tool-registry.ts
|
|
181
183
|
import { z as z2 } from "zod";
|
|
@@ -1126,6 +1128,7 @@ var sentimentBackfillInputSchema = sentimentBackfillRequestSchema.extend({ proje
|
|
|
1126
1128
|
var seoIdInputSchema = projectInputSchema.extend({ id: z2.string().min(1) });
|
|
1127
1129
|
var seoEvidenceInputSchema = seoEvidenceQuerySchema.extend({ project: projectNameSchema });
|
|
1128
1130
|
var seoMarketRankingInputSchema = seoMarketRankingQuerySchema.extend({ project: projectNameSchema });
|
|
1131
|
+
var seoMarketRankingSummaryInputSchema = seoMarketRankingSummaryQuerySchema.extend({ project: projectNameSchema });
|
|
1129
1132
|
var rawCanonryMcpTools = [
|
|
1130
1133
|
defineTool({
|
|
1131
1134
|
name: "canonry_seo_operator_task",
|
|
@@ -1340,7 +1343,7 @@ var rawCanonryMcpTools = [
|
|
|
1340
1343
|
defineTool({
|
|
1341
1344
|
name: "canonry_seo_market_rankings",
|
|
1342
1345
|
title: "SEO market rankings",
|
|
1343
|
-
description: "Read stored SEO data only. No provider calls. The site's Google position for each tracked non-brand query in each market, searched from that market's location; these are the same tracked queries AI visibility measures, and searchText is the exact text searched.
|
|
1346
|
+
description: "Read stored SEO data only. No provider calls. The site's Google position for each tracked non-brand query in each market, searched from that market's location; these are the same tracked queries AI visibility measures, and searchText is the exact text searched. searchStatus says how each search ended: a null rank in a completed or partial row means not in the checked results (depth, lower when only part of the results came back); a failed or cancelled row has no rank because the search returned nothing. outcome says where each row landed (page-1, ranks-11-20, ranks-21-plus, not-ranked, partly-checked for a partial search without the site, failed, cancelled) and rivalAhead whether a tracked competitor ranks above the site. Filter with marketKey, regionKey, outcome (needs-work = off page 1 with a result) and q; sort=rank puts the closest to page 1 first. Keep runId fixed while paging.",
|
|
1344
1347
|
access: "read",
|
|
1345
1348
|
tier: "seo",
|
|
1346
1349
|
inputSchema: seoMarketRankingInputSchema,
|
|
@@ -1352,6 +1355,21 @@ var rawCanonryMcpTools = [
|
|
|
1352
1355
|
return client.getSeoMarketRankings(project, query);
|
|
1353
1356
|
}
|
|
1354
1357
|
}),
|
|
1358
|
+
defineTool({
|
|
1359
|
+
name: "canonry_seo_market_summary",
|
|
1360
|
+
title: "SEO market rankings by outcome",
|
|
1361
|
+
description: "Read stored SEO data only. No provider calls. Market-rankings rows counted by outcome (page 1, ranks 11-20, 21 and deeper, not ranked, partly checked, failed, cancelled, needs work, rival ahead) for the whole profile with one group per region, for one region (regionKey) with one group per market, or for one market (marketKey). Groups come in needs-work order. Start here to see what needs work, then read the rows with canonry_seo_market_rankings.",
|
|
1362
|
+
access: "read",
|
|
1363
|
+
tier: "seo",
|
|
1364
|
+
inputSchema: seoMarketRankingSummaryInputSchema,
|
|
1365
|
+
outputSchema: seoMarketRankingSummarySchema,
|
|
1366
|
+
annotations: readAnnotations(),
|
|
1367
|
+
openApiOperations: ["GET /api/v1/projects/{name}/seo/market-rankings/summary"],
|
|
1368
|
+
handler: (client, input) => {
|
|
1369
|
+
const { project, ...query } = input;
|
|
1370
|
+
return client.getSeoMarketRankingSummary(project, query);
|
|
1371
|
+
}
|
|
1372
|
+
}),
|
|
1355
1373
|
defineTool({
|
|
1356
1374
|
name: "canonry_sentiment_settings",
|
|
1357
1375
|
title: "Read sentiment readiness and settings",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
pickProjectCitedDomain
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-K2P2XO6P.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-
|
|
17
|
+
} from "./chunk-6W3ENB2X.js";
|
|
18
18
|
import {
|
|
19
19
|
getRequestContext
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-7SGZHGZ2.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-
|
|
38
|
+
} from "./chunk-ARIYTYOM.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-
|
|
48
|
+
} from "./chunk-VPZMSV3Q.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";
|
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
bucketCliCommandDuration,
|
|
3
3
|
isTelemetryEnabled,
|
|
4
4
|
trackEvent
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-7AXVACK6.js";
|
|
6
6
|
import {
|
|
7
7
|
getConfigDir
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-MVRPFLEL.js";
|
|
9
9
|
import {
|
|
10
10
|
currentOutcomeAttribution
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-7SGZHGZ2.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-
|
|
22
|
+
} from "./chunk-VPZMSV3Q.js";
|
|
23
23
|
|
|
24
24
|
// src/outcome-telemetry.ts
|
|
25
25
|
import fs from "fs";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createApiClient
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-FDRZQH3Y.js";
|
|
4
|
+
import "./chunk-MVRPFLEL.js";
|
|
5
5
|
import "./chunk-AOJU5LKX.js";
|
|
6
6
|
import "./chunk-HGMYEDAQ.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-VPZMSV3Q.js";
|
|
8
8
|
import "./chunk-MLKGABMK.js";
|
|
9
9
|
|
|
10
10
|
// src/commands/citations.ts
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
buildCliCatalog,
|
|
4
4
|
printCliCatalog,
|
|
5
5
|
renderTopLevelHelp
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-7NMCRHQL.js";
|
|
7
|
+
import "./chunk-33LH4ZGF.js";
|
|
8
8
|
import "./chunk-Z7IUAJOF.js";
|
|
9
9
|
import "./chunk-HGMYEDAQ.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-VPZMSV3Q.js";
|
|
11
11
|
import "./chunk-MLKGABMK.js";
|
|
12
12
|
export {
|
|
13
13
|
CLI_ROOT_SUMMARIES,
|