@canonry/canonry 4.143.0 → 4.145.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/assets/assets/{AuditHistoryPanel--kNrRAQm.js → AuditHistoryPanel-CV9g5mLR.js} +1 -1
  2. package/assets/assets/{BacklinksPage-CtW1w9lh.js → BacklinksPage-RTcYKA5I.js} +1 -1
  3. package/assets/assets/{ChartPrimitives-C-nMEqdu.js → ChartPrimitives-BMR0Dqnf.js} +1 -1
  4. package/assets/assets/{HistoryPage-CAPJDSbc.js → HistoryPage-DAN9QO6x.js} +1 -1
  5. package/assets/assets/ProjectPage-aFV2nddp.js +9 -0
  6. package/assets/assets/{RunRow-aDzTzGSK.js → RunRow-WDCIS9MJ.js} +1 -1
  7. package/assets/assets/{RunsPage-Dy9oWMBK.js → RunsPage-D3Zxd6oc.js} +1 -1
  8. package/assets/assets/SettingsPage-DcCFVeA7.js +1 -0
  9. package/assets/assets/{TrafficPage-B4ADqeKG.js → TrafficPage-D0tPBu5O.js} +1 -1
  10. package/assets/assets/{TrafficSourceDetailPage-CFcoL_PR.js → TrafficSourceDetailPage-CtyEE9eJ.js} +1 -1
  11. package/assets/assets/{arrow-left-DV9xcX1v.js → arrow-left-hBxXIGS1.js} +1 -1
  12. package/assets/assets/{extract-error-message-DXtgw8Q8.js → extract-error-message-DRu89RHb.js} +1 -1
  13. package/assets/assets/index-ANFzZ3nU.css +1 -0
  14. package/assets/assets/index-DSOfEiTH.js +213 -0
  15. package/assets/assets/{trash-2-DMV6uGU1.js → trash-2-DP0ukgbl.js} +1 -1
  16. package/assets/index.html +2 -2
  17. package/dist/{chunk-KUPTGRME.js → chunk-EFBTZ6ZT.js} +4653 -3599
  18. package/dist/{chunk-VN3CI6K6.js → chunk-GTBCGJNT.js} +7436 -2479
  19. package/dist/{chunk-3G5B3IMZ.js → chunk-MBLATP5L.js} +1303 -71
  20. package/dist/{chunk-TJ6SDLXL.js → chunk-XNAJXSZ2.js} +346 -97
  21. package/dist/cli.js +409 -149
  22. package/dist/index.js +4 -4
  23. package/dist/{intelligence-service-V6JYDYGF.js → intelligence-service-DVMEVHAG.js} +2 -2
  24. package/dist/mcp.js +5 -5
  25. package/package.json +10 -10
  26. package/assets/assets/ProjectPage-79R3wJW6.js +0 -9
  27. package/assets/assets/SettingsPage-DTAs1BrZ.js +0 -1
  28. package/assets/assets/index-CYA3jd24.css +0 -1
  29. package/assets/assets/index-H2iFFrr1.js +0 -213
@@ -27,8 +27,31 @@ import {
27
27
  keywordBatchRequestSchema,
28
28
  keywordGenerateRequestSchema,
29
29
  measurementDiscoveryRequestSchema,
30
+ measurementDraftApplyAssignmentsRequestSchema,
31
+ measurementDraftApplySitemapSelectionRequestSchema,
32
+ measurementDraftClassifyAssignmentsRequestSchema,
33
+ measurementDraftClearAssignmentsRequestSchema,
34
+ measurementDraftCollectionQuerySchema,
35
+ measurementDraftCreateRequestSchema,
36
+ measurementDraftExcludeTargetRequestSchema,
37
+ measurementDraftImportSitemapRequestSchema,
38
+ measurementDraftMergeTargetsRequestSchema,
39
+ measurementDraftPublishRequestSchema,
40
+ measurementDraftRebindTargetRequestSchema,
41
+ measurementDraftRemoveAssignmentRequestSchema,
42
+ measurementDraftRemoveCompetitorRequestSchema,
43
+ measurementDraftRemoveGroupRequestSchema,
44
+ measurementDraftRenameTargetRequestSchema,
45
+ measurementDraftUpsertCompetitorRequestSchema,
46
+ measurementDraftUpsertGroupRequestSchema,
47
+ measurementDraftUpsertTargetRequestSchema,
48
+ measurementOverviewQuerySchema,
30
49
  measurementPlanAuthoringSchema,
50
+ measurementPlanDeactivateRequestSchema,
31
51
  measurementPlanPublishRequestSchema,
52
+ measurementQuerySetUpsertRequestSchema,
53
+ measurementQueryTemplateApplyRequestSchema,
54
+ measurementQueryTemplateUpsertRequestSchema,
32
55
  notificationCreateRequestSchema,
33
56
  notificationEventSchema,
34
57
  organicEvidencePeriodSchema,
@@ -46,7 +69,7 @@ import {
46
69
  trafficConnectWordpressRequestSchema,
47
70
  trafficEventKindSchema,
48
71
  trafficSeriesGranularitySchema
49
- } from "./chunk-KUPTGRME.js";
72
+ } from "./chunk-EFBTZ6ZT.js";
50
73
 
51
74
  // src/config.ts
52
75
  import fs from "fs";
@@ -1271,6 +1294,510 @@ var getApiV1ProjectsByNameMeasurementReport = (options) => {
1271
1294
  ...options
1272
1295
  });
1273
1296
  };
1297
+ var getApiV1ProjectsByNameMeasurementSetup = (options) => {
1298
+ return (options.client ?? client).get({
1299
+ security: [
1300
+ {
1301
+ scheme: "bearer",
1302
+ type: "http"
1303
+ }
1304
+ ],
1305
+ url: "/api/v1/projects/{name}/measurement-setup",
1306
+ ...options
1307
+ });
1308
+ };
1309
+ var getApiV1ProjectsByNameMeasurementPlanDraft = (options) => {
1310
+ return (options.client ?? client).get({
1311
+ security: [
1312
+ {
1313
+ scheme: "bearer",
1314
+ type: "http"
1315
+ }
1316
+ ],
1317
+ url: "/api/v1/projects/{name}/measurement-plan/draft",
1318
+ ...options
1319
+ });
1320
+ };
1321
+ var getApiV1ProjectsByNameMeasurementPlanDraftTargets = (options) => {
1322
+ return (options.client ?? client).get({
1323
+ security: [
1324
+ {
1325
+ scheme: "bearer",
1326
+ type: "http"
1327
+ }
1328
+ ],
1329
+ url: "/api/v1/projects/{name}/measurement-plan/draft/targets",
1330
+ ...options
1331
+ });
1332
+ };
1333
+ var getApiV1ProjectsByNameMeasurementPlanDraftAssignments = (options) => {
1334
+ return (options.client ?? client).get({
1335
+ security: [
1336
+ {
1337
+ scheme: "bearer",
1338
+ type: "http"
1339
+ }
1340
+ ],
1341
+ url: "/api/v1/projects/{name}/measurement-plan/draft/assignments",
1342
+ ...options
1343
+ });
1344
+ };
1345
+ var getApiV1ProjectsByNameMeasurementPlanDraftGroups = (options) => {
1346
+ return (options.client ?? client).get({
1347
+ security: [
1348
+ {
1349
+ scheme: "bearer",
1350
+ type: "http"
1351
+ }
1352
+ ],
1353
+ url: "/api/v1/projects/{name}/measurement-plan/draft/groups",
1354
+ ...options
1355
+ });
1356
+ };
1357
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsCreate = (options) => {
1358
+ return (options.client ?? client).post({
1359
+ security: [
1360
+ {
1361
+ scheme: "bearer",
1362
+ type: "http"
1363
+ }
1364
+ ],
1365
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/create",
1366
+ ...options,
1367
+ headers: {
1368
+ "Content-Type": "application/json",
1369
+ ...options.headers
1370
+ }
1371
+ });
1372
+ };
1373
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsImportSitemap = (options) => {
1374
+ return (options.client ?? client).post({
1375
+ security: [
1376
+ {
1377
+ scheme: "bearer",
1378
+ type: "http"
1379
+ }
1380
+ ],
1381
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/import-sitemap",
1382
+ ...options,
1383
+ headers: {
1384
+ "Content-Type": "application/json",
1385
+ ...options.headers
1386
+ }
1387
+ });
1388
+ };
1389
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsApplySitemapSelection = (options) => {
1390
+ return (options.client ?? client).post({
1391
+ security: [
1392
+ {
1393
+ scheme: "bearer",
1394
+ type: "http"
1395
+ }
1396
+ ],
1397
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/apply-sitemap-selection",
1398
+ ...options,
1399
+ headers: {
1400
+ "Content-Type": "application/json",
1401
+ ...options.headers
1402
+ }
1403
+ });
1404
+ };
1405
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsUpsertTarget = (options) => {
1406
+ return (options.client ?? client).post({
1407
+ security: [
1408
+ {
1409
+ scheme: "bearer",
1410
+ type: "http"
1411
+ }
1412
+ ],
1413
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/upsert-target",
1414
+ ...options,
1415
+ headers: {
1416
+ "Content-Type": "application/json",
1417
+ ...options.headers
1418
+ }
1419
+ });
1420
+ };
1421
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsRenameTarget = (options) => {
1422
+ return (options.client ?? client).post({
1423
+ security: [
1424
+ {
1425
+ scheme: "bearer",
1426
+ type: "http"
1427
+ }
1428
+ ],
1429
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/rename-target",
1430
+ ...options,
1431
+ headers: {
1432
+ "Content-Type": "application/json",
1433
+ ...options.headers
1434
+ }
1435
+ });
1436
+ };
1437
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsMergeTargets = (options) => {
1438
+ return (options.client ?? client).post({
1439
+ security: [
1440
+ {
1441
+ scheme: "bearer",
1442
+ type: "http"
1443
+ }
1444
+ ],
1445
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/merge-targets",
1446
+ ...options,
1447
+ headers: {
1448
+ "Content-Type": "application/json",
1449
+ ...options.headers
1450
+ }
1451
+ });
1452
+ };
1453
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsExcludeTarget = (options) => {
1454
+ return (options.client ?? client).post({
1455
+ security: [
1456
+ {
1457
+ scheme: "bearer",
1458
+ type: "http"
1459
+ }
1460
+ ],
1461
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/exclude-target",
1462
+ ...options,
1463
+ headers: {
1464
+ "Content-Type": "application/json",
1465
+ ...options.headers
1466
+ }
1467
+ });
1468
+ };
1469
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsRebindTarget = (options) => {
1470
+ return (options.client ?? client).post({
1471
+ security: [
1472
+ {
1473
+ scheme: "bearer",
1474
+ type: "http"
1475
+ }
1476
+ ],
1477
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/rebind-target",
1478
+ ...options,
1479
+ headers: {
1480
+ "Content-Type": "application/json",
1481
+ ...options.headers
1482
+ }
1483
+ });
1484
+ };
1485
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsApplyAssignments = (options) => {
1486
+ return (options.client ?? client).post({
1487
+ security: [
1488
+ {
1489
+ scheme: "bearer",
1490
+ type: "http"
1491
+ }
1492
+ ],
1493
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/apply-assignments",
1494
+ ...options,
1495
+ headers: {
1496
+ "Content-Type": "application/json",
1497
+ ...options.headers
1498
+ }
1499
+ });
1500
+ };
1501
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsRemoveAssignment = (options) => {
1502
+ return (options.client ?? client).post({
1503
+ security: [
1504
+ {
1505
+ scheme: "bearer",
1506
+ type: "http"
1507
+ }
1508
+ ],
1509
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/remove-assignment",
1510
+ ...options,
1511
+ headers: {
1512
+ "Content-Type": "application/json",
1513
+ ...options.headers
1514
+ }
1515
+ });
1516
+ };
1517
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsClearAssignments = (options) => {
1518
+ return (options.client ?? client).post({
1519
+ security: [
1520
+ {
1521
+ scheme: "bearer",
1522
+ type: "http"
1523
+ }
1524
+ ],
1525
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/clear-assignments",
1526
+ ...options,
1527
+ headers: {
1528
+ "Content-Type": "application/json",
1529
+ ...options.headers
1530
+ }
1531
+ });
1532
+ };
1533
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsClassifyAssignments = (options) => {
1534
+ return (options.client ?? client).post({
1535
+ security: [
1536
+ {
1537
+ scheme: "bearer",
1538
+ type: "http"
1539
+ }
1540
+ ],
1541
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/classify-assignments",
1542
+ ...options,
1543
+ headers: {
1544
+ "Content-Type": "application/json",
1545
+ ...options.headers
1546
+ }
1547
+ });
1548
+ };
1549
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsUpsertGroup = (options) => {
1550
+ return (options.client ?? client).post({
1551
+ security: [
1552
+ {
1553
+ scheme: "bearer",
1554
+ type: "http"
1555
+ }
1556
+ ],
1557
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/upsert-group",
1558
+ ...options,
1559
+ headers: {
1560
+ "Content-Type": "application/json",
1561
+ ...options.headers
1562
+ }
1563
+ });
1564
+ };
1565
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsRemoveGroup = (options) => {
1566
+ return (options.client ?? client).post({
1567
+ security: [
1568
+ {
1569
+ scheme: "bearer",
1570
+ type: "http"
1571
+ }
1572
+ ],
1573
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/remove-group",
1574
+ ...options,
1575
+ headers: {
1576
+ "Content-Type": "application/json",
1577
+ ...options.headers
1578
+ }
1579
+ });
1580
+ };
1581
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsUpsertCompetitor = (options) => {
1582
+ return (options.client ?? client).post({
1583
+ security: [
1584
+ {
1585
+ scheme: "bearer",
1586
+ type: "http"
1587
+ }
1588
+ ],
1589
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/upsert-competitor",
1590
+ ...options,
1591
+ headers: {
1592
+ "Content-Type": "application/json",
1593
+ ...options.headers
1594
+ }
1595
+ });
1596
+ };
1597
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsRemoveCompetitor = (options) => {
1598
+ return (options.client ?? client).post({
1599
+ security: [
1600
+ {
1601
+ scheme: "bearer",
1602
+ type: "http"
1603
+ }
1604
+ ],
1605
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/remove-competitor",
1606
+ ...options,
1607
+ headers: {
1608
+ "Content-Type": "application/json",
1609
+ ...options.headers
1610
+ }
1611
+ });
1612
+ };
1613
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsCompilePreview = (options) => {
1614
+ return (options.client ?? client).post({
1615
+ security: [
1616
+ {
1617
+ scheme: "bearer",
1618
+ type: "http"
1619
+ }
1620
+ ],
1621
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/compile-preview",
1622
+ ...options
1623
+ });
1624
+ };
1625
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsDiffPreview = (options) => {
1626
+ return (options.client ?? client).post({
1627
+ security: [
1628
+ {
1629
+ scheme: "bearer",
1630
+ type: "http"
1631
+ }
1632
+ ],
1633
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/diff-preview",
1634
+ ...options
1635
+ });
1636
+ };
1637
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsPublish = (options) => {
1638
+ return (options.client ?? client).post({
1639
+ security: [
1640
+ {
1641
+ scheme: "bearer",
1642
+ type: "http"
1643
+ }
1644
+ ],
1645
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/publish",
1646
+ ...options,
1647
+ headers: {
1648
+ "Content-Type": "application/json",
1649
+ ...options.headers
1650
+ }
1651
+ });
1652
+ };
1653
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsDiscard = (options) => {
1654
+ return (options.client ?? client).post({
1655
+ security: [
1656
+ {
1657
+ scheme: "bearer",
1658
+ type: "http"
1659
+ }
1660
+ ],
1661
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/discard",
1662
+ ...options
1663
+ });
1664
+ };
1665
+ var postApiV1ProjectsByNameMeasurementPlanActionsDeactivate = (options) => {
1666
+ return (options.client ?? client).post({
1667
+ security: [
1668
+ {
1669
+ scheme: "bearer",
1670
+ type: "http"
1671
+ }
1672
+ ],
1673
+ url: "/api/v1/projects/{name}/measurement-plan/actions/deactivate",
1674
+ ...options,
1675
+ headers: {
1676
+ "Content-Type": "application/json",
1677
+ ...options.headers
1678
+ }
1679
+ });
1680
+ };
1681
+ var getApiV1ProjectsByNameMeasurementOverview = (options) => {
1682
+ return (options.client ?? client).get({
1683
+ security: [
1684
+ {
1685
+ scheme: "bearer",
1686
+ type: "http"
1687
+ }
1688
+ ],
1689
+ url: "/api/v1/projects/{name}/measurement-overview",
1690
+ ...options
1691
+ });
1692
+ };
1693
+ var getApiV1ProjectsByNameMeasurementQuerySets = (options) => {
1694
+ return (options.client ?? client).get({
1695
+ security: [
1696
+ {
1697
+ scheme: "bearer",
1698
+ type: "http"
1699
+ }
1700
+ ],
1701
+ url: "/api/v1/projects/{name}/measurement-query-sets",
1702
+ ...options
1703
+ });
1704
+ };
1705
+ var deleteApiV1ProjectsByNameMeasurementQuerySetsBySetId = (options) => {
1706
+ return (options.client ?? client).delete({
1707
+ security: [
1708
+ {
1709
+ scheme: "bearer",
1710
+ type: "http"
1711
+ }
1712
+ ],
1713
+ url: "/api/v1/projects/{name}/measurement-query-sets/{setId}",
1714
+ ...options
1715
+ });
1716
+ };
1717
+ var getApiV1ProjectsByNameMeasurementQuerySetsBySetId = (options) => {
1718
+ return (options.client ?? client).get({
1719
+ security: [
1720
+ {
1721
+ scheme: "bearer",
1722
+ type: "http"
1723
+ }
1724
+ ],
1725
+ url: "/api/v1/projects/{name}/measurement-query-sets/{setId}",
1726
+ ...options
1727
+ });
1728
+ };
1729
+ var putApiV1ProjectsByNameMeasurementQuerySetsBySetId = (options) => {
1730
+ return (options.client ?? client).put({
1731
+ security: [
1732
+ {
1733
+ scheme: "bearer",
1734
+ type: "http"
1735
+ }
1736
+ ],
1737
+ url: "/api/v1/projects/{name}/measurement-query-sets/{setId}",
1738
+ ...options,
1739
+ headers: {
1740
+ "Content-Type": "application/json",
1741
+ ...options.headers
1742
+ }
1743
+ });
1744
+ };
1745
+ var getApiV1ProjectsByNameMeasurementQueryTemplates = (options) => {
1746
+ return (options.client ?? client).get({
1747
+ security: [
1748
+ {
1749
+ scheme: "bearer",
1750
+ type: "http"
1751
+ }
1752
+ ],
1753
+ url: "/api/v1/projects/{name}/measurement-query-templates",
1754
+ ...options
1755
+ });
1756
+ };
1757
+ var deleteApiV1ProjectsByNameMeasurementQueryTemplatesByTemplateId = (options) => {
1758
+ return (options.client ?? client).delete({
1759
+ security: [
1760
+ {
1761
+ scheme: "bearer",
1762
+ type: "http"
1763
+ }
1764
+ ],
1765
+ url: "/api/v1/projects/{name}/measurement-query-templates/{templateId}",
1766
+ ...options
1767
+ });
1768
+ };
1769
+ var putApiV1ProjectsByNameMeasurementQueryTemplatesByTemplateId = (options) => {
1770
+ return (options.client ?? client).put({
1771
+ security: [
1772
+ {
1773
+ scheme: "bearer",
1774
+ type: "http"
1775
+ }
1776
+ ],
1777
+ url: "/api/v1/projects/{name}/measurement-query-templates/{templateId}",
1778
+ ...options,
1779
+ headers: {
1780
+ "Content-Type": "application/json",
1781
+ ...options.headers
1782
+ }
1783
+ });
1784
+ };
1785
+ var postApiV1ProjectsByNameMeasurementQueryTemplatesByTemplateIdApply = (options) => {
1786
+ return (options.client ?? client).post({
1787
+ security: [
1788
+ {
1789
+ scheme: "bearer",
1790
+ type: "http"
1791
+ }
1792
+ ],
1793
+ url: "/api/v1/projects/{name}/measurement-query-templates/{templateId}/apply",
1794
+ ...options,
1795
+ headers: {
1796
+ "Content-Type": "application/json",
1797
+ ...options.headers
1798
+ }
1799
+ });
1800
+ };
1274
1801
  var getApiV1Projects = (options) => {
1275
1802
  return (options?.client ?? client).get({
1276
1803
  security: [
@@ -1895,6 +2422,46 @@ var postApiV1KeysByIdRevoke = (options) => {
1895
2422
  ...options
1896
2423
  });
1897
2424
  };
2425
+ var getApiV1Users = (options) => {
2426
+ return (options?.client ?? client).get({
2427
+ security: [
2428
+ {
2429
+ scheme: "bearer",
2430
+ type: "http"
2431
+ }
2432
+ ],
2433
+ url: "/api/v1/users",
2434
+ ...options
2435
+ });
2436
+ };
2437
+ var postApiV1Users = (options) => {
2438
+ return (options.client ?? client).post({
2439
+ security: [
2440
+ {
2441
+ scheme: "bearer",
2442
+ type: "http"
2443
+ }
2444
+ ],
2445
+ url: "/api/v1/users",
2446
+ ...options,
2447
+ headers: {
2448
+ "Content-Type": "application/json",
2449
+ ...options.headers
2450
+ }
2451
+ });
2452
+ };
2453
+ var deleteApiV1UsersByName = (options) => {
2454
+ return (options.client ?? client).delete({
2455
+ security: [
2456
+ {
2457
+ scheme: "bearer",
2458
+ type: "http"
2459
+ }
2460
+ ],
2461
+ url: "/api/v1/users/{name}",
2462
+ ...options
2463
+ });
2464
+ };
1898
2465
  var postApiV1Snapshot = (options) => {
1899
2466
  return (options.client ?? client).post({
1900
2467
  security: [
@@ -4386,6 +4953,12 @@ var ApiClient = class {
4386
4953
  }
4387
4954
  return result.data;
4388
4955
  }
4956
+ measurementDraftMutationHeaders(idempotencyKey, etag) {
4957
+ return {
4958
+ "Idempotency-Key": idempotencyKey,
4959
+ ...etag === void 0 ? {} : { "If-Match": etag }
4960
+ };
4961
+ }
4389
4962
  // ── Agent (canonry-local routes — SDK-typed since v4.50.0) ─────────────
4390
4963
  //
4391
4964
  // These endpoints live in `packages/canonry/src/agent/agent-routes.ts` and
@@ -4584,175 +5157,490 @@ var ApiClient = class {
4584
5157
  const filename = /filename\s*=\s*"?([^";]+)"?/i.exec(res.headers.get("content-disposition") ?? "")?.[1] ?? `canonry-results-${project}.${opts.format}`;
4585
5158
  return { content: await res.text(), filename };
4586
5159
  }
4587
- // ── Queries / keywords / competitors ────────────────────────────────────
4588
- async putQueries(project, queries) {
4589
- await this.invoke(
4590
- () => putApiV1ProjectsByNameQueries({ client: this.heyClient, path: { name: project }, body: { queries } })
5160
+ // ── Queries / keywords / competitors ────────────────────────────────────
5161
+ async putQueries(project, queries) {
5162
+ await this.invoke(
5163
+ () => putApiV1ProjectsByNameQueries({ client: this.heyClient, path: { name: project }, body: { queries } })
5164
+ );
5165
+ }
5166
+ async previewReplaceQueries(project, queries) {
5167
+ return this.invoke(
5168
+ () => postApiV1ProjectsByNameQueriesReplacePreview({
5169
+ client: this.heyClient,
5170
+ path: { name: project },
5171
+ body: { queries }
5172
+ })
5173
+ );
5174
+ }
5175
+ async listQueries(project) {
5176
+ return this.invoke(
5177
+ () => getApiV1ProjectsByNameQueries({ client: this.heyClient, path: { name: project } })
5178
+ );
5179
+ }
5180
+ async deleteQueries(project, queries) {
5181
+ await this.invoke(
5182
+ () => deleteApiV1ProjectsByNameQueries({ client: this.heyClient, path: { name: project }, body: { queries } })
5183
+ );
5184
+ }
5185
+ async appendQueries(project, queries) {
5186
+ await this.invoke(
5187
+ () => postApiV1ProjectsByNameQueries({ client: this.heyClient, path: { name: project }, body: { queries } })
5188
+ );
5189
+ }
5190
+ async generateQueries(project, provider, count) {
5191
+ return this.invoke(
5192
+ () => postApiV1ProjectsByNameQueriesGenerate({
5193
+ client: this.heyClient,
5194
+ path: { name: project },
5195
+ body: { provider, count }
5196
+ })
5197
+ );
5198
+ }
5199
+ async putKeywords(project, keywords) {
5200
+ await this.invoke(
5201
+ () => putApiV1ProjectsByNameKeywords({ client: this.heyClient, path: { name: project }, body: { keywords } })
5202
+ );
5203
+ }
5204
+ async listKeywords(project) {
5205
+ return this.invoke(
5206
+ () => getApiV1ProjectsByNameKeywords({ client: this.heyClient, path: { name: project } })
5207
+ );
5208
+ }
5209
+ async deleteKeywords(project, keywords) {
5210
+ await this.invoke(
5211
+ () => deleteApiV1ProjectsByNameKeywords({ client: this.heyClient, path: { name: project }, body: { keywords } })
5212
+ );
5213
+ }
5214
+ async appendKeywords(project, keywords) {
5215
+ await this.invoke(
5216
+ () => postApiV1ProjectsByNameKeywords({ client: this.heyClient, path: { name: project }, body: { keywords } })
5217
+ );
5218
+ }
5219
+ async generateKeywords(project, provider, count) {
5220
+ return this.invoke(
5221
+ () => postApiV1ProjectsByNameKeywordsGenerate({
5222
+ client: this.heyClient,
5223
+ path: { name: project },
5224
+ body: { provider, count }
5225
+ })
5226
+ );
5227
+ }
5228
+ async listCompetitors(project) {
5229
+ return this.invoke(
5230
+ () => getApiV1ProjectsByNameCompetitors({ client: this.heyClient, path: { name: project } })
5231
+ );
5232
+ }
5233
+ async appendCompetitors(project, competitors) {
5234
+ return this.invoke(
5235
+ () => postApiV1ProjectsByNameCompetitors({
5236
+ client: this.heyClient,
5237
+ path: { name: project },
5238
+ body: { competitors }
5239
+ })
5240
+ );
5241
+ }
5242
+ async deleteCompetitors(project, competitors) {
5243
+ return this.invoke(
5244
+ () => deleteApiV1ProjectsByNameCompetitors({
5245
+ client: this.heyClient,
5246
+ path: { name: project },
5247
+ body: { competitors }
5248
+ })
5249
+ );
5250
+ }
5251
+ // ── Runs / timeline / history / snapshots ───────────────────────────────
5252
+ async triggerRun(project, body) {
5253
+ return this.invoke(
5254
+ () => postApiV1ProjectsByNameRuns({
5255
+ client: this.heyClient,
5256
+ path: { name: project },
5257
+ body: body ?? {}
5258
+ })
5259
+ );
5260
+ }
5261
+ async getMeasurementPlan(project) {
5262
+ return this.invoke(
5263
+ () => getApiV1ProjectsByNameMeasurementPlan({ client: this.heyClient, path: { name: project } })
5264
+ );
5265
+ }
5266
+ async listMeasurementPlanVersions(project) {
5267
+ return this.invoke(
5268
+ () => getApiV1ProjectsByNameMeasurementPlanVersions({ client: this.heyClient, path: { name: project } })
5269
+ );
5270
+ }
5271
+ async getMeasurementPlanVersion(project, revision) {
5272
+ return this.invoke(
5273
+ () => getApiV1ProjectsByNameMeasurementPlanVersionsByRevision({
5274
+ client: this.heyClient,
5275
+ path: { name: project, revision }
5276
+ })
5277
+ );
5278
+ }
5279
+ async compileMeasurementPlanPreview(project, plan) {
5280
+ return this.invoke(
5281
+ () => postApiV1ProjectsByNameMeasurementPlanCompilePreview({
5282
+ client: this.heyClient,
5283
+ path: { name: project },
5284
+ body: plan
5285
+ })
5286
+ );
5287
+ }
5288
+ async diffMeasurementPlanPreview(project, plan) {
5289
+ return this.invoke(
5290
+ () => postApiV1ProjectsByNameMeasurementPlanDiffPreview({
5291
+ client: this.heyClient,
5292
+ path: { name: project },
5293
+ body: plan
5294
+ })
5295
+ );
5296
+ }
5297
+ async publishMeasurementPlan(project, request) {
5298
+ return this.invoke(
5299
+ () => putApiV1ProjectsByNameMeasurementPlan({
5300
+ client: this.heyClient,
5301
+ path: { name: project },
5302
+ body: request
5303
+ })
5304
+ );
5305
+ }
5306
+ async retireMeasurementPlanSegment(project, stableKey) {
5307
+ return this.invoke(
5308
+ () => postApiV1ProjectsByNameMeasurementPlanSegmentsByStableKeyRetire({
5309
+ client: this.heyClient,
5310
+ path: { name: project, stableKey }
5311
+ })
5312
+ );
5313
+ }
5314
+ async discoverMeasurementTargets(project, request) {
5315
+ return this.invoke(
5316
+ () => postApiV1ProjectsByNameMeasurementDiscovery({
5317
+ client: this.heyClient,
5318
+ path: { name: project },
5319
+ body: request
5320
+ })
5321
+ );
5322
+ }
5323
+ async getMeasurementReport(project, revision) {
5324
+ return this.invoke(
5325
+ () => getApiV1ProjectsByNameMeasurementReport({
5326
+ client: this.heyClient,
5327
+ path: { name: project },
5328
+ query: { revision }
5329
+ })
5330
+ );
5331
+ }
5332
+ // ── Advanced Measurement v2 ───────────────────────────────────────────
5333
+ async getMeasurementSetup(project) {
5334
+ return this.invoke(
5335
+ () => getApiV1ProjectsByNameMeasurementSetup({ client: this.heyClient, path: { name: project } })
5336
+ );
5337
+ }
5338
+ async getMeasurementOverview(project, query) {
5339
+ return this.invoke(
5340
+ () => getApiV1ProjectsByNameMeasurementOverview({
5341
+ client: this.heyClient,
5342
+ path: { name: project },
5343
+ query
5344
+ })
5345
+ );
5346
+ }
5347
+ async getMeasurementPlanDraft(project) {
5348
+ return this.invoke(
5349
+ () => getApiV1ProjectsByNameMeasurementPlanDraft({ client: this.heyClient, path: { name: project } })
5350
+ );
5351
+ }
5352
+ async getMeasurementDraftTargets(project, query) {
5353
+ return this.invoke(
5354
+ () => getApiV1ProjectsByNameMeasurementPlanDraftTargets({
5355
+ client: this.heyClient,
5356
+ path: { name: project },
5357
+ query
5358
+ })
5359
+ );
5360
+ }
5361
+ async getMeasurementDraftAssignments(project, query) {
5362
+ return this.invoke(
5363
+ () => getApiV1ProjectsByNameMeasurementPlanDraftAssignments({
5364
+ client: this.heyClient,
5365
+ path: { name: project },
5366
+ query
5367
+ })
4591
5368
  );
4592
5369
  }
4593
- async previewReplaceQueries(project, queries) {
5370
+ async getMeasurementDraftGroups(project, query) {
4594
5371
  return this.invoke(
4595
- () => postApiV1ProjectsByNameQueriesReplacePreview({
5372
+ () => getApiV1ProjectsByNameMeasurementPlanDraftGroups({
4596
5373
  client: this.heyClient,
4597
5374
  path: { name: project },
4598
- body: { queries }
5375
+ query
4599
5376
  })
4600
5377
  );
4601
5378
  }
4602
- async listQueries(project) {
5379
+ async createMeasurementPlanDraft(project, request, idempotencyKey) {
4603
5380
  return this.invoke(
4604
- () => getApiV1ProjectsByNameQueries({ client: this.heyClient, path: { name: project } })
5381
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsCreate({
5382
+ client: this.heyClient,
5383
+ path: { name: project },
5384
+ body: request,
5385
+ // No draft exists yet, so create has no ETag to match.
5386
+ headers: this.measurementDraftMutationHeaders(idempotencyKey)
5387
+ })
4605
5388
  );
4606
5389
  }
4607
- async deleteQueries(project, queries) {
4608
- await this.invoke(
4609
- () => deleteApiV1ProjectsByNameQueries({ client: this.heyClient, path: { name: project }, body: { queries } })
5390
+ async importMeasurementDraftSitemap(project, request, idempotencyKey, etag) {
5391
+ return this.invoke(
5392
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsImportSitemap({
5393
+ client: this.heyClient,
5394
+ path: { name: project },
5395
+ body: request,
5396
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5397
+ })
4610
5398
  );
4611
5399
  }
4612
- async appendQueries(project, queries) {
4613
- await this.invoke(
4614
- () => postApiV1ProjectsByNameQueries({ client: this.heyClient, path: { name: project }, body: { queries } })
5400
+ async applyMeasurementDraftSitemapSelection(project, request, idempotencyKey, etag) {
5401
+ return this.invoke(
5402
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsApplySitemapSelection({
5403
+ client: this.heyClient,
5404
+ path: { name: project },
5405
+ body: request,
5406
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5407
+ })
4615
5408
  );
4616
5409
  }
4617
- async generateQueries(project, provider, count) {
5410
+ async upsertMeasurementDraftTarget(project, request, idempotencyKey, etag) {
4618
5411
  return this.invoke(
4619
- () => postApiV1ProjectsByNameQueriesGenerate({
5412
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsUpsertTarget({
4620
5413
  client: this.heyClient,
4621
5414
  path: { name: project },
4622
- body: { provider, count }
5415
+ body: request,
5416
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
4623
5417
  })
4624
5418
  );
4625
5419
  }
4626
- async putKeywords(project, keywords) {
4627
- await this.invoke(
4628
- () => putApiV1ProjectsByNameKeywords({ client: this.heyClient, path: { name: project }, body: { keywords } })
5420
+ async renameMeasurementDraftTarget(project, request, idempotencyKey, etag) {
5421
+ return this.invoke(
5422
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsRenameTarget({
5423
+ client: this.heyClient,
5424
+ path: { name: project },
5425
+ body: request,
5426
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5427
+ })
4629
5428
  );
4630
5429
  }
4631
- async listKeywords(project) {
5430
+ async mergeMeasurementDraftTargets(project, request, idempotencyKey, etag) {
4632
5431
  return this.invoke(
4633
- () => getApiV1ProjectsByNameKeywords({ client: this.heyClient, path: { name: project } })
5432
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsMergeTargets({
5433
+ client: this.heyClient,
5434
+ path: { name: project },
5435
+ body: request,
5436
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5437
+ })
4634
5438
  );
4635
5439
  }
4636
- async deleteKeywords(project, keywords) {
4637
- await this.invoke(
4638
- () => deleteApiV1ProjectsByNameKeywords({ client: this.heyClient, path: { name: project }, body: { keywords } })
5440
+ async excludeMeasurementDraftTarget(project, request, idempotencyKey, etag) {
5441
+ return this.invoke(
5442
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsExcludeTarget({
5443
+ client: this.heyClient,
5444
+ path: { name: project },
5445
+ body: request,
5446
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5447
+ })
4639
5448
  );
4640
5449
  }
4641
- async appendKeywords(project, keywords) {
4642
- await this.invoke(
4643
- () => postApiV1ProjectsByNameKeywords({ client: this.heyClient, path: { name: project }, body: { keywords } })
5450
+ async rebindMeasurementDraftTarget(project, request, idempotencyKey, etag) {
5451
+ return this.invoke(
5452
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsRebindTarget({
5453
+ client: this.heyClient,
5454
+ path: { name: project },
5455
+ body: request,
5456
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5457
+ })
4644
5458
  );
4645
5459
  }
4646
- async generateKeywords(project, provider, count) {
5460
+ async applyMeasurementDraftAssignments(project, request, idempotencyKey, etag) {
4647
5461
  return this.invoke(
4648
- () => postApiV1ProjectsByNameKeywordsGenerate({
5462
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsApplyAssignments({
4649
5463
  client: this.heyClient,
4650
5464
  path: { name: project },
4651
- body: { provider, count }
5465
+ body: request,
5466
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
4652
5467
  })
4653
5468
  );
4654
5469
  }
4655
- async listCompetitors(project) {
5470
+ async removeMeasurementDraftAssignment(project, request, idempotencyKey, etag) {
4656
5471
  return this.invoke(
4657
- () => getApiV1ProjectsByNameCompetitors({ client: this.heyClient, path: { name: project } })
5472
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsRemoveAssignment({
5473
+ client: this.heyClient,
5474
+ path: { name: project },
5475
+ body: request,
5476
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5477
+ })
4658
5478
  );
4659
5479
  }
4660
- async appendCompetitors(project, competitors) {
5480
+ async clearMeasurementDraftAssignments(project, request, idempotencyKey, etag) {
4661
5481
  return this.invoke(
4662
- () => postApiV1ProjectsByNameCompetitors({
5482
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsClearAssignments({
4663
5483
  client: this.heyClient,
4664
5484
  path: { name: project },
4665
- body: { competitors }
5485
+ body: request,
5486
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
4666
5487
  })
4667
5488
  );
4668
5489
  }
4669
- async deleteCompetitors(project, competitors) {
5490
+ async classifyMeasurementDraftAssignments(project, request, idempotencyKey, etag) {
4670
5491
  return this.invoke(
4671
- () => deleteApiV1ProjectsByNameCompetitors({
5492
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsClassifyAssignments({
4672
5493
  client: this.heyClient,
4673
5494
  path: { name: project },
4674
- body: { competitors }
5495
+ body: request,
5496
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
4675
5497
  })
4676
5498
  );
4677
5499
  }
4678
- // ── Runs / timeline / history / snapshots ───────────────────────────────
4679
- async triggerRun(project, body) {
5500
+ async upsertMeasurementDraftGroup(project, request, idempotencyKey, etag) {
4680
5501
  return this.invoke(
4681
- () => postApiV1ProjectsByNameRuns({
5502
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsUpsertGroup({
4682
5503
  client: this.heyClient,
4683
5504
  path: { name: project },
4684
- body: body ?? {}
5505
+ body: request,
5506
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
4685
5507
  })
4686
5508
  );
4687
5509
  }
4688
- async getMeasurementPlan(project) {
5510
+ async removeMeasurementDraftGroup(project, request, idempotencyKey, etag) {
4689
5511
  return this.invoke(
4690
- () => getApiV1ProjectsByNameMeasurementPlan({ client: this.heyClient, path: { name: project } })
5512
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsRemoveGroup({
5513
+ client: this.heyClient,
5514
+ path: { name: project },
5515
+ body: request,
5516
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5517
+ })
4691
5518
  );
4692
5519
  }
4693
- async listMeasurementPlanVersions(project) {
5520
+ async upsertMeasurementDraftCompetitor(project, request, idempotencyKey, etag) {
4694
5521
  return this.invoke(
4695
- () => getApiV1ProjectsByNameMeasurementPlanVersions({ client: this.heyClient, path: { name: project } })
5522
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsUpsertCompetitor({
5523
+ client: this.heyClient,
5524
+ path: { name: project },
5525
+ body: request,
5526
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5527
+ })
4696
5528
  );
4697
5529
  }
4698
- async getMeasurementPlanVersion(project, revision) {
5530
+ async removeMeasurementDraftCompetitor(project, request, idempotencyKey, etag) {
4699
5531
  return this.invoke(
4700
- () => getApiV1ProjectsByNameMeasurementPlanVersionsByRevision({
5532
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsRemoveCompetitor({
4701
5533
  client: this.heyClient,
4702
- path: { name: project, revision }
5534
+ path: { name: project },
5535
+ body: request,
5536
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
4703
5537
  })
4704
5538
  );
4705
5539
  }
4706
- async compileMeasurementPlanPreview(project, plan) {
5540
+ async compileMeasurementDraftPreview(project) {
4707
5541
  return this.invoke(
4708
- () => postApiV1ProjectsByNameMeasurementPlanCompilePreview({
5542
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsCompilePreview({
5543
+ client: this.heyClient,
5544
+ path: { name: project }
5545
+ })
5546
+ );
5547
+ }
5548
+ async diffMeasurementDraftPreview(project) {
5549
+ return this.invoke(
5550
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsDiffPreview({
5551
+ client: this.heyClient,
5552
+ path: { name: project }
5553
+ })
5554
+ );
5555
+ }
5556
+ async publishMeasurementDraft(project, request, idempotencyKey, etag) {
5557
+ return this.invoke(
5558
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsPublish({
4709
5559
  client: this.heyClient,
4710
5560
  path: { name: project },
4711
- body: plan
5561
+ body: request,
5562
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
4712
5563
  })
4713
5564
  );
4714
5565
  }
4715
- async diffMeasurementPlanPreview(project, plan) {
5566
+ async discardMeasurementDraft(project, idempotencyKey, etag) {
4716
5567
  return this.invoke(
4717
- () => postApiV1ProjectsByNameMeasurementPlanDiffPreview({
5568
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsDiscard({
4718
5569
  client: this.heyClient,
4719
5570
  path: { name: project },
4720
- body: plan
5571
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
4721
5572
  })
4722
5573
  );
4723
5574
  }
4724
- async publishMeasurementPlan(project, request) {
5575
+ async deactivateMeasurementPlan(project, request, idempotencyKey) {
4725
5576
  return this.invoke(
4726
- () => putApiV1ProjectsByNameMeasurementPlan({
5577
+ () => postApiV1ProjectsByNameMeasurementPlanActionsDeactivate({
4727
5578
  client: this.heyClient,
4728
5579
  path: { name: project },
5580
+ body: request,
5581
+ headers: { "Idempotency-Key": idempotencyKey }
5582
+ })
5583
+ );
5584
+ }
5585
+ async listMeasurementQuerySets(project) {
5586
+ return this.invoke(
5587
+ () => getApiV1ProjectsByNameMeasurementQuerySets({ client: this.heyClient, path: { name: project } })
5588
+ );
5589
+ }
5590
+ async getMeasurementQuerySet(project, setId) {
5591
+ return this.invoke(
5592
+ () => getApiV1ProjectsByNameMeasurementQuerySetsBySetId({
5593
+ client: this.heyClient,
5594
+ path: { name: project, setId }
5595
+ })
5596
+ );
5597
+ }
5598
+ async upsertMeasurementQuerySet(project, setId, request) {
5599
+ return this.invoke(
5600
+ () => putApiV1ProjectsByNameMeasurementQuerySetsBySetId({
5601
+ client: this.heyClient,
5602
+ path: { name: project, setId },
4729
5603
  body: request
4730
5604
  })
4731
5605
  );
4732
5606
  }
4733
- async retireMeasurementPlanSegment(project, stableKey) {
5607
+ async deleteMeasurementQuerySet(project, setId) {
4734
5608
  return this.invoke(
4735
- () => postApiV1ProjectsByNameMeasurementPlanSegmentsByStableKeyRetire({
5609
+ () => deleteApiV1ProjectsByNameMeasurementQuerySetsBySetId({
4736
5610
  client: this.heyClient,
4737
- path: { name: project, stableKey }
5611
+ path: { name: project, setId }
4738
5612
  })
4739
5613
  );
4740
5614
  }
4741
- async discoverMeasurementTargets(project, request) {
5615
+ async listMeasurementQueryTemplates(project) {
4742
5616
  return this.invoke(
4743
- () => postApiV1ProjectsByNameMeasurementDiscovery({
5617
+ () => getApiV1ProjectsByNameMeasurementQueryTemplates({ client: this.heyClient, path: { name: project } })
5618
+ );
5619
+ }
5620
+ async upsertMeasurementQueryTemplate(project, templateId, request) {
5621
+ return this.invoke(
5622
+ () => putApiV1ProjectsByNameMeasurementQueryTemplatesByTemplateId({
4744
5623
  client: this.heyClient,
4745
- path: { name: project },
5624
+ path: { name: project, templateId },
4746
5625
  body: request
4747
5626
  })
4748
5627
  );
4749
5628
  }
4750
- async getMeasurementReport(project, revision) {
5629
+ async deleteMeasurementQueryTemplate(project, templateId) {
4751
5630
  return this.invoke(
4752
- () => getApiV1ProjectsByNameMeasurementReport({
5631
+ () => deleteApiV1ProjectsByNameMeasurementQueryTemplatesByTemplateId({
4753
5632
  client: this.heyClient,
4754
- path: { name: project },
4755
- query: { revision }
5633
+ path: { name: project, templateId }
5634
+ })
5635
+ );
5636
+ }
5637
+ async applyMeasurementQueryTemplate(project, templateId, request, idempotencyKey) {
5638
+ return this.invoke(
5639
+ () => postApiV1ProjectsByNameMeasurementQueryTemplatesByTemplateIdApply({
5640
+ client: this.heyClient,
5641
+ path: { name: project, templateId },
5642
+ body: request,
5643
+ headers: { "Idempotency-Key": idempotencyKey }
4756
5644
  })
4757
5645
  );
4758
5646
  }
@@ -4858,6 +5746,18 @@ var ApiClient = class {
4858
5746
  () => postApiV1KeysByIdRevoke({ client: this.heyClient, path: { id } })
4859
5747
  );
4860
5748
  }
5749
+ // ── Account management ──────────────────────────────────────────────────
5750
+ async listUsers() {
5751
+ return this.invoke(() => getApiV1Users({ client: this.heyClient }));
5752
+ }
5753
+ async createUser(body) {
5754
+ return this.invoke(() => postApiV1Users({ client: this.heyClient, body }));
5755
+ }
5756
+ async deleteUser(name) {
5757
+ return this.invoke(
5758
+ () => deleteApiV1UsersByName({ client: this.heyClient, path: { name } })
5759
+ );
5760
+ }
4861
5761
  async updateProvider(name, body) {
4862
5762
  return this.invoke(
4863
5763
  () => putApiV1SettingsProvidersByName({ client: this.heyClient, path: { name }, body })
@@ -6313,6 +7213,143 @@ var measurementPlanPreviewInputSchema = z2.object({ project: projectNameSchema,
6313
7213
  var measurementPlanPublishInputSchema = measurementPlanPublishRequestSchema.extend({ project: projectNameSchema });
6314
7214
  var measurementPlanRetireInputSchema = z2.object({ project: projectNameSchema, stableKey: z2.string().min(1) });
6315
7215
  var measurementDiscoveryInputSchema = measurementDiscoveryRequestSchema.extend({ project: projectNameSchema });
7216
+ var idempotencyKeyInputSchema = z2.string().trim().min(1).describe("A fresh request key. Reuse it only when retrying the identical request.");
7217
+ var measurementDraftEtagInputSchema = z2.string().trim().min(1).optional().describe(
7218
+ "Current draft ETag from canonry_measurement_draft_get. The API requires it for draft edits, publish, and discard; omit it only to receive the API\u2019s actionable 428 response."
7219
+ );
7220
+ var measurementOverviewInputSchema = measurementOverviewQuerySchema.extend({ project: projectNameSchema });
7221
+ var measurementDraftCollectionInputSchema = measurementDraftCollectionQuerySchema.extend({ project: projectNameSchema });
7222
+ var measurementQuerySetInputSchema = z2.object({
7223
+ project: projectNameSchema,
7224
+ setId: z2.string().trim().min(1)
7225
+ }).strict();
7226
+ var measurementQuerySetUpsertInputSchema = measurementQuerySetInputSchema.extend({
7227
+ request: measurementQuerySetUpsertRequestSchema
7228
+ }).strict();
7229
+ var measurementQueryTemplateInputSchema = z2.object({
7230
+ project: projectNameSchema,
7231
+ templateId: z2.string().trim().min(1)
7232
+ }).strict();
7233
+ var measurementQueryTemplateUpsertInputSchema = measurementQueryTemplateInputSchema.extend({
7234
+ request: measurementQueryTemplateUpsertRequestSchema
7235
+ }).strict();
7236
+ var measurementQueryTemplateApplyInputSchema = measurementQueryTemplateInputSchema.extend({
7237
+ request: measurementQueryTemplateApplyRequestSchema,
7238
+ idempotencyKey: idempotencyKeyInputSchema
7239
+ }).strict();
7240
+ var measurementPlanDeactivateInputSchema = measurementPlanDeactivateRequestSchema.extend({
7241
+ project: projectNameSchema,
7242
+ idempotencyKey: idempotencyKeyInputSchema
7243
+ }).strict();
7244
+ function measurementDraftMutationOperationSchema(action, request) {
7245
+ return z2.object({
7246
+ action: z2.literal(action),
7247
+ request,
7248
+ etag: measurementDraftEtagInputSchema,
7249
+ idempotencyKey: idempotencyKeyInputSchema
7250
+ }).strict().describe(`Operation for ${action}.`);
7251
+ }
7252
+ var measurementDraftOperationSchema = z2.discriminatedUnion("action", [
7253
+ z2.object({
7254
+ action: z2.literal("create"),
7255
+ request: measurementDraftCreateRequestSchema,
7256
+ idempotencyKey: idempotencyKeyInputSchema
7257
+ }).strict().describe("Operation for create."),
7258
+ measurementDraftMutationOperationSchema("import-sitemap", measurementDraftImportSitemapRequestSchema),
7259
+ measurementDraftMutationOperationSchema("apply-sitemap-selection", measurementDraftApplySitemapSelectionRequestSchema),
7260
+ measurementDraftMutationOperationSchema("upsert-target", measurementDraftUpsertTargetRequestSchema),
7261
+ measurementDraftMutationOperationSchema("rename-target", measurementDraftRenameTargetRequestSchema),
7262
+ measurementDraftMutationOperationSchema("merge-targets", measurementDraftMergeTargetsRequestSchema),
7263
+ measurementDraftMutationOperationSchema("exclude-target", measurementDraftExcludeTargetRequestSchema),
7264
+ measurementDraftMutationOperationSchema("rebind-target", measurementDraftRebindTargetRequestSchema),
7265
+ measurementDraftMutationOperationSchema("apply-assignments", measurementDraftApplyAssignmentsRequestSchema),
7266
+ measurementDraftMutationOperationSchema("remove-assignment", measurementDraftRemoveAssignmentRequestSchema),
7267
+ measurementDraftMutationOperationSchema("clear-assignments", measurementDraftClearAssignmentsRequestSchema),
7268
+ measurementDraftMutationOperationSchema("classify-assignments", measurementDraftClassifyAssignmentsRequestSchema),
7269
+ measurementDraftMutationOperationSchema("upsert-group", measurementDraftUpsertGroupRequestSchema),
7270
+ measurementDraftMutationOperationSchema("remove-group", measurementDraftRemoveGroupRequestSchema),
7271
+ measurementDraftMutationOperationSchema("upsert-competitor", measurementDraftUpsertCompetitorRequestSchema),
7272
+ measurementDraftMutationOperationSchema("remove-competitor", measurementDraftRemoveCompetitorRequestSchema),
7273
+ z2.object({ action: z2.literal("compile-preview") }).strict().describe("Operation for compile-preview."),
7274
+ z2.object({ action: z2.literal("diff-preview") }).strict().describe("Operation for diff-preview."),
7275
+ measurementDraftMutationOperationSchema("publish", measurementDraftPublishRequestSchema),
7276
+ z2.object({
7277
+ action: z2.literal("discard"),
7278
+ etag: measurementDraftEtagInputSchema,
7279
+ idempotencyKey: idempotencyKeyInputSchema
7280
+ }).strict().describe("Operation for discard.")
7281
+ ]);
7282
+ var measurementDraftActionInputSchema = z2.object({
7283
+ project: projectNameSchema,
7284
+ operation: measurementDraftOperationSchema.describe("Typed draft operation. Select exactly one action branch.")
7285
+ }).strict();
7286
+ var measurementDraftActionOpenApiOperations = [
7287
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/create",
7288
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/import-sitemap",
7289
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/apply-sitemap-selection",
7290
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/upsert-target",
7291
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/rename-target",
7292
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/merge-targets",
7293
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/exclude-target",
7294
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/rebind-target",
7295
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/apply-assignments",
7296
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/remove-assignment",
7297
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/clear-assignments",
7298
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/classify-assignments",
7299
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/upsert-group",
7300
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/remove-group",
7301
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/upsert-competitor",
7302
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/remove-competitor",
7303
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/compile-preview",
7304
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/diff-preview",
7305
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/publish",
7306
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/discard"
7307
+ ];
7308
+ function runMeasurementDraftAction(client2, input) {
7309
+ const { project, operation: actionInput } = input;
7310
+ switch (actionInput.action) {
7311
+ case "create":
7312
+ return client2.createMeasurementPlanDraft(project, actionInput.request, actionInput.idempotencyKey);
7313
+ case "import-sitemap":
7314
+ return client2.importMeasurementDraftSitemap(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7315
+ case "apply-sitemap-selection":
7316
+ return client2.applyMeasurementDraftSitemapSelection(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7317
+ case "upsert-target":
7318
+ return client2.upsertMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7319
+ case "rename-target":
7320
+ return client2.renameMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7321
+ case "merge-targets":
7322
+ return client2.mergeMeasurementDraftTargets(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7323
+ case "exclude-target":
7324
+ return client2.excludeMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7325
+ case "rebind-target":
7326
+ return client2.rebindMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7327
+ case "apply-assignments":
7328
+ return client2.applyMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7329
+ case "remove-assignment":
7330
+ return client2.removeMeasurementDraftAssignment(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7331
+ case "clear-assignments":
7332
+ return client2.clearMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7333
+ case "classify-assignments":
7334
+ return client2.classifyMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7335
+ case "upsert-group":
7336
+ return client2.upsertMeasurementDraftGroup(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7337
+ case "remove-group":
7338
+ return client2.removeMeasurementDraftGroup(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7339
+ case "upsert-competitor":
7340
+ return client2.upsertMeasurementDraftCompetitor(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7341
+ case "remove-competitor":
7342
+ return client2.removeMeasurementDraftCompetitor(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7343
+ case "compile-preview":
7344
+ return client2.compileMeasurementDraftPreview(project);
7345
+ case "diff-preview":
7346
+ return client2.diffMeasurementDraftPreview(project);
7347
+ case "publish":
7348
+ return client2.publishMeasurementDraft(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7349
+ case "discard":
7350
+ return client2.discardMeasurementDraft(project, actionInput.idempotencyKey, actionInput.etag);
7351
+ }
7352
+ }
6316
7353
  var runsListInputSchema = z2.object({
6317
7354
  project: projectNameSchema,
6318
7355
  limit: z2.number().int().positive().max(500).optional()
@@ -7969,6 +9006,201 @@ var canonryMcpTools = [
7969
9006
  openApiOperations: ["POST /api/v1/projects/{name}/measurement-plan/segments/{stableKey}/retire"],
7970
9007
  handler: (client2, input) => client2.retireMeasurementPlanSegment(input.project, input.stableKey)
7971
9008
  }),
9009
+ defineTool({
9010
+ name: "canonry_measurement_setup",
9011
+ title: "Get Advanced Measurement setup state",
9012
+ description: "Return the project\u2019s stored Advanced Measurement setup state, mode, active revision, draft freshness, and next action. It never starts provider work or incurs provider cost, and refuses an unknown project.",
9013
+ access: "read",
9014
+ tier: "setup",
9015
+ inputSchema: projectInputSchema,
9016
+ annotations: readAnnotations(),
9017
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-setup"],
9018
+ handler: (client2, input) => client2.getMeasurementSetup(input.project)
9019
+ }),
9020
+ defineTool({
9021
+ name: "canonry_measurement_overview",
9022
+ title: "Get Advanced Measurement overview",
9023
+ description: "Return stored, revision-pinned Advanced Measurement metrics and a bounded page of Target rows for one scope. It ranks one run snapshot only and never infers a trend or compares across revisions. Choose label-asc (default), label-desc, citationCoverage-asc/desc, or mentionCoverage-asc/desc. For a coverage sort, unavailable rows form the first bucket in either direction; available rows then follow the requested numeric direction. The cursor is sort-aware, pins pagination to the active revision, displayed run, evidence snapshot, and filters even if a newer run completes, and must be reused unchanged with the same sort and filters. Legacy label cursors work only when sort is omitted, while any explicit sort needs a new sort-bound cursor. It never starts provider work or incurs provider cost; page size is at most 100, and it refuses invalid scope keys, cursor combinations, appended evidence, or a run pinned to another revision.",
9024
+ access: "read",
9025
+ tier: "setup",
9026
+ inputSchema: measurementOverviewInputSchema,
9027
+ annotations: readAnnotations(),
9028
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-overview"],
9029
+ handler: (client2, input) => {
9030
+ const { project, ...query } = input;
9031
+ return client2.getMeasurementOverview(project, query);
9032
+ }
9033
+ }),
9034
+ defineTool({
9035
+ name: "canonry_measurement_draft_get",
9036
+ title: "Get Advanced Measurement draft",
9037
+ description: "Return the stored v2 draft and its current ETag, or draft:null when none exists. It never starts provider work or incurs provider cost, and refuses an unknown project.",
9038
+ access: "read",
9039
+ tier: "setup",
9040
+ inputSchema: projectInputSchema,
9041
+ annotations: readAnnotations(),
9042
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-plan/draft"],
9043
+ handler: (client2, input) => client2.getMeasurementPlanDraft(input.project)
9044
+ }),
9045
+ defineTool({
9046
+ name: "canonry_measurement_draft_targets",
9047
+ title: "List Advanced Measurement draft Targets",
9048
+ description: "Return one stored, cursor-paged set of draft Targets. It never starts provider work or incurs provider cost; pages are capped at 100 rows and it refuses a missing draft or unknown project.",
9049
+ access: "read",
9050
+ tier: "setup",
9051
+ inputSchema: measurementDraftCollectionInputSchema,
9052
+ annotations: readAnnotations(),
9053
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-plan/draft/targets"],
9054
+ handler: (client2, input) => {
9055
+ const { project, ...query } = input;
9056
+ return client2.getMeasurementDraftTargets(project, query);
9057
+ }
9058
+ }),
9059
+ defineTool({
9060
+ name: "canonry_measurement_draft_assignments",
9061
+ title: "List Advanced Measurement draft assignments",
9062
+ description: "Return one stored, cursor-paged set of draft Target-to-query assignments. It never starts provider work or incurs provider cost; pages are capped at 100 rows and it refuses a missing draft or unknown project.",
9063
+ access: "read",
9064
+ tier: "setup",
9065
+ inputSchema: measurementDraftCollectionInputSchema,
9066
+ annotations: readAnnotations(),
9067
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-plan/draft/assignments"],
9068
+ handler: (client2, input) => {
9069
+ const { project, ...query } = input;
9070
+ return client2.getMeasurementDraftAssignments(project, query);
9071
+ }
9072
+ }),
9073
+ defineTool({
9074
+ name: "canonry_measurement_draft_groups",
9075
+ title: "List Advanced Measurement draft groups",
9076
+ description: "Return one stored, cursor-paged set of draft reporting groups and competitors. It never starts provider work or incurs provider cost; pages are capped at 100 rows and it refuses a missing draft or unknown project.",
9077
+ access: "read",
9078
+ tier: "setup",
9079
+ inputSchema: measurementDraftCollectionInputSchema,
9080
+ annotations: readAnnotations(),
9081
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-plan/draft/groups"],
9082
+ handler: (client2, input) => {
9083
+ const { project, ...query } = input;
9084
+ return client2.getMeasurementDraftGroups(project, query);
9085
+ }
9086
+ }),
9087
+ defineTool({
9088
+ name: "canonry_measurement_query_sets",
9089
+ title: "List Advanced Measurement query sets",
9090
+ description: "Return stored query-set metadata for one project. It never starts provider work or incurs provider cost, and refuses an unknown project.",
9091
+ access: "read",
9092
+ tier: "setup",
9093
+ inputSchema: projectInputSchema,
9094
+ annotations: readAnnotations(),
9095
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-query-sets"],
9096
+ handler: (client2, input) => client2.listMeasurementQuerySets(input.project)
9097
+ }),
9098
+ defineTool({
9099
+ name: "canonry_measurement_query_set_get",
9100
+ title: "Get Advanced Measurement query set",
9101
+ description: "Return one stored query set with its ordered query members. It never starts provider work or incurs provider cost, and refuses an unknown project or query-set ID.",
9102
+ access: "read",
9103
+ tier: "setup",
9104
+ inputSchema: measurementQuerySetInputSchema,
9105
+ annotations: readAnnotations(),
9106
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-query-sets/{setId}"],
9107
+ handler: (client2, input) => client2.getMeasurementQuerySet(input.project, input.setId)
9108
+ }),
9109
+ defineTool({
9110
+ name: "canonry_measurement_query_templates",
9111
+ title: "List Advanced Measurement query templates",
9112
+ description: "Return stored query-template metadata for one project. It never starts provider work or incurs provider cost, and refuses an unknown project.",
9113
+ access: "read",
9114
+ tier: "setup",
9115
+ inputSchema: projectInputSchema,
9116
+ annotations: readAnnotations(),
9117
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-query-templates"],
9118
+ handler: (client2, input) => client2.listMeasurementQueryTemplates(input.project)
9119
+ }),
9120
+ defineTool({
9121
+ name: "canonry_measurement_draft_action",
9122
+ title: "Act on an Advanced Measurement draft",
9123
+ description: "Create, edit, inspect, publish, or discard one v2 draft. Pass project plus exactly one typed operation branch; each operation correlates its action with the required request, ETag, and idempotency key so the live schema is self-describing. Requires measurement-plan write authority. Every mutating action needs idempotencyKey: reuse it only for an identical retry; a changed request with the same key is refused. Create has no ETag. Draft edits, publish, and discard should pass the latest ETag from canonry_measurement_draft_get; a missing ETag reaches the API as actionable 428, while a stale ETag returns 412. Compile-preview and diff-preview never mutate or start provider work and require neither header. Import-sitemap performs a bounded public sitemap fetch but does not publish or run measurement; publish replaces the active plan after validation, and discard permanently removes the draft.",
9124
+ access: "write",
9125
+ tier: "setup",
9126
+ inputSchema: measurementDraftActionInputSchema,
9127
+ annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true, openWorldHint: true }),
9128
+ openApiOperations: measurementDraftActionOpenApiOperations,
9129
+ handler: runMeasurementDraftAction
9130
+ }),
9131
+ defineTool({
9132
+ name: "canonry_measurement_plan_deactivate",
9133
+ title: "Deactivate Advanced Measurement plan",
9134
+ description: "Remove the active Advanced Measurement plan pointer while retaining immutable revisions. Requires measurement-plan write authority, the active revision you reviewed, and idempotencyKey; reuse that key only to retry the identical request. It does not use a draft ETag and refuses a moved or missing active plan.",
9135
+ access: "write",
9136
+ tier: "setup",
9137
+ inputSchema: measurementPlanDeactivateInputSchema,
9138
+ annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true }),
9139
+ openApiOperations: ["POST /api/v1/projects/{name}/measurement-plan/actions/deactivate"],
9140
+ handler: (client2, input) => client2.deactivateMeasurementPlan(input.project, {
9141
+ expectedActiveRevision: input.expectedActiveRevision
9142
+ }, input.idempotencyKey)
9143
+ }),
9144
+ defineTool({
9145
+ name: "canonry_measurement_query_set_upsert",
9146
+ title: "Create or replace Advanced Measurement query set",
9147
+ description: "Create or replace one query set and its ordered query references. Requires measurement-plan write authority. This is an idempotent PUT with no mutation headers; safely retry the same request. It replaces the named query-set contents but never deletes project queries or published plans.",
9148
+ access: "write",
9149
+ tier: "setup",
9150
+ inputSchema: measurementQuerySetUpsertInputSchema,
9151
+ annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true }),
9152
+ openApiOperations: ["PUT /api/v1/projects/{name}/measurement-query-sets/{setId}"],
9153
+ handler: (client2, input) => client2.upsertMeasurementQuerySet(input.project, input.setId, input.request)
9154
+ }),
9155
+ defineTool({
9156
+ name: "canonry_measurement_query_set_delete",
9157
+ title: "Delete Advanced Measurement query set",
9158
+ description: "Delete one query set without deleting its project queries or published plans. Requires measurement-plan write authority. DELETE is idempotent and uses no mutation headers; retrying the same request is safe, while an unknown query-set ID is refused.",
9159
+ access: "write",
9160
+ tier: "setup",
9161
+ inputSchema: measurementQuerySetInputSchema,
9162
+ annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true }),
9163
+ openApiOperations: ["DELETE /api/v1/projects/{name}/measurement-query-sets/{setId}"],
9164
+ handler: (client2, input) => client2.deleteMeasurementQuerySet(input.project, input.setId)
9165
+ }),
9166
+ defineTool({
9167
+ name: "canonry_measurement_query_template_upsert",
9168
+ title: "Create or replace Advanced Measurement query template",
9169
+ description: "Create or replace one query template. Requires measurement-plan write authority. This is an idempotent PUT with no mutation headers; safely retry the same request. It replaces only the named template and does not create queries until an explicit apply.",
9170
+ access: "write",
9171
+ tier: "setup",
9172
+ inputSchema: measurementQueryTemplateUpsertInputSchema,
9173
+ annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true }),
9174
+ openApiOperations: ["PUT /api/v1/projects/{name}/measurement-query-templates/{templateId}"],
9175
+ handler: (client2, input) => client2.upsertMeasurementQueryTemplate(input.project, input.templateId, input.request)
9176
+ }),
9177
+ defineTool({
9178
+ name: "canonry_measurement_query_template_delete",
9179
+ title: "Delete Advanced Measurement query template",
9180
+ description: "Delete one query template without deleting previously expanded project queries. Requires measurement-plan write authority. DELETE is idempotent and uses no mutation headers; retrying the same request is safe, while an unknown template ID is refused.",
9181
+ access: "write",
9182
+ tier: "setup",
9183
+ inputSchema: measurementQueryTemplateInputSchema,
9184
+ annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true }),
9185
+ openApiOperations: ["DELETE /api/v1/projects/{name}/measurement-query-templates/{templateId}"],
9186
+ handler: (client2, input) => client2.deleteMeasurementQueryTemplate(input.project, input.templateId)
9187
+ }),
9188
+ defineTool({
9189
+ name: "canonry_measurement_query_template_apply",
9190
+ title: "Apply Advanced Measurement query template",
9191
+ description: "Expand one query template into project queries and optionally add them to a query set. Requires measurement-plan write authority and idempotencyKey; reuse that key only to retry the identical apply. This additive action returns created and already-existing queries, does not use a draft ETag, and never removes prior queries.",
9192
+ access: "write",
9193
+ tier: "setup",
9194
+ inputSchema: measurementQueryTemplateApplyInputSchema,
9195
+ annotations: writeAnnotations({ idempotentHint: true }),
9196
+ openApiOperations: ["POST /api/v1/projects/{name}/measurement-query-templates/{templateId}/apply"],
9197
+ handler: (client2, input) => client2.applyMeasurementQueryTemplate(
9198
+ input.project,
9199
+ input.templateId,
9200
+ input.request,
9201
+ input.idempotencyKey
9202
+ )
9203
+ }),
7972
9204
  defineTool({
7973
9205
  name: "canonry_measurement_report",
7974
9206
  title: "Get measurement report",
@@ -7983,7 +9215,7 @@ var canonryMcpTools = [
7983
9215
  defineTool({
7984
9216
  name: "canonry_run_trigger",
7985
9217
  title: "Trigger run",
7986
- description: "Trigger an answer-visibility run for a Canonry project. Pass request.queries[] to scope the sweep to a subset of the project's tracked queries; omit for a full sweep. For verification scenarios (testing whether a provider migration worked, reproducing a regression, sanity-checking after a code change), set request.trigger='probe' \u2014 probe runs write a snapshot you can inspect via canonry_runs_get but are EXCLUDED from dashboard, analytics, intelligence, report, and notifications. Use 'probe' whenever you are testing on your own initiative rather than producing data the user/dashboard will consume.",
9218
+ description: "Trigger an answer-visibility run for a Canonry project. Omit both scoping fields for a full sweep. Pass request.queries[] to measure only some of the project's tracked questions. On a project with a published measurement plan, pass request.measurementScope with at least one group or target to measure one slice of that plan \u2014 a group stands for its member Targets, and only the questions those Targets selected are measured. A scope naming nothing is rejected rather than treated as a full sweep, so omit the field entirely when you want everything. Either kind of slice is recorded as a spot check: it never replaces a full sweep in the dashboard, analytics or report. For verification scenarios (testing whether a provider migration worked, reproducing a regression, sanity-checking after a code change), set request.trigger='probe' \u2014 probe runs write a snapshot you can inspect via canonry_runs_get but are EXCLUDED from dashboard, analytics, intelligence, report, and notifications. Use 'probe' whenever you are testing on your own initiative rather than producing data the user/dashboard will consume.",
7987
9219
  access: "write",
7988
9220
  tier: "core",
7989
9221
  inputSchema: runTriggerInputSchema,