@canonry/canonry 4.147.0 → 4.148.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/agent-workspace/skills/canonry/references/canonry-cli.md +2 -2
  2. package/assets/assets/{AuditHistoryPanel-DiQ0Ynw5.js → AuditHistoryPanel-D5fRv5sF.js} +1 -1
  3. package/assets/assets/{BacklinksPage-DLUQuPE_.js → BacklinksPage-CFdO1s1V.js} +1 -1
  4. package/assets/assets/{ChartPrimitives-BoEy1qo7.js → ChartPrimitives-BoB1RfNf.js} +1 -1
  5. package/assets/assets/{HistoryPage-mYR2vk8n.js → HistoryPage-YT2JCo2G.js} +1 -1
  6. package/assets/assets/{MeasurementPropertyPage-BocyGHJN.js → MeasurementPropertyPage-JDEzHX1H.js} +1 -1
  7. package/assets/assets/ProjectPage-B6t_j9tN.js +12 -0
  8. package/assets/assets/{RunRow-Ct-A6H9e.js → RunRow-yKrIU8zY.js} +1 -1
  9. package/assets/assets/{RunsPage-CsDtq0Qw.js → RunsPage-DAeC6Ebm.js} +1 -1
  10. package/assets/assets/{SettingsPage-BXwFGc1P.js → SettingsPage-8Z251PH0.js} +1 -1
  11. package/assets/assets/{TrafficPage-B2omyoI8.js → TrafficPage-DNJGp16_.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-CoEqc6OJ.js → TrafficSourceDetailPage-BuzdNFB8.js} +1 -1
  13. package/assets/assets/{arrow-left-Dh0vsQxe.js → arrow-left-BrVL2J2e.js} +1 -1
  14. package/assets/assets/{extract-error-message-DvWJ0xRn.js → extract-error-message-jd9FdYvE.js} +1 -1
  15. package/assets/assets/index-Bo0hzrG2.js +213 -0
  16. package/assets/assets/{index-CXe6S1ey.css → index-D5NO3NEG.css} +1 -1
  17. package/assets/assets/{trash-2-D1_8ZseY.js → trash-2-lAIhBm6w.js} +1 -1
  18. package/assets/assets/{v2-overview-adapter-owDeFdUc.js → v2-overview-adapter-BHmxTmCf.js} +1 -1
  19. package/assets/index.html +2 -2
  20. package/dist/{chunk-4BL24FQA.js → chunk-3HYF3LUP.js} +353 -346
  21. package/dist/{chunk-BVOU4UJM.js → chunk-43XIYBG4.js} +8 -0
  22. package/dist/{chunk-ZDYS24LW.js → chunk-MHTZ4THA.js} +7 -4
  23. package/dist/{chunk-DRDNHYIF.js → chunk-VUTKHFTM.js} +77 -22
  24. package/dist/cli.js +209 -7
  25. package/dist/index.js +4 -4
  26. package/dist/{intelligence-service-7CGZ537D.js → intelligence-service-OGOGIQJD.js} +2 -2
  27. package/dist/mcp.js +2 -2
  28. package/package.json +8 -8
  29. package/assets/assets/ProjectPage-Q5wQ7nSW.js +0 -12
  30. package/assets/assets/index-FE8JPHmT.js +0 -213
@@ -81,7 +81,7 @@ import {
81
81
  trafficConnectWordpressRequestSchema,
82
82
  trafficEventKindSchema,
83
83
  trafficSeriesGranularitySchema
84
- } from "./chunk-BVOU4UJM.js";
84
+ } from "./chunk-43XIYBG4.js";
85
85
 
86
86
  // src/config.ts
87
87
  import fs from "fs";
@@ -7440,21 +7440,133 @@ var _require = createRequire(import.meta.url);
7440
7440
  var PACKAGE_VERSION = _require("../package.json").version;
7441
7441
 
7442
7442
  // src/mcp/tool-registry.ts
7443
- import { z as z2 } from "zod";
7443
+ import { z as z3 } from "zod";
7444
7444
 
7445
- // src/mcp/schema.ts
7445
+ // src/measurement-draft-actions.ts
7446
7446
  import { z } from "zod";
7447
- var projectNameSchema = z.string().min(1).describe("Canonry project name.");
7448
- var runIdSchema = z.string().min(1).describe("Canonry run ID.");
7449
- var insightIdSchema = z.string().min(1).describe("Canonry insight ID.");
7450
- var analyticsWindowSchema = z.enum(["7d", "30d", "90d", "all"]).describe("Analytics time window.");
7451
- var emptyInputSchema = z.object({});
7452
- var projectInputSchema = z.object({
7447
+ var idempotencyKeySchema = z.string().trim().min(1).describe(
7448
+ "A fresh request key. Reuse it only when retrying the identical request."
7449
+ );
7450
+ var draftEtagSchema = z.string().trim().min(1).optional().describe(
7451
+ "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."
7452
+ );
7453
+ function mutationOperationSchema(action, request) {
7454
+ return z.object({
7455
+ action: z.literal(action),
7456
+ request,
7457
+ etag: draftEtagSchema,
7458
+ idempotencyKey: idempotencyKeySchema
7459
+ }).strict().describe(`Operation for ${action}.`);
7460
+ }
7461
+ var measurementDraftOperationSchema = z.discriminatedUnion("action", [
7462
+ z.object({
7463
+ action: z.literal("create"),
7464
+ request: measurementDraftCreateRequestSchema,
7465
+ idempotencyKey: idempotencyKeySchema
7466
+ }).strict().describe("Operation for create."),
7467
+ mutationOperationSchema("import-sitemap", measurementDraftImportSitemapRequestSchema),
7468
+ mutationOperationSchema("apply-sitemap-selection", measurementDraftApplySitemapSelectionRequestSchema),
7469
+ mutationOperationSchema("upsert-target", measurementDraftUpsertTargetRequestSchema),
7470
+ mutationOperationSchema("rename-target", measurementDraftRenameTargetRequestSchema),
7471
+ mutationOperationSchema("merge-targets", measurementDraftMergeTargetsRequestSchema),
7472
+ mutationOperationSchema("exclude-target", measurementDraftExcludeTargetRequestSchema),
7473
+ mutationOperationSchema("rebind-target", measurementDraftRebindTargetRequestSchema),
7474
+ mutationOperationSchema("apply-assignments", measurementDraftApplyAssignmentsRequestSchema),
7475
+ z.object({
7476
+ action: z.literal("preview-assignments"),
7477
+ request: measurementDraftPreviewAssignmentsRequestSchema
7478
+ }).strict().describe("Read-semantic assignment impact preview."),
7479
+ mutationOperationSchema("replace-assignments", measurementDraftReplaceAssignmentsRequestSchema),
7480
+ mutationOperationSchema("apply-paired-assignments", measurementDraftApplyPairedAssignmentsRequestSchema),
7481
+ mutationOperationSchema("remove-assignment", measurementDraftRemoveAssignmentRequestSchema),
7482
+ mutationOperationSchema("clear-assignments", measurementDraftClearAssignmentsRequestSchema),
7483
+ mutationOperationSchema("classify-assignments", measurementDraftClassifyAssignmentsRequestSchema),
7484
+ mutationOperationSchema("upsert-group", measurementDraftUpsertGroupRequestSchema),
7485
+ mutationOperationSchema("remove-group", measurementDraftRemoveGroupRequestSchema),
7486
+ z.object({
7487
+ action: z.literal("preview-group-membership"),
7488
+ request: measurementDraftPreviewGroupMembershipRequestSchema
7489
+ }).strict().describe("Read-semantic CSV group-membership preview."),
7490
+ mutationOperationSchema("apply-group-membership", measurementDraftApplyGroupMembershipRequestSchema),
7491
+ mutationOperationSchema("upsert-competitor", measurementDraftUpsertCompetitorRequestSchema),
7492
+ mutationOperationSchema("remove-competitor", measurementDraftRemoveCompetitorRequestSchema),
7493
+ z.object({ action: z.literal("compile-preview") }).strict().describe("Operation for compile-preview."),
7494
+ z.object({ action: z.literal("diff-preview") }).strict().describe("Operation for diff-preview."),
7495
+ mutationOperationSchema("publish", measurementDraftPublishRequestSchema),
7496
+ z.object({
7497
+ action: z.literal("discard"),
7498
+ etag: draftEtagSchema,
7499
+ idempotencyKey: idempotencyKeySchema
7500
+ }).strict().describe("Operation for discard.")
7501
+ ]);
7502
+ function runMeasurementDraftAction(client2, project, actionInput) {
7503
+ switch (actionInput.action) {
7504
+ case "create":
7505
+ return client2.createMeasurementPlanDraft(project, actionInput.request, actionInput.idempotencyKey);
7506
+ case "import-sitemap":
7507
+ return client2.importMeasurementDraftSitemap(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7508
+ case "apply-sitemap-selection":
7509
+ return client2.applyMeasurementDraftSitemapSelection(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7510
+ case "upsert-target":
7511
+ return client2.upsertMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7512
+ case "rename-target":
7513
+ return client2.renameMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7514
+ case "merge-targets":
7515
+ return client2.mergeMeasurementDraftTargets(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7516
+ case "exclude-target":
7517
+ return client2.excludeMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7518
+ case "rebind-target":
7519
+ return client2.rebindMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7520
+ case "apply-assignments":
7521
+ return client2.applyMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7522
+ case "preview-assignments":
7523
+ return client2.previewMeasurementDraftAssignments(project, actionInput.request);
7524
+ case "replace-assignments":
7525
+ return client2.replaceMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7526
+ case "apply-paired-assignments":
7527
+ return client2.applyPairedMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7528
+ case "remove-assignment":
7529
+ return client2.removeMeasurementDraftAssignment(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7530
+ case "clear-assignments":
7531
+ return client2.clearMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7532
+ case "classify-assignments":
7533
+ return client2.classifyMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7534
+ case "upsert-group":
7535
+ return client2.upsertMeasurementDraftGroup(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7536
+ case "remove-group":
7537
+ return client2.removeMeasurementDraftGroup(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7538
+ case "preview-group-membership":
7539
+ return client2.previewMeasurementDraftGroupMembership(project, actionInput.request);
7540
+ case "apply-group-membership":
7541
+ return client2.applyMeasurementDraftGroupMembership(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7542
+ case "upsert-competitor":
7543
+ return client2.upsertMeasurementDraftCompetitor(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7544
+ case "remove-competitor":
7545
+ return client2.removeMeasurementDraftCompetitor(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7546
+ case "compile-preview":
7547
+ return client2.compileMeasurementDraftPreview(project);
7548
+ case "diff-preview":
7549
+ return client2.diffMeasurementDraftPreview(project);
7550
+ case "publish":
7551
+ return client2.publishMeasurementDraft(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7552
+ case "discard":
7553
+ return client2.discardMeasurementDraft(project, actionInput.idempotencyKey, actionInput.etag);
7554
+ }
7555
+ }
7556
+
7557
+ // src/mcp/schema.ts
7558
+ import { z as z2 } from "zod";
7559
+ var projectNameSchema = z2.string().min(1).describe("Canonry project name.");
7560
+ var runIdSchema = z2.string().min(1).describe("Canonry run ID.");
7561
+ var insightIdSchema = z2.string().min(1).describe("Canonry insight ID.");
7562
+ var analyticsWindowSchema = z2.enum(["7d", "30d", "90d", "all"]).describe("Analytics time window.");
7563
+ var emptyInputSchema = z2.object({});
7564
+ var projectInputSchema = z2.object({
7453
7565
  project: projectNameSchema
7454
7566
  });
7455
7567
  function toJsonSchema(schema, name) {
7456
7568
  return {
7457
- ...z.toJSONSchema(schema, { target: "draft-7" }),
7569
+ ...z2.toJSONSchema(schema, { target: "draft-7" }),
7458
7570
  title: name
7459
7571
  };
7460
7572
  }
@@ -7500,23 +7612,20 @@ function defineTool(tool) {
7500
7612
  inputJsonSchema: toJsonSchema(tool.inputSchema, tool.name)
7501
7613
  };
7502
7614
  }
7503
- var runTriggerInputSchema = z2.object({
7615
+ var runTriggerInputSchema = z3.object({
7504
7616
  project: projectNameSchema,
7505
7617
  request: runTriggerRequestSchema.optional()
7506
7618
  });
7507
- var measurementPlanVersionInputSchema = z2.object({ project: projectNameSchema, revision: z2.number().int().positive() });
7619
+ var measurementPlanVersionInputSchema = z3.object({ project: projectNameSchema, revision: z3.number().int().positive() });
7508
7620
  var measurementReportInputSchema = measurementPlanVersionInputSchema.extend({
7509
7621
  runId: runIdSchema.optional().describe("Exact eligible full measurement run to reconstruct. Omit for the latest run in the revision.")
7510
7622
  });
7511
- var measurementPlanPreviewInputSchema = z2.object({ project: projectNameSchema, plan: measurementPlanAuthoringSchema });
7623
+ var measurementPlanPreviewInputSchema = z3.object({ project: projectNameSchema, plan: measurementPlanAuthoringSchema });
7512
7624
  var measurementPlanPublishInputSchema = measurementPlanPublishRequestSchema.extend({ project: projectNameSchema });
7513
- var measurementPlanRetireInputSchema = z2.object({ project: projectNameSchema, stableKey: z2.string().min(1) });
7625
+ var measurementPlanRetireInputSchema = z3.object({ project: projectNameSchema, stableKey: z3.string().min(1) });
7514
7626
  var measurementDiscoveryInputSchema = measurementDiscoveryRequestSchema.extend({ project: projectNameSchema });
7515
- var idempotencyKeyInputSchema = z2.string().trim().min(1).describe("A fresh request key. Reuse it only when retrying the identical request.");
7516
- var measurementDraftEtagInputSchema = z2.string().trim().min(1).optional().describe(
7517
- "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."
7518
- );
7519
- var measurementOverviewInputSchema = z2.object({
7627
+ var idempotencyKeyInputSchema = z3.string().trim().min(1).describe("A fresh request key. Reuse it only when retrying the identical request.");
7628
+ var measurementOverviewInputSchema = z3.object({
7520
7629
  project: projectNameSchema,
7521
7630
  scope: measurementOverviewQuerySchema.shape.scope.describe("Read all Properties, one reporting group, or one Property."),
7522
7631
  groupKey: measurementOverviewQuerySchema.shape.groupKey.describe("Group stable key. Required only for group scope."),
@@ -7571,16 +7680,16 @@ var measurementDataQualityInputSchema = measurementDataQualityQuerySchema.extend
7571
7680
  project: projectNameSchema
7572
7681
  }).strict();
7573
7682
  var measurementDraftCollectionInputSchema = measurementDraftCollectionQuerySchema.extend({ project: projectNameSchema });
7574
- var measurementQuerySetInputSchema = z2.object({
7683
+ var measurementQuerySetInputSchema = z3.object({
7575
7684
  project: projectNameSchema,
7576
- setId: z2.string().trim().min(1)
7685
+ setId: z3.string().trim().min(1)
7577
7686
  }).strict();
7578
7687
  var measurementQuerySetUpsertInputSchema = measurementQuerySetInputSchema.extend({
7579
7688
  request: measurementQuerySetUpsertRequestSchema
7580
7689
  }).strict();
7581
- var measurementQueryTemplateInputSchema = z2.object({
7690
+ var measurementQueryTemplateInputSchema = z3.object({
7582
7691
  project: projectNameSchema,
7583
- templateId: z2.string().trim().min(1)
7692
+ templateId: z3.string().trim().min(1)
7584
7693
  }).strict();
7585
7694
  var measurementQueryTemplateUpsertInputSchema = measurementQueryTemplateInputSchema.extend({
7586
7695
  request: measurementQueryTemplateUpsertRequestSchema
@@ -7593,56 +7702,7 @@ var measurementPlanDeactivateInputSchema = measurementPlanDeactivateRequestSchem
7593
7702
  project: projectNameSchema,
7594
7703
  idempotencyKey: idempotencyKeyInputSchema
7595
7704
  }).strict();
7596
- function measurementDraftMutationOperationSchema(action, request) {
7597
- return z2.object({
7598
- action: z2.literal(action),
7599
- request,
7600
- etag: measurementDraftEtagInputSchema,
7601
- idempotencyKey: idempotencyKeyInputSchema
7602
- }).strict().describe(`Operation for ${action}.`);
7603
- }
7604
- var measurementDraftOperationSchema = z2.discriminatedUnion("action", [
7605
- z2.object({
7606
- action: z2.literal("create"),
7607
- request: measurementDraftCreateRequestSchema,
7608
- idempotencyKey: idempotencyKeyInputSchema
7609
- }).strict().describe("Operation for create."),
7610
- measurementDraftMutationOperationSchema("import-sitemap", measurementDraftImportSitemapRequestSchema),
7611
- measurementDraftMutationOperationSchema("apply-sitemap-selection", measurementDraftApplySitemapSelectionRequestSchema),
7612
- measurementDraftMutationOperationSchema("upsert-target", measurementDraftUpsertTargetRequestSchema),
7613
- measurementDraftMutationOperationSchema("rename-target", measurementDraftRenameTargetRequestSchema),
7614
- measurementDraftMutationOperationSchema("merge-targets", measurementDraftMergeTargetsRequestSchema),
7615
- measurementDraftMutationOperationSchema("exclude-target", measurementDraftExcludeTargetRequestSchema),
7616
- measurementDraftMutationOperationSchema("rebind-target", measurementDraftRebindTargetRequestSchema),
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),
7623
- measurementDraftMutationOperationSchema("apply-paired-assignments", measurementDraftApplyPairedAssignmentsRequestSchema),
7624
- measurementDraftMutationOperationSchema("remove-assignment", measurementDraftRemoveAssignmentRequestSchema),
7625
- measurementDraftMutationOperationSchema("clear-assignments", measurementDraftClearAssignmentsRequestSchema),
7626
- measurementDraftMutationOperationSchema("classify-assignments", measurementDraftClassifyAssignmentsRequestSchema),
7627
- measurementDraftMutationOperationSchema("upsert-group", measurementDraftUpsertGroupRequestSchema),
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),
7634
- measurementDraftMutationOperationSchema("upsert-competitor", measurementDraftUpsertCompetitorRequestSchema),
7635
- measurementDraftMutationOperationSchema("remove-competitor", measurementDraftRemoveCompetitorRequestSchema),
7636
- z2.object({ action: z2.literal("compile-preview") }).strict().describe("Operation for compile-preview."),
7637
- z2.object({ action: z2.literal("diff-preview") }).strict().describe("Operation for diff-preview."),
7638
- measurementDraftMutationOperationSchema("publish", measurementDraftPublishRequestSchema),
7639
- z2.object({
7640
- action: z2.literal("discard"),
7641
- etag: measurementDraftEtagInputSchema,
7642
- idempotencyKey: idempotencyKeyInputSchema
7643
- }).strict().describe("Operation for discard.")
7644
- ]);
7645
- var measurementDraftActionInputSchema = z2.object({
7705
+ var measurementDraftActionInputSchema = z3.object({
7646
7706
  project: projectNameSchema,
7647
7707
  operation: measurementDraftOperationSchema.describe("Typed draft operation. Select exactly one action branch.")
7648
7708
  }).strict();
@@ -7673,152 +7733,97 @@ var measurementDraftActionOpenApiOperations = [
7673
7733
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/publish",
7674
7734
  "POST /api/v1/projects/{name}/measurement-plan/draft/actions/discard"
7675
7735
  ];
7676
- function runMeasurementDraftAction(client2, input) {
7677
- const { project, operation: actionInput } = input;
7678
- switch (actionInput.action) {
7679
- case "create":
7680
- return client2.createMeasurementPlanDraft(project, actionInput.request, actionInput.idempotencyKey);
7681
- case "import-sitemap":
7682
- return client2.importMeasurementDraftSitemap(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7683
- case "apply-sitemap-selection":
7684
- return client2.applyMeasurementDraftSitemapSelection(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7685
- case "upsert-target":
7686
- return client2.upsertMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7687
- case "rename-target":
7688
- return client2.renameMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7689
- case "merge-targets":
7690
- return client2.mergeMeasurementDraftTargets(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7691
- case "exclude-target":
7692
- return client2.excludeMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7693
- case "rebind-target":
7694
- return client2.rebindMeasurementDraftTarget(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7695
- case "apply-assignments":
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);
7701
- case "apply-paired-assignments":
7702
- return client2.applyPairedMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7703
- case "remove-assignment":
7704
- return client2.removeMeasurementDraftAssignment(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7705
- case "clear-assignments":
7706
- return client2.clearMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7707
- case "classify-assignments":
7708
- return client2.classifyMeasurementDraftAssignments(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7709
- case "upsert-group":
7710
- return client2.upsertMeasurementDraftGroup(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7711
- case "remove-group":
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);
7717
- case "upsert-competitor":
7718
- return client2.upsertMeasurementDraftCompetitor(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7719
- case "remove-competitor":
7720
- return client2.removeMeasurementDraftCompetitor(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7721
- case "compile-preview":
7722
- return client2.compileMeasurementDraftPreview(project);
7723
- case "diff-preview":
7724
- return client2.diffMeasurementDraftPreview(project);
7725
- case "publish":
7726
- return client2.publishMeasurementDraft(project, actionInput.request, actionInput.idempotencyKey, actionInput.etag);
7727
- case "discard":
7728
- return client2.discardMeasurementDraft(project, actionInput.idempotencyKey, actionInput.etag);
7729
- }
7730
- }
7731
- var runsListInputSchema = z2.object({
7736
+ var runsListInputSchema = z3.object({
7732
7737
  project: projectNameSchema,
7733
- limit: z2.number().int().positive().max(500).optional()
7738
+ limit: z3.number().int().positive().max(500).optional()
7734
7739
  });
7735
- var runGetInputSchema = z2.object({
7740
+ var runGetInputSchema = z3.object({
7736
7741
  runId: runIdSchema
7737
7742
  });
7738
- var timelineInputSchema = z2.object({
7743
+ var timelineInputSchema = z3.object({
7739
7744
  project: projectNameSchema,
7740
- location: z2.string().optional().describe("Location label. Use an empty string for locationless results."),
7741
- limit: z2.number().int().positive().max(100).optional().describe("Restrict history to the most recent N project runs.")
7745
+ location: z3.string().optional().describe("Location label. Use an empty string for locationless results."),
7746
+ limit: z3.number().int().positive().max(100).optional().describe("Restrict history to the most recent N project runs.")
7742
7747
  });
7743
7748
  var historyFilterShape = {
7744
- limit: z2.number().int().positive().max(500).optional(),
7745
- offset: z2.number().int().nonnegative().optional(),
7746
- since: z2.string().optional().describe("ISO 8601 lower bound."),
7747
- action: z2.string().optional().describe("Exact audit action filter."),
7748
- actor: z2.string().optional().describe("Exact actor filter."),
7749
- entityType: z2.string().optional().describe("Exact entity type filter.")
7750
- };
7751
- var projectHistoryInputSchema = z2.object({ project: projectNameSchema, ...historyFilterShape });
7752
- var globalHistoryInputSchema = z2.object(historyFilterShape);
7753
- var snapshotsListInputSchema = z2.object({
7749
+ limit: z3.number().int().positive().max(500).optional(),
7750
+ offset: z3.number().int().nonnegative().optional(),
7751
+ since: z3.string().optional().describe("ISO 8601 lower bound."),
7752
+ action: z3.string().optional().describe("Exact audit action filter."),
7753
+ actor: z3.string().optional().describe("Exact actor filter."),
7754
+ entityType: z3.string().optional().describe("Exact entity type filter.")
7755
+ };
7756
+ var projectHistoryInputSchema = z3.object({ project: projectNameSchema, ...historyFilterShape });
7757
+ var globalHistoryInputSchema = z3.object(historyFilterShape);
7758
+ var snapshotsListInputSchema = z3.object({
7754
7759
  project: projectNameSchema,
7755
- limit: z2.number().int().positive().max(500).optional(),
7756
- offset: z2.number().int().nonnegative().optional(),
7757
- location: z2.string().optional().describe("Location label. Use an empty string for locationless results.")
7760
+ limit: z3.number().int().positive().max(500).optional(),
7761
+ offset: z3.number().int().nonnegative().optional(),
7762
+ location: z3.string().optional().describe("Location label. Use an empty string for locationless results.")
7758
7763
  });
7759
- var snapshotsDiffInputSchema = z2.object({
7764
+ var snapshotsDiffInputSchema = z3.object({
7760
7765
  project: projectNameSchema,
7761
7766
  run1: runIdSchema,
7762
7767
  run2: runIdSchema
7763
7768
  });
7764
- var insightsListInputSchema = z2.object({
7769
+ var insightsListInputSchema = z3.object({
7765
7770
  project: projectNameSchema,
7766
- dismissed: z2.boolean().optional(),
7771
+ dismissed: z3.boolean().optional(),
7767
7772
  runId: runIdSchema.optional()
7768
7773
  });
7769
- var insightInputSchema = z2.object({
7774
+ var insightInputSchema = z3.object({
7770
7775
  project: projectNameSchema,
7771
7776
  insightId: insightIdSchema
7772
7777
  });
7773
- var healthHistoryInputSchema = z2.object({
7778
+ var healthHistoryInputSchema = z3.object({
7774
7779
  project: projectNameSchema,
7775
- limit: z2.number().int().positive().max(100).optional()
7780
+ limit: z3.number().int().positive().max(100).optional()
7776
7781
  });
7777
- var gscPerformanceInputSchema = z2.object({
7782
+ var gscPerformanceInputSchema = z3.object({
7778
7783
  project: projectNameSchema,
7779
- startDate: z2.string().optional(),
7780
- endDate: z2.string().optional(),
7781
- query: z2.string().optional(),
7782
- page: z2.string().optional(),
7783
- limit: z2.number().int().positive().max(5e3).optional(),
7784
- offset: z2.number().int().nonnegative().optional(),
7784
+ startDate: z3.string().optional(),
7785
+ endDate: z3.string().optional(),
7786
+ query: z3.string().optional(),
7787
+ page: z3.string().optional(),
7788
+ limit: z3.number().int().positive().max(5e3).optional(),
7789
+ offset: z3.number().int().nonnegative().optional(),
7785
7790
  orderBy: gscPerformanceOrderBySchema.optional(),
7786
7791
  window: analyticsWindowSchema.optional()
7787
7792
  });
7788
- var gscPerformanceDailyInputSchema = z2.object({
7793
+ var gscPerformanceDailyInputSchema = z3.object({
7789
7794
  project: projectNameSchema,
7790
- startDate: z2.string().optional(),
7791
- endDate: z2.string().optional(),
7795
+ startDate: z3.string().optional(),
7796
+ endDate: z3.string().optional(),
7792
7797
  window: analyticsWindowSchema.optional()
7793
7798
  });
7794
- var gscTopPagesInputSchema = z2.object({
7799
+ var gscTopPagesInputSchema = z3.object({
7795
7800
  project: projectNameSchema,
7796
- startDate: z2.string().optional(),
7797
- endDate: z2.string().optional(),
7798
- limit: z2.number().int().positive().max(500).optional(),
7801
+ startDate: z3.string().optional(),
7802
+ endDate: z3.string().optional(),
7803
+ limit: z3.number().int().positive().max(500).optional(),
7799
7804
  window: analyticsWindowSchema.optional()
7800
7805
  });
7801
- var gscInspectionsInputSchema = z2.object({
7806
+ var gscInspectionsInputSchema = z3.object({
7802
7807
  project: projectNameSchema,
7803
- url: z2.string().optional(),
7804
- limit: z2.number().int().positive().max(500).optional()
7808
+ url: z3.string().optional(),
7809
+ limit: z3.number().int().positive().max(500).optional()
7805
7810
  });
7806
- var gscCoverageHistoryInputSchema = z2.object({
7811
+ var gscCoverageHistoryInputSchema = z3.object({
7807
7812
  project: projectNameSchema,
7808
- limit: z2.number().int().positive().max(500).optional()
7813
+ limit: z3.number().int().positive().max(500).optional()
7809
7814
  });
7810
- var gscSitemapsInputSchema = z2.object({
7815
+ var gscSitemapsInputSchema = z3.object({
7811
7816
  project: projectNameSchema,
7812
- sitemapIndex: z2.string().url().optional()
7817
+ sitemapIndex: z3.string().url().optional()
7813
7818
  });
7814
- var gscSitemapsSubmitInputSchema = z2.union([
7815
- z2.object({
7819
+ var gscSitemapsSubmitInputSchema = z3.union([
7820
+ z3.object({
7816
7821
  project: projectNameSchema,
7817
- sitemapUrls: z2.array(z2.string().url()).min(1).max(50)
7822
+ sitemapUrls: z3.array(z3.string().url()).min(1).max(50)
7818
7823
  }).strict(),
7819
- z2.object({
7824
+ z3.object({
7820
7825
  project: projectNameSchema,
7821
- mode: z2.enum(["indexes", "all-files"])
7826
+ mode: z3.enum(["indexes", "all-files"])
7822
7827
  }).strict()
7823
7828
  ]);
7824
7829
  async function submitGscSitemapsFromMcp(client2, input) {
@@ -7893,82 +7898,82 @@ async function submitGscSitemapsFromMcp(client2, input) {
7893
7898
  }
7894
7899
  return aggregate;
7895
7900
  }
7896
- var gaWindowInputSchema = z2.object({
7901
+ var gaWindowInputSchema = z3.object({
7897
7902
  project: projectNameSchema,
7898
7903
  window: analyticsWindowSchema.optional(),
7899
- startDate: z2.string().optional(),
7900
- endDate: z2.string().optional()
7904
+ startDate: z3.string().optional(),
7905
+ endDate: z3.string().optional()
7901
7906
  });
7902
7907
  var GA_RANGE_PARAMS = ["window", "startDate", "endDate"];
7903
7908
  var gaTrafficInputSchema = gaWindowInputSchema.extend({
7904
- limit: z2.number().int().positive().max(500).optional()
7909
+ limit: z3.number().int().positive().max(500).optional()
7905
7910
  });
7906
- var gaMeasurementAnalysisInputSchema = z2.object({
7911
+ var gaMeasurementAnalysisInputSchema = z3.object({
7907
7912
  project: projectNameSchema,
7908
7913
  window: gaMeasurementAnalysisWindowSchema.optional(),
7909
7914
  hostScope: gaMeasurementHostScopeSchema.optional(),
7910
- pathPrefix: z2.string().min(1).optional(),
7911
- limit: z2.number().int().positive().max(100).optional()
7915
+ pathPrefix: z3.string().min(1).optional(),
7916
+ limit: z3.number().int().positive().max(100).optional()
7912
7917
  });
7913
- var queriesInputSchema = z2.object({
7918
+ var queriesInputSchema = z3.object({
7914
7919
  project: projectNameSchema,
7915
7920
  request: queryBatchRequestSchema
7916
7921
  });
7917
- var queryGenerateInputSchema = z2.object({
7922
+ var queryGenerateInputSchema = z3.object({
7918
7923
  project: projectNameSchema,
7919
7924
  request: queryGenerateRequestSchema
7920
7925
  });
7921
- var gbpListLocationsInputSchema = z2.object({
7926
+ var gbpListLocationsInputSchema = z3.object({
7922
7927
  project: projectNameSchema,
7923
- selected: z2.boolean().optional()
7928
+ selected: z3.boolean().optional()
7924
7929
  });
7925
- var gbpDiscoverInputSchema = z2.object({
7930
+ var gbpDiscoverInputSchema = z3.object({
7926
7931
  project: projectNameSchema,
7927
- selectAllNew: z2.boolean().optional().default(true),
7928
- accountName: z2.string().regex(/^accounts\//, 'accountName must be a Google resource name like "accounts/12345"').optional(),
7929
- switchAccount: z2.boolean().optional().default(false)
7932
+ selectAllNew: z3.boolean().optional().default(true),
7933
+ accountName: z3.string().regex(/^accounts\//, 'accountName must be a Google resource name like "accounts/12345"').optional(),
7934
+ switchAccount: z3.boolean().optional().default(false)
7930
7935
  });
7931
- var gbpLocationSelectionInputSchema = z2.object({
7936
+ var gbpLocationSelectionInputSchema = z3.object({
7932
7937
  project: projectNameSchema,
7933
- locationName: z2.string().min(1).regex(/^locations\//, 'locationName must be a Google resource name like "locations/12345"'),
7934
- selected: z2.boolean()
7938
+ locationName: z3.string().min(1).regex(/^locations\//, 'locationName must be a Google resource name like "locations/12345"'),
7939
+ selected: z3.boolean()
7935
7940
  });
7936
- var gbpSyncInputSchema = z2.object({
7941
+ var gbpSyncInputSchema = z3.object({
7937
7942
  project: projectNameSchema,
7938
- locationNames: z2.array(z2.string()).optional(),
7939
- daysOfMetrics: z2.number().int().positive().max(540).optional(),
7940
- monthsOfKeywords: z2.number().int().positive().max(18).optional()
7943
+ locationNames: z3.array(z3.string()).optional(),
7944
+ daysOfMetrics: z3.number().int().positive().max(540).optional(),
7945
+ monthsOfKeywords: z3.number().int().positive().max(18).optional()
7941
7946
  });
7942
- var gbpMetricsInputSchema = z2.object({
7947
+ var gbpMetricsInputSchema = z3.object({
7943
7948
  project: projectNameSchema,
7944
- locationName: z2.string().optional(),
7945
- metric: z2.string().optional()
7949
+ locationName: z3.string().optional(),
7950
+ metric: z3.string().optional()
7946
7951
  });
7947
- var gbpLocationScopedInputSchema = z2.object({
7952
+ var gbpLocationScopedInputSchema = z3.object({
7948
7953
  project: projectNameSchema,
7949
- locationName: z2.string().optional()
7954
+ locationName: z3.string().optional()
7950
7955
  });
7951
- var gbpAccountsInputSchema = z2.object({
7956
+ var gbpAccountsInputSchema = z3.object({
7952
7957
  project: projectNameSchema
7953
7958
  });
7954
- var adsInsightsInputSchema = z2.object({
7959
+ var adsInsightsInputSchema = z3.object({
7955
7960
  project: projectNameSchema,
7956
- level: z2.enum(["campaign", "ad_group"]).optional(),
7957
- entityId: z2.string().optional(),
7958
- from: z2.string().optional(),
7959
- to: z2.string().optional()
7961
+ level: z3.enum(["campaign", "ad_group"]).optional(),
7962
+ entityId: z3.string().optional(),
7963
+ from: z3.string().optional(),
7964
+ to: z3.string().optional()
7960
7965
  });
7961
7966
  var adsGeoSearchInputSchema = adsGeoSearchQuerySchema.extend({
7962
7967
  project: projectNameSchema
7963
7968
  });
7964
- var adsLiveDeliveryInputSchema = z2.object({
7969
+ var adsLiveDeliveryInputSchema = z3.object({
7965
7970
  project: projectNameSchema,
7966
- campaignId: z2.string().min(1).max(200).optional(),
7967
- lookbackDays: z2.number().int().min(1).max(30).optional()
7971
+ campaignId: z3.string().min(1).max(200).optional(),
7972
+ lookbackDays: z3.number().int().min(1).max(30).optional()
7968
7973
  });
7969
- var adsOperationInputSchema = z2.object({
7974
+ var adsOperationInputSchema = z3.object({
7970
7975
  project: projectNameSchema,
7971
- operationKey: z2.string().min(8).max(128)
7976
+ operationKey: z3.string().min(8).max(128)
7972
7977
  });
7973
7978
  var adsOperationResumeActivationInputSchema = adsOperationInputSchema.strict();
7974
7979
  var adsUnresolvedOperationsInputSchema = adsUnresolvedOperationListQuerySchema.extend({
@@ -7976,238 +7981,238 @@ var adsUnresolvedOperationsInputSchema = adsUnresolvedOperationListQuerySchema.e
7976
7981
  });
7977
7982
  var adsOperationReconcileInputSchema = adsOperationReconcileRequestSchema.extend({
7978
7983
  project: projectNameSchema,
7979
- operationKey: z2.string().min(8).max(128)
7984
+ operationKey: z3.string().min(8).max(128)
7980
7985
  });
7981
- var adsImageUploadInputSchema = z2.object({
7986
+ var adsImageUploadInputSchema = z3.object({
7982
7987
  project: projectNameSchema,
7983
7988
  request: adsImageUploadRequestSchema
7984
7989
  });
7985
- var adsCampaignCreateInputSchema = z2.object({
7990
+ var adsCampaignCreateInputSchema = z3.object({
7986
7991
  project: projectNameSchema,
7987
7992
  request: adsCampaignCreateRequestSchema
7988
7993
  });
7989
- var adsCampaignUpdateInputSchema = z2.object({
7994
+ var adsCampaignUpdateInputSchema = z3.object({
7990
7995
  project: projectNameSchema,
7991
- campaignId: z2.string().min(1),
7996
+ campaignId: z3.string().min(1),
7992
7997
  request: adsCampaignUpdateRequestSchema
7993
7998
  });
7994
- var adsCampaignActivateTreeInputSchema = z2.object({
7999
+ var adsCampaignActivateTreeInputSchema = z3.object({
7995
8000
  project: projectNameSchema,
7996
- campaignId: z2.string().min(1),
8001
+ campaignId: z3.string().min(1),
7997
8002
  request: adsActivateTreeRequestSchema
7998
8003
  });
7999
- var adsCampaignPauseInputSchema = z2.object({
8004
+ var adsCampaignPauseInputSchema = z3.object({
8000
8005
  project: projectNameSchema,
8001
- campaignId: z2.string().min(1),
8006
+ campaignId: z3.string().min(1),
8002
8007
  request: adsPauseRequestSchema
8003
8008
  });
8004
- var adsAdGroupCreateInputSchema = z2.object({
8009
+ var adsAdGroupCreateInputSchema = z3.object({
8005
8010
  project: projectNameSchema,
8006
8011
  request: adsAdGroupCreateRequestSchema
8007
8012
  });
8008
- var adsAdGroupUpdateInputSchema = z2.object({
8013
+ var adsAdGroupUpdateInputSchema = z3.object({
8009
8014
  project: projectNameSchema,
8010
- adGroupId: z2.string().min(1),
8015
+ adGroupId: z3.string().min(1),
8011
8016
  request: adsAdGroupUpdateRequestSchema
8012
8017
  });
8013
- var adsAdGroupPauseInputSchema = z2.object({
8018
+ var adsAdGroupPauseInputSchema = z3.object({
8014
8019
  project: projectNameSchema,
8015
- adGroupId: z2.string().min(1),
8020
+ adGroupId: z3.string().min(1),
8016
8021
  request: adsPauseRequestSchema
8017
8022
  });
8018
- var adsAdCreateInputSchema = z2.object({
8023
+ var adsAdCreateInputSchema = z3.object({
8019
8024
  project: projectNameSchema,
8020
8025
  request: adsAdCreateRequestSchema
8021
8026
  });
8022
- var adsAdUpdateInputSchema = z2.object({
8027
+ var adsAdUpdateInputSchema = z3.object({
8023
8028
  project: projectNameSchema,
8024
- adId: z2.string().min(1),
8029
+ adId: z3.string().min(1),
8025
8030
  request: adsAdUpdateRequestSchema
8026
8031
  });
8027
- var adsAdPauseInputSchema = z2.object({
8032
+ var adsAdPauseInputSchema = z3.object({
8028
8033
  project: projectNameSchema,
8029
- adId: z2.string().min(1),
8034
+ adId: z3.string().min(1),
8030
8035
  request: adsPauseRequestSchema
8031
8036
  });
8032
- var keywordsInputSchema = z2.object({
8037
+ var keywordsInputSchema = z3.object({
8033
8038
  project: projectNameSchema,
8034
8039
  request: keywordBatchRequestSchema
8035
8040
  });
8036
- var keywordGenerateInputSchema = z2.object({
8041
+ var keywordGenerateInputSchema = z3.object({
8037
8042
  project: projectNameSchema,
8038
8043
  request: keywordGenerateRequestSchema
8039
8044
  });
8040
- var competitorsInputSchema = z2.object({
8045
+ var competitorsInputSchema = z3.object({
8041
8046
  project: projectNameSchema,
8042
8047
  request: competitorBatchRequestSchema
8043
8048
  });
8044
- var projectUpsertInputSchema = z2.object({
8049
+ var projectUpsertInputSchema = z3.object({
8045
8050
  project: projectNameSchema,
8046
8051
  request: projectUpsertRequestSchema
8047
8052
  });
8048
- var applyConfigInputSchema = z2.object({
8053
+ var applyConfigInputSchema = z3.object({
8049
8054
  config: projectConfigSchema
8050
8055
  });
8051
- var scheduleSetInputSchema = z2.object({
8056
+ var scheduleSetInputSchema = z3.object({
8052
8057
  project: projectNameSchema,
8053
8058
  schedule: scheduleUpsertRequestSchema
8054
8059
  });
8055
- var scheduleReadInputSchema = z2.object({
8060
+ var scheduleReadInputSchema = z3.object({
8056
8061
  project: projectNameSchema,
8057
8062
  kind: schedulableRunKindSchema.optional().describe('Schedulable run kind. Defaults to "answer-visibility" if omitted.')
8058
8063
  });
8059
- var agentWebhookAttachInputSchema = z2.object({
8064
+ var agentWebhookAttachInputSchema = z3.object({
8060
8065
  project: projectNameSchema,
8061
- url: z2.string().url()
8066
+ url: z3.string().url()
8062
8067
  });
8063
- var doctorInputSchema = z2.object({
8068
+ var doctorInputSchema = z3.object({
8064
8069
  project: projectNameSchema.optional().describe("Project name to scope project-level checks. Omit to run global checks (provider keys, config, etc.)."),
8065
- checks: z2.array(z2.string().min(1)).optional().describe('Optional check IDs or wildcard prefixes (e.g. "google.auth.*", "config.providers"). Empty/omitted runs all matching checks for the chosen scope.')
8070
+ checks: z3.array(z3.string().min(1)).optional().describe('Optional check IDs or wildcard prefixes (e.g. "google.auth.*", "config.providers"). Empty/omitted runs all matching checks for the chosen scope.')
8066
8071
  });
8067
- var contentTargetsInputSchema = z2.object({
8072
+ var contentTargetsInputSchema = z3.object({
8068
8073
  project: projectNameSchema,
8069
- limit: z2.number().int().positive().max(500).optional().describe("Max rows. Defaults to all. Use a small number (3-10) when summarizing for the user."),
8070
- includeInProgress: z2.boolean().optional().describe("Include rows that already have an in-flight tracked action. Default false."),
8071
- winnabilityClass: z2.enum(["ownable", "ceded"]).optional().describe('Filter by winnability: "ownable" (worth a brief) or "ceded" (aggregator/editorial head term to skip).'),
8072
- ownable: z2.boolean().optional().describe('Convenience: when true, return only ownable targets (same as winnabilityClass="ownable").')
8074
+ limit: z3.number().int().positive().max(500).optional().describe("Max rows. Defaults to all. Use a small number (3-10) when summarizing for the user."),
8075
+ includeInProgress: z3.boolean().optional().describe("Include rows that already have an in-flight tracked action. Default false."),
8076
+ winnabilityClass: z3.enum(["ownable", "ceded"]).optional().describe('Filter by winnability: "ownable" (worth a brief) or "ceded" (aggregator/editorial head term to skip).'),
8077
+ ownable: z3.boolean().optional().describe('Convenience: when true, return only ownable targets (same as winnabilityClass="ownable").')
8073
8078
  });
8074
- var contentBriefInputSchema = z2.object({
8079
+ var contentBriefInputSchema = z3.object({
8075
8080
  project: projectNameSchema,
8076
- targetRef: z2.string().min(1).describe("Stable target ref from canonry_content_targets. The target must be ownable; ceded targets are rejected."),
8077
- provider: z2.string().optional().describe("Optional provider override (claude|openai|gemini|zai|deepinfra)."),
8078
- model: z2.string().optional().describe("Optional model override within the chosen provider."),
8079
- forceRefresh: z2.boolean().optional().describe("Force a fresh synthesis even if a cached brief exists.")
8081
+ targetRef: z3.string().min(1).describe("Stable target ref from canonry_content_targets. The target must be ownable; ceded targets are rejected."),
8082
+ provider: z3.string().optional().describe("Optional provider override (claude|openai|gemini|zai|deepinfra)."),
8083
+ model: z3.string().optional().describe("Optional model override within the chosen provider."),
8084
+ forceRefresh: z3.boolean().optional().describe("Force a fresh synthesis even if a cached brief exists.")
8080
8085
  });
8081
- var contentMapInputSchema = z2.object({
8086
+ var contentMapInputSchema = z3.object({
8082
8087
  project: projectNameSchema
8083
8088
  });
8084
- var backlinksDomainsInputSchema = z2.object({
8089
+ var backlinksDomainsInputSchema = z3.object({
8085
8090
  project: projectNameSchema,
8086
- limit: z2.number().int().positive().max(200).optional().describe("Max linking-domain rows. Default 50, max 200."),
8087
- release: z2.string().optional().describe("Common Crawl release id, e.g. cc-main-2026-jan-feb-mar. Omit for the most recent release with data."),
8091
+ limit: z3.number().int().positive().max(200).optional().describe("Max linking-domain rows. Default 50, max 200."),
8092
+ release: z3.string().optional().describe("Common Crawl release id, e.g. cc-main-2026-jan-feb-mar. Omit for the most recent release with data."),
8088
8093
  source: backlinkSourceSchema.optional().describe("Stored source. Common Crawl is active; bing-webmaster is historical-only.")
8089
8094
  });
8090
- var backlinksSourcesInputSchema = z2.object({
8095
+ var backlinksSourcesInputSchema = z3.object({
8091
8096
  project: projectNameSchema
8092
8097
  });
8093
- var memoryUpsertInputSchema = z2.object({
8098
+ var memoryUpsertInputSchema = z3.object({
8094
8099
  project: projectNameSchema,
8095
- key: z2.string().min(1).max(AGENT_MEMORY_KEY_MAX_LENGTH).describe(`Stable identifier for the note (max ${AGENT_MEMORY_KEY_MAX_LENGTH} chars). Writing the same key overwrites the prior value.`),
8096
- value: z2.string().min(1).describe(`Plain-text note body (max ${AGENT_MEMORY_VALUE_MAX_BYTES} bytes). Use for durable operator preferences, migration context, or non-obvious reasoning that should survive future sessions.`)
8100
+ key: z3.string().min(1).max(AGENT_MEMORY_KEY_MAX_LENGTH).describe(`Stable identifier for the note (max ${AGENT_MEMORY_KEY_MAX_LENGTH} chars). Writing the same key overwrites the prior value.`),
8101
+ value: z3.string().min(1).describe(`Plain-text note body (max ${AGENT_MEMORY_VALUE_MAX_BYTES} bytes). Use for durable operator preferences, migration context, or non-obvious reasoning that should survive future sessions.`)
8097
8102
  });
8098
- var memoryForgetInputSchema = z2.object({
8103
+ var memoryForgetInputSchema = z3.object({
8099
8104
  project: projectNameSchema,
8100
- key: z2.string().min(1).max(AGENT_MEMORY_KEY_MAX_LENGTH).describe("Exact key of the note to remove. No-op (status=missing) when no note exists for that key.")
8105
+ key: z3.string().min(1).max(AGENT_MEMORY_KEY_MAX_LENGTH).describe("Exact key of the note to remove. No-op (status=missing) when no note exists for that key.")
8101
8106
  });
8102
- var trafficConnectCloudRunInputSchema = z2.object({
8107
+ var trafficConnectCloudRunInputSchema = z3.object({
8103
8108
  project: projectNameSchema,
8104
8109
  request: trafficConnectCloudRunRequestSchema
8105
8110
  });
8106
- var trafficConnectWordpressInputSchema = z2.object({
8111
+ var trafficConnectWordpressInputSchema = z3.object({
8107
8112
  project: projectNameSchema,
8108
8113
  request: trafficConnectWordpressRequestSchema
8109
8114
  });
8110
- var trafficConnectVercelInputSchema = z2.object({
8115
+ var trafficConnectVercelInputSchema = z3.object({
8111
8116
  project: projectNameSchema,
8112
8117
  request: trafficConnectVercelRequestSchema
8113
8118
  });
8114
- var trafficSyncInputSchema = z2.object({
8119
+ var trafficSyncInputSchema = z3.object({
8115
8120
  project: projectNameSchema,
8116
- sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_connect_cloud_run or canonry_traffic_sources_list."),
8117
- sinceMinutes: z2.number().int().positive().max(7 * 24 * 60).optional().describe("Lookback window in minutes. Defaults to the source's configured window (60 min) when omitted; clamped forward to lastSyncedAt to avoid double-counting.")
8121
+ sourceId: z3.string().min(1).describe("Traffic source ID returned by canonry_traffic_connect_cloud_run or canonry_traffic_sources_list."),
8122
+ sinceMinutes: z3.number().int().positive().max(7 * 24 * 60).optional().describe("Lookback window in minutes. Defaults to the source's configured window (60 min) when omitted; clamped forward to lastSyncedAt to avoid double-counting.")
8118
8123
  });
8119
- var trafficBackfillInputSchema = z2.object({
8124
+ var trafficBackfillInputSchema = z3.object({
8120
8125
  project: projectNameSchema,
8121
- sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
8122
- days: z2.number().int().positive().max(30).optional().describe("Lookback window in days. Default 30, capped server-side at the upstream log retention ceiling (Cloud Logging _Default = 30d).")
8126
+ sourceId: z3.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
8127
+ days: z3.number().int().positive().max(30).optional().describe("Lookback window in days. Default 30, capped server-side at the upstream log retention ceiling (Cloud Logging _Default = 30d).")
8123
8128
  });
8124
- var trafficResetInputSchema = z2.object({
8129
+ var trafficResetInputSchema = z3.object({
8125
8130
  project: projectNameSchema,
8126
- sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
8127
- advanceToNow: z2.literal(true).describe("Must be `true`. Explicit gate against accidental resets. Advances lastSyncedAt to NOW and clears the source's error state.")
8131
+ sourceId: z3.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
8132
+ advanceToNow: z3.literal(true).describe("Must be `true`. Explicit gate against accidental resets. Advances lastSyncedAt to NOW and clears the source's error state.")
8128
8133
  });
8129
- var trafficEventsInputSchema = z2.object({
8134
+ var trafficEventsInputSchema = z3.object({
8130
8135
  project: projectNameSchema,
8131
- since: z2.string().optional().describe("ISO 8601 lower bound. Defaults to 24h ago when omitted."),
8132
- until: z2.string().optional().describe("ISO 8601 upper bound. Defaults to now when omitted."),
8133
- kind: z2.union([trafficEventKindSchema, z2.literal("all")]).optional().describe('Filter to one traffic kind; "all" (default) returns every kind.'),
8134
- sourceId: z2.string().min(1).optional().describe("Restrict to a single traffic source ID."),
8135
- limit: z2.number().int().positive().max(5e3).optional().describe("Max combined rows. Defaults to 500, max 5000. Totals always reflect the full window."),
8136
+ since: z3.string().optional().describe("ISO 8601 lower bound. Defaults to 24h ago when omitted."),
8137
+ until: z3.string().optional().describe("ISO 8601 upper bound. Defaults to now when omitted."),
8138
+ kind: z3.union([trafficEventKindSchema, z3.literal("all")]).optional().describe('Filter to one traffic kind; "all" (default) returns every kind.'),
8139
+ sourceId: z3.string().min(1).optional().describe("Restrict to a single traffic source ID."),
8140
+ limit: z3.number().int().positive().max(5e3).optional().describe("Max combined rows. Defaults to 500, max 5000. Totals always reflect the full window."),
8136
8141
  granularity: trafficSeriesGranularitySchema.optional().describe("Full-window chart series bucket size: hour (default) or day.")
8137
8142
  });
8138
- var trafficSourceIdInputSchema = z2.object({
8143
+ var trafficSourceIdInputSchema = z3.object({
8139
8144
  project: projectNameSchema,
8140
- sourceId: z2.string().min(1).describe("Traffic source ID.")
8145
+ sourceId: z3.string().min(1).describe("Traffic source ID.")
8141
8146
  });
8142
- var discoveryRunInputSchema = z2.object({
8147
+ var discoveryRunInputSchema = z3.object({
8143
8148
  project: projectNameSchema,
8144
8149
  request: discoveryRunRequestSchema.extend({
8145
8150
  // Stronger descriptions for the LLM. The base Zod schema enforces the
8146
8151
  // upper bound; this just clarifies the meaning of each knob.
8147
- icpDescription: z2.string().min(1).optional().describe("Free-text ICP description. If omitted, the project must already have spec.icpDescription stored."),
8148
- buyerDescription: z2.string().min(1).optional().describe("Who evaluates or buys the offering, separate from the ICP. When present, every generated query is anchored on this buyer."),
8149
- seedProviders: z2.array(z2.enum(["gemini", "openai"])).min(1).optional().describe('Which providers generate seed candidates. Omit for the Gemini-only default; ["gemini","openai"] merges both phrasing distributions before dedup.'),
8150
- dedupThreshold: z2.number().min(0).max(1).optional().describe("Cosine similarity threshold for clustering seed candidates. Defaults to 0.85. Lower values dedupe more aggressively."),
8151
- maxProbes: z2.number().int().positive().max(DISCOVERY_MAX_PROBES_CAP).optional().describe(`Max canonical queries to probe in this session. Default 100, hard cap ${DISCOVERY_MAX_PROBES_CAP}.`),
8152
- probeConcurrency: z2.number().int().min(1).max(DISCOVERY_PROBE_CONCURRENCY_CAP).optional().describe(`How many probes may run in parallel. Default 1 (strictly serial), hard cap ${DISCOVERY_PROBE_CONCURRENCY_CAP}. Probe rows are persisted in canonical order regardless of concurrency, so this only shortens wall-clock time.`)
8152
+ icpDescription: z3.string().min(1).optional().describe("Free-text ICP description. If omitted, the project must already have spec.icpDescription stored."),
8153
+ buyerDescription: z3.string().min(1).optional().describe("Who evaluates or buys the offering, separate from the ICP. When present, every generated query is anchored on this buyer."),
8154
+ seedProviders: z3.array(z3.enum(["gemini", "openai"])).min(1).optional().describe('Which providers generate seed candidates. Omit for the Gemini-only default; ["gemini","openai"] merges both phrasing distributions before dedup.'),
8155
+ dedupThreshold: z3.number().min(0).max(1).optional().describe("Cosine similarity threshold for clustering seed candidates. Defaults to 0.85. Lower values dedupe more aggressively."),
8156
+ maxProbes: z3.number().int().positive().max(DISCOVERY_MAX_PROBES_CAP).optional().describe(`Max canonical queries to probe in this session. Default 100, hard cap ${DISCOVERY_MAX_PROBES_CAP}.`),
8157
+ probeConcurrency: z3.number().int().min(1).max(DISCOVERY_PROBE_CONCURRENCY_CAP).optional().describe(`How many probes may run in parallel. Default 1 (strictly serial), hard cap ${DISCOVERY_PROBE_CONCURRENCY_CAP}. Probe rows are persisted in canonical order regardless of concurrency, so this only shortens wall-clock time.`)
8153
8158
  }).optional()
8154
8159
  });
8155
- var discoverySessionsListInputSchema = z2.object({
8160
+ var discoverySessionsListInputSchema = z3.object({
8156
8161
  project: projectNameSchema,
8157
- limit: z2.number().int().positive().max(200).optional().describe("Max sessions returned. Default 50.")
8162
+ limit: z3.number().int().positive().max(200).optional().describe("Max sessions returned. Default 50.")
8158
8163
  });
8159
- var discoverySessionIdInputSchema = z2.object({
8164
+ var discoverySessionIdInputSchema = z3.object({
8160
8165
  project: projectNameSchema,
8161
- sessionId: z2.string().min(1).describe("Discovery session ID returned by canonry_discover_run_start.")
8166
+ sessionId: z3.string().min(1).describe("Discovery session ID returned by canonry_discover_run_start.")
8162
8167
  });
8163
- var researchRunStartInputSchema = z2.object({
8168
+ var researchRunStartInputSchema = z3.object({
8164
8169
  project: projectNameSchema,
8165
8170
  request: researchRunCreateSchema.describe("One shared provider/model/location context for every free-form query in this saved research batch.")
8166
8171
  });
8167
- var researchRunsListInputSchema = z2.object({
8172
+ var researchRunsListInputSchema = z3.object({
8168
8173
  project: projectNameSchema,
8169
- limit: z2.number().int().positive().max(100).optional().describe("Max saved research runs returned. Default 20.")
8174
+ limit: z3.number().int().positive().max(100).optional().describe("Max saved research runs returned. Default 20.")
8170
8175
  });
8171
- var researchRunIdInputSchema = z2.object({
8176
+ var researchRunIdInputSchema = z3.object({
8172
8177
  project: projectNameSchema,
8173
- runId: z2.string().min(1).describe("Research run ID returned by canonry_research_run_start.")
8178
+ runId: z3.string().min(1).describe("Research run ID returned by canonry_research_run_start.")
8174
8179
  });
8175
- var discoveryHarvestInputSchema = z2.object({
8180
+ var discoveryHarvestInputSchema = z3.object({
8176
8181
  project: projectNameSchema,
8177
- sessionId: z2.string().min(1).describe("Discovery session ID returned by canonry_discover_run_start."),
8178
- minProbeHits: z2.number().int().positive().optional().describe("Recurrence floor \u2014 a candidate must have appeared in at least this many distinct probes to be admitted. Default 1."),
8179
- anchor: z2.boolean().optional().describe("Apply the subject-anchor filter that drops off-topic acronym collisions. Default true; pass false for new-subject discovery on a well-scoped project.")
8182
+ sessionId: z3.string().min(1).describe("Discovery session ID returned by canonry_discover_run_start."),
8183
+ minProbeHits: z3.number().int().positive().optional().describe("Recurrence floor \u2014 a candidate must have appeared in at least this many distinct probes to be admitted. Default 1."),
8184
+ anchor: z3.boolean().optional().describe("Apply the subject-anchor filter that drops off-topic acronym collisions. Default true; pass false for new-subject discovery on a well-scoped project.")
8180
8185
  });
8181
- var discoveryPromoteInputSchema = z2.object({
8186
+ var discoveryPromoteInputSchema = z3.object({
8182
8187
  project: projectNameSchema,
8183
- sessionId: z2.string().min(1).describe("Discovery session ID returned by canonry_discover_run_start."),
8188
+ sessionId: z3.string().min(1).describe("Discovery session ID returned by canonry_discover_run_start."),
8184
8189
  request: discoveryPromoteRequestSchema.extend({
8185
8190
  // Stronger descriptions for the LLM. The base Zod schema enforces the shape.
8186
- buckets: z2.array(discoveryBucketSchema).min(1).optional().describe("Which probe buckets to adopt into the tracked basket. Omitted promotes cited + aspirational; include wasted-surface explicitly for off-ICP competitor gaps."),
8187
- includeCompetitors: z2.boolean().optional().describe("Whether to also merge recurring discovered competitor domains into the project. Defaults to true."),
8188
- competitorTypes: z2.array(discoveryCompetitorTypeSchema).min(1).optional().describe("Which classified competitor types to merge. Omitted promotes direct-competitor only; pass an explicit list to also adopt editorial-media channels or to recover legacy unknown entries. Ignored when includeCompetitors is false.")
8191
+ buckets: z3.array(discoveryBucketSchema).min(1).optional().describe("Which probe buckets to adopt into the tracked basket. Omitted promotes cited + aspirational; include wasted-surface explicitly for off-ICP competitor gaps."),
8192
+ includeCompetitors: z3.boolean().optional().describe("Whether to also merge recurring discovered competitor domains into the project. Defaults to true."),
8193
+ competitorTypes: z3.array(discoveryCompetitorTypeSchema).min(1).optional().describe("Which classified competitor types to merge. Omitted promotes direct-competitor only; pass an explicit list to also adopt editorial-media channels or to recover legacy unknown entries. Ignored when includeCompetitors is false.")
8189
8194
  }).optional()
8190
8195
  });
8191
- var technicalAeoScoreInputSchema = z2.object({
8196
+ var technicalAeoScoreInputSchema = z3.object({
8192
8197
  project: projectNameSchema,
8193
8198
  runId: runIdSchema.optional().describe("Historical site-audit run ID. Omit for the latest audit.")
8194
8199
  });
8195
- var technicalAeoPagesInputSchema = z2.object({
8200
+ var technicalAeoPagesInputSchema = z3.object({
8196
8201
  project: projectNameSchema,
8197
8202
  runId: runIdSchema.optional().describe("Historical site-audit run ID. Omit for the latest audit."),
8198
- status: z2.enum(["success", "error"]).optional().describe("Filter to successfully-audited or errored pages."),
8199
- sort: z2.enum(["score-asc", "score-desc", "url"]).optional().describe("Sort order. Defaults to score-asc (worst pages first)."),
8200
- limit: z2.number().int().positive().max(500).optional(),
8201
- offset: z2.number().int().nonnegative().optional()
8203
+ status: z3.enum(["success", "error"]).optional().describe("Filter to successfully-audited or errored pages."),
8204
+ sort: z3.enum(["score-asc", "score-desc", "url"]).optional().describe("Sort order. Defaults to score-asc (worst pages first)."),
8205
+ limit: z3.number().int().positive().max(500).optional(),
8206
+ offset: z3.number().int().nonnegative().optional()
8202
8207
  });
8203
- var technicalAeoTrendInputSchema = z2.object({
8208
+ var technicalAeoTrendInputSchema = z3.object({
8204
8209
  project: projectNameSchema,
8205
- limit: z2.number().int().positive().max(365).optional()
8210
+ limit: z3.number().int().positive().max(365).optional()
8206
8211
  });
8207
- var technicalAeoRunInputSchema = z2.object({
8212
+ var technicalAeoRunInputSchema = z3.object({
8208
8213
  project: projectNameSchema,
8209
- sitemapUrl: z2.string().url().optional().describe("Override the sitemap URL. Defaults to https://<canonicalDomain>/sitemap.xml."),
8210
- limit: z2.number().int().positive().max(2e3).optional().describe("Cap pages audited (highest sitemap <priority> first).")
8214
+ sitemapUrl: z3.string().url().optional().describe("Override the sitemap URL. Defaults to https://<canonicalDomain>/sitemap.xml."),
8215
+ limit: z3.number().int().positive().max(2e3).optional().describe("Cap pages audited (highest sitemap <priority> first).")
8211
8216
  });
8212
8217
  var AGENT_WEBHOOK_EVENTS = [
8213
8218
  notificationEventSchema.enum["run.completed"],
@@ -8233,7 +8238,7 @@ var canonryMcpTools = [
8233
8238
  description: "Get a Canonry project by name.",
8234
8239
  access: "read",
8235
8240
  tier: "core",
8236
- inputSchema: gscSitemapsInputSchema,
8241
+ inputSchema: projectInputSchema,
8237
8242
  annotations: readAnnotations(),
8238
8243
  openApiOperations: ["GET /api/v1/projects/{name}"],
8239
8244
  handler: (client2, input) => client2.getProject(input.project)
@@ -8255,10 +8260,10 @@ var canonryMcpTools = [
8255
8260
  description: 'One-call summary for "how is project X doing?". Returns independent mention and citation coverage, separate query-level movement for each signal, query-basket comparability with added/removed counts, latest run and health, insights, provider/model breakdowns, competitors, attention items, and recent history. Movement excludes queries not shared by both sweeps. Filterable by location and time window. Prefer this over fanning out to separate tools.',
8256
8261
  access: "read",
8257
8262
  tier: "core",
8258
- inputSchema: z2.object({
8263
+ inputSchema: z3.object({
8259
8264
  project: projectNameSchema,
8260
- location: z2.string().optional().describe('Filter to runs from this location label (e.g. "Boston, MA, US"). Omit for all locations.'),
8261
- since: z2.string().optional().describe("ISO 8601 datetime \u2014 only include runs at or after this time. Omit for full history.")
8265
+ location: z3.string().optional().describe('Filter to runs from this location label (e.g. "Boston, MA, US"). Omit for all locations.'),
8266
+ since: z3.string().optional().describe("ISO 8601 datetime \u2014 only include runs at or after this time. Omit for full history.")
8262
8267
  }),
8263
8268
  annotations: readAnnotations(),
8264
8269
  openApiOperations: ["GET /api/v1/projects/{name}/overview"],
@@ -8273,7 +8278,7 @@ var canonryMcpTools = [
8273
8278
  description: "Returns the full canonical AEO report bundle for a project \u2014 executive summary, client summary, agency diagnostics, action plan, per-query \xD7 per-provider citation matrix, competitor landscape, AI citation sources, GSC/GA4 performance, social and AI referrals, indexing health, citations trend, prioritized insights, and recommended next steps. Same payload `canonry report <project>` consumes to render audience-specific HTML. Pass `period` (7/14/30/90 days, default 30) to scope the GSC/GA4/server-activity sections and the period-over-period comparisons.",
8274
8279
  access: "read",
8275
8280
  tier: "monitoring",
8276
- inputSchema: z2.object({
8281
+ inputSchema: z3.object({
8277
8282
  project: projectNameSchema,
8278
8283
  period: reportPeriodSchema.optional()
8279
8284
  }),
@@ -8287,7 +8292,7 @@ var canonryMcpTools = [
8287
8292
  description: "One-call investigation of whether organic work is gaining visibility, traffic, or AI attention. Returns source-specific 30-day GSC and GA4 cohorts, URL-agnostic page evidence, available GA4 lead-event evidence (not lead attribution), server-observed AI crawling/user-fetch/referral evidence, the latest answer-visibility sweep, source coverage, findings, and limitations. It preserves native units. Prefer this over fanning out across GSC, GA, traffic, and visibility tools.",
8288
8293
  access: "read",
8289
8294
  tier: "monitoring",
8290
- inputSchema: z2.object({
8295
+ inputSchema: z3.object({
8291
8296
  project: projectNameSchema,
8292
8297
  period: organicEvidencePeriodSchema.optional().describe("Evidence window: 60 or 90 days (default 90).")
8293
8298
  }),
@@ -8301,7 +8306,7 @@ var canonryMcpTools = [
8301
8306
  description: "Citation and mention rates over time for a project, bucketed adaptively (daily \u2192 monthly by span) and probe-excluded. Returns overall + per-provider window aggregates AND a per-bucket `byProvider` breakdown so you can read how each engine's cited/mentioned rate moved run-over-run \u2014 the same data the dashboard's \"Citations & mentions over time\" chart plots. Includes trend direction (improving/declining/stable) for both signals and query-set-change annotations. Filter the range with `window` (7d/30d/90d/all).",
8302
8307
  access: "read",
8303
8308
  tier: "monitoring",
8304
- inputSchema: z2.object({
8309
+ inputSchema: z3.object({
8305
8310
  project: projectNameSchema,
8306
8311
  window: analyticsWindowSchema.optional().describe("Time range: 7d, 30d, 90d, or all (default all).")
8307
8312
  }),
@@ -8315,10 +8320,10 @@ var canonryMcpTools = [
8315
8320
  description: "Where AI engines get the facts they cite for a project. Returns the FULL ranked list of cited domains (not truncated) \u2014 each tagged with a category and an actionable surface class (own / direct-competitor / ota-aggregator / editorial-media / other) \u2014 plus a surface-class roll-up and a per-provider breakdown (each provider's cited-domain mix + total cited slots). The surface class is deterministic (own/competitor from project data, the rest from the source allow-list) and enriched by discovery's stored per-domain classifications when present \u2014 no new LLM calls. Probe-excluded, window-filterable (7d/30d/90d/all). Use `limit` to cap each ranked list to the top N domains (an explicit long-tail rollup preserves the totals). All counts/shares/classification are computed server-side.",
8316
8321
  access: "read",
8317
8322
  tier: "monitoring",
8318
- inputSchema: z2.object({
8323
+ inputSchema: z3.object({
8319
8324
  project: projectNameSchema,
8320
8325
  window: analyticsWindowSchema.optional().describe("Time range: 7d, 30d, 90d, or all (default all)."),
8321
- limit: z2.number().int().positive().optional().describe("Cap each ranked list to the top N domains. Omit for the full list.")
8326
+ limit: z3.number().int().positive().optional().describe("Cap each ranked list to the top N domains. Omit for the full list.")
8322
8327
  }),
8323
8328
  annotations: readAnnotations(),
8324
8329
  openApiOperations: ["GET /api/v1/projects/{name}/analytics/sources"],
@@ -8330,10 +8335,10 @@ var canonryMcpTools = [
8330
8335
  description: "Search query snapshots and intelligence insights for the given text. Looks at snapshot answer text, cited domains, raw provider responses, and insight title/query/recommendation/cause. Returns ranked hits with snippets \u2014 use it instead of paginating snapshots when you need to find a competitor mention or term.",
8331
8336
  access: "read",
8332
8337
  tier: "core",
8333
- inputSchema: z2.object({
8338
+ inputSchema: z3.object({
8334
8339
  project: projectNameSchema,
8335
- q: z2.string().min(2).describe("Search term, at least 2 characters."),
8336
- limit: z2.number().int().positive().max(50).optional().describe("Max combined hits (1-50, default 25).")
8340
+ q: z3.string().min(2).describe("Search term, at least 2 characters."),
8341
+ limit: z3.number().int().positive().max(50).optional().describe("Max combined hits (1-50, default 25).")
8337
8342
  }),
8338
8343
  annotations: readAnnotations(),
8339
8344
  openApiOperations: ["GET /api/v1/projects/{name}/search"],
@@ -8521,14 +8526,14 @@ var canonryMcpTools = [
8521
8526
  description: 'Per-query mention (answer-text) and citation (source-list) counts WITH a sample size, pooled across many answer-visibility runs (probe-excluded) \u2014 the data to compute a confidence-aware (Wilson) proportion or detect drift without fetching every run. Tri-state aware: `checked` (the n for the mention proportion) counts only snapshots where answerMentioned was recorded; `null` ("not checked") is excluded, never counted as not-mentioned. Returns per-query `total`/`checked`/`mentioned`/`cited` + derived `mentionRate` (mentioned/checked) and `citedRate` (cited/total), `firstObserved`/`lastObserved`, and pooled `totals`. Window with `since`/`until` (ISO), `lastRuns`, or `month=YYYY-MM` (mutually exclusive); with none set, EVERY completed/partial run is pooled (`window.runCount` says how many) \u2014 pass `lastRuns` for a recent sample. Set `groupBy=provider` for a per-provider breakdown whose counts sum to the pooled counts (`groupBy` is omitted from the response otherwise). Set `shareOfVoice=true` for pooled project-vs-tracked-competitor brand-mention share across the same attributed snapshot set.',
8522
8527
  access: "read",
8523
8528
  tier: "monitoring",
8524
- inputSchema: z2.object({
8529
+ inputSchema: z3.object({
8525
8530
  project: projectNameSchema,
8526
- since: z2.string().optional().describe("Inclusive lower bound on run createdAt (ISO 8601). A date-only value (YYYY-MM-DD) is the start of that UTC day. Mutually exclusive with lastRuns/month."),
8527
- until: z2.string().optional().describe("Inclusive upper bound on run createdAt (ISO 8601). A date-only value (YYYY-MM-DD) covers the whole UTC day (through 23:59:59.999). Mutually exclusive with lastRuns/month."),
8528
- lastRuns: z2.number().int().positive().optional().describe("Aggregate only the most recent N answer-visibility runs. Mutually exclusive with since/until/month."),
8529
- month: z2.string().optional().describe("Aggregate one calendar month (YYYY-MM), expanded to that month's inclusive UTC bounds. Mutually exclusive with since/until/lastRuns."),
8530
- groupBy: z2.enum(["provider"]).optional().describe('Set to "provider" for a per-provider breakdown.'),
8531
- shareOfVoice: z2.boolean().optional().describe("Include pooled project-vs-tracked-competitor brand-mention share across the same window.")
8531
+ since: z3.string().optional().describe("Inclusive lower bound on run createdAt (ISO 8601). A date-only value (YYYY-MM-DD) is the start of that UTC day. Mutually exclusive with lastRuns/month."),
8532
+ until: z3.string().optional().describe("Inclusive upper bound on run createdAt (ISO 8601). A date-only value (YYYY-MM-DD) covers the whole UTC day (through 23:59:59.999). Mutually exclusive with lastRuns/month."),
8533
+ lastRuns: z3.number().int().positive().optional().describe("Aggregate only the most recent N answer-visibility runs. Mutually exclusive with since/until/month."),
8534
+ month: z3.string().optional().describe("Aggregate one calendar month (YYYY-MM), expanded to that month's inclusive UTC bounds. Mutually exclusive with since/until/lastRuns."),
8535
+ groupBy: z3.enum(["provider"]).optional().describe('Set to "provider" for a per-provider breakdown.'),
8536
+ shareOfVoice: z3.boolean().optional().describe("Include pooled project-vs-tracked-competitor brand-mention share across the same window.")
8532
8537
  }),
8533
8538
  annotations: readAnnotations(),
8534
8539
  openApiOperations: ["GET /api/v1/projects/{name}/visibility-stats"],
@@ -8547,10 +8552,10 @@ var canonryMcpTools = [
8547
8552
  description: "Statistically honest month-over-month AEO comparison in ONE call \u2014 use this instead of hand-computing deltas from two visibility-stats calls. Share of voice (`mention-share-of-voice`, `driftRobust: true`) is less exposed to broad model-wide naming propensity than absolute rates, but it never overrides model continuity. The response restricts to common query/provider pairs, then includes only providers with exactly one known, identical configured model id in both months. `continuity` surfaces every provider, its model evidence, and whether it was excluded for a changed, mixed mid-month, or unknown model. When no provider remains, metrics return `model-discontinuous` or `model-unknown`, never a directional call. A silent upstream version bump under an unchanged configured id remains undetectable. `from` must be a month strictly before `to`.",
8548
8553
  access: "read",
8549
8554
  tier: "monitoring",
8550
- inputSchema: z2.object({
8555
+ inputSchema: z3.object({
8551
8556
  project: projectNameSchema,
8552
- from: z2.string().describe('Earlier calendar month (YYYY-MM), the baseline. Must be strictly before "to".'),
8553
- to: z2.string().describe('Later calendar month (YYYY-MM), compared against "from".')
8557
+ from: z3.string().describe('Earlier calendar month (YYYY-MM), the baseline. Must be strictly before "to".'),
8558
+ to: z3.string().describe('Later calendar month (YYYY-MM), compared against "from".')
8554
8559
  }),
8555
8560
  annotations: readAnnotations(),
8556
8561
  openApiOperations: ["GET /api/v1/projects/{name}/visibility-compare"],
@@ -9602,7 +9607,7 @@ var canonryMcpTools = [
9602
9607
  inputSchema: measurementDraftActionInputSchema,
9603
9608
  annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true, openWorldHint: true }),
9604
9609
  openApiOperations: measurementDraftActionOpenApiOperations,
9605
- handler: runMeasurementDraftAction
9610
+ handler: (client2, input) => runMeasurementDraftAction(client2, input.project, input.operation)
9606
9611
  }),
9607
9612
  defineTool({
9608
9613
  name: "canonry_measurement_plan_deactivate",
@@ -10390,6 +10395,8 @@ export {
10390
10395
  createApiClient,
10391
10396
  ApiClient,
10392
10397
  PACKAGE_VERSION,
10398
+ measurementDraftOperationSchema,
10399
+ runMeasurementDraftAction,
10393
10400
  canonryMcpTools,
10394
10401
  CanonryMcpToolNames
10395
10402
  };