@canonry/canonry 7.45.0 → 7.45.2

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 (37) hide show
  1. package/README.md +2 -0
  2. package/assets/agent-workspace/skills/canonry/references/google-business-profile.md +3 -3
  3. package/assets/assets/{AuditHistoryPanel-CZOskgSK.js → AuditHistoryPanel-BJDLPf4D.js} +1 -1
  4. package/assets/assets/{BacklinksPage-CgyR9Ydh.js → BacklinksPage-BDbYMh4s.js} +1 -1
  5. package/assets/assets/{HistoryPage-luN-L4CJ.js → HistoryPage-B9c7cjV4.js} +1 -1
  6. package/assets/assets/{MeasurementPropertyPage-B0vFWHFx.js → MeasurementPropertyPage-B2wDvzLz.js} +1 -1
  7. package/assets/assets/{ProjectPage-BkLOWkz9.js → ProjectPage-Cgj5ZmRt.js} +1 -1
  8. package/assets/assets/{RunsPage-CeW09PIZ.js → RunsPage-DNJpOT2C.js} +1 -1
  9. package/assets/assets/{SettingsPage-C4jww6eS.js → SettingsPage-BJABQP0W.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-DXxY03vO.js → SiteHealthSection-Co-YnYL1.js} +3 -3
  11. package/assets/assets/{TrafficPage-DvUYZXne.js → TrafficPage-DGks1U43.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-DG-6Vn9Z.js → TrafficSourceDetailPage-B9EC-koW.js} +1 -1
  13. package/assets/assets/{extract-error-message-1VWodBea.js → extract-error-message-BnQj6MRg.js} +1 -1
  14. package/assets/assets/{index-rBPSQ6B7.js → index-CQ2txiby.js} +3 -3
  15. package/assets/assets/{react-sigma_core.esm.min-Cm1_Mhdd.js → react-sigma_core.esm.min-DMBVhOEe.js} +1 -1
  16. package/assets/assets/{v2-overview-adapter-DSOkIdKV.js → v2-overview-adapter-DUYXYO7p.js} +1 -1
  17. package/assets/index.html +1 -1
  18. package/dist/{chunk-K3AEOEB7.js → chunk-55QNMM7V.js} +3 -3
  19. package/dist/{chunk-3T3JQB2J.js → chunk-5A57TIOK.js} +2 -2
  20. package/dist/{chunk-3MGCNSUL.js → chunk-6333IHPS.js} +5 -0
  21. package/dist/{chunk-73YOKKHS.js → chunk-E7BG7QGP.js} +87 -68
  22. package/dist/{chunk-H4YKQAY7.js → chunk-KMMOYVAO.js} +3 -3
  23. package/dist/{chunk-A2RC2Y24.js → chunk-KVUBP25C.js} +20 -10
  24. package/dist/{chunk-JAQNHQGR.js → chunk-KZS5N3JH.js} +1 -1
  25. package/dist/{chunk-TH7WZBUX.js → chunk-MBOOXUPV.js} +23 -83
  26. package/dist/{chunk-D42JVABX.js → chunk-T2MBKWUP.js} +2 -2
  27. package/dist/{chunk-6HUFI2G5.js → chunk-ZJUP7CHK.js} +24 -18
  28. package/dist/{cli-catalog-6ABJHAAK.js → cli-catalog-E45QWSSR.js} +3 -3
  29. package/dist/cli-commands-E2TXR3OQ.js +15 -0
  30. package/dist/cli.js +10 -10
  31. package/dist/{demo-server-ZNK2UDRJ.js → demo-server-M45RUD4A.js} +5 -5
  32. package/dist/index.d.ts +33588 -4
  33. package/dist/index.js +6 -6
  34. package/dist/{intelligence-service-MDXUBZPJ.js → intelligence-service-FWOKBYOM.js} +2 -2
  35. package/dist/mcp.js +4 -4
  36. package/package.json +30 -30
  37. package/dist/cli-commands-OLFYNI6A.js +0 -15
@@ -31,7 +31,7 @@ import {
31
31
  trackFeatureCompleted,
32
32
  trackIntegrationConnection,
33
33
  waitForServerRuntimeStartup
34
- } from "./chunk-A2RC2Y24.js";
34
+ } from "./chunk-KVUBP25C.js";
35
35
  import {
36
36
  clearDashboardPassword,
37
37
  configExists,
@@ -50,7 +50,7 @@ import {
50
50
  saveConfigPatch,
51
51
  shouldPrintServeSkillsNudge,
52
52
  withBootstrapProviderDefaults
53
- } from "./chunk-3T3JQB2J.js";
53
+ } from "./chunk-5A57TIOK.js";
54
54
  import {
55
55
  emitJsonl,
56
56
  getBoolean,
@@ -64,16 +64,20 @@ import {
64
64
  resolveCliAccess,
65
65
  stringOption,
66
66
  unknownSubcommand
67
- } from "./chunk-JAQNHQGR.js";
67
+ } from "./chunk-KZS5N3JH.js";
68
68
  import {
69
69
  DEFAULT_DEMO_TRUSTED_PROXIES,
70
70
  trustedProxiesProblem,
71
71
  trustedProxyProblem
72
72
  } from "./chunk-RB2F4D3Z.js";
73
73
  import {
74
+ dedupeGscSitemapUrls,
74
75
  measurementDraftOperationSchema,
75
- runMeasurementDraftAction
76
- } from "./chunk-73YOKKHS.js";
76
+ requireGscSitemapUrls,
77
+ resolveDiscoveredGscSitemapUrls,
78
+ runMeasurementDraftAction,
79
+ submitGscSitemapBatches
80
+ } from "./chunk-E7BG7QGP.js";
77
81
  import {
78
82
  CANONRY_DISCORD_URL,
79
83
  CANONRY_ISSUES_URL,
@@ -118,7 +122,7 @@ import {
118
122
  rawEventSamples,
119
123
  readMarketCompetitorNames,
120
124
  runs
121
- } from "./chunk-6HUFI2G5.js";
125
+ } from "./chunk-ZJUP7CHK.js";
122
126
  import {
123
127
  AdsDeliverySnapshotStatuses,
124
128
  AdsHistoricalCampaignRollupStatuses,
@@ -274,7 +278,7 @@ import {
274
278
  visibilityCompareSelectionSchema,
275
279
  visibilityReportRequestSchema,
276
280
  winnabilityClassSchema
277
- } from "./chunk-3MGCNSUL.js";
281
+ } from "./chunk-6333IHPS.js";
278
282
 
279
283
  // src/cli-commands/sentiment.ts
280
284
  import "zod";
@@ -582,7 +586,7 @@ function parseDemoTrustedProxies(values) {
582
586
  async function demoCommand(options) {
583
587
  const { host, port } = parseDemoListenOptions(options);
584
588
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
585
- const { createDemoServer } = await import("./demo-server-ZNK2UDRJ.js");
589
+ const { createDemoServer } = await import("./demo-server-M45RUD4A.js");
586
590
  const app = await createDemoServer({ trustProxy });
587
591
  let stopping = false;
588
592
  const stop = () => {
@@ -996,7 +1000,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
996
1000
  }
997
1001
  }
998
1002
  async function backfillInsightsCommand(project2, opts) {
999
- const { IntelligenceService } = await import("./intelligence-service-MDXUBZPJ.js");
1003
+ const { IntelligenceService } = await import("./intelligence-service-FWOKBYOM.js");
1000
1004
  const config = loadConfig();
1001
1005
  const db = createClient(config.database);
1002
1006
  migrate(db);
@@ -10575,11 +10579,8 @@ function sitemapSubmittedUrlTotal(contents) {
10575
10579
  if (!contents?.length) return "?";
10576
10580
  return contents.reduce((total, content) => total + (Number.parseInt(content.submitted, 10) || 0), 0);
10577
10581
  }
10578
- function dedupeSitemapUrls(urls) {
10579
- return [...new Set(urls.map((url) => url.trim()).filter(Boolean))];
10580
- }
10581
10582
  async function submitGscSitemaps(client, project2, opts) {
10582
- const explicitUrls = dedupeSitemapUrls(opts.sitemapUrls ?? []);
10583
+ const explicitUrls = dedupeGscSitemapUrls(opts.sitemapUrls ?? []);
10583
10584
  const modes = Number(explicitUrls.length > 0) + Number(Boolean(opts.configured)) + Number(Boolean(opts.all)) + Number(Boolean(opts.allFiles));
10584
10585
  if (modes !== 1) {
10585
10586
  throw new CliError({
@@ -10609,77 +10610,16 @@ async function submitGscSitemaps(client, project2, opts) {
10609
10610
  details: { command: "google.submit-sitemap", project: project2 }
10610
10611
  });
10611
10612
  }
10612
- sitemapUrls = dedupeSitemapUrls([sitemapUrl]);
10613
+ sitemapUrls = dedupeGscSitemapUrls([sitemapUrl]);
10613
10614
  } else if (opts.all || opts.allFiles) {
10614
- const topLevel = await client.gscSitemaps(project2);
10615
- if (opts.all) {
10616
- sitemapUrls = dedupeSitemapUrls(
10617
- topLevel.preferredSubmissionUrls.length > 0 ? topLevel.preferredSubmissionUrls : topLevel.sitemaps.map((sitemap) => sitemap.path)
10618
- );
10619
- } else if (opts.allFiles) {
10620
- const indexes = topLevel.sitemaps.filter((sitemap) => sitemap.isSitemapsIndex).map((sitemap) => sitemap.path);
10621
- const children = [];
10622
- for (let offset = 0; offset < indexes.length; offset += 4) {
10623
- children.push(...await Promise.all(
10624
- indexes.slice(offset, offset + 4).map((sitemapIndex) => client.gscSitemaps(project2, { sitemapIndex }))
10625
- ));
10626
- }
10627
- const expandedIndexUrls = children.flatMap(
10628
- (result, index) => result.sitemaps.length > 0 ? result.sitemaps.map((sitemap) => sitemap.path) : [indexes[index]]
10629
- );
10630
- sitemapUrls = dedupeSitemapUrls([
10631
- ...topLevel.sitemaps.filter((sitemap) => !sitemap.isSitemapsIndex).map((sitemap) => sitemap.path),
10632
- ...expandedIndexUrls
10633
- ]);
10634
- }
10635
- if (sitemapUrls.length === 0) {
10636
- throw new CliError({
10637
- code: "CLI_USAGE_ERROR",
10638
- message: "no GSC sitemaps found; provide a URL or use --configured",
10639
- displayMessage: "Error: no GSC sitemaps found; provide a URL or use --configured",
10640
- details: { command: "google.submit-sitemap", project: project2 }
10641
- });
10642
- }
10643
- }
10644
- const batches = opts.all || opts.allFiles ? Array.from({ length: Math.ceil(sitemapUrls.length / 50) }, (_, index) => sitemapUrls.slice(index * 50, index * 50 + 50)) : [sitemapUrls];
10645
- const aggregate = {
10646
- summary: { total: 0, accepted: 0, failed: 0 },
10647
- results: []
10648
- };
10649
- for (const [index, batchSitemapUrls] of batches.entries()) {
10650
- try {
10651
- const result = await client.gscSubmitSitemaps(project2, { sitemapUrls: batchSitemapUrls });
10652
- aggregate.summary.total += result.summary.total;
10653
- aggregate.summary.accepted += result.summary.accepted;
10654
- aggregate.summary.failed += result.summary.failed;
10655
- aggregate.results.push(...result.results);
10656
- opts.onProgress?.(index + 1, batches.length);
10657
- } catch (cause) {
10658
- if (index === 0) throw cause;
10659
- const attempted = aggregate.summary.total + batchSitemapUrls.length;
10660
- const remaining = sitemapUrls.length - attempted;
10661
- const causeDetails = cause instanceof CliError ? { code: cause.code, message: cause.message, details: cause.details } : { message: describeError(cause) };
10662
- throw new CliError({
10663
- code: "GOOGLE_SITEMAP_SUBMISSION_PARTIAL",
10664
- message: `Sitemap submission stopped at batch ${index + 1}/${batches.length}; ${aggregate.summary.accepted} accepted, ${aggregate.summary.failed} failed, ${batchSitemapUrls.length} unconfirmed, ${remaining} not attempted.`,
10665
- displayMessage: `Sitemap submission stopped at batch ${index + 1}/${batches.length}; ${aggregate.summary.accepted} accepted, ${aggregate.summary.failed} failed, ${batchSitemapUrls.length} unconfirmed, ${remaining} not attempted. Earlier accepted submissions were not rolled back.`,
10666
- exitCode: cause instanceof CliError && cause.exitCode === 1 ? 1 : EXIT_SYSTEM_ERROR,
10667
- details: {
10668
- project: project2,
10669
- accepted: aggregate.summary.accepted,
10670
- failed: aggregate.summary.failed,
10671
- completed: aggregate.summary.total,
10672
- attempted,
10673
- unconfirmed: batchSitemapUrls.length,
10674
- remaining,
10675
- unconfirmedBatch: { index: index + 1, total: batches.length, sitemapUrls: batchSitemapUrls },
10676
- partialResult: aggregate,
10677
- cause: causeDetails
10678
- }
10679
- });
10680
- }
10615
+ sitemapUrls = await resolveDiscoveredGscSitemapUrls(
10616
+ client,
10617
+ project2,
10618
+ opts.allFiles ? "all-files" : "indexes"
10619
+ );
10620
+ requireGscSitemapUrls(project2, sitemapUrls);
10681
10621
  }
10682
- return aggregate;
10622
+ return submitGscSitemapBatches(client, project2, sitemapUrls, opts);
10683
10623
  }
10684
10624
  async function googleSubmitSitemaps(project2, opts) {
10685
10625
  const client = getClient11();
@@ -19438,7 +19378,7 @@ var SYSTEM_CLI_COMMANDS = [
19438
19378
  options: { access: stringOption() },
19439
19379
  run: async (input) => {
19440
19380
  if (input.positionals.length > 1) throw usageError("Expected at most one command group");
19441
- const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-6ABJHAAK.js"), import("./cli-commands-OLFYNI6A.js")]);
19381
+ const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-E45QWSSR.js"), import("./cli-commands-E2TXR3OQ.js")]);
19442
19382
  printCliCatalog(REGISTERED_CLI_COMMANDS2, input.format, input.positionals[0], getString(input.values, "access"));
19443
19383
  }
19444
19384
  },
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-6HUFI2G5.js";
8
+ } from "./chunk-ZJUP7CHK.js";
9
9
  import {
10
10
  SITE_CRAWL_GRAPH_MAX_EDGES,
11
11
  SITE_CRAWL_GRAPH_MAX_NODES,
@@ -15,7 +15,7 @@ import {
15
15
  factorStatusFromDistribution,
16
16
  factorStatusFromScore,
17
17
  roundPreservingTotal
18
- } from "./chunk-3MGCNSUL.js";
18
+ } from "./chunk-6333IHPS.js";
19
19
 
20
20
  // src/site-audit-factors.ts
21
21
  function recordedSharePct(factor) {
@@ -483,6 +483,7 @@ import {
483
483
  googleMarketingOAuthConnectRequestSchema,
484
484
  googleMarketingOAuthConnectResponseSchema,
485
485
  googleMarketingProviderSchema,
486
+ googleOAuthStartResponseSchema,
486
487
  gradedReportMonths,
487
488
  groupIsoDateRanges,
488
489
  gscCoverageSnapshotDtoSchema,
@@ -912,7 +913,7 @@ import {
912
913
  wordpressSchemaDeployResultDtoSchema,
913
914
  wordpressSchemaStatusResultDtoSchema,
914
915
  wordpressStatusDtoSchema
915
- } from "./chunk-3MGCNSUL.js";
916
+ } from "./chunk-6333IHPS.js";
916
917
 
917
918
  // src/intelligence-service.ts
918
919
  import { eq as eq99, desc as desc45, asc as asc20, and as and82, ne as ne17, or as or24, inArray as inArray40, gte as gte26, lte as lte23, isNull as isNull19, sql as sql37, exists as exists2 } from "drizzle-orm";
@@ -2548,7 +2549,7 @@ var gaTrafficSnapshots = sqliteTable("ga_traffic_snapshots", {
2548
2549
  landingPage: text("landing_page").notNull(),
2549
2550
  /**
2550
2551
  * Canonicalized form of `landingPage` produced by `normalizeUrlPath()` in
2551
- * `@ainyc/canonry-contracts`. Nullable so existing rows survive migration;
2552
+ * `@canonry/canonry-contracts`. Nullable so existing rows survive migration;
2552
2553
  * new GA4 sync writes populate it. Per-page aggregations should
2553
2554
  * `GROUP BY COALESCE(landing_page_normalized, landing_page)` so
2554
2555
  * partially-backfilled state still aggregates correctly.
@@ -40381,6 +40382,7 @@ var SCHEMA_TABLE = {
40381
40382
  GoogleMarketingDisconnectResponse: googleMarketingDisconnectResponseSchema,
40382
40383
  GoogleMarketingOAuthConnectRequest: googleMarketingOAuthConnectRequestSchema,
40383
40384
  GoogleMarketingOAuthConnectResponse: googleMarketingOAuthConnectResponseSchema,
40385
+ GoogleOAuthStartResponse: googleOAuthStartResponseSchema,
40384
40386
  GscCoverageSnapshotDto: gscCoverageSnapshotDtoSchema,
40385
40387
  GscCoverageSummaryDto: gscCoverageSummaryDtoSchema,
40386
40388
  GscDeindexedRowDto: gscDeindexedRowSchema,
@@ -44526,7 +44528,7 @@ var routeCatalog = [
44526
44528
  }
44527
44529
  },
44528
44530
  responses: {
44529
- 200: rawJsonResponse("Google auth URL returned.", { type: "object", properties: { url: { type: "string" } } }),
44531
+ 200: jsonResponse("Google auth URL returned.", "GoogleOAuthStartResponse"),
44530
44532
  400: errorResponse("Invalid Google connection request.")
44531
44533
  }
44532
44534
  },
@@ -51084,6 +51086,7 @@ async function fetchSearchLandingPages(accessToken, propertyId, options = {}) {
51084
51086
  var GBP_SCOPE = "https://www.googleapis.com/auth/business.manage";
51085
51087
  var GBP_ACCOUNT_MANAGEMENT_BASE = "https://mybusinessaccountmanagement.googleapis.com/v1";
51086
51088
  var GBP_BUSINESS_INFO_BASE = "https://mybusinessbusinessinformation.googleapis.com/v1";
51089
+ var GBP_PLACE_ACTIONS_BASE = "https://mybusinessplaceactions.googleapis.com/v1";
51087
51090
  var GBP_LEGACY_V4_BASE = "https://mybusiness.googleapis.com/v4";
51088
51091
  var GBP_PERFORMANCE_BASE = "https://businessprofileperformance.googleapis.com/v1";
51089
51092
  var GBP_LODGING_BASE = "https://mybusinesslodging.googleapis.com/v1";
@@ -51353,7 +51356,7 @@ async function listPlaceActionLinks(accessToken, locationName, opts = {}) {
51353
51356
  let pageToken;
51354
51357
  let page3 = 0;
51355
51358
  do {
51356
- const url = new URL(`${GBP_BUSINESS_INFO_BASE}/${locationName}/placeActionLinks`);
51359
+ const url = new URL(`${GBP_PLACE_ACTIONS_BASE}/${locationName}/placeActionLinks`);
51357
51360
  url.searchParams.set("pageSize", String(GBP_DEFAULT_PAGE_SIZE));
51358
51361
  if (pageToken) url.searchParams.set("pageToken", pageToken);
51359
51362
  const res = await gbpFetchGet(url.toString(), accessToken, opts);
@@ -51617,6 +51620,18 @@ function isSitemapOwnedByProperty(sitemapUrl, propertyId, canonicalDomain) {
51617
51620
  return false;
51618
51621
  }
51619
51622
  }
51623
+ function googleConnectionDto(connection) {
51624
+ return {
51625
+ id: `${connection.domain}:${connection.connectionType}`,
51626
+ domain: connection.domain,
51627
+ connectionType: connection.connectionType,
51628
+ propertyId: connection.propertyId ?? null,
51629
+ sitemapUrl: connection.sitemapUrl ?? null,
51630
+ scopes: connection.scopes ?? [],
51631
+ createdAt: connection.createdAt,
51632
+ updatedAt: connection.updatedAt
51633
+ };
51634
+ }
51620
51635
  async function getValidToken(store, domain, connectionType, clientId, clientSecret) {
51621
51636
  const conn = store.getConnection(domain, connectionType);
51622
51637
  if (!conn) {
@@ -51750,16 +51765,7 @@ async function googleRoutes(app, opts) {
51750
51765
  app.get("/projects/:name/google/connections", async (request) => {
51751
51766
  const project = resolveProject(app.db, request.params.name);
51752
51767
  const conns = opts.googleConnectionStore?.listConnections(project.canonicalDomain) ?? [];
51753
- return conns.map((connection) => ({
51754
- id: `${connection.domain}:${connection.connectionType}`,
51755
- domain: connection.domain,
51756
- connectionType: connection.connectionType,
51757
- propertyId: connection.propertyId ?? null,
51758
- sitemapUrl: connection.sitemapUrl ?? null,
51759
- scopes: connection.scopes ?? [],
51760
- createdAt: connection.createdAt,
51761
- updatedAt: connection.updatedAt
51762
- }));
51768
+ return conns.map(googleConnectionDto);
51763
51769
  });
51764
51770
  app.post("/projects/:name/google/connect", connectionRoute(app, (request) => {
51765
51771
  const integration = googleIntegration(request.body?.type);
@@ -52694,7 +52700,7 @@ async function googleRoutes(app, opts) {
52694
52700
  if (!conn) {
52695
52701
  throw notFound("Google connection", request.params.type);
52696
52702
  }
52697
- return { sitemapUrl: sitemapUrl.trim() };
52703
+ return googleConnectionDto(conn);
52698
52704
  });
52699
52705
  app.put("/projects/:name/google/connections/:type/property", connectionRoute(app, (request) => {
52700
52706
  const integration = googleIntegration(request.params.type);
@@ -52715,7 +52721,7 @@ async function googleRoutes(app, opts) {
52715
52721
  attempt.failed(void 0, "NOT_CONNECTED");
52716
52722
  throw notFound("Google connection", request.params.type);
52717
52723
  }
52718
- return { propertyId };
52724
+ return googleConnectionDto(conn);
52719
52725
  }));
52720
52726
  app.post("/projects/:name/google/indexing/request", async (request) => {
52721
52727
  const { clientId: googleClientId, clientSecret: googleClientSecret } = getAuthConfig();
@@ -87484,7 +87490,7 @@ var INTEGRATION_SYNC_CHECKS = SPECS.map((spec) => ({
87484
87490
  var API_HOST_TABLE = {
87485
87491
  gsc: [new URL(GSC_API_BASE).hostname, new URL(URL_INSPECTION_API).hostname, new URL(GOOGLE_TOKEN_URL).hostname],
87486
87492
  ga: [new URL(GA4_DATA_API_BASE).hostname, new URL(GA4_ADMIN_API_BASE).hostname, new URL(GOOGLE_TOKEN_URL).hostname],
87487
- gbp: [new URL(GBP_ACCOUNT_MANAGEMENT_BASE).hostname, new URL(GBP_BUSINESS_INFO_BASE).hostname, new URL(GBP_PERFORMANCE_BASE).hostname, new URL(GBP_LEGACY_V4_BASE).hostname, new URL(GBP_LODGING_BASE).hostname, new URL(GOOGLE_TOKEN_URL).hostname],
87493
+ gbp: [new URL(GBP_ACCOUNT_MANAGEMENT_BASE).hostname, new URL(GBP_BUSINESS_INFO_BASE).hostname, new URL(GBP_PLACE_ACTIONS_BASE).hostname, new URL(GBP_PERFORMANCE_BASE).hostname, new URL(GBP_LEGACY_V4_BASE).hostname, new URL(GBP_LODGING_BASE).hostname, new URL(GOOGLE_TOKEN_URL).hostname],
87488
87494
  "google-ads": ["googleads.googleapis.com", "oauth2.googleapis.com"],
87489
87495
  gtm: ["tagmanager.googleapis.com", "oauth2.googleapis.com"],
87490
87496
  bing: [new URL(BING_WMT_API_BASE).hostname],
@@ -95329,7 +95335,7 @@ var IntelligenceService = class {
95329
95335
  /**
95330
95336
  * Re-classify each regression insight's severity using GSC traffic +
95331
95337
  * recurrence signals via the pure `classifyRegressionSeverity` primitive
95332
- * in @ainyc/canonry-intelligence. Non-regression insights are returned
95338
+ * in @canonry/canonry-intelligence. Non-regression insights are returned
95333
95339
  * untouched.
95334
95340
  */
95335
95341
  applySeverityTiering(rawInsights, excludeRunId, projectId) {
@@ -3,10 +3,10 @@ import {
3
3
  buildCliCatalog,
4
4
  printCliCatalog,
5
5
  renderTopLevelHelp
6
- } from "./chunk-H4YKQAY7.js";
7
- import "./chunk-JAQNHQGR.js";
6
+ } from "./chunk-KMMOYVAO.js";
7
+ import "./chunk-KZS5N3JH.js";
8
8
  import "./chunk-HGMYEDAQ.js";
9
- import "./chunk-3MGCNSUL.js";
9
+ import "./chunk-6333IHPS.js";
10
10
  export {
11
11
  CLI_ROOT_SUMMARIES,
12
12
  buildCliCatalog,
@@ -0,0 +1,15 @@
1
+ import {
2
+ REGISTERED_CLI_COMMANDS
3
+ } from "./chunk-MBOOXUPV.js";
4
+ import "./chunk-KVUBP25C.js";
5
+ import "./chunk-5A57TIOK.js";
6
+ import "./chunk-KZS5N3JH.js";
7
+ import "./chunk-RB2F4D3Z.js";
8
+ import "./chunk-T2MBKWUP.js";
9
+ import "./chunk-E7BG7QGP.js";
10
+ import "./chunk-HGMYEDAQ.js";
11
+ import "./chunk-ZJUP7CHK.js";
12
+ import "./chunk-6333IHPS.js";
13
+ export {
14
+ REGISTERED_CLI_COMMANDS
15
+ };
package/dist/cli.js CHANGED
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  autoSyncSkills,
4
4
  formatAutoSyncNotice
5
- } from "./chunk-K3AEOEB7.js";
5
+ } from "./chunk-55QNMM7V.js";
6
6
  import {
7
7
  accessFilterFromArgs,
8
8
  dispatchRegisteredCommand,
9
9
  printCliCatalog
10
- } from "./chunk-H4YKQAY7.js";
10
+ } from "./chunk-KMMOYVAO.js";
11
11
  import {
12
12
  REGISTERED_CLI_COMMANDS,
13
13
  buildSetupState,
14
14
  consumePendingServeHandoff,
15
15
  serveCommand
16
- } from "./chunk-TH7WZBUX.js";
16
+ } from "./chunk-MBOOXUPV.js";
17
17
  import {
18
18
  checkLatestVersionForCli,
19
19
  cliRuntimeContext,
@@ -27,14 +27,14 @@ import {
27
27
  showFirstRunNotice,
28
28
  trackCliCommandFinished,
29
29
  trackEvent
30
- } from "./chunk-A2RC2Y24.js";
31
- import "./chunk-3T3JQB2J.js";
30
+ } from "./chunk-KVUBP25C.js";
31
+ import "./chunk-5A57TIOK.js";
32
32
  import {
33
33
  resolveCliAccess
34
- } from "./chunk-JAQNHQGR.js";
34
+ } from "./chunk-KZS5N3JH.js";
35
35
  import "./chunk-RB2F4D3Z.js";
36
- import "./chunk-D42JVABX.js";
37
- import "./chunk-73YOKKHS.js";
36
+ import "./chunk-T2MBKWUP.js";
37
+ import "./chunk-E7BG7QGP.js";
38
38
  import {
39
39
  CliError,
40
40
  EXIT_SYSTEM_ERROR,
@@ -42,10 +42,10 @@ import {
42
42
  printCliError,
43
43
  usageError
44
44
  } from "./chunk-HGMYEDAQ.js";
45
- import "./chunk-6HUFI2G5.js";
45
+ import "./chunk-ZJUP7CHK.js";
46
46
  import {
47
47
  OperationAccesses
48
- } from "./chunk-3MGCNSUL.js";
48
+ } from "./chunk-6333IHPS.js";
49
49
 
50
50
  // src/cli.ts
51
51
  import { pathToFileURL } from "url";
@@ -5,11 +5,11 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-D42JVABX.js";
8
+ } from "./chunk-T2MBKWUP.js";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  canonryMcpTools
12
- } from "./chunk-73YOKKHS.js";
12
+ } from "./chunk-E7BG7QGP.js";
13
13
  import "./chunk-HGMYEDAQ.js";
14
14
  import {
15
15
  HISTORY_WINDOW_RUNS,
@@ -86,7 +86,7 @@ import {
86
86
  siteCrawlPages,
87
87
  siteCrawlSnapshots,
88
88
  trafficSources
89
- } from "./chunk-6HUFI2G5.js";
89
+ } from "./chunk-ZJUP7CHK.js";
90
90
  import {
91
91
  RunKinds,
92
92
  SiteCrawlFetchStates,
@@ -116,7 +116,7 @@ import {
116
116
  roundPreservingTotal,
117
117
  siteAuditPageFactorSchema,
118
118
  wilsonInterval
119
- } from "./chunk-3MGCNSUL.js";
119
+ } from "./chunk-6333IHPS.js";
120
120
 
121
121
  // src/demo-server.ts
122
122
  import { dirname, join as join2 } from "path";
@@ -1882,7 +1882,7 @@ function harborDraft(plan) {
1882
1882
  label: target.label,
1883
1883
  status: "included",
1884
1884
  aliases: target.aliases,
1885
- urlMatchers: target.urlMatchers.map((matcher) => matcher.kind === "prefix" ? `https://${matcher.host}${matcher.pathPrefix}/*` : matcher.kind === "host" ? matcher.host : matcher.url),
1885
+ urlMatchers: target.urlMatchers.map((matcher) => matcher.kind === "prefix" ? `https://${matcher.host}${matcher.pathPrefix === "/" ? "" : matcher.pathPrefix}/*` : matcher.kind === "host" ? matcher.host : matcher.url),
1886
1886
  source: "sitemap",
1887
1887
  discoveredUrl: `https://${target.urlMatchers[0].kind === "prefix" ? target.urlMatchers[0].host + target.urlMatchers[0].pathPrefix : "harbor-resorts.example"}`,
1888
1888
  discoveryIdentity: target.discoveryIdentity ?? void 0