@canonry/canonry 4.130.0 → 4.132.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 (25) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +7 -0
  2. package/assets/assets/{AuditHistoryPanel-Ydzb2Y_Y.js → AuditHistoryPanel-Carj_FCP.js} +1 -1
  3. package/assets/assets/{BacklinksPage-DYodEusK.js → BacklinksPage-CqOTDVIn.js} +1 -1
  4. package/assets/assets/{ChartPrimitives-D67hsnF7.js → ChartPrimitives-EuQ82l0S.js} +1 -1
  5. package/assets/assets/{HistoryPage-_h9ITL1w.js → HistoryPage-D6XQfiLX.js} +1 -1
  6. package/assets/assets/{ProjectPage-fCJKCcHE.js → ProjectPage-Dswa9Ah6.js} +1 -1
  7. package/assets/assets/{RunRow-DzUNyTE-.js → RunRow-ThryEZFR.js} +1 -1
  8. package/assets/assets/{RunsPage-FTvAjptk.js → RunsPage-RFs2WkTC.js} +1 -1
  9. package/assets/assets/{SettingsPage-CvgpYEAt.js → SettingsPage-DoUccn9s.js} +1 -1
  10. package/assets/assets/{TrafficPage-qaMW9k6o.js → TrafficPage-CVvSDZPY.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-CRCso7_A.js → TrafficSourceDetailPage-BTUQUBeS.js} +1 -1
  12. package/assets/assets/{arrow-left-C--lHdP2.js → arrow-left-BoCNqusn.js} +1 -1
  13. package/assets/assets/{extract-error-message-DVqYbKpB.js → extract-error-message-BsfOVrKi.js} +1 -1
  14. package/assets/assets/{index-CdXn0JEf.js → index-jJurRky0.js} +102 -102
  15. package/assets/assets/{trash-2-CyKRU3tR.js → trash-2-BPb4368K.js} +1 -1
  16. package/assets/index.html +1 -1
  17. package/dist/{chunk-WIALMCXM.js → chunk-5FWAPJFX.js} +45 -1
  18. package/dist/{chunk-NVRJZU6V.js → chunk-7BD2ZOPV.js} +90 -0
  19. package/dist/{chunk-5XU6WEMK.js → chunk-QIJKS5KN.js} +1050 -304
  20. package/dist/{chunk-QR5U2K3O.js → chunk-RWTOEEG3.js} +4 -4
  21. package/dist/cli.js +67 -5
  22. package/dist/index.js +4 -4
  23. package/dist/{intelligence-service-53GUE6EI.js → intelligence-service-RU2ACYPY.js} +2 -2
  24. package/dist/mcp.js +2 -2
  25. package/package.json +10 -10
@@ -1 +1 @@
1
- import{c as a}from"./index-CdXn0JEf.js";const c=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],d=a("circle-check",c);const e=[["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"}]],k=a("circle-question-mark",e);const t=[["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"}]],s=a("download",t);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"}]],r=a("external-link",o);const n=[["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"}]],y=a("trash-2",n);export{d as C,s as D,r as E,y as T,k as a};
1
+ import{c as a}from"./index-jJurRky0.js";const c=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],d=a("circle-check",c);const e=[["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"}]],k=a("circle-question-mark",e);const t=[["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"}]],s=a("download",t);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"}]],r=a("external-link",o);const n=[["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"}]],y=a("trash-2",n);export{d as C,s as D,r as E,y as T,k as a};
package/assets/index.html CHANGED
@@ -12,7 +12,7 @@
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-CdXn0JEf.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-jJurRky0.js"></script>
16
16
  <link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-Be8JdV5M.js">
17
17
  <link rel="modulepreload" crossorigin href="./assets/vendor-radix-CQ77EO2y.js">
18
18
  <link rel="modulepreload" crossorigin href="./assets/vendor-recharts-DSxTZhaH.js">
@@ -21,6 +21,8 @@ import {
21
21
  discoveryCompetitorTypeSchema,
22
22
  discoveryPromoteRequestSchema,
23
23
  discoveryRunRequestSchema,
24
+ gaMeasurementAnalysisWindowSchema,
25
+ gaMeasurementHostScopeSchema,
24
26
  keywordBatchRequestSchema,
25
27
  keywordGenerateRequestSchema,
26
28
  notificationCreateRequestSchema,
@@ -39,7 +41,7 @@ import {
39
41
  trafficConnectWordpressRequestSchema,
40
42
  trafficEventKindSchema,
41
43
  trafficSeriesGranularitySchema
42
- } from "./chunk-NVRJZU6V.js";
44
+ } from "./chunk-7BD2ZOPV.js";
43
45
 
44
46
  // src/config.ts
45
47
  import fs from "fs";
@@ -3204,6 +3206,18 @@ var getApiV1ProjectsByNameGaStatus = (options) => {
3204
3206
  ...options
3205
3207
  });
3206
3208
  };
3209
+ var getApiV1ProjectsByNameGaMeasurementAnalysis = (options) => {
3210
+ return (options.client ?? client).get({
3211
+ security: [
3212
+ {
3213
+ scheme: "bearer",
3214
+ type: "http"
3215
+ }
3216
+ ],
3217
+ url: "/api/v1/projects/{name}/ga/measurement-analysis",
3218
+ ...options
3219
+ });
3220
+ };
3207
3221
  var postApiV1ProjectsByNameGaSync = (options) => {
3208
3222
  return (options.client ?? client).post({
3209
3223
  security: [
@@ -5234,6 +5248,15 @@ var ApiClient = class {
5234
5248
  () => getApiV1ProjectsByNameGaStatus({ client: this.heyClient, path: { name: project } })
5235
5249
  );
5236
5250
  }
5251
+ async gaMeasurementAnalysis(project, params) {
5252
+ return this.invoke(
5253
+ () => getApiV1ProjectsByNameGaMeasurementAnalysis({
5254
+ client: this.heyClient,
5255
+ path: { name: project },
5256
+ query: params
5257
+ })
5258
+ );
5259
+ }
5237
5260
  async gaSync(project, body) {
5238
5261
  return this.invoke(
5239
5262
  () => postApiV1ProjectsByNameGaSync({
@@ -6049,6 +6072,13 @@ var gaWindowInputSchema = z2.object({
6049
6072
  var gaTrafficInputSchema = gaWindowInputSchema.extend({
6050
6073
  limit: z2.number().int().positive().max(500).optional()
6051
6074
  });
6075
+ var gaMeasurementAnalysisInputSchema = z2.object({
6076
+ project: projectNameSchema,
6077
+ window: gaMeasurementAnalysisWindowSchema.optional(),
6078
+ hostScope: gaMeasurementHostScopeSchema.optional(),
6079
+ pathPrefix: z2.string().min(1).optional(),
6080
+ limit: z2.number().int().positive().max(100).optional()
6081
+ });
6052
6082
  var queriesInputSchema = z2.object({
6053
6083
  project: projectNameSchema,
6054
6084
  request: queryBatchRequestSchema
@@ -6931,6 +6961,20 @@ var canonryMcpTools = [
6931
6961
  openApiOperations: ["GET /api/v1/projects/{name}/ga/status"],
6932
6962
  handler: (client2, input) => client2.gaStatus(input.project)
6933
6963
  }),
6964
+ defineTool({
6965
+ name: "canonry_ga_measurement_analysis",
6966
+ title: "Analyze GA acquisition and search demand",
6967
+ description: "Compare native GA4 channels and lead events with branded/non-brand Search Console demand over fixed 30-day cohorts.",
6968
+ access: "read",
6969
+ tier: "ga",
6970
+ inputSchema: gaMeasurementAnalysisInputSchema,
6971
+ annotations: readAnnotations(),
6972
+ openApiOperations: ["GET /api/v1/projects/{name}/ga/measurement-analysis"],
6973
+ handler: (client2, input) => client2.gaMeasurementAnalysis(
6974
+ input.project,
6975
+ compactStringParams(input, ["window", "hostScope", "pathPrefix", "limit"])
6976
+ )
6977
+ }),
6934
6978
  defineTool({
6935
6979
  name: "canonry_ga_traffic",
6936
6980
  title: "Get GA traffic",
@@ -216,6 +216,89 @@ var DEFAULT_MEASUREMENT_CONFIG = Object.freeze({
216
216
  var defaultMeasurementConfig = () => createDefaultMeasurementConfig();
217
217
  var gaMeasurementComponentStatusSchema = z2.enum(["never-synced", "ready", "error"]);
218
218
  var gaLeadAttributionScopeSchema = z2.enum(["landing-page", "channel"]);
219
+ var gaMeasurementAnalysisWindowSchema = z2.enum(["30d", "60d", "90d"]);
220
+ var gaMeasurementHostScopeSchema = z2.enum(["marketing", "all"]);
221
+ var analysisDateSchema = z2.iso.date();
222
+ var analysisPeriodSchema = z2.object({
223
+ label: z2.enum(["earliest", "middle", "previous", "latest"]),
224
+ startDate: analysisDateSchema,
225
+ endDate: analysisDateSchema
226
+ });
227
+ var analysisSessionPeriodSchema = analysisPeriodSchema.extend({
228
+ sessions: z2.number().int().nonnegative()
229
+ });
230
+ var analysisEventPeriodSchema = analysisPeriodSchema.extend({
231
+ eventCount: z2.number().int().nonnegative()
232
+ });
233
+ var analysisClickPeriodSchema = analysisPeriodSchema.extend({
234
+ clicks: z2.number().int().nonnegative(),
235
+ impressions: z2.number().int().nonnegative()
236
+ });
237
+ var analysisDemandPeriodSchema = analysisPeriodSchema.extend({
238
+ propertyClicks: z2.number().int().nonnegative(),
239
+ propertyImpressions: z2.number().int().nonnegative(),
240
+ reportedQueryClicks: z2.number().int().nonnegative(),
241
+ reportedQueryImpressions: z2.number().int().nonnegative(),
242
+ brandedClicks: z2.number().int().nonnegative(),
243
+ brandedImpressions: z2.number().int().nonnegative(),
244
+ nonBrandedClicks: z2.number().int().nonnegative(),
245
+ nonBrandedImpressions: z2.number().int().nonnegative(),
246
+ unreportedClicks: z2.number().int().nonnegative(),
247
+ unreportedImpressions: z2.number().int().nonnegative()
248
+ });
249
+ var gaMeasurementAnalysisDtoSchema = z2.object({
250
+ window: gaMeasurementAnalysisWindowSchema,
251
+ bucketDays: z2.literal(30),
252
+ filters: z2.object({
253
+ hostScope: gaMeasurementHostScopeSchema,
254
+ marketingHosts: z2.array(z2.string()),
255
+ pathPrefix: z2.string().nullable(),
256
+ brandTerms: z2.array(z2.string()),
257
+ queryMixScope: z2.literal("property")
258
+ }),
259
+ acquisition: z2.object({
260
+ status: gaMeasurementComponentStatusSchema,
261
+ error: z2.string().nullable(),
262
+ syncedAt: z2.string().datetime().nullable(),
263
+ periods: z2.array(analysisSessionPeriodSchema),
264
+ channels: z2.array(z2.object({
265
+ channelGroup: z2.string(),
266
+ periods: z2.array(analysisSessionPeriodSchema)
267
+ })),
268
+ pages: z2.array(z2.object({
269
+ hostName: z2.string(),
270
+ landingPage: z2.string(),
271
+ periods: z2.array(analysisSessionPeriodSchema)
272
+ }))
273
+ }),
274
+ leads: z2.object({
275
+ status: gaMeasurementComponentStatusSchema,
276
+ error: z2.string().nullable(),
277
+ syncedAt: z2.string().datetime().nullable(),
278
+ attributionScope: gaLeadAttributionScopeSchema.nullable(),
279
+ hostAndPathFiltersApplied: z2.boolean(),
280
+ periods: z2.array(analysisEventPeriodSchema),
281
+ channels: z2.array(z2.object({
282
+ channelGroup: z2.string(),
283
+ periods: z2.array(analysisEventPeriodSchema)
284
+ }))
285
+ }),
286
+ searchDemand: z2.object({
287
+ status: z2.enum(["ready", "unavailable"]),
288
+ periods: z2.array(analysisDemandPeriodSchema),
289
+ queries: z2.array(z2.object({
290
+ query: z2.string(),
291
+ classification: z2.enum(["branded", "non-branded"]),
292
+ periods: z2.array(analysisClickPeriodSchema)
293
+ })),
294
+ pages: z2.array(z2.object({
295
+ hostName: z2.string(),
296
+ landingPage: z2.string(),
297
+ periods: z2.array(analysisClickPeriodSchema)
298
+ })),
299
+ latestDate: analysisDateSchema.nullable()
300
+ })
301
+ });
219
302
 
220
303
  // ../contracts/src/project.ts
221
304
  var configSourceSchema = z3.enum(["cli", "api", "config-file"]);
@@ -3938,6 +4021,10 @@ var ga4SyncResponseDtoSchema = z25.object({
3938
4021
  socialReferralCount: z25.number().int().nonnegative(),
3939
4022
  days: z25.number().int().nonnegative(),
3940
4023
  syncedAt: z25.string(),
4024
+ measurement: z25.object({
4025
+ acquisition: z25.object({ days: z25.number().int().nonnegative(), status: z25.enum(["ready", "error"]), rowCount: z25.number().int().nonnegative(), error: z25.string().optional() }),
4026
+ leads: z25.object({ days: z25.number().int().nonnegative(), status: z25.enum(["ready", "error", "not-configured"]), rowCount: z25.number().int().nonnegative(), attributionScope: z25.enum(["landing-page", "channel"]).optional(), error: z25.string().optional() })
4027
+ }),
3941
4028
  /**
3942
4029
  * Components that were written this run. Present when `only` is set.
3943
4030
  * Always includes `traffic` and `summary` (the share denominator) plus
@@ -7285,6 +7372,9 @@ export {
7285
7372
  internalError,
7286
7373
  runtimeStateMissing,
7287
7374
  DEFAULT_MEASUREMENT_CONFIG,
7375
+ gaMeasurementAnalysisWindowSchema,
7376
+ gaMeasurementHostScopeSchema,
7377
+ gaMeasurementAnalysisDtoSchema,
7288
7378
  findDuplicateLocationLabels,
7289
7379
  hasLocationLabel,
7290
7380
  orderLocationsDefaultFirst,