@ainyc/canonry 4.71.1 → 4.72.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 (25) hide show
  1. package/assets/agent-workspace/skills/aero/references/regression-playbook.md +1 -1
  2. package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +7 -0
  3. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +20 -2
  4. package/assets/assets/{BacklinksPage-CQNPYiDA.js → BacklinksPage-CjfpwZEH.js} +1 -1
  5. package/assets/assets/{ChartPrimitives-BShpLrpS.js → ChartPrimitives-Ckf2FrUy.js} +1 -1
  6. package/assets/assets/{ProjectPage-CJLw1m4O.js → ProjectPage-DZeplYeC.js} +6 -6
  7. package/assets/assets/{RunRow-Dq1vs1hA.js → RunRow-BuFyG0V_.js} +1 -1
  8. package/assets/assets/{RunsPage-CBMa2xWh.js → RunsPage-D-pr000K.js} +1 -1
  9. package/assets/assets/{SettingsPage-B_XeJDdg.js → SettingsPage-CiaapCYn.js} +1 -1
  10. package/assets/assets/{TrafficPage-vJv_Mf6f.js → TrafficPage-B40xytJD.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-C3yFwVmQ.js → TrafficSourceDetailPage-7hHem-gM.js} +1 -1
  12. package/assets/assets/{extract-error-message-CIpeBFLl.js → extract-error-message-3GkDsu1h.js} +1 -1
  13. package/assets/assets/{index-BXLM3-cs.js → index-BVdH2O9w.js} +77 -77
  14. package/assets/assets/{server-traffic-Yt3jIi3g.js → server-traffic-CsgPsudZ.js} +1 -1
  15. package/assets/assets/{trash-2-xGvNHhEj.js → trash-2-B8Ipf9rI.js} +1 -1
  16. package/assets/index.html +1 -1
  17. package/dist/{chunk-CWEV3YMZ.js → chunk-BRXQKUGY.js} +92 -4
  18. package/dist/{chunk-ETJDAMGA.js → chunk-J7SDOU2J.js} +616 -89
  19. package/dist/{chunk-ZNWMVYYU.js → chunk-NYZSY5QJ.js} +126 -7
  20. package/dist/{chunk-5FM7QRYD.js → chunk-SJI6JGPN.js} +1249 -1005
  21. package/dist/cli.js +306 -84
  22. package/dist/index.js +4 -4
  23. package/dist/{intelligence-service-ISO4VGEC.js → intelligence-service-JNF3JRFR.js} +2 -2
  24. package/dist/mcp.js +2 -2
  25. package/package.json +9 -9
package/dist/cli.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  setTelemetrySource,
28
28
  showFirstRunNotice,
29
29
  trackEvent
30
- } from "./chunk-CWEV3YMZ.js";
30
+ } from "./chunk-BRXQKUGY.js";
31
31
  import {
32
32
  CliError,
33
33
  EXIT_SYSTEM_ERROR,
@@ -44,7 +44,7 @@ import {
44
44
  saveConfig,
45
45
  saveConfigPatch,
46
46
  usageError
47
- } from "./chunk-ZNWMVYYU.js";
47
+ } from "./chunk-NYZSY5QJ.js";
48
48
  import {
49
49
  apiKeys,
50
50
  createClient,
@@ -52,7 +52,7 @@ import {
52
52
  projects,
53
53
  queries,
54
54
  renderReportHtml
55
- } from "./chunk-ETJDAMGA.js";
55
+ } from "./chunk-J7SDOU2J.js";
56
56
  import {
57
57
  CcReleaseSyncStatuses,
58
58
  CheckScopes,
@@ -69,8 +69,9 @@ import {
69
69
  normalizeProjectAliases,
70
70
  notificationEventSchema,
71
71
  providerQuotaPolicySchema,
72
- resolveProviderInput
73
- } from "./chunk-5FM7QRYD.js";
72
+ resolveProviderInput,
73
+ winnabilityClassSchema
74
+ } from "./chunk-SJI6JGPN.js";
74
75
 
75
76
  // src/cli.ts
76
77
  import { pathToFileURL } from "url";
@@ -2548,7 +2549,7 @@ async function gaSocialReferralSummary(project, opts) {
2548
2549
  console.log(` Sessions: ${traffic.socialSessions} (${traffic.socialSharePct}% of ${traffic.totalSessions} total)`);
2549
2550
  console.log(` Users: ${traffic.socialUsers}`);
2550
2551
  console.log();
2551
- const fmtTrend = (pct2) => pct2 === null ? "n/a" : `${pct2 >= 0 ? "+" : ""}${pct2}%`;
2552
+ const fmtTrend = (pct3) => pct3 === null ? "n/a" : `${pct3 >= 0 ? "+" : ""}${pct3}%`;
2552
2553
  console.log(` 7d trend: ${fmtTrend(trend.trend7dPct)} (${trend.socialSessions7d} vs ${trend.socialSessionsPrev7d})`);
2553
2554
  console.log(` 30d trend: ${fmtTrend(trend.trend30dPct)} (${trend.socialSessions30d} vs ${trend.socialSessionsPrev30d})`);
2554
2555
  if (trend.biggestMover) {
@@ -2591,7 +2592,7 @@ async function gaSocialReferralSummary(project, opts) {
2591
2592
  async function gaAttribution(project, opts) {
2592
2593
  const client = getClient5();
2593
2594
  const traffic = await client.gaTraffic(project);
2594
- const fmtTrend = (pct2) => pct2 === null ? "n/a" : `${pct2 >= 0 ? "+" : ""}${pct2}%`;
2595
+ const fmtTrend = (pct3) => pct3 === null ? "n/a" : `${pct3 >= 0 ? "+" : ""}${pct3}%`;
2595
2596
  if (opts?.trend) {
2596
2597
  const trend = await client.gaAttributionTrend(project);
2597
2598
  if (isMachineFormat(opts.format)) {
@@ -3155,9 +3156,9 @@ async function gbpPlaces(project, opts) {
3155
3156
  console.log(` ${p.locationName} [${p.tier}] ${amenities}`);
3156
3157
  }
3157
3158
  }
3158
- function fmtDelta(pct2) {
3159
- if (pct2 === null) return "n/a";
3160
- return `${pct2 >= 0 ? "+" : ""}${pct2}%`;
3159
+ function fmtDelta(pct3) {
3160
+ if (pct3 === null) return "n/a";
3161
+ return `${pct3 >= 0 ? "+" : ""}${pct3}%`;
3161
3162
  }
3162
3163
  async function gbpSummary(project, opts) {
3163
3164
  const client = getClient6();
@@ -6575,7 +6576,7 @@ async function showAnalytics(project, options) {
6575
6576
  break;
6576
6577
  }
6577
6578
  case "sources": {
6578
- const data = await client.getAnalyticsSources(project, options.window);
6579
+ const data = await client.getAnalyticsSources(project, { window: options.window });
6579
6580
  results.sources = data;
6580
6581
  if (!isMachineFormat(options.format)) printSources(data);
6581
6582
  break;
@@ -6600,14 +6601,14 @@ function printMetrics(data) {
6600
6601
  console.log(`
6601
6602
  Citation Rate Trends (${data.window})`);
6602
6603
  console.log("\u2500".repeat(50));
6603
- const pct2 = (n) => `${(n * 100).toFixed(1)}%`;
6604
- console.log(` Overall: ${pct2(data.overall.citationRate)} (${data.overall.cited}/${data.overall.total})`);
6604
+ const pct3 = (n) => `${(n * 100).toFixed(1)}%`;
6605
+ console.log(` Overall: ${pct3(data.overall.citationRate)} (${data.overall.cited}/${data.overall.total})`);
6605
6606
  console.log(` Trend: ${data.trend}`);
6606
6607
  if (Object.keys(data.byProvider).length > 0) {
6607
6608
  console.log(`
6608
6609
  By Provider:`);
6609
6610
  for (const [provider, metric] of Object.entries(data.byProvider)) {
6610
- console.log(` ${provider.padEnd(10)} ${pct2(metric.citationRate).padStart(6)} (${metric.cited}/${metric.total})`);
6611
+ console.log(` ${provider.padEnd(10)} ${pct3(metric.citationRate).padStart(6)} (${metric.cited}/${metric.total})`);
6611
6612
  }
6612
6613
  }
6613
6614
  if (data.buckets.length > 0) {
@@ -6616,7 +6617,7 @@ Citation Rate Trends (${data.window})`);
6616
6617
  for (const bucket of data.buckets) {
6617
6618
  const start = bucket.startDate.slice(0, 10);
6618
6619
  const bar = bucket.total > 0 ? "\u2588".repeat(Math.round(bucket.citationRate * 20)) : "";
6619
- console.log(` ${start} ${pct2(bucket.citationRate).padStart(6)} ${bar}`);
6620
+ console.log(` ${start} ${pct3(bucket.citationRate).padStart(6)} ${bar}`);
6620
6621
  }
6621
6622
  }
6622
6623
  const providersInBuckets = [...new Set(data.buckets.flatMap((b) => Object.keys(b.byProvider ?? {})))].sort();
@@ -6630,7 +6631,7 @@ Citation Rate Trends (${data.window})`);
6630
6631
  if (!metric) continue;
6631
6632
  const start = bucket.startDate.slice(0, 10);
6632
6633
  const bar = metric.total > 0 ? "\u2588".repeat(Math.round(metric.citationRate * 20)) : "";
6633
- console.log(` ${start} ${pct2(metric.citationRate).padStart(6)} ${bar}`);
6634
+ console.log(` ${start} ${pct3(metric.citationRate).padStart(6)} ${bar}`);
6634
6635
  }
6635
6636
  }
6636
6637
  }
@@ -6668,18 +6669,80 @@ Source Origin Breakdown`);
6668
6669
  return;
6669
6670
  }
6670
6671
  for (const cat of data.overall) {
6671
- const pct2 = `${(cat.percentage * 100).toFixed(1)}%`;
6672
+ const pct3 = `${(cat.percentage * 100).toFixed(1)}%`;
6672
6673
  const domains = cat.topDomains.slice(0, 3).map((d) => d.domain).join(", ");
6673
- console.log(` ${cat.label.padEnd(20)} ${pct2.padStart(6)} (${cat.count}) ${domains}`);
6674
+ console.log(` ${cat.label.padEnd(20)} ${pct3.padStart(6)} (${cat.count}) ${domains}`);
6674
6675
  }
6675
6676
  }
6676
6677
 
6677
- // src/commands/evidence.ts
6678
+ // src/commands/sources.ts
6678
6679
  function getClient15() {
6679
6680
  return createApiClient();
6680
6681
  }
6681
- async function showEvidence(project, format) {
6682
+ var pct = (n) => `${(n * 100).toFixed(1)}%`;
6683
+ async function showSources(project, options) {
6684
+ if (options.limit !== void 0 && (!Number.isInteger(options.limit) || options.limit <= 0)) {
6685
+ throw usageError("Error: --limit must be a positive integer\nUsage: canonry sources <project> [--rank] [--limit N] [--by-provider] [--window 7d|30d|90d|all] [--format json|jsonl]", {
6686
+ message: "--limit must be a positive integer",
6687
+ details: { command: "sources", option: "limit", value: options.limit }
6688
+ });
6689
+ }
6682
6690
  const client = getClient15();
6691
+ const data = await client.getAnalyticsSources(project, { window: options.window, limit: options.limit });
6692
+ if (options.format === "jsonl") {
6693
+ emitJsonl(data.ranked.entries.map((e) => ({ project, ...e })));
6694
+ return;
6695
+ }
6696
+ if (isMachineFormat(options.format)) {
6697
+ console.log(JSON.stringify(data, null, 2));
6698
+ return;
6699
+ }
6700
+ printSourceRankings(data, options);
6701
+ }
6702
+ function printSourceRankings(data, options) {
6703
+ console.log(`
6704
+ Source Rankings (${data.window})`);
6705
+ console.log("\u2500".repeat(50));
6706
+ if (data.ranked.totalCitedSlots === 0) {
6707
+ console.log(" No source data available");
6708
+ return;
6709
+ }
6710
+ console.log("\n By surface class:");
6711
+ printSurfaceClasses(data.ranked);
6712
+ if (options.rank) {
6713
+ console.log("\n Top sources:");
6714
+ printRankedEntries(data.ranked);
6715
+ }
6716
+ if (options.byProvider) {
6717
+ console.log("\n By provider:");
6718
+ for (const [provider, list] of Object.entries(data.byProvider)) {
6719
+ console.log(`
6720
+ ${provider} (${list.totalCitedSlots} cited slots):`);
6721
+ printRankedEntries(list, " ");
6722
+ }
6723
+ }
6724
+ }
6725
+ function printSurfaceClasses(list) {
6726
+ for (const c of list.bySurfaceClass) {
6727
+ const noun = c.domainCount === 1 ? "domain" : "domains";
6728
+ console.log(` ${c.label.padEnd(28)} ${pct(c.percentage).padStart(6)} (${c.count}) ${c.domainCount} ${noun}`);
6729
+ }
6730
+ }
6731
+ function printRankedEntries(list, indent = "") {
6732
+ for (const e of list.entries) {
6733
+ console.log(`${indent} ${e.domain.padEnd(32)} ${String(e.count).padStart(4)} ${pct(e.percentage).padStart(6)} ${e.surfaceClass}`);
6734
+ }
6735
+ if (list.truncatedDomainCount > 0) {
6736
+ console.log(`${indent} \u2026 +${list.truncatedDomainCount} more domains (${list.truncatedCitedSlots} cited slots)`);
6737
+ }
6738
+ }
6739
+
6740
+ // src/commands/evidence.ts
6741
+ function getClient16() {
6742
+ return createApiClient();
6743
+ }
6744
+ async function showEvidence(project, format) {
6745
+ const client = getClient16();
6683
6746
  const timeline = await client.getTimeline(project);
6684
6747
  if (format === "json") {
6685
6748
  const enriched = timeline.map((entry) => ({
@@ -6746,11 +6809,11 @@ async function loadLatestRunForExport(client, project) {
6746
6809
  }
6747
6810
 
6748
6811
  // src/commands/history.ts
6749
- function getClient16() {
6812
+ function getClient17() {
6750
6813
  return createApiClient();
6751
6814
  }
6752
6815
  async function showHistory(project, format) {
6753
- const client = getClient16();
6816
+ const client = getClient17();
6754
6817
  try {
6755
6818
  const entries = await client.getHistory(project);
6756
6819
  if (format === "json") {
@@ -6789,11 +6852,11 @@ async function showHistory(project, format) {
6789
6852
  }
6790
6853
 
6791
6854
  // src/commands/status.ts
6792
- function getClient17() {
6855
+ function getClient18() {
6793
6856
  return createApiClient();
6794
6857
  }
6795
6858
  async function showStatus(project, format) {
6796
- const client = getClient17();
6859
+ const client = getClient18();
6797
6860
  const projectData = await client.getProject(project);
6798
6861
  const latest = await getLatestRunSummary(client, project);
6799
6862
  if (isMachineFormat(format)) {
@@ -6905,6 +6968,31 @@ var OPERATOR_CLI_COMMANDS = [
6905
6968
  });
6906
6969
  }
6907
6970
  },
6971
+ {
6972
+ path: ["sources"],
6973
+ usage: "canonry sources <project> [--rank] [--limit N] [--by-provider] [--window 7d|30d|90d|all] [--format json|jsonl]",
6974
+ options: {
6975
+ rank: { type: "boolean", default: false },
6976
+ "by-provider": { type: "boolean", default: false },
6977
+ limit: stringOption(),
6978
+ window: stringOption()
6979
+ },
6980
+ run: async (input) => {
6981
+ const usage = "canonry sources <project> [--rank] [--limit N] [--by-provider] [--window 7d|30d|90d|all] [--format json|jsonl]";
6982
+ const project = requireProject(input, "sources", usage);
6983
+ await showSources(project, {
6984
+ rank: getBoolean(input.values, "rank"),
6985
+ byProvider: getBoolean(input.values, "by-provider"),
6986
+ limit: parseIntegerOption(input, "limit", {
6987
+ message: "--limit must be an integer",
6988
+ usage,
6989
+ command: "sources"
6990
+ }),
6991
+ window: getString(input.values, "window"),
6992
+ format: input.format
6993
+ });
6994
+ }
6995
+ },
6908
6996
  {
6909
6997
  path: ["apply"],
6910
6998
  usage: "canonry apply <file...> [--format json]",
@@ -6924,11 +7012,11 @@ var OPERATOR_CLI_COMMANDS = [
6924
7012
  ];
6925
7013
 
6926
7014
  // src/commands/project.ts
6927
- function getClient18() {
7015
+ function getClient19() {
6928
7016
  return createApiClient();
6929
7017
  }
6930
7018
  async function createProject(name, opts) {
6931
- const client = getClient18();
7019
+ const client = getClient19();
6932
7020
  const result = await client.putProject(name, {
6933
7021
  displayName: opts.displayName,
6934
7022
  canonicalDomain: opts.domain,
@@ -6944,7 +7032,7 @@ async function createProject(name, opts) {
6944
7032
  console.log(`Project created: ${result.name} (${result.id})`);
6945
7033
  }
6946
7034
  async function listProjects(format) {
6947
- const client = getClient18();
7035
+ const client = getClient19();
6948
7036
  const projects2 = await client.listProjects();
6949
7037
  if (format === "json") {
6950
7038
  console.log(JSON.stringify(projects2, null, 2));
@@ -6976,7 +7064,7 @@ async function listProjects(format) {
6976
7064
  }
6977
7065
  }
6978
7066
  async function showProject(name, format) {
6979
- const client = getClient18();
7067
+ const client = getClient19();
6980
7068
  const project = await client.getProject(name);
6981
7069
  if (isMachineFormat(format)) {
6982
7070
  console.log(JSON.stringify(project, null, 2));
@@ -7005,7 +7093,7 @@ async function showProject(name, format) {
7005
7093
  if (project.updatedAt) console.log(` Updated: ${project.updatedAt}`);
7006
7094
  }
7007
7095
  async function updateProjectSettings(name, opts) {
7008
- const client = getClient18();
7096
+ const client = getClient19();
7009
7097
  const project = await client.getProject(name);
7010
7098
  let ownedDomains = opts.ownedDomains ?? project.ownedDomains ?? [];
7011
7099
  if (opts.addOwnedDomain) {
@@ -7042,7 +7130,7 @@ async function updateProjectSettings(name, opts) {
7042
7130
  console.log(`Project updated: ${result.name}`);
7043
7131
  }
7044
7132
  async function deleteProject(name, opts) {
7045
- const client = getClient18();
7133
+ const client = getClient19();
7046
7134
  const isJson = isMachineFormat(opts?.format);
7047
7135
  if (opts?.dryRun) {
7048
7136
  const preview = await client.previewProjectDelete(name);
@@ -7072,7 +7160,7 @@ async function deleteProject(name, opts) {
7072
7160
  console.log(`Project deleted: ${name}`);
7073
7161
  }
7074
7162
  async function addLocation(project, opts) {
7075
- const client = getClient18();
7163
+ const client = getClient19();
7076
7164
  const location = await client.addLocation(project, {
7077
7165
  label: opts.label,
7078
7166
  city: opts.city,
@@ -7087,7 +7175,7 @@ async function addLocation(project, opts) {
7087
7175
  console.log(`Location added: ${opts.label} (${opts.city}, ${opts.region}, ${opts.country})`);
7088
7176
  }
7089
7177
  async function listLocations(project, format) {
7090
- const client = getClient18();
7178
+ const client = getClient19();
7091
7179
  const result = await client.listLocations(project);
7092
7180
  if (format === "json") {
7093
7181
  console.log(JSON.stringify(result, null, 2));
@@ -7121,7 +7209,7 @@ async function listLocations(project, format) {
7121
7209
  }
7122
7210
  }
7123
7211
  async function removeLocation(project, label, format) {
7124
- const client = getClient18();
7212
+ const client = getClient19();
7125
7213
  await client.removeLocation(project, label);
7126
7214
  if (isMachineFormat(format)) {
7127
7215
  console.log(JSON.stringify({ project, label, removed: true }, null, 2));
@@ -7130,7 +7218,7 @@ async function removeLocation(project, label, format) {
7130
7218
  console.log(`Location removed: ${label}`);
7131
7219
  }
7132
7220
  async function setDefaultLocation(project, label, format) {
7133
- const client = getClient18();
7221
+ const client = getClient19();
7134
7222
  const result = await client.setDefaultLocation(project, label);
7135
7223
  if (isMachineFormat(format)) {
7136
7224
  console.log(JSON.stringify({ project, ...result }, null, 2));
@@ -7371,12 +7459,12 @@ var REPORT_CLI_COMMANDS = [
7371
7459
  ];
7372
7460
 
7373
7461
  // src/commands/run.ts
7374
- function getClient19() {
7462
+ function getClient20() {
7375
7463
  return createApiClient();
7376
7464
  }
7377
7465
  var TERMINAL_STATUSES = /* @__PURE__ */ new Set(["completed", "partial", "failed", "cancelled"]);
7378
7466
  async function triggerRun(project, opts) {
7379
- const client = getClient19();
7467
+ const client = getClient20();
7380
7468
  const body = {};
7381
7469
  if (opts?.provider) {
7382
7470
  const providerInputs = opts.provider.split(",").map((s) => s.trim()).filter(Boolean);
@@ -7478,7 +7566,7 @@ async function triggerRun(project, opts) {
7478
7566
  }
7479
7567
  }
7480
7568
  async function triggerRunAll(opts) {
7481
- const client = getClient19();
7569
+ const client = getClient20();
7482
7570
  const projects2 = await client.listProjects();
7483
7571
  if (projects2.length === 0) {
7484
7572
  if (isMachineFormat(opts?.format)) {
@@ -7561,7 +7649,7 @@ async function triggerRunAll(opts) {
7561
7649
  }
7562
7650
  }
7563
7651
  async function cancelRun(project, runId, format) {
7564
- const client = getClient19();
7652
+ const client = getClient20();
7565
7653
  let targetId = runId;
7566
7654
  if (!targetId) {
7567
7655
  const runs = await client.listRuns(project);
@@ -7593,7 +7681,7 @@ To cancel by ID : canonry run cancel ${project} <run-id>`,
7593
7681
  console.log(`Run ${result.id} cancelled.`);
7594
7682
  }
7595
7683
  async function showRun(id, format) {
7596
- const client = getClient19();
7684
+ const client = getClient20();
7597
7685
  const run = await client.getRun(id);
7598
7686
  if (isMachineFormat(format)) {
7599
7687
  console.log(JSON.stringify(run, null, 2));
@@ -7602,7 +7690,7 @@ async function showRun(id, format) {
7602
7690
  printRunDetail(run);
7603
7691
  }
7604
7692
  async function listRuns(project, opts) {
7605
- const client = getClient19();
7693
+ const client = getClient20();
7606
7694
  const runs = await client.listRuns(project, opts?.limit, opts?.kind);
7607
7695
  if (opts?.format === "json") {
7608
7696
  console.log(JSON.stringify(runs, null, 2));
@@ -7777,11 +7865,11 @@ var RUN_CLI_COMMANDS = [
7777
7865
  ];
7778
7866
 
7779
7867
  // src/commands/schedule.ts
7780
- function getClient20() {
7868
+ function getClient21() {
7781
7869
  return createApiClient();
7782
7870
  }
7783
7871
  async function setSchedule(project, opts) {
7784
- const client = getClient20();
7872
+ const client = getClient21();
7785
7873
  const body = {};
7786
7874
  if (opts.kind) body.kind = opts.kind;
7787
7875
  if (opts.sourceId) body.sourceId = opts.sourceId;
@@ -7798,7 +7886,7 @@ async function setSchedule(project, opts) {
7798
7886
  printSchedule(result);
7799
7887
  }
7800
7888
  async function showSchedule(project, format, kind) {
7801
- const client = getClient20();
7889
+ const client = getClient21();
7802
7890
  const result = await client.getSchedule(project, kind);
7803
7891
  if (isMachineFormat(format)) {
7804
7892
  console.log(JSON.stringify(result, null, 2));
@@ -7807,7 +7895,7 @@ async function showSchedule(project, format, kind) {
7807
7895
  printSchedule(result);
7808
7896
  }
7809
7897
  async function enableSchedule(project, format, kind) {
7810
- const client = getClient20();
7898
+ const client = getClient21();
7811
7899
  const current = await client.getSchedule(project, kind);
7812
7900
  const body = { kind: current.kind, timezone: current.timezone, enabled: true };
7813
7901
  if (current.preset) body.preset = current.preset;
@@ -7822,7 +7910,7 @@ async function enableSchedule(project, format, kind) {
7822
7910
  console.log(`Schedule enabled for "${project}" (kind: ${result.kind})`);
7823
7911
  }
7824
7912
  async function disableSchedule(project, format, kind) {
7825
- const client = getClient20();
7913
+ const client = getClient21();
7826
7914
  const current = await client.getSchedule(project, kind);
7827
7915
  const body = { kind: current.kind, timezone: current.timezone, enabled: false };
7828
7916
  if (current.preset) body.preset = current.preset;
@@ -7837,7 +7925,7 @@ async function disableSchedule(project, format, kind) {
7837
7925
  console.log(`Schedule disabled for "${project}" (kind: ${result.kind})`);
7838
7926
  }
7839
7927
  async function removeSchedule(project, format, kind) {
7840
- const client = getClient20();
7928
+ const client = getClient21();
7841
7929
  await client.deleteSchedule(project, kind);
7842
7930
  const resolvedKind = kind ?? "answer-visibility";
7843
7931
  if (isMachineFormat(format)) {
@@ -7955,11 +8043,11 @@ var SCHEDULE_CLI_COMMANDS = [
7955
8043
  ];
7956
8044
 
7957
8045
  // src/commands/settings.ts
7958
- function getClient21() {
8046
+ function getClient22() {
7959
8047
  return createApiClient();
7960
8048
  }
7961
8049
  async function setProvider(name, opts) {
7962
- const client = getClient21();
8050
+ const client = getClient22();
7963
8051
  const { format, ...payload } = opts;
7964
8052
  const result = await client.updateProvider(name, payload);
7965
8053
  if (isMachineFormat(format)) {
@@ -7975,7 +8063,7 @@ async function setProvider(name, opts) {
7975
8063
  }
7976
8064
  }
7977
8065
  async function showSettings(format) {
7978
- const client = getClient21();
8066
+ const client = getClient22();
7979
8067
  const config = loadConfig();
7980
8068
  const settings = await client.getSettings();
7981
8069
  if (isMachineFormat(format)) {
@@ -8522,7 +8610,7 @@ function wrapText(font, text, size, maxWidth) {
8522
8610
  }
8523
8611
 
8524
8612
  // src/commands/snapshot.ts
8525
- function getClient22() {
8613
+ function getClient23() {
8526
8614
  return createApiClient();
8527
8615
  }
8528
8616
  function slugify(value) {
@@ -8533,7 +8621,7 @@ function autoOutputPath(companyName, ext) {
8533
8621
  return `${slugify(companyName)}-snapshot-${date}.${ext}`;
8534
8622
  }
8535
8623
  async function createSnapshotReport(companyName, opts) {
8536
- const client = getClient22();
8624
+ const client = getClient23();
8537
8625
  const report = await client.createSnapshot({
8538
8626
  companyName,
8539
8627
  domain: opts.domain,
@@ -8930,8 +9018,8 @@ function renderHuman(overview) {
8930
9018
  printScore("Competitor press.", scores.competitorPressure);
8931
9019
  printScore("Run status ", scores.runStatus);
8932
9020
  console.log(`
8933
- Queries cited: ${queryCounts.citedQueries}/${queryCounts.totalQueries} (${pct(queryCounts.citedRate)})`);
8934
- console.log(` Queries mentioned: ${queryCounts.mentionedQueries}/${queryCounts.totalQueries} (${pct(queryCounts.mentionRate)})`);
9021
+ Queries cited: ${queryCounts.citedQueries}/${queryCounts.totalQueries} (${pct2(queryCounts.citedRate)})`);
9022
+ console.log(` Queries mentioned: ${queryCounts.mentionedQueries}/${queryCounts.totalQueries} (${pct2(queryCounts.mentionRate)})`);
8935
9023
  if (movementSummary.hasPreviousRun) {
8936
9024
  console.log(` Movement: +${movementSummary.gained} gained, -${movementSummary.lost} lost (${movementSummary.tone})`);
8937
9025
  } else if (movementSummary.gained > 0) {
@@ -8940,7 +9028,7 @@ function renderHuman(overview) {
8940
9028
  if (providers.length > 0) {
8941
9029
  console.log("\n Providers:");
8942
9030
  for (const p of providers) {
8943
- console.log(` ${p.provider.padEnd(12)} ${p.cited}/${p.total} (${pct(p.citedRate)})`);
9031
+ console.log(` ${p.provider.padEnd(12)} ${p.cited}/${p.total} (${pct2(p.citedRate)})`);
8944
9032
  }
8945
9033
  }
8946
9034
  if (providerScores.length > 0) {
@@ -8969,7 +9057,7 @@ function renderHuman(overview) {
8969
9057
  }
8970
9058
  if (health) {
8971
9059
  console.log(`
8972
- Health: ${pct(health.overallCitedRate)} cited (${health.citedPairs}/${health.totalPairs} pairs)`);
9060
+ Health: ${pct2(health.overallCitedRate)} cited (${health.citedPairs}/${health.totalPairs} pairs)`);
8973
9061
  }
8974
9062
  if (topInsights.length > 0) {
8975
9063
  console.log("\n Top insights:");
@@ -9009,14 +9097,14 @@ function printMentionShareBreakdown(mentionShare) {
9009
9097
  const youPct = (breakdown.projectMentionSnapshots / total * 100).toFixed(1);
9010
9098
  console.log(` you${" ".repeat(28)} ${breakdown.projectMentionSnapshots} mentions (${youPct}% of combined)`);
9011
9099
  for (const row of breakdown.perCompetitor.slice(0, 3)) {
9012
- const pct2 = (row.mentionSnapshots / total * 100).toFixed(1);
9013
- console.log(` ${row.domain.padEnd(30)} ${row.mentionSnapshots} mentions (${pct2}% of combined)`);
9100
+ const pct3 = (row.mentionSnapshots / total * 100).toFixed(1);
9101
+ console.log(` ${row.domain.padEnd(30)} ${row.mentionSnapshots} mentions (${pct3}% of combined)`);
9014
9102
  }
9015
9103
  if (breakdown.perCompetitor.length > 3) {
9016
9104
  console.log(` + ${breakdown.perCompetitor.length - 3} more competitor${breakdown.perCompetitor.length - 3 === 1 ? "" : "s"} (--format json for full breakdown)`);
9017
9105
  }
9018
9106
  }
9019
- function pct(value) {
9107
+ function pct2(value) {
9020
9108
  return `${(value * 100).toFixed(1)}%`;
9021
9109
  }
9022
9110
 
@@ -9244,11 +9332,14 @@ var INTELLIGENCE_CLI_COMMANDS = [
9244
9332
  ];
9245
9333
 
9246
9334
  // src/commands/content.ts
9335
+ var WINNABILITY_COVERAGE_CHECK_ID = "content.winnability.coverage";
9247
9336
  async function listContentTargets(project, opts) {
9248
9337
  const client = createApiClient();
9249
9338
  const response = await client.getContentTargets(project, {
9250
9339
  limit: opts.limit,
9251
- includeInProgress: opts.includeInProgress
9340
+ includeInProgress: opts.includeInProgress,
9341
+ winnabilityClass: opts.winnabilityClass,
9342
+ ownable: opts.ownable
9252
9343
  });
9253
9344
  if (opts.format === "json") {
9254
9345
  console.log(JSON.stringify(response, null, 2));
@@ -9276,7 +9367,8 @@ async function listContentTargets(project, opts) {
9276
9367
  const action = target.action.toUpperCase().padEnd(11);
9277
9368
  const score = target.score.toFixed(1).padStart(6);
9278
9369
  const conf = target.actionConfidence.padEnd(6);
9279
- console.log(`${action} ${score} conf=${conf} ${target.query}`);
9370
+ const surface = target.winnabilityClass === "ceded" ? "CEDED " : "ownable";
9371
+ console.log(`${action} ${score} conf=${conf} [${surface}] ${target.query}`);
9280
9372
  if (target.ourBestPage) {
9281
9373
  const posLabel = target.ourBestPage.gscAvgPosition !== null ? `pos #${target.ourBestPage.gscAvgPosition}` : "no GSC ranking";
9282
9374
  console.log(` our page: ${target.ourBestPage.url} (${posLabel})`);
@@ -9345,27 +9437,123 @@ async function listContentGaps(project, opts) {
9345
9437
  console.log("");
9346
9438
  }
9347
9439
  }
9440
+ async function generateContentBrief(project, targetRef, opts) {
9441
+ const client = createApiClient();
9442
+ await warnIfWinnabilityCoverageIsLow(client, project, opts.format);
9443
+ const response = await client.synthesizeContentBrief(project, targetRef, {
9444
+ provider: opts.provider,
9445
+ model: opts.model,
9446
+ forceRefresh: opts.force
9447
+ });
9448
+ if (isMachineFormat(opts.format)) {
9449
+ console.log(JSON.stringify(response, null, 2));
9450
+ return;
9451
+ }
9452
+ const b = response.brief;
9453
+ console.log(`Brief for: ${b.targetQuery}`);
9454
+ console.log(`Surface: ${b.winnabilityClass}`);
9455
+ console.log(`Provider: ${response.provider} / ${response.model}`);
9456
+ console.log("");
9457
+ console.log(`Angle: ${b.angle}`);
9458
+ console.log(`Why winnable: ${b.whyWinnable}`);
9459
+ console.log(`Schema hookup: ${b.schemaHookup}`);
9460
+ console.log(`Controllable surface: ${b.controllableSurfaceRationale}`);
9461
+ }
9462
+ async function tryGetBrief(client, project, targetRef) {
9463
+ try {
9464
+ return await client.getContentBrief(project, targetRef);
9465
+ } catch (err) {
9466
+ if (err instanceof CliError && err.code === "NOT_FOUND") return null;
9467
+ throw err;
9468
+ }
9469
+ }
9470
+ async function contentMap(project, opts) {
9471
+ const client = createApiClient();
9472
+ await warnIfWinnabilityCoverageIsLow(client, project, opts.format);
9473
+ const [classifications, targets] = await Promise.all([
9474
+ client.getDomainClassifications(project),
9475
+ client.getContentTargets(project, { ownable: true })
9476
+ ]);
9477
+ const ownable = await Promise.all(
9478
+ targets.targets.map(async (target) => ({
9479
+ ...target,
9480
+ brief: (await tryGetBrief(client, project, target.targetRef))?.brief ?? null
9481
+ }))
9482
+ );
9483
+ if (opts.format === "json") {
9484
+ console.log(JSON.stringify({ classifications: classifications.classifications, ownable }, null, 2));
9485
+ return;
9486
+ }
9487
+ if (opts.format === "jsonl") {
9488
+ emitJsonl(ownable.map((row) => ({ project, ...row })));
9489
+ return;
9490
+ }
9491
+ const ceded = classifications.classifications.filter(
9492
+ (c) => c.competitorType === "ota-aggregator" || c.competitorType === "editorial-media"
9493
+ );
9494
+ console.log(
9495
+ `${classifications.classifications.length} domain(s) classified (${ceded.length} ceded surface${ceded.length === 1 ? "" : "s"}) \xB7 ${ownable.length} ownable target(s)`
9496
+ );
9497
+ console.log("");
9498
+ for (const row of ownable) {
9499
+ const score = row.score.toFixed(1).padStart(6);
9500
+ const briefMark = row.brief ? "brief \u2713" : "brief \u2014";
9501
+ console.log(`${score} ${briefMark} ${row.query}`);
9502
+ if (row.brief) {
9503
+ console.log(` angle: ${row.brief.angle}`);
9504
+ }
9505
+ }
9506
+ }
9507
+ function shouldWarn(check) {
9508
+ return check?.status === "warn" || check?.status === "fail";
9509
+ }
9510
+ async function warnIfWinnabilityCoverageIsLow(client, project, format) {
9511
+ if (isMachineFormat(format)) return;
9512
+ let check;
9513
+ try {
9514
+ const report = await client.runDoctor({ project, checkIds: [WINNABILITY_COVERAGE_CHECK_ID] });
9515
+ check = report.checks.find((candidate) => candidate.id === WINNABILITY_COVERAGE_CHECK_ID);
9516
+ } catch {
9517
+ return;
9518
+ }
9519
+ if (!shouldWarn(check)) return;
9520
+ const remediation = check.remediation ? ` ${check.remediation}` : "";
9521
+ console.error(`Warning: ${check.summary}${remediation}`);
9522
+ }
9348
9523
 
9349
9524
  // src/cli-commands/content.ts
9350
9525
  var CONTENT_CLI_COMMANDS = [
9351
9526
  {
9352
9527
  path: ["content", "targets"],
9353
- usage: "canonry content targets <project> [--limit <n>] [--include-in-progress] [--format json]",
9528
+ usage: "canonry content targets <project> [--limit <n>] [--include-in-progress] [--ownable] [--winnability-class <ownable|ceded>] [--format json]",
9354
9529
  options: {
9355
9530
  limit: { type: "string" },
9356
- "include-in-progress": { type: "boolean" }
9531
+ "include-in-progress": { type: "boolean" },
9532
+ ownable: { type: "boolean" },
9533
+ "winnability-class": { type: "string" }
9357
9534
  },
9358
9535
  run: async (input) => {
9359
- const usage = "canonry content targets <project> [--limit <n>] [--include-in-progress] [--format json]";
9536
+ const usage = "canonry content targets <project> [--limit <n>] [--include-in-progress] [--ownable] [--winnability-class <ownable|ceded>] [--format json]";
9360
9537
  const project = requireProject(input, "content targets", usage);
9361
9538
  const limit = parseIntegerOption(input, "limit", {
9362
9539
  command: "content targets",
9363
9540
  usage,
9364
9541
  message: "--limit must be a non-negative integer"
9365
9542
  });
9543
+ const rawWinnabilityClass = input.values["winnability-class"];
9544
+ let winnabilityClass;
9545
+ if (typeof rawWinnabilityClass === "string") {
9546
+ const parsed = winnabilityClassSchema.safeParse(rawWinnabilityClass);
9547
+ if (!parsed.success) {
9548
+ throw usageError('Error: --winnability-class must be "ownable" or "ceded"', { message: usage });
9549
+ }
9550
+ winnabilityClass = parsed.data;
9551
+ }
9366
9552
  await listContentTargets(project, {
9367
9553
  limit,
9368
9554
  includeInProgress: input.values["include-in-progress"] === true,
9555
+ ownable: input.values.ownable === true,
9556
+ winnabilityClass,
9369
9557
  format: input.format
9370
9558
  });
9371
9559
  }
@@ -9389,6 +9577,40 @@ var CONTENT_CLI_COMMANDS = [
9389
9577
  const project = requireProject(input, "content gaps", usage);
9390
9578
  await listContentGaps(project, { format: input.format });
9391
9579
  }
9580
+ },
9581
+ {
9582
+ path: ["content", "brief"],
9583
+ usage: "canonry content brief <project> <targetRef> [--provider <p>] [--model <m>] [--force] [--format json]",
9584
+ options: {
9585
+ provider: { type: "string" },
9586
+ model: { type: "string" },
9587
+ force: { type: "boolean" }
9588
+ },
9589
+ run: async (input) => {
9590
+ const usage = "canonry content brief <project> <targetRef> [--provider <p>] [--model <m>] [--force] [--format json]";
9591
+ const project = requireProject(input, "content brief", usage);
9592
+ const targetRef = requirePositional(input, 1, {
9593
+ command: "content brief",
9594
+ usage,
9595
+ message: "targetRef is required (from `canonry content targets`)"
9596
+ });
9597
+ await generateContentBrief(project, targetRef, {
9598
+ provider: typeof input.values.provider === "string" ? input.values.provider : void 0,
9599
+ model: typeof input.values.model === "string" ? input.values.model : void 0,
9600
+ force: input.values.force === true,
9601
+ format: input.format
9602
+ });
9603
+ }
9604
+ },
9605
+ {
9606
+ path: ["content", "map"],
9607
+ usage: "canonry content map <project> [--format json]",
9608
+ options: {},
9609
+ run: async (input) => {
9610
+ const usage = "canonry content map <project> [--format json]";
9611
+ const project = requireProject(input, "content map", usage);
9612
+ await contentMap(project, { format: input.format });
9613
+ }
9392
9614
  }
9393
9615
  ];
9394
9616
 
@@ -10480,7 +10702,7 @@ var SYSTEM_CLI_COMMANDS = [
10480
10702
  import fs11 from "fs";
10481
10703
 
10482
10704
  // src/commands/wordpress.ts
10483
- function getClient23() {
10705
+ function getClient24() {
10484
10706
  return createApiClient();
10485
10707
  }
10486
10708
  async function loadYamlModule() {
@@ -10630,7 +10852,7 @@ async function wordpressConnect(project, opts) {
10630
10852
  details: { project }
10631
10853
  });
10632
10854
  }
10633
- const client = getClient23();
10855
+ const client = getClient24();
10634
10856
  const result = await client.wordpressConnect(project, {
10635
10857
  url: opts.url,
10636
10858
  stagingUrl: opts.stagingUrl,
@@ -10647,7 +10869,7 @@ async function wordpressConnect(project, opts) {
10647
10869
  printWordpressStatus(project, result);
10648
10870
  }
10649
10871
  async function wordpressDisconnect(project, format) {
10650
- const client = getClient23();
10872
+ const client = getClient24();
10651
10873
  await client.wordpressDisconnect(project);
10652
10874
  if (isMachineFormat(format)) {
10653
10875
  printJson2({ project, disconnected: true });
@@ -10656,7 +10878,7 @@ async function wordpressDisconnect(project, format) {
10656
10878
  console.log(`WordPress disconnected from project "${project}".`);
10657
10879
  }
10658
10880
  async function wordpressStatus(project, format) {
10659
- const client = getClient23();
10881
+ const client = getClient24();
10660
10882
  const result = await client.wordpressStatus(project);
10661
10883
  if (isMachineFormat(format)) {
10662
10884
  printJson2(result);
@@ -10665,7 +10887,7 @@ async function wordpressStatus(project, format) {
10665
10887
  printWordpressStatus(project, result);
10666
10888
  }
10667
10889
  async function wordpressPages(project, opts) {
10668
- const client = getClient23();
10890
+ const client = getClient24();
10669
10891
  const result = await client.wordpressPages(project, opts.env);
10670
10892
  if (isMachineFormat(opts.format)) {
10671
10893
  printJson2(result);
@@ -10674,7 +10896,7 @@ async function wordpressPages(project, opts) {
10674
10896
  printPages(project, result.env, result.pages);
10675
10897
  }
10676
10898
  async function wordpressPage(project, slug, opts) {
10677
- const client = getClient23();
10899
+ const client = getClient24();
10678
10900
  const result = await client.wordpressPage(project, slug, opts.env);
10679
10901
  if (isMachineFormat(opts.format)) {
10680
10902
  printJson2(result);
@@ -10683,7 +10905,7 @@ async function wordpressPage(project, slug, opts) {
10683
10905
  printPageDetail(result);
10684
10906
  }
10685
10907
  async function wordpressCreatePage(project, body) {
10686
- const client = getClient23();
10908
+ const client = getClient24();
10687
10909
  const result = await client.wordpressCreatePage(project, body);
10688
10910
  if (isMachineFormat(body.format)) {
10689
10911
  printJson2(result);
@@ -10694,7 +10916,7 @@ async function wordpressCreatePage(project, body) {
10694
10916
  printPageDetail(result);
10695
10917
  }
10696
10918
  async function wordpressUpdatePage(project, body) {
10697
- const client = getClient23();
10919
+ const client = getClient24();
10698
10920
  const result = await client.wordpressUpdatePage(project, body);
10699
10921
  if (isMachineFormat(body.format)) {
10700
10922
  printJson2(result);
@@ -10705,7 +10927,7 @@ async function wordpressUpdatePage(project, body) {
10705
10927
  printPageDetail(result);
10706
10928
  }
10707
10929
  async function wordpressSetMeta(project, body) {
10708
- const client = getClient23();
10930
+ const client = getClient24();
10709
10931
  const result = await client.wordpressSetMeta(project, body);
10710
10932
  if (isMachineFormat(body.format)) {
10711
10933
  printJson2(result);
@@ -10755,7 +10977,7 @@ async function wordpressBulkSetMeta(project, opts) {
10755
10977
  details: { path: filePath }
10756
10978
  });
10757
10979
  }
10758
- const client = getClient23();
10980
+ const client = getClient24();
10759
10981
  const result = await client.wordpressBulkSetMeta(project, { entries, env: opts.env });
10760
10982
  if (isMachineFormat(opts.format)) {
10761
10983
  printJson2(result);
@@ -10798,7 +11020,7 @@ async function wordpressBulkSetMeta(project, opts) {
10798
11020
  Total: ${applied.length} applied, ${skipped.length} skipped, ${manual.length} manual`);
10799
11021
  }
10800
11022
  async function wordpressSchema(project, slug, opts) {
10801
- const client = getClient23();
11023
+ const client = getClient24();
10802
11024
  const result = await client.wordpressSchema(project, slug, opts.env);
10803
11025
  if (isMachineFormat(opts.format)) {
10804
11026
  printJson2(result);
@@ -10809,7 +11031,7 @@ async function wordpressSchema(project, slug, opts) {
10809
11031
  printSchemaBlocks(result.blocks);
10810
11032
  }
10811
11033
  async function wordpressSetSchema(project, body) {
10812
- const client = getClient23();
11034
+ const client = getClient24();
10813
11035
  const result = await client.wordpressSetSchema(project, body);
10814
11036
  if (isMachineFormat(body.format)) {
10815
11037
  printJson2(result);
@@ -10857,7 +11079,7 @@ async function wordpressSchemaDeploy(project, opts) {
10857
11079
  details: { path: filePath }
10858
11080
  });
10859
11081
  }
10860
- const client = getClient23();
11082
+ const client = getClient24();
10861
11083
  const result = await client.wordpressSchemaDeploy(project, { profile: parsed, env: opts.env });
10862
11084
  if (isMachineFormat(opts.format)) {
10863
11085
  printJson2(result);
@@ -10896,7 +11118,7 @@ async function wordpressSchemaDeploy(project, opts) {
10896
11118
  Total: ${deployed} deployed, ${stripped} stripped, ${skipped} skipped, ${failed} failed`);
10897
11119
  }
10898
11120
  async function wordpressSchemaStatus(project, opts) {
10899
- const client = getClient23();
11121
+ const client = getClient24();
10900
11122
  const result = await client.wordpressSchemaStatus(project, opts.env);
10901
11123
  if (isMachineFormat(opts.format)) {
10902
11124
  printJson2(result);
@@ -10955,7 +11177,7 @@ async function wordpressOnboard(project, opts) {
10955
11177
  });
10956
11178
  }
10957
11179
  }
10958
- const client = getClient23();
11180
+ const client = getClient24();
10959
11181
  const result = await client.wordpressOnboard(project, {
10960
11182
  url: opts.url,
10961
11183
  username: opts.user,
@@ -10980,7 +11202,7 @@ async function wordpressOnboard(project, opts) {
10980
11202
  }
10981
11203
  }
10982
11204
  async function wordpressLlmsTxt(project, opts) {
10983
- const client = getClient23();
11205
+ const client = getClient24();
10984
11206
  const result = await client.wordpressLlmsTxt(project, opts.env);
10985
11207
  if (isMachineFormat(opts.format)) {
10986
11208
  printJson2(result);
@@ -10991,7 +11213,7 @@ async function wordpressLlmsTxt(project, opts) {
10991
11213
  console.log(result.content ?? "(not found)");
10992
11214
  }
10993
11215
  async function wordpressSetLlmsTxt(project, body) {
10994
- const client = getClient23();
11216
+ const client = getClient24();
10995
11217
  const result = await client.wordpressSetLlmsTxt(project, body);
10996
11218
  if (isMachineFormat(body.format)) {
10997
11219
  printJson2(result);
@@ -11000,7 +11222,7 @@ async function wordpressSetLlmsTxt(project, body) {
11000
11222
  printManualAssist(`llms.txt update for "${project}"`, result);
11001
11223
  }
11002
11224
  async function wordpressAudit(project, opts) {
11003
- const client = getClient23();
11225
+ const client = getClient24();
11004
11226
  const result = await client.wordpressAudit(project, opts.env);
11005
11227
  if (isMachineFormat(opts.format)) {
11006
11228
  printJson2(result);
@@ -11014,7 +11236,7 @@ async function wordpressAudit(project, opts) {
11014
11236
  printAuditIssues(result.issues);
11015
11237
  }
11016
11238
  async function wordpressDiff(project, slug, format) {
11017
- const client = getClient23();
11239
+ const client = getClient24();
11018
11240
  const result = await client.wordpressDiff(project, slug);
11019
11241
  if (isMachineFormat(format)) {
11020
11242
  printJson2(result);
@@ -11023,7 +11245,7 @@ async function wordpressDiff(project, slug, format) {
11023
11245
  printDiff(result);
11024
11246
  }
11025
11247
  async function wordpressStagingStatus(project, format) {
11026
- const client = getClient23();
11248
+ const client = getClient24();
11027
11249
  const result = await client.wordpressStagingStatus(project);
11028
11250
  if (isMachineFormat(format)) {
11029
11251
  printJson2(result);
@@ -11037,7 +11259,7 @@ async function wordpressStagingStatus(project, format) {
11037
11259
  console.log(` Admin URL: ${result.adminUrl}`);
11038
11260
  }
11039
11261
  async function wordpressStagingPush(project, format) {
11040
- const client = getClient23();
11262
+ const client = getClient24();
11041
11263
  const result = await client.wordpressStagingPush(project);
11042
11264
  if (isMachineFormat(format)) {
11043
11265
  printJson2(result);