@canonry/canonry 4.146.0 → 4.147.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 (30) hide show
  1. package/assets/assets/{AuditHistoryPanel-IDsSUFI3.js → AuditHistoryPanel-DiQ0Ynw5.js} +1 -1
  2. package/assets/assets/{BacklinksPage-BswN-pyj.js → BacklinksPage-DLUQuPE_.js} +1 -1
  3. package/assets/assets/{ChartPrimitives-CIe-R58_.js → ChartPrimitives-BoEy1qo7.js} +1 -1
  4. package/assets/assets/{HistoryPage-B18Jpq8c.js → HistoryPage-mYR2vk8n.js} +1 -1
  5. package/assets/assets/MeasurementPropertyPage-BocyGHJN.js +1 -0
  6. package/assets/assets/ProjectPage-Q5wQ7nSW.js +12 -0
  7. package/assets/assets/{RunRow-3ZwTR4Bv.js → RunRow-Ct-A6H9e.js} +1 -1
  8. package/assets/assets/{RunsPage-BCAJulR1.js → RunsPage-CsDtq0Qw.js} +1 -1
  9. package/assets/assets/{SettingsPage-BT2_l0Do.js → SettingsPage-BXwFGc1P.js} +1 -1
  10. package/assets/assets/{TrafficPage-Cux8rj5G.js → TrafficPage-B2omyoI8.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-DI1Ad8KS.js → TrafficSourceDetailPage-CoEqc6OJ.js} +1 -1
  12. package/assets/assets/{arrow-left-BMSx9HQB.js → arrow-left-Dh0vsQxe.js} +1 -1
  13. package/assets/assets/extract-error-message-DvWJ0xRn.js +1 -0
  14. package/assets/assets/{index-C6E5hp28.css → index-CXe6S1ey.css} +1 -1
  15. package/assets/assets/index-FE8JPHmT.js +213 -0
  16. package/assets/assets/{trash-2-CyoJtRAr.js → trash-2-D1_8ZseY.js} +1 -1
  17. package/assets/index.html +2 -2
  18. package/dist/{chunk-UQOTEIA6.js → chunk-4BL24FQA.js} +378 -3
  19. package/dist/{chunk-B5H55ZMA.js → chunk-BVOU4UJM.js} +3687 -3025
  20. package/dist/{chunk-ED7C5TWT.js → chunk-DRDNHYIF.js} +3757 -1424
  21. package/dist/{chunk-Z7B6BRPP.js → chunk-ZDYS24LW.js} +4 -4
  22. package/dist/cli.js +223 -15
  23. package/dist/index.js +4 -4
  24. package/dist/{intelligence-service-M5UNHF7X.js → intelligence-service-7CGZ537D.js} +2 -2
  25. package/dist/mcp.js +5 -5
  26. package/package.json +8 -7
  27. package/assets/assets/MeasurementPropertyPage-CvmQeoo7.js +0 -1
  28. package/assets/assets/ProjectPage-BE1MUAB5.js +0 -11
  29. package/assets/assets/extract-error-message-B-9FdQh8.js +0 -1
  30. package/assets/assets/index-kOXUzdqD.js +0 -213
@@ -1 +1 @@
1
- import{c as a}from"./index-kOXUzdqD.js";const t=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],h=a("circle-question-mark",t);const e=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],d=a("download",e);const o=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],p=a("external-link",o);const c=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],s=a("trash-2",c);export{h as C,d as D,p as E,s as T};
1
+ import{c as a}from"./index-FE8JPHmT.js";const t=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],h=a("circle-question-mark",t);const e=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],d=a("download",e);const o=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],p=a("external-link",o);const c=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],s=a("trash-2",c);export{h as C,d as D,p as E,s as T};
package/assets/index.html CHANGED
@@ -12,12 +12,12 @@
12
12
  <link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
13
13
  <link rel="apple-touch-icon" href="./apple-touch-icon.png" />
14
14
  <title>Canonry</title>
15
- <script type="module" crossorigin src="./assets/index-kOXUzdqD.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-FE8JPHmT.js"></script>
16
16
  <link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-BjS7iY3g.js">
17
17
  <link rel="modulepreload" crossorigin href="./assets/vendor-radix-DnzzbllM.js">
18
18
  <link rel="modulepreload" crossorigin href="./assets/vendor-recharts-33ACLxsD.js">
19
19
  <link rel="modulepreload" crossorigin href="./assets/vendor-markdown-CpDJch4G.js">
20
- <link rel="stylesheet" crossorigin href="./assets/index-C6E5hp28.css">
20
+ <link rel="stylesheet" crossorigin href="./assets/index-CXe6S1ey.css">
21
21
  </head>
22
22
  <body>
23
23
  <div id="root"></div>
@@ -26,8 +26,11 @@ import {
26
26
  gscPerformanceOrderBySchema,
27
27
  keywordBatchRequestSchema,
28
28
  keywordGenerateRequestSchema,
29
+ measurementChangesQuerySchema,
30
+ measurementDataQualityQuerySchema,
29
31
  measurementDiscoveryRequestSchema,
30
32
  measurementDraftApplyAssignmentsRequestSchema,
33
+ measurementDraftApplyGroupMembershipRequestSchema,
31
34
  measurementDraftApplyPairedAssignmentsRequestSchema,
32
35
  measurementDraftApplySitemapSelectionRequestSchema,
33
36
  measurementDraftClassifyAssignmentsRequestSchema,
@@ -37,12 +40,15 @@ import {
37
40
  measurementDraftExcludeTargetRequestSchema,
38
41
  measurementDraftImportSitemapRequestSchema,
39
42
  measurementDraftMergeTargetsRequestSchema,
43
+ measurementDraftPreviewAssignmentsRequestSchema,
44
+ measurementDraftPreviewGroupMembershipRequestSchema,
40
45
  measurementDraftPublishRequestSchema,
41
46
  measurementDraftRebindTargetRequestSchema,
42
47
  measurementDraftRemoveAssignmentRequestSchema,
43
48
  measurementDraftRemoveCompetitorRequestSchema,
44
49
  measurementDraftRemoveGroupRequestSchema,
45
50
  measurementDraftRenameTargetRequestSchema,
51
+ measurementDraftReplaceAssignmentsRequestSchema,
46
52
  measurementDraftUpsertCompetitorRequestSchema,
47
53
  measurementDraftUpsertGroupRequestSchema,
48
54
  measurementDraftUpsertTargetRequestSchema,
@@ -50,10 +56,14 @@ import {
50
56
  measurementPlanAuthoringSchema,
51
57
  measurementPlanDeactivateRequestSchema,
52
58
  measurementPlanPublishRequestSchema,
59
+ measurementPortfolioSummaryQuerySchema,
60
+ measurementPropertyCompetitorsQuerySchema,
53
61
  measurementPropertyEvidenceQuerySchema,
62
+ measurementPropertyQuestionsQuerySchema,
54
63
  measurementQuerySetUpsertRequestSchema,
55
64
  measurementQueryTemplateApplyRequestSchema,
56
65
  measurementQueryTemplateUpsertRequestSchema,
66
+ measurementQuestionResultQuerySchema,
57
67
  notificationCreateRequestSchema,
58
68
  notificationEventSchema,
59
69
  organicEvidencePeriodSchema,
@@ -71,7 +81,7 @@ import {
71
81
  trafficConnectWordpressRequestSchema,
72
82
  trafficEventKindSchema,
73
83
  trafficSeriesGranularitySchema
74
- } from "./chunk-B5H55ZMA.js";
84
+ } from "./chunk-BVOU4UJM.js";
75
85
 
76
86
  // src/config.ts
77
87
  import fs from "fs";
@@ -298,6 +308,15 @@ function isEndpointMissing(err) {
298
308
  const status = err.details?.httpStatus;
299
309
  return status === 404 || status === 405;
300
310
  }
311
+ function systemError(message, options) {
312
+ return new CliError({
313
+ code: "CLI_SYSTEM_ERROR",
314
+ message,
315
+ displayMessage: options?.displayMessage,
316
+ details: options?.details,
317
+ exitCode: EXIT_SYSTEM_ERROR
318
+ });
319
+ }
301
320
  function printCliError(err, format) {
302
321
  if (isMachineFormat(format)) {
303
322
  const envelope = err instanceof CliError ? { error: { code: err.code, message: err.message, ...err.details ? { details: err.details } : {} } } : { error: { code: "CLI_ERROR", message: err instanceof Error ? err.message : "An unexpected error occurred" } };
@@ -1500,6 +1519,38 @@ var postApiV1ProjectsByNameMeasurementPlanDraftActionsApplyAssignments = (option
1500
1519
  }
1501
1520
  });
1502
1521
  };
1522
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsPreviewAssignments = (options) => {
1523
+ return (options.client ?? client).post({
1524
+ security: [
1525
+ {
1526
+ scheme: "bearer",
1527
+ type: "http"
1528
+ }
1529
+ ],
1530
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/preview-assignments",
1531
+ ...options,
1532
+ headers: {
1533
+ "Content-Type": "application/json",
1534
+ ...options.headers
1535
+ }
1536
+ });
1537
+ };
1538
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsReplaceAssignments = (options) => {
1539
+ return (options.client ?? client).post({
1540
+ security: [
1541
+ {
1542
+ scheme: "bearer",
1543
+ type: "http"
1544
+ }
1545
+ ],
1546
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/replace-assignments",
1547
+ ...options,
1548
+ headers: {
1549
+ "Content-Type": "application/json",
1550
+ ...options.headers
1551
+ }
1552
+ });
1553
+ };
1503
1554
  var postApiV1ProjectsByNameMeasurementPlanDraftActionsApplyPairedAssignments = (options) => {
1504
1555
  return (options.client ?? client).post({
1505
1556
  security: [
@@ -1596,6 +1647,38 @@ var postApiV1ProjectsByNameMeasurementPlanDraftActionsRemoveGroup = (options) =>
1596
1647
  }
1597
1648
  });
1598
1649
  };
1650
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsPreviewGroupMembership = (options) => {
1651
+ return (options.client ?? client).post({
1652
+ security: [
1653
+ {
1654
+ scheme: "bearer",
1655
+ type: "http"
1656
+ }
1657
+ ],
1658
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/preview-group-membership",
1659
+ ...options,
1660
+ headers: {
1661
+ "Content-Type": "application/json",
1662
+ ...options.headers
1663
+ }
1664
+ });
1665
+ };
1666
+ var postApiV1ProjectsByNameMeasurementPlanDraftActionsApplyGroupMembership = (options) => {
1667
+ return (options.client ?? client).post({
1668
+ security: [
1669
+ {
1670
+ scheme: "bearer",
1671
+ type: "http"
1672
+ }
1673
+ ],
1674
+ url: "/api/v1/projects/{name}/measurement-plan/draft/actions/apply-group-membership",
1675
+ ...options,
1676
+ headers: {
1677
+ "Content-Type": "application/json",
1678
+ ...options.headers
1679
+ }
1680
+ });
1681
+ };
1599
1682
  var postApiV1ProjectsByNameMeasurementPlanDraftActionsUpsertCompetitor = (options) => {
1600
1683
  return (options.client ?? client).post({
1601
1684
  security: [
@@ -1720,6 +1803,78 @@ var getApiV1ProjectsByNameMeasurementPropertyEvidence = (options) => {
1720
1803
  ...options
1721
1804
  });
1722
1805
  };
1806
+ var getApiV1ProjectsByNameMeasurementPortfolioSummary = (options) => {
1807
+ return (options.client ?? client).get({
1808
+ security: [
1809
+ {
1810
+ scheme: "bearer",
1811
+ type: "http"
1812
+ }
1813
+ ],
1814
+ url: "/api/v1/projects/{name}/measurement-portfolio-summary",
1815
+ ...options
1816
+ });
1817
+ };
1818
+ var getApiV1ProjectsByNameMeasurementPropertyQuestions = (options) => {
1819
+ return (options.client ?? client).get({
1820
+ security: [
1821
+ {
1822
+ scheme: "bearer",
1823
+ type: "http"
1824
+ }
1825
+ ],
1826
+ url: "/api/v1/projects/{name}/measurement-property-questions",
1827
+ ...options
1828
+ });
1829
+ };
1830
+ var getApiV1ProjectsByNameMeasurementQuestionResult = (options) => {
1831
+ return (options.client ?? client).get({
1832
+ security: [
1833
+ {
1834
+ scheme: "bearer",
1835
+ type: "http"
1836
+ }
1837
+ ],
1838
+ url: "/api/v1/projects/{name}/measurement-question-result",
1839
+ ...options
1840
+ });
1841
+ };
1842
+ var getApiV1ProjectsByNameMeasurementPropertyCompetitors = (options) => {
1843
+ return (options.client ?? client).get({
1844
+ security: [
1845
+ {
1846
+ scheme: "bearer",
1847
+ type: "http"
1848
+ }
1849
+ ],
1850
+ url: "/api/v1/projects/{name}/measurement-property-competitors",
1851
+ ...options
1852
+ });
1853
+ };
1854
+ var getApiV1ProjectsByNameMeasurementChanges = (options) => {
1855
+ return (options.client ?? client).get({
1856
+ security: [
1857
+ {
1858
+ scheme: "bearer",
1859
+ type: "http"
1860
+ }
1861
+ ],
1862
+ url: "/api/v1/projects/{name}/measurement-changes",
1863
+ ...options
1864
+ });
1865
+ };
1866
+ var getApiV1ProjectsByNameMeasurementDataQuality = (options) => {
1867
+ return (options.client ?? client).get({
1868
+ security: [
1869
+ {
1870
+ scheme: "bearer",
1871
+ type: "http"
1872
+ }
1873
+ ],
1874
+ url: "/api/v1/projects/{name}/measurement-data-quality",
1875
+ ...options
1876
+ });
1877
+ };
1723
1878
  var getApiV1ProjectsByNameMeasurementQuerySets = (options) => {
1724
1879
  return (options.client ?? client).get({
1725
1880
  security: [
@@ -5383,6 +5538,60 @@ var ApiClient = class {
5383
5538
  })
5384
5539
  );
5385
5540
  }
5541
+ async getMeasurementPortfolioSummary(project, query) {
5542
+ return this.invoke(
5543
+ () => getApiV1ProjectsByNameMeasurementPortfolioSummary({
5544
+ client: this.heyClient,
5545
+ path: { name: project },
5546
+ query
5547
+ })
5548
+ );
5549
+ }
5550
+ async getMeasurementPropertyQuestions(project, query) {
5551
+ return this.invoke(
5552
+ () => getApiV1ProjectsByNameMeasurementPropertyQuestions({
5553
+ client: this.heyClient,
5554
+ path: { name: project },
5555
+ query
5556
+ })
5557
+ );
5558
+ }
5559
+ async getMeasurementQuestionResult(project, query) {
5560
+ return this.invoke(
5561
+ () => getApiV1ProjectsByNameMeasurementQuestionResult({
5562
+ client: this.heyClient,
5563
+ path: { name: project },
5564
+ query
5565
+ })
5566
+ );
5567
+ }
5568
+ async getMeasurementPropertyCompetitors(project, query) {
5569
+ return this.invoke(
5570
+ () => getApiV1ProjectsByNameMeasurementPropertyCompetitors({
5571
+ client: this.heyClient,
5572
+ path: { name: project },
5573
+ query
5574
+ })
5575
+ );
5576
+ }
5577
+ async getMeasurementChanges(project, query) {
5578
+ return this.invoke(
5579
+ () => getApiV1ProjectsByNameMeasurementChanges({
5580
+ client: this.heyClient,
5581
+ path: { name: project },
5582
+ query
5583
+ })
5584
+ );
5585
+ }
5586
+ async getMeasurementDataQuality(project, query) {
5587
+ return this.invoke(
5588
+ () => getApiV1ProjectsByNameMeasurementDataQuality({
5589
+ client: this.heyClient,
5590
+ path: { name: project },
5591
+ query
5592
+ })
5593
+ );
5594
+ }
5386
5595
  async getMeasurementPlanDraft(project) {
5387
5596
  return this.invoke(
5388
5597
  () => getApiV1ProjectsByNameMeasurementPlanDraft({ client: this.heyClient, path: { name: project } })
@@ -5506,6 +5715,25 @@ var ApiClient = class {
5506
5715
  })
5507
5716
  );
5508
5717
  }
5718
+ async previewMeasurementDraftAssignments(project, request) {
5719
+ return this.invoke(
5720
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsPreviewAssignments({
5721
+ client: this.heyClient,
5722
+ path: { name: project },
5723
+ body: request
5724
+ })
5725
+ );
5726
+ }
5727
+ async replaceMeasurementDraftAssignments(project, request, idempotencyKey, etag) {
5728
+ return this.invoke(
5729
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsReplaceAssignments({
5730
+ client: this.heyClient,
5731
+ path: { name: project },
5732
+ body: request,
5733
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5734
+ })
5735
+ );
5736
+ }
5509
5737
  async applyPairedMeasurementDraftAssignments(project, request, idempotencyKey, etag) {
5510
5738
  return this.invoke(
5511
5739
  () => postApiV1ProjectsByNameMeasurementPlanDraftActionsApplyPairedAssignments({
@@ -5566,6 +5794,25 @@ var ApiClient = class {
5566
5794
  })
5567
5795
  );
5568
5796
  }
5797
+ async previewMeasurementDraftGroupMembership(project, request) {
5798
+ return this.invoke(
5799
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsPreviewGroupMembership({
5800
+ client: this.heyClient,
5801
+ path: { name: project },
5802
+ body: request
5803
+ })
5804
+ );
5805
+ }
5806
+ async applyMeasurementDraftGroupMembership(project, request, idempotencyKey, etag) {
5807
+ return this.invoke(
5808
+ () => postApiV1ProjectsByNameMeasurementPlanDraftActionsApplyGroupMembership({
5809
+ client: this.heyClient,
5810
+ path: { name: project },
5811
+ body: request,
5812
+ headers: this.measurementDraftMutationHeaders(idempotencyKey, etag)
5813
+ })
5814
+ );
5815
+ }
5569
5816
  async upsertMeasurementDraftCompetitor(project, request, idempotencyKey, etag) {
5570
5817
  return this.invoke(
5571
5818
  () => postApiV1ProjectsByNameMeasurementPlanDraftActionsUpsertCompetitor({
@@ -7300,7 +7547,28 @@ var measurementOverviewInputSchema = z2.object({
7300
7547
  });
7301
7548
  var measurementPropertyEvidenceInputSchema = measurementPropertyEvidenceQuerySchema.extend({
7302
7549
  project: projectNameSchema,
7303
- targetKey: measurementPropertyEvidenceQuerySchema.shape.targetKey.describe("Property stable key. Required \u2014 this read is scoped to exactly one Property.")
7550
+ targetKey: measurementPropertyEvidenceQuerySchema.shape.targetKey.describe("Property stable key. Required \u2014 this read is scoped to exactly one Property."),
7551
+ shape: measurementPropertyEvidenceQuerySchema.shape.shape.describe(
7552
+ "What one row is. Omit for sources (one row per cited URL). answers gives one row per measured answer with its cited URLs nested, including the answers that cited nothing."
7553
+ )
7554
+ }).strict();
7555
+ var measurementPortfolioSummaryInputSchema = measurementPortfolioSummaryQuerySchema.extend({
7556
+ project: projectNameSchema
7557
+ }).strict();
7558
+ var measurementPropertyQuestionsInputSchema = measurementPropertyQuestionsQuerySchema.extend({
7559
+ project: projectNameSchema
7560
+ }).strict();
7561
+ var measurementQuestionResultInputSchema = measurementQuestionResultQuerySchema.extend({
7562
+ project: projectNameSchema
7563
+ }).strict();
7564
+ var measurementPropertyCompetitorsInputSchema = measurementPropertyCompetitorsQuerySchema.extend({
7565
+ project: projectNameSchema
7566
+ }).strict();
7567
+ var measurementChangesInputSchema = measurementChangesQuerySchema.extend({
7568
+ project: projectNameSchema
7569
+ }).strict();
7570
+ var measurementDataQualityInputSchema = measurementDataQualityQuerySchema.extend({
7571
+ project: projectNameSchema
7304
7572
  }).strict();
7305
7573
  var measurementDraftCollectionInputSchema = measurementDraftCollectionQuerySchema.extend({ project: projectNameSchema });
7306
7574
  var measurementQuerySetInputSchema = z2.object({
@@ -7347,12 +7615,22 @@ var measurementDraftOperationSchema = z2.discriminatedUnion("action", [
7347
7615
  measurementDraftMutationOperationSchema("exclude-target", measurementDraftExcludeTargetRequestSchema),
7348
7616
  measurementDraftMutationOperationSchema("rebind-target", measurementDraftRebindTargetRequestSchema),
7349
7617
  measurementDraftMutationOperationSchema("apply-assignments", measurementDraftApplyAssignmentsRequestSchema),
7618
+ z2.object({
7619
+ action: z2.literal("preview-assignments"),
7620
+ request: measurementDraftPreviewAssignmentsRequestSchema
7621
+ }).strict().describe("Read-semantic assignment impact preview."),
7622
+ measurementDraftMutationOperationSchema("replace-assignments", measurementDraftReplaceAssignmentsRequestSchema),
7350
7623
  measurementDraftMutationOperationSchema("apply-paired-assignments", measurementDraftApplyPairedAssignmentsRequestSchema),
7351
7624
  measurementDraftMutationOperationSchema("remove-assignment", measurementDraftRemoveAssignmentRequestSchema),
7352
7625
  measurementDraftMutationOperationSchema("clear-assignments", measurementDraftClearAssignmentsRequestSchema),
7353
7626
  measurementDraftMutationOperationSchema("classify-assignments", measurementDraftClassifyAssignmentsRequestSchema),
7354
7627
  measurementDraftMutationOperationSchema("upsert-group", measurementDraftUpsertGroupRequestSchema),
7355
7628
  measurementDraftMutationOperationSchema("remove-group", measurementDraftRemoveGroupRequestSchema),
7629
+ z2.object({
7630
+ action: z2.literal("preview-group-membership"),
7631
+ request: measurementDraftPreviewGroupMembershipRequestSchema
7632
+ }).strict().describe("Read-semantic CSV group-membership preview."),
7633
+ measurementDraftMutationOperationSchema("apply-group-membership", measurementDraftApplyGroupMembershipRequestSchema),
7356
7634
  measurementDraftMutationOperationSchema("upsert-competitor", measurementDraftUpsertCompetitorRequestSchema),
7357
7635
  measurementDraftMutationOperationSchema("remove-competitor", measurementDraftRemoveCompetitorRequestSchema),
7358
7636
  z2.object({ action: z2.literal("compile-preview") }).strict().describe("Operation for compile-preview."),
@@ -7378,12 +7656,16 @@ var measurementDraftActionOpenApiOperations = [
7378
7656
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/exclude-target",
7379
7657
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/rebind-target",
7380
7658
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/apply-assignments",
7659
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/preview-assignments",
7660
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/replace-assignments",
7381
7661
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/apply-paired-assignments",
7382
7662
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/remove-assignment",
7383
7663
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/clear-assignments",
7384
7664
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/classify-assignments",
7385
7665
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/upsert-group",
7386
7666
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/remove-group",
7667
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/preview-group-membership",
7668
+ "POST /api/v1/projects/{name}/measurement-plan/draft/actions/apply-group-membership",
7387
7669
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/upsert-competitor",
7388
7670
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/remove-competitor",
7389
7671
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/compile-preview",
@@ -7412,6 +7694,10 @@ function runMeasurementDraftAction(client2, input) {
7412
7694
  return client2.rebindMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7413
7695
  case "apply-assignments":
7414
7696
  return client2.applyMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7697
+ case "preview-assignments":
7698
+ return client2.previewMeasurementDraftAssignments(project, actionInput.request);
7699
+ case "replace-assignments":
7700
+ return client2.replaceMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7415
7701
  case "apply-paired-assignments":
7416
7702
  return client2.applyPairedMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7417
7703
  case "remove-assignment":
@@ -7424,6 +7710,10 @@ function runMeasurementDraftAction(client2, input) {
7424
7710
  return client2.upsertMeasurementDraftGroup(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7425
7711
  case "remove-group":
7426
7712
  return client2.removeMeasurementDraftGroup(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7713
+ case "preview-group-membership":
7714
+ return client2.previewMeasurementDraftGroupMembership(project, actionInput.request);
7715
+ case "apply-group-membership":
7716
+ return client2.applyMeasurementDraftGroupMembership(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7427
7717
  case "upsert-competitor":
7428
7718
  return client2.upsertMeasurementDraftCompetitor(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7429
7719
  case "remove-competitor":
@@ -9122,7 +9412,7 @@ var canonryMcpTools = [
9122
9412
  defineTool({
9123
9413
  name: "canonry_measurement_property_evidence",
9124
9414
  title: "Page one Property's measurement evidence",
9125
- description: "Return the stored source-evidence rows for exactly one Property out of one revision-pinned run, optionally narrowed to a question class, provider, or location. Prefer this over canonry_measurement_report when you want one Property: the report reconstructs every group and every Target for a revision and does not paginate. Run selection matches canonry_measurement_overview \u2014 the most recent completed run pinned to the active revision unless runId names another, and a run pinned to a different revision is refused rather than joined. The cursor pins the active revision, displayed run, evidence snapshot, and filters; reuse it unchanged. Not available for a schema v1 revision, which records no question class to scope by. It never starts provider work; page size is at most 100. An empty page under measurement.state = not_measured means the Property has not been measured at all, which is NOT a measured result of zero.",
9415
+ description: "Return the stored evidence rows for exactly one Property out of one revision-pinned run, optionally narrowed to a question class, provider, or location. shape chooses what a row is: sources (the default) returns one row per cited URL under evidence; answers returns one row per measured answer under answers, with the cited URLs nested inside and both signals on the row (mentioned, cited). Use shape=answers to explain a GAP \u2014 an answer that mentioned the Property without linking it, or that named nobody at all, has no URL to hang a source row on and does not appear in the default shape, so counting source rows understates what was measured. mentioned is null, never false, when the answer text was never captured: that is a missing signal, not a measured no. Exactly one of evidence or answers is returned and the other is absent rather than empty. A cursor is bound to the shape that issued it and is refused on the other. Prefer this over canonry_measurement_report when you want one Property: the report reconstructs every group and every Target for a revision and does not paginate. Run selection matches canonry_measurement_overview \u2014 the most recent completed run pinned to the active revision unless runId names another, and a run pinned to a different revision is refused rather than joined. The cursor also pins the active revision, displayed run, evidence snapshot, and filters; reuse it unchanged. Not available for a schema v1 revision, which records no question class to scope by. It never starts provider work; page size is at most 100. An empty page under measurement.state = not_measured means the Property has not been measured at all, which is NOT a measured result of zero.",
9126
9416
  access: "read",
9127
9417
  tier: "setup",
9128
9418
  inputSchema: measurementPropertyEvidenceInputSchema,
@@ -9133,6 +9423,90 @@ var canonryMcpTools = [
9133
9423
  return client2.getMeasurementPropertyEvidence(project, query);
9134
9424
  }
9135
9425
  }),
9426
+ defineTool({
9427
+ name: "canonry_measurement_portfolio_summary",
9428
+ title: "Summarize measured Properties",
9429
+ description: "Start here to rank the weakest measured Properties and their stored replacement names. Reads stored data only; it never starts provider work.",
9430
+ access: "read",
9431
+ tier: "monitoring",
9432
+ inputSchema: measurementPortfolioSummaryInputSchema,
9433
+ annotations: readAnnotations(),
9434
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-portfolio-summary"],
9435
+ handler: (client2, input) => {
9436
+ const { project, ...query } = input;
9437
+ return client2.getMeasurementPortfolioSummary(project, query);
9438
+ }
9439
+ }),
9440
+ defineTool({
9441
+ name: "canonry_measurement_property_questions",
9442
+ title: "List a Property\u2019s stored questions",
9443
+ description: "After identifying a Property, list its stored question outcomes and use a returned resultId with canonry_measurement_question_result. Reads stored data only; it never starts provider work.",
9444
+ access: "read",
9445
+ tier: "monitoring",
9446
+ inputSchema: measurementPropertyQuestionsInputSchema,
9447
+ annotations: readAnnotations(),
9448
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-property-questions"],
9449
+ handler: (client2, input) => {
9450
+ const { project, ...query } = input;
9451
+ return client2.getMeasurementPropertyQuestions(project, query);
9452
+ }
9453
+ }),
9454
+ defineTool({
9455
+ name: "canonry_measurement_question_result",
9456
+ title: "Get a stored question result",
9457
+ description: "After listing a Property\u2019s questions, expand one returned resultId into its stored answer and attribution sources. Reads stored data only; it never starts provider work.",
9458
+ access: "read",
9459
+ tier: "monitoring",
9460
+ inputSchema: measurementQuestionResultInputSchema,
9461
+ annotations: readAnnotations(),
9462
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-question-result"],
9463
+ handler: (client2, input) => {
9464
+ const { project, ...query } = input;
9465
+ return client2.getMeasurementQuestionResult(project, query);
9466
+ }
9467
+ }),
9468
+ defineTool({
9469
+ name: "canonry_measurement_property_competitors",
9470
+ title: "List a Property\u2019s stored replacements",
9471
+ description: "After reviewing a Property\u2019s question outcomes, find repeated stored replacement names for its misses. Reads stored data only; it never starts provider work.",
9472
+ access: "read",
9473
+ tier: "monitoring",
9474
+ inputSchema: measurementPropertyCompetitorsInputSchema,
9475
+ annotations: readAnnotations(),
9476
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-property-competitors"],
9477
+ handler: (client2, input) => {
9478
+ const { project, ...query } = input;
9479
+ return client2.getMeasurementPropertyCompetitors(project, query);
9480
+ }
9481
+ }),
9482
+ defineTool({
9483
+ name: "canonry_measurement_changes",
9484
+ title: "Compare stored measurement changes",
9485
+ description: "After reviewing the current summary, compare stored runs only when their execution identity is compatible. Reads stored data only; it never starts provider work.",
9486
+ access: "read",
9487
+ tier: "monitoring",
9488
+ inputSchema: measurementChangesInputSchema,
9489
+ annotations: readAnnotations(),
9490
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-changes"],
9491
+ handler: (client2, input) => {
9492
+ const { project, ...query } = input;
9493
+ return client2.getMeasurementChanges(project, query);
9494
+ }
9495
+ }),
9496
+ defineTool({
9497
+ name: "canonry_measurement_data_quality",
9498
+ title: "Inspect stored measurement data quality",
9499
+ description: "Before acting on a measurement, inspect its stored completeness, capture, retrieval, and comparability context. Reads stored data only; it never starts provider work.",
9500
+ access: "read",
9501
+ tier: "monitoring",
9502
+ inputSchema: measurementDataQualityInputSchema,
9503
+ annotations: readAnnotations(),
9504
+ openApiOperations: ["GET /api/v1/projects/{name}/measurement-data-quality"],
9505
+ handler: (client2, input) => {
9506
+ const { project, ...query } = input;
9507
+ return client2.getMeasurementDataQuality(project, query);
9508
+ }
9509
+ }),
9136
9510
  defineTool({
9137
9511
  name: "canonry_measurement_draft_get",
9138
9512
  title: "Get Advanced Measurement draft",
@@ -10011,6 +10385,7 @@ export {
10011
10385
  CliError,
10012
10386
  usageError,
10013
10387
  isEndpointMissing,
10388
+ systemError,
10014
10389
  printCliError,
10015
10390
  createApiClient,
10016
10391
  ApiClient,