@ainyc/canonry 4.24.1 → 4.25.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.
package/dist/cli.js CHANGED
@@ -20,7 +20,7 @@ import {
20
20
  setTelemetrySource,
21
21
  showFirstRunNotice,
22
22
  trackEvent
23
- } from "./chunk-E5PZ23OS.js";
23
+ } from "./chunk-6J6WQOGH.js";
24
24
  import {
25
25
  CliError,
26
26
  EXIT_SYSTEM_ERROR,
@@ -36,7 +36,7 @@ import {
36
36
  saveConfig,
37
37
  saveConfigPatch,
38
38
  usageError
39
- } from "./chunk-6EJ54OX7.js";
39
+ } from "./chunk-A7HQ6X43.js";
40
40
  import {
41
41
  apiKeys,
42
42
  competitors,
@@ -49,7 +49,7 @@ import {
49
49
  queries,
50
50
  querySnapshots,
51
51
  runs
52
- } from "./chunk-OYYFXKRK.js";
52
+ } from "./chunk-IS65IYNZ.js";
53
53
  import {
54
54
  CcReleaseSyncStatuses,
55
55
  CheckScopes,
@@ -69,7 +69,7 @@ import {
69
69
  providerQuotaPolicySchema,
70
70
  resolveProviderInput,
71
71
  skillsClientSchema
72
- } from "./chunk-EUGCQSFC.js";
72
+ } from "./chunk-CRQMGNPH.js";
73
73
 
74
74
  // src/cli.ts
75
75
  import { pathToFileURL } from "url";
@@ -621,7 +621,7 @@ function readStoredGroundingSources(rawResponse) {
621
621
  return result;
622
622
  }
623
623
  async function backfillInsightsCommand(project, opts) {
624
- const { IntelligenceService } = await import("./intelligence-service-NVN2PAR7.js");
624
+ const { IntelligenceService } = await import("./intelligence-service-XLUYTE57.js");
625
625
  const config = loadConfig();
626
626
  const db = createClient(config.database);
627
627
  migrate(db);
@@ -1956,6 +1956,306 @@ var CDP_CLI_COMMANDS = [
1956
1956
  }
1957
1957
  ];
1958
1958
 
1959
+ // src/commands/discover.ts
1960
+ var TERMINAL_DISCOVERY_STATUSES = /* @__PURE__ */ new Set([
1961
+ "completed",
1962
+ "failed"
1963
+ ]);
1964
+ function getClient4() {
1965
+ return createApiClient();
1966
+ }
1967
+ async function discoverRun(project, opts) {
1968
+ const client = getClient4();
1969
+ const body = {};
1970
+ if (opts.icp) body.icpDescription = opts.icp;
1971
+ if (opts.dedupThreshold !== void 0) body.dedupThreshold = opts.dedupThreshold;
1972
+ if (opts.maxProbes !== void 0) body.maxProbes = opts.maxProbes;
1973
+ const start = await client.triggerDiscoveryRun(project, body);
1974
+ if (!opts.wait) {
1975
+ if (opts.format === "json") {
1976
+ console.log(JSON.stringify(start, null, 2));
1977
+ return;
1978
+ }
1979
+ console.log(`Discovery run started: ${start.runId}`);
1980
+ console.log(` Session: ${start.sessionId}`);
1981
+ console.log(` Status: ${start.status}`);
1982
+ console.log(` Tail: canonry discover show ${project} ${start.sessionId}`);
1983
+ return;
1984
+ }
1985
+ const final = await pollSession(client, project, start.sessionId);
1986
+ if (opts.format === "json") {
1987
+ console.log(JSON.stringify(final, null, 2));
1988
+ return;
1989
+ }
1990
+ printSessionDetail(final);
1991
+ }
1992
+ async function discoverSeed(project, opts) {
1993
+ await discoverRun(project, opts);
1994
+ }
1995
+ async function discoverProbe(project, sessionId, opts) {
1996
+ const client = getClient4();
1997
+ const session = await client.getDiscoverySession(project, sessionId);
1998
+ if (opts.format === "json") {
1999
+ console.log(JSON.stringify(session, null, 2));
2000
+ return;
2001
+ }
2002
+ printSessionDetail(session);
2003
+ }
2004
+ async function discoverList(project, opts) {
2005
+ const client = getClient4();
2006
+ const sessions = await client.listDiscoverySessions(project, opts.limit !== void 0 ? { limit: opts.limit } : void 0);
2007
+ if (opts.format === "json") {
2008
+ console.log(JSON.stringify(sessions, null, 2));
2009
+ return;
2010
+ }
2011
+ if (sessions.length === 0) {
2012
+ console.log(`No discovery sessions for "${project}".`);
2013
+ return;
2014
+ }
2015
+ console.log(`Discovery sessions for "${project}" (${sessions.length}):
2016
+ `);
2017
+ console.log(" ID STATUS PROBES CITED WASTED ASPIR. CREATED");
2018
+ console.log(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");
2019
+ for (const s of sessions) {
2020
+ const id = s.id.padEnd(36);
2021
+ const status = (s.status ?? "").padEnd(10);
2022
+ const probes = String(s.probeCount ?? 0).padStart(6);
2023
+ const cited = String(s.citedCount ?? 0).padStart(5);
2024
+ const wasted = String(s.wastedCount ?? 0).padStart(6);
2025
+ const asp = String(s.aspirationalCount ?? 0).padStart(6);
2026
+ console.log(` ${id} ${status} ${probes} ${cited} ${wasted} ${asp} ${s.createdAt}`);
2027
+ }
2028
+ }
2029
+ async function discoverShow(project, sessionId, opts) {
2030
+ const client = getClient4();
2031
+ const session = await client.getDiscoverySession(project, sessionId);
2032
+ if (opts.format === "json") {
2033
+ console.log(JSON.stringify(session, null, 2));
2034
+ return;
2035
+ }
2036
+ printSessionDetail(session);
2037
+ }
2038
+ async function discoverPromotePreview(project, sessionId, opts) {
2039
+ const client = getClient4();
2040
+ const preview = await client.previewDiscoveryPromote(project, sessionId);
2041
+ if (opts.format === "json") {
2042
+ console.log(JSON.stringify(preview, null, 2));
2043
+ return;
2044
+ }
2045
+ console.log(`Promote preview for session ${sessionId} (status: ${preview.status}):`);
2046
+ console.log(` Cited (${preview.queriesByBucket.cited.length})`);
2047
+ for (const q of preview.queriesByBucket.cited.slice(0, 10)) console.log(` + ${q}`);
2048
+ console.log(` Wasted-surface (${preview.queriesByBucket["wasted-surface"].length})`);
2049
+ for (const q of preview.queriesByBucket["wasted-surface"].slice(0, 10)) console.log(` + ${q}`);
2050
+ console.log(` Aspirational (${preview.queriesByBucket.aspirational.length})`);
2051
+ for (const q of preview.queriesByBucket.aspirational.slice(0, 10)) console.log(` + ${q}`);
2052
+ if (preview.suggestedCompetitors.length > 0) {
2053
+ console.log(` Suggested new competitors:`);
2054
+ for (const c of preview.suggestedCompetitors) console.log(` - ${c.domain} (${c.hits} hits)`);
2055
+ }
2056
+ console.log(`
2057
+ (PR 2 will add \`canonry discover promote\` to actually merge these into the project.)`);
2058
+ }
2059
+ function printSessionDetail(session) {
2060
+ console.log(`Discovery session: ${session.id}`);
2061
+ console.log(` Status: ${session.status}`);
2062
+ if (session.icpDescription) console.log(` ICP: ${session.icpDescription}`);
2063
+ if (session.seedProvider) console.log(` Seed provider: ${session.seedProvider}`);
2064
+ if (session.dedupThreshold != null) console.log(` Dedup thresh: ${session.dedupThreshold}`);
2065
+ if (session.seedCountRaw != null && session.seedCount != null) {
2066
+ console.log(` Seed candidates: ${session.seedCount} (raw ${session.seedCountRaw})`);
2067
+ }
2068
+ if (session.probeCount != null) console.log(` Probes: ${session.probeCount}`);
2069
+ console.log(` Buckets: cited=${session.citedCount ?? 0} wasted-surface=${session.wastedCount ?? 0} aspirational=${session.aspirationalCount ?? 0}`);
2070
+ if (session.competitorMap.length > 0) {
2071
+ console.log(` Top recurring competitor domains:`);
2072
+ for (const c of session.competitorMap.slice(0, 10)) console.log(` - ${c.domain} (${c.hits} hits)`);
2073
+ }
2074
+ if (session.error) console.log(` Error: ${session.error}`);
2075
+ if (session.startedAt) console.log(` Started: ${session.startedAt}`);
2076
+ if (session.finishedAt) console.log(` Finished: ${session.finishedAt}`);
2077
+ console.log(` Created: ${session.createdAt}`);
2078
+ if (session.probes && session.probes.length > 0) {
2079
+ const sorted = [...session.probes].sort((a, b) => (a.bucket ?? "").localeCompare(b.bucket ?? ""));
2080
+ console.log(`
2081
+ Probes (${session.probes.length}):`);
2082
+ for (const p of sorted) {
2083
+ const bucket = (p.bucket ?? "\u2013").padEnd(15);
2084
+ const cit = p.citationState === "cited" ? "C" : "c";
2085
+ console.log(` [${cit}] ${bucket} ${p.query}`);
2086
+ }
2087
+ }
2088
+ }
2089
+ var POLL_INTERVAL_MS = 3e3;
2090
+ var POLL_TIMEOUT_MS = 15 * 60 * 1e3;
2091
+ async function pollSession(client, project, sessionId) {
2092
+ process.stderr.write(`Waiting for discovery session ${sessionId}`);
2093
+ const deadline = Date.now() + POLL_TIMEOUT_MS;
2094
+ for (; ; ) {
2095
+ await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
2096
+ if (Date.now() > deadline) {
2097
+ throw new CliError({
2098
+ code: "DISCOVERY_TIMEOUT",
2099
+ message: `Timed out waiting for discovery session ${sessionId} after ${POLL_TIMEOUT_MS / 1e3}s`
2100
+ });
2101
+ }
2102
+ const session = await client.getDiscoverySession(project, sessionId);
2103
+ process.stderr.write(".");
2104
+ if (TERMINAL_DISCOVERY_STATUSES.has(session.status)) {
2105
+ process.stderr.write("\n");
2106
+ return session;
2107
+ }
2108
+ }
2109
+ }
2110
+
2111
+ // src/cli-commands/discover.ts
2112
+ function parseFloatOption(values, key, usage) {
2113
+ const raw = values[key];
2114
+ if (typeof raw !== "string" || raw.length === 0) return void 0;
2115
+ const parsed = Number.parseFloat(raw);
2116
+ if (Number.isNaN(parsed)) {
2117
+ throw usageError(`Error: --${key} must be a number
2118
+ Usage: ${usage}`, {
2119
+ message: `--${key} must be a number`,
2120
+ details: { command: "discover", usage, option: key, value: raw }
2121
+ });
2122
+ }
2123
+ return parsed;
2124
+ }
2125
+ var DISCOVER_CLI_COMMANDS = [
2126
+ {
2127
+ path: ["discover", "run"],
2128
+ usage: 'canonry discover run <project> [--icp "..."] [--dedup-threshold 0.85] [--max-probes 100] [--wait] [--format json]',
2129
+ options: {
2130
+ icp: stringOption(),
2131
+ "dedup-threshold": stringOption(),
2132
+ "max-probes": stringOption(),
2133
+ wait: { type: "boolean", default: false }
2134
+ },
2135
+ run: async (input) => {
2136
+ const project = requireProject(
2137
+ input,
2138
+ "discover.run",
2139
+ 'canonry discover run <project> [--icp "..."] [--wait] [--format json]'
2140
+ );
2141
+ const usage = 'canonry discover run <project> [--icp "..."] [--dedup-threshold 0.85] [--max-probes 100] [--wait] [--format json]';
2142
+ await discoverRun(project, {
2143
+ icp: getString(input.values, "icp"),
2144
+ dedupThreshold: parseFloatOption(input.values, "dedup-threshold", usage),
2145
+ maxProbes: parseIntegerOption(input, "max-probes", {
2146
+ command: "discover.run",
2147
+ usage,
2148
+ message: "--max-probes must be an integer"
2149
+ }),
2150
+ wait: getBoolean(input.values, "wait"),
2151
+ format: input.format
2152
+ });
2153
+ }
2154
+ },
2155
+ {
2156
+ path: ["discover", "seed"],
2157
+ usage: 'canonry discover seed <project> [--icp "..."] [--dedup-threshold 0.85] [--max-probes 100] [--wait] [--format json]',
2158
+ options: {
2159
+ icp: stringOption(),
2160
+ "dedup-threshold": stringOption(),
2161
+ "max-probes": stringOption(),
2162
+ wait: { type: "boolean", default: false }
2163
+ },
2164
+ run: async (input) => {
2165
+ const project = requireProject(
2166
+ input,
2167
+ "discover.seed",
2168
+ 'canonry discover seed <project> [--icp "..."] [--wait] [--format json]'
2169
+ );
2170
+ const usage = 'canonry discover seed <project> [--icp "..."] [--dedup-threshold 0.85] [--max-probes 100] [--wait] [--format json]';
2171
+ await discoverSeed(project, {
2172
+ icp: getString(input.values, "icp"),
2173
+ dedupThreshold: parseFloatOption(input.values, "dedup-threshold", usage),
2174
+ maxProbes: parseIntegerOption(input, "max-probes", {
2175
+ command: "discover.seed",
2176
+ usage,
2177
+ message: "--max-probes must be an integer"
2178
+ }),
2179
+ wait: getBoolean(input.values, "wait"),
2180
+ format: input.format
2181
+ });
2182
+ }
2183
+ },
2184
+ {
2185
+ path: ["discover", "probe"],
2186
+ usage: "canonry discover probe <project> <session-id> [--format json]",
2187
+ run: async (input) => {
2188
+ const project = requireProject(
2189
+ input,
2190
+ "discover.probe",
2191
+ "canonry discover probe <project> <session-id> [--format json]"
2192
+ );
2193
+ const sessionId = requirePositional(input, 1, {
2194
+ command: "discover.probe",
2195
+ usage: "canonry discover probe <project> <session-id> [--format json]",
2196
+ message: "session ID is required"
2197
+ });
2198
+ await discoverProbe(project, sessionId, { format: input.format });
2199
+ }
2200
+ },
2201
+ {
2202
+ path: ["discover", "list"],
2203
+ usage: "canonry discover list <project> [--limit <n>] [--format json]",
2204
+ options: {
2205
+ limit: stringOption()
2206
+ },
2207
+ run: async (input) => {
2208
+ const project = requireProject(
2209
+ input,
2210
+ "discover.list",
2211
+ "canonry discover list <project> [--limit <n>] [--format json]"
2212
+ );
2213
+ await discoverList(project, {
2214
+ limit: parseIntegerOption(input, "limit", {
2215
+ command: "discover.list",
2216
+ usage: "canonry discover list <project> [--limit <n>] [--format json]",
2217
+ message: "--limit must be an integer"
2218
+ }),
2219
+ format: input.format
2220
+ });
2221
+ }
2222
+ },
2223
+ {
2224
+ path: ["discover", "show"],
2225
+ usage: "canonry discover show <project> <session-id> [--format json]",
2226
+ run: async (input) => {
2227
+ const project = requireProject(
2228
+ input,
2229
+ "discover.show",
2230
+ "canonry discover show <project> <session-id> [--format json]"
2231
+ );
2232
+ const sessionId = requirePositional(input, 1, {
2233
+ command: "discover.show",
2234
+ usage: "canonry discover show <project> <session-id> [--format json]",
2235
+ message: "session ID is required"
2236
+ });
2237
+ await discoverShow(project, sessionId, { format: input.format });
2238
+ }
2239
+ },
2240
+ {
2241
+ path: ["discover", "promote", "preview"],
2242
+ usage: "canonry discover promote preview <project> <session-id> [--format json]",
2243
+ run: async (input) => {
2244
+ const project = requireProject(
2245
+ input,
2246
+ "discover.promote.preview",
2247
+ "canonry discover promote preview <project> <session-id> [--format json]"
2248
+ );
2249
+ const sessionId = requirePositional(input, 1, {
2250
+ command: "discover.promote.preview",
2251
+ usage: "canonry discover promote preview <project> <session-id> [--format json]",
2252
+ message: "session ID is required"
2253
+ });
2254
+ await discoverPromotePreview(project, sessionId, { format: input.format });
2255
+ }
2256
+ }
2257
+ ];
2258
+
1959
2259
  // src/commands/doctor.ts
1960
2260
  async function doctorCommand(opts) {
1961
2261
  const client = createApiClient();
@@ -2043,7 +2343,7 @@ var DOCTOR_CLI_COMMANDS = [
2043
2343
  ];
2044
2344
 
2045
2345
  // src/commands/ga.ts
2046
- function getClient4() {
2346
+ function getClient5() {
2047
2347
  return createApiClient();
2048
2348
  }
2049
2349
  async function gaConnect(project, opts) {
@@ -2076,7 +2376,7 @@ async function gaConnect(project, opts) {
2076
2376
  } else if (opts.keyJson) {
2077
2377
  body.keyJson = opts.keyJson;
2078
2378
  }
2079
- const client = getClient4();
2379
+ const client = getClient5();
2080
2380
  const result = await client.gaConnect(project, body);
2081
2381
  if (opts.format === "json") {
2082
2382
  console.log(JSON.stringify(result, null, 2));
@@ -2091,7 +2391,7 @@ async function gaConnect(project, opts) {
2091
2391
  }
2092
2392
  }
2093
2393
  async function gaDisconnect(project, format) {
2094
- const client = getClient4();
2394
+ const client = getClient5();
2095
2395
  await client.gaDisconnect(project);
2096
2396
  if (format === "json") {
2097
2397
  console.log(JSON.stringify({ project, disconnected: true }, null, 2));
@@ -2100,7 +2400,7 @@ async function gaDisconnect(project, format) {
2100
2400
  console.log(`GA4 disconnected from project "${project}".`);
2101
2401
  }
2102
2402
  async function gaStatus(project, format) {
2103
- const client = getClient4();
2403
+ const client = getClient5();
2104
2404
  const result = await client.gaStatus(project);
2105
2405
  if (format === "json") {
2106
2406
  console.log(JSON.stringify(result, null, 2));
@@ -2126,7 +2426,7 @@ async function gaStatus(project, format) {
2126
2426
  console.log(` Connected: ${result.createdAt ?? "unknown"}`);
2127
2427
  }
2128
2428
  async function gaSync(project, opts) {
2129
- const client = getClient4();
2429
+ const client = getClient5();
2130
2430
  const body = {};
2131
2431
  if (opts?.days) body.days = opts.days;
2132
2432
  if (opts?.only) body.only = opts.only;
@@ -2146,7 +2446,7 @@ async function gaSync(project, opts) {
2146
2446
  console.log(` Synced at: ${result.syncedAt}`);
2147
2447
  }
2148
2448
  async function gaTraffic(project, opts) {
2149
- const client = getClient4();
2449
+ const client = getClient5();
2150
2450
  const params = {};
2151
2451
  if (opts?.limit) params.limit = String(opts.limit);
2152
2452
  if (opts?.window) params.window = opts.window;
@@ -2236,7 +2536,7 @@ async function gaTraffic(project, opts) {
2236
2536
  }
2237
2537
  }
2238
2538
  async function gaAiReferralHistory(project, opts) {
2239
- const client = getClient4();
2539
+ const client = getClient5();
2240
2540
  const result = await client.gaAiReferralHistory(project, opts?.window ? { window: opts.window } : void 0);
2241
2541
  if (opts?.format === "json") {
2242
2542
  console.log(JSON.stringify(result, null, 2));
@@ -2261,7 +2561,7 @@ async function gaAiReferralHistory(project, opts) {
2261
2561
  }
2262
2562
  }
2263
2563
  async function gaSocialReferralHistory(project, opts) {
2264
- const client = getClient4();
2564
+ const client = getClient5();
2265
2565
  const result = await client.gaSocialReferralHistory(project, opts?.window ? { window: opts.window } : void 0);
2266
2566
  if (opts?.format === "json") {
2267
2567
  console.log(JSON.stringify(result, null, 2));
@@ -2286,7 +2586,7 @@ async function gaSocialReferralHistory(project, opts) {
2286
2586
  }
2287
2587
  }
2288
2588
  async function gaSessionHistory(project, opts) {
2289
- const client = getClient4();
2589
+ const client = getClient5();
2290
2590
  const result = await client.gaSessionHistory(project, opts?.window ? { window: opts.window } : void 0);
2291
2591
  if (opts?.format === "json") {
2292
2592
  console.log(JSON.stringify(result, null, 2));
@@ -2308,7 +2608,7 @@ async function gaSessionHistory(project, opts) {
2308
2608
  }
2309
2609
  }
2310
2610
  async function gaCoverage(project, format) {
2311
- const client = getClient4();
2611
+ const client = getClient5();
2312
2612
  const result = await client.gaCoverage(project);
2313
2613
  if (format === "json") {
2314
2614
  console.log(JSON.stringify(result, null, 2));
@@ -2331,7 +2631,7 @@ async function gaCoverage(project, format) {
2331
2631
  }
2332
2632
  }
2333
2633
  async function gaSocialReferralSummary(project, opts) {
2334
- const client = getClient4();
2634
+ const client = getClient5();
2335
2635
  const traffic = await client.gaTraffic(project);
2336
2636
  if (opts?.trend) {
2337
2637
  const trend = await client.gaSocialReferralTrend(project);
@@ -2392,7 +2692,7 @@ async function gaSocialReferralSummary(project, opts) {
2392
2692
  }
2393
2693
  }
2394
2694
  async function gaAttribution(project, opts) {
2395
- const client = getClient4();
2695
+ const client = getClient5();
2396
2696
  const traffic = await client.gaTraffic(project);
2397
2697
  const fmtTrend = (pct2) => pct2 === null ? "n/a" : `${pct2 >= 0 ? "+" : ""}${pct2}%`;
2398
2698
  if (opts?.trend) {
@@ -2719,7 +3019,7 @@ var GA_CLI_COMMANDS = [
2719
3019
  ];
2720
3020
 
2721
3021
  // src/commands/traffic.ts
2722
- function getClient5() {
3022
+ function getClient6() {
2723
3023
  return createApiClient();
2724
3024
  }
2725
3025
  async function trafficConnectWordpress(project, opts) {
@@ -2770,7 +3070,7 @@ async function trafficConnectWordpress(project, opts) {
2770
3070
  details: { project }
2771
3071
  });
2772
3072
  }
2773
- const client = getClient5();
3073
+ const client = getClient6();
2774
3074
  const result = await client.trafficConnectWordpress(project, {
2775
3075
  baseUrl: opts.url,
2776
3076
  username: opts.username,
@@ -2821,7 +3121,7 @@ async function trafficConnectCloudRun(project, opts) {
2821
3121
  details: { project, keyFile: opts.serviceAccountKey }
2822
3122
  });
2823
3123
  }
2824
- const client = getClient5();
3124
+ const client = getClient6();
2825
3125
  const result = await client.trafficConnectCloudRun(project, {
2826
3126
  gcpProjectId: opts.gcpProject,
2827
3127
  serviceName: opts.service,
@@ -2852,7 +3152,7 @@ async function trafficBackfill(project, opts) {
2852
3152
  details: { project }
2853
3153
  });
2854
3154
  }
2855
- const client = getClient5();
3155
+ const client = getClient6();
2856
3156
  const submitted = await client.trafficBackfill(project, opts.source, {
2857
3157
  days: opts.days
2858
3158
  });
@@ -2921,7 +3221,7 @@ async function trafficSync(project, opts) {
2921
3221
  details: { project }
2922
3222
  });
2923
3223
  }
2924
- const client = getClient5();
3224
+ const client = getClient6();
2925
3225
  const result = await client.trafficSync(project, opts.source, {
2926
3226
  sinceMinutes: opts.sinceMinutes
2927
3227
  });
@@ -3267,11 +3567,11 @@ var TRAFFIC_CLI_COMMANDS = [
3267
3567
  ];
3268
3568
 
3269
3569
  // src/commands/competitor.ts
3270
- function getClient6() {
3570
+ function getClient7() {
3271
3571
  return createApiClient();
3272
3572
  }
3273
3573
  async function addCompetitors(project, domains, format) {
3274
- const client = getClient6();
3574
+ const client = getClient7();
3275
3575
  const existing = await client.listCompetitors(project);
3276
3576
  const existingDomains = existing.map((c) => c.domain);
3277
3577
  const existingSet = new Set(existingDomains);
@@ -3295,7 +3595,7 @@ async function addCompetitors(project, domains, format) {
3295
3595
  }
3296
3596
  }
3297
3597
  async function removeCompetitors(project, domains, format) {
3298
- const client = getClient6();
3598
+ const client = getClient7();
3299
3599
  const existing = await client.listCompetitors(project);
3300
3600
  const existingDomains = existing.map((c) => c.domain);
3301
3601
  const requested = new Set(uniqueStrings(domains));
@@ -3324,7 +3624,7 @@ function uniqueStrings(values) {
3324
3624
  return result;
3325
3625
  }
3326
3626
  async function listCompetitors(project, format) {
3327
- const client = getClient6();
3627
+ const client = getClient7();
3328
3628
  const comps = await client.listCompetitors(project);
3329
3629
  if (format === "json") {
3330
3630
  console.log(JSON.stringify(comps, null, 2));
@@ -3420,7 +3720,7 @@ var COMPETITOR_CLI_COMMANDS = [
3420
3720
 
3421
3721
  // src/commands/google.ts
3422
3722
  var INDEXING_API_SCOPE_NOTICE = "Note: Google's Indexing API officially supports only pages with JobPosting or BroadcastEvent (livestream VideoObject) structured data. For other URL types, submissions are accepted (HTTP 200) but not guaranteed to be prioritized for crawling. For general pages, submit a sitemap and use URL Inspection to monitor status.";
3423
- function getClient7() {
3723
+ function getClient8() {
3424
3724
  return createApiClient();
3425
3725
  }
3426
3726
  async function waitForRunStatus2(client, runId, config) {
@@ -3460,7 +3760,7 @@ async function waitForRunStatus2(client, runId, config) {
3460
3760
  });
3461
3761
  }
3462
3762
  async function googleConnect(project, opts) {
3463
- const client = getClient7();
3763
+ const client = getClient8();
3464
3764
  const { authUrl, redirectUri } = await client.googleConnect(project, {
3465
3765
  type: opts.type,
3466
3766
  publicUrl: opts.publicUrl
@@ -3494,7 +3794,7 @@ Open this URL in your browser to authorize Google ${opts.type.toUpperCase()} acc
3494
3794
  }
3495
3795
  }
3496
3796
  async function googleDisconnect(project, opts) {
3497
- const client = getClient7();
3797
+ const client = getClient8();
3498
3798
  await client.googleDisconnect(project, opts.type);
3499
3799
  if (opts.format === "json") {
3500
3800
  console.log(JSON.stringify({ project, type: opts.type, disconnected: true }, null, 2));
@@ -3503,7 +3803,7 @@ async function googleDisconnect(project, opts) {
3503
3803
  console.log(`Disconnected Google ${opts.type.toUpperCase()} from project "${project}".`);
3504
3804
  }
3505
3805
  async function googleStatus(project, format) {
3506
- const client = getClient7();
3806
+ const client = getClient8();
3507
3807
  const connections = await client.googleConnections(project);
3508
3808
  if (format === "json") {
3509
3809
  console.log(JSON.stringify({ connections }, null, 2));
@@ -3527,7 +3827,7 @@ async function googleStatus(project, format) {
3527
3827
  }
3528
3828
  }
3529
3829
  async function googleProperties(project, format) {
3530
- const client = getClient7();
3830
+ const client = getClient8();
3531
3831
  const { sites } = await client.googleProperties(project);
3532
3832
  if (format === "json") {
3533
3833
  console.log(JSON.stringify({ sites }, null, 2));
@@ -3548,7 +3848,7 @@ async function googleProperties(project, format) {
3548
3848
  Use "canonry google set-property <project> <siteUrl>" to select a property.`);
3549
3849
  }
3550
3850
  async function googleSetProperty(project, propertyUrl, format) {
3551
- const client = getClient7();
3851
+ const client = getClient8();
3552
3852
  await client.googleSetProperty(project, "gsc", propertyUrl);
3553
3853
  if (format === "json") {
3554
3854
  console.log(JSON.stringify({ project, type: "gsc", propertyUrl }, null, 2));
@@ -3557,7 +3857,7 @@ async function googleSetProperty(project, propertyUrl, format) {
3557
3857
  console.log(`GSC property set to "${propertyUrl}" for project "${project}".`);
3558
3858
  }
3559
3859
  async function googleSync(project, opts) {
3560
- const client = getClient7();
3860
+ const client = getClient8();
3561
3861
  const run = await client.gscSync(project, { days: opts.days, full: opts.full });
3562
3862
  if (!opts.wait && opts.format === "json") {
3563
3863
  console.log(JSON.stringify(run, null, 2));
@@ -3587,7 +3887,7 @@ async function googleSync(project, opts) {
3587
3887
  }
3588
3888
  }
3589
3889
  async function googlePerformance(project, opts) {
3590
- const client = getClient7();
3890
+ const client = getClient8();
3591
3891
  const params = {};
3592
3892
  if (opts.days) {
3593
3893
  const end = /* @__PURE__ */ new Date();
@@ -3623,7 +3923,7 @@ async function googlePerformance(project, opts) {
3623
3923
  }
3624
3924
  }
3625
3925
  async function googleInspect(project, url, format) {
3626
- const client = getClient7();
3926
+ const client = getClient8();
3627
3927
  const result = await client.gscInspect(project, url);
3628
3928
  if (format === "json") {
3629
3929
  console.log(JSON.stringify(result, null, 2));
@@ -3643,7 +3943,7 @@ URL Inspection: ${result.url}
3643
3943
  console.log(` Inspected At: ${result.inspectedAt}`);
3644
3944
  }
3645
3945
  async function googleInspections(project, opts) {
3646
- const client = getClient7();
3946
+ const client = getClient8();
3647
3947
  const params = {};
3648
3948
  if (opts.url) params.url = opts.url;
3649
3949
  const rows = await client.gscInspections(project, Object.keys(params).length > 0 ? params : void 0);
@@ -3668,7 +3968,7 @@ async function googleInspections(project, opts) {
3668
3968
  }
3669
3969
  }
3670
3970
  async function googleCoverage(project, format) {
3671
- const client = getClient7();
3971
+ const client = getClient8();
3672
3972
  const result = await client.gscCoverage(project);
3673
3973
  if (format === "json") {
3674
3974
  console.log(JSON.stringify(result, null, 2));
@@ -3714,7 +4014,7 @@ Index Coverage for "${project}"
3714
4014
  }
3715
4015
  }
3716
4016
  async function googleSetSitemap(project, sitemapUrl, format) {
3717
- const client = getClient7();
4017
+ const client = getClient8();
3718
4018
  await client.googleSetSitemap(project, "gsc", sitemapUrl);
3719
4019
  if (format === "json") {
3720
4020
  console.log(JSON.stringify({ project, type: "gsc", sitemapUrl }, null, 2));
@@ -3723,7 +4023,7 @@ async function googleSetSitemap(project, sitemapUrl, format) {
3723
4023
  console.log(`GSC sitemap URL set to "${sitemapUrl}" for project "${project}".`);
3724
4024
  }
3725
4025
  async function googleListSitemaps(project, opts) {
3726
- const client = getClient7();
4026
+ const client = getClient8();
3727
4027
  const result = await client.gscSitemaps(project);
3728
4028
  if (opts.format === "json") {
3729
4029
  console.log(JSON.stringify(result, null, 2));
@@ -3745,7 +4045,7 @@ Sitemaps for project "${project}":
3745
4045
  }
3746
4046
  }
3747
4047
  async function googleInspectSitemap(project, opts) {
3748
- const client = getClient7();
4048
+ const client = getClient8();
3749
4049
  const run = await client.gscInspectSitemap(project, {
3750
4050
  sitemapUrl: opts.sitemapUrl
3751
4051
  });
@@ -3781,7 +4081,7 @@ async function googleInspectSitemap(project, opts) {
3781
4081
  }
3782
4082
  }
3783
4083
  async function googleCoverageHistory(project, opts) {
3784
- const client = getClient7();
4084
+ const client = getClient8();
3785
4085
  const rows = await client.gscCoverageHistory(project, { limit: opts.limit });
3786
4086
  if (opts.format === "json") {
3787
4087
  console.log(JSON.stringify(rows, null, 2));
@@ -3803,7 +4103,7 @@ GSC Coverage History for "${project}" (${rows.length} snapshots):
3803
4103
  }
3804
4104
  }
3805
4105
  async function googleDiscoverSitemaps(project, opts) {
3806
- const client = getClient7();
4106
+ const client = getClient8();
3807
4107
  const result = await client.gscDiscoverSitemaps(project);
3808
4108
  if (!opts.wait && opts.format === "json") {
3809
4109
  console.log(JSON.stringify(result, null, 2));
@@ -3855,7 +4155,7 @@ Primary sitemap: ${result.primarySitemapUrl}`);
3855
4155
  }
3856
4156
  }
3857
4157
  async function googleRequestIndexing(project, opts) {
3858
- const client = getClient7();
4158
+ const client = getClient8();
3859
4159
  const body = { urls: [] };
3860
4160
  if (opts.allUnindexed) {
3861
4161
  body.allUnindexed = true;
@@ -3950,7 +4250,7 @@ async function googleRequestIndexing(project, opts) {
3950
4250
  }
3951
4251
  }
3952
4252
  async function googleRefresh(project, format) {
3953
- const client = getClient7();
4253
+ const client = getClient8();
3954
4254
  const run = await client.gscSync(project, {});
3955
4255
  if (format !== "json") {
3956
4256
  process.stderr.write("Refreshing GSC coverage data");
@@ -3973,7 +4273,7 @@ async function googleRefresh(project, format) {
3973
4273
  await googleCoverage(project, format);
3974
4274
  }
3975
4275
  async function googleDeindexed(project, format) {
3976
- const client = getClient7();
4276
+ const client = getClient8();
3977
4277
  const rows = await client.gscDeindexed(project);
3978
4278
  if (format === "json") {
3979
4279
  console.log(JSON.stringify(rows, null, 2));
@@ -4262,11 +4562,11 @@ var GOOGLE_CLI_COMMANDS = [
4262
4562
 
4263
4563
  // src/commands/keyword.ts
4264
4564
  import fs2 from "fs";
4265
- function getClient8() {
4565
+ function getClient9() {
4266
4566
  return createApiClient();
4267
4567
  }
4268
4568
  async function addKeywords(project, keywords, format) {
4269
- const client = getClient8();
4569
+ const client = getClient9();
4270
4570
  await client.appendKeywords(project, keywords);
4271
4571
  if (format === "json") {
4272
4572
  console.log(JSON.stringify({
@@ -4279,7 +4579,7 @@ async function addKeywords(project, keywords, format) {
4279
4579
  console.log(`Added ${keywords.length} key phrase(s) to "${project}".`);
4280
4580
  }
4281
4581
  async function replaceKeywords(project, keywords, format) {
4282
- const client = getClient8();
4582
+ const client = getClient9();
4283
4583
  await client.putKeywords(project, keywords);
4284
4584
  if (format === "json") {
4285
4585
  console.log(JSON.stringify({
@@ -4292,7 +4592,7 @@ async function replaceKeywords(project, keywords, format) {
4292
4592
  console.log(`Set ${keywords.length} key phrase(s) for "${project}".`);
4293
4593
  }
4294
4594
  async function removeKeywords(project, keywords, format) {
4295
- const client = getClient8();
4595
+ const client = getClient9();
4296
4596
  const existing = await client.listKeywords(project);
4297
4597
  const existingSet = new Set(existing.map((k) => k.keyword));
4298
4598
  const removedKeywords = keywords.filter((k) => existingSet.has(k));
@@ -4309,7 +4609,7 @@ async function removeKeywords(project, keywords, format) {
4309
4609
  console.log(`Removed ${removedKeywords.length} key phrase(s) from "${project}".`);
4310
4610
  }
4311
4611
  async function listKeywords(project, format) {
4312
- const client = getClient8();
4612
+ const client = getClient9();
4313
4613
  const kws = await client.listKeywords(project);
4314
4614
  if (format === "json") {
4315
4615
  console.log(JSON.stringify(kws, null, 2));
@@ -4352,7 +4652,7 @@ async function importKeywords(project, filePath, format) {
4352
4652
  console.log("No key phrases found in file.");
4353
4653
  return;
4354
4654
  }
4355
- const client = getClient8();
4655
+ const client = getClient9();
4356
4656
  await client.appendKeywords(project, keywords);
4357
4657
  if (format === "json") {
4358
4658
  console.log(JSON.stringify({
@@ -4366,7 +4666,7 @@ async function importKeywords(project, filePath, format) {
4366
4666
  console.log(`Imported ${keywords.length} key phrase(s) to "${project}".`);
4367
4667
  }
4368
4668
  async function generateKeywords(project, provider, opts) {
4369
- const client = getClient8();
4669
+ const client = getClient9();
4370
4670
  const result = await client.generateKeywords(project, provider, opts.count);
4371
4671
  const saved = Boolean(opts.save && result.keywords.length > 0);
4372
4672
  if (opts.format !== "json") {
@@ -4539,11 +4839,11 @@ var KEYWORD_CLI_COMMANDS = [
4539
4839
 
4540
4840
  // src/commands/query.ts
4541
4841
  import fs3 from "fs";
4542
- function getClient9() {
4842
+ function getClient10() {
4543
4843
  return createApiClient();
4544
4844
  }
4545
4845
  async function addQueries(project, queries2, format) {
4546
- const client = getClient9();
4846
+ const client = getClient10();
4547
4847
  await client.appendQueries(project, queries2);
4548
4848
  if (format === "json") {
4549
4849
  console.log(JSON.stringify({
@@ -4556,7 +4856,7 @@ async function addQueries(project, queries2, format) {
4556
4856
  console.log(`Added ${queries2.length} ${queries2.length === 1 ? "query" : "queries"} to "${project}".`);
4557
4857
  }
4558
4858
  async function replaceQueries(project, queries2, format) {
4559
- const client = getClient9();
4859
+ const client = getClient10();
4560
4860
  await client.putQueries(project, queries2);
4561
4861
  if (format === "json") {
4562
4862
  console.log(JSON.stringify({
@@ -4569,7 +4869,7 @@ async function replaceQueries(project, queries2, format) {
4569
4869
  console.log(`Set ${queries2.length} ${queries2.length === 1 ? "query" : "queries"} for "${project}".`);
4570
4870
  }
4571
4871
  async function removeQueries(project, queries2, format) {
4572
- const client = getClient9();
4872
+ const client = getClient10();
4573
4873
  const existing = await client.listQueries(project);
4574
4874
  const existingSet = new Set(existing.map((q) => q.query));
4575
4875
  const removedQueries = queries2.filter((q) => existingSet.has(q));
@@ -4586,7 +4886,7 @@ async function removeQueries(project, queries2, format) {
4586
4886
  console.log(`Removed ${removedQueries.length} ${removedQueries.length === 1 ? "query" : "queries"} from "${project}".`);
4587
4887
  }
4588
4888
  async function listQueries(project, format) {
4589
- const client = getClient9();
4889
+ const client = getClient10();
4590
4890
  const qs = await client.listQueries(project);
4591
4891
  if (format === "json") {
4592
4892
  console.log(JSON.stringify(qs, null, 2));
@@ -4629,7 +4929,7 @@ async function importQueries(project, filePath, format) {
4629
4929
  console.log("No queries found in file.");
4630
4930
  return;
4631
4931
  }
4632
- const client = getClient9();
4932
+ const client = getClient10();
4633
4933
  await client.appendQueries(project, queries2);
4634
4934
  if (format === "json") {
4635
4935
  console.log(JSON.stringify({
@@ -4643,7 +4943,7 @@ async function importQueries(project, filePath, format) {
4643
4943
  console.log(`Imported ${queries2.length} ${queries2.length === 1 ? "query" : "queries"} to "${project}".`);
4644
4944
  }
4645
4945
  async function generateQueries(project, provider, opts) {
4646
- const client = getClient9();
4946
+ const client = getClient10();
4647
4947
  const result = await client.generateQueries(project, provider, opts.count);
4648
4948
  const saved = Boolean(opts.save && result.queries.length > 0);
4649
4949
  if (opts.format !== "json") {
@@ -5127,11 +5427,11 @@ var MCP_CLI_COMMANDS = [
5127
5427
  ];
5128
5428
 
5129
5429
  // src/commands/notify.ts
5130
- function getClient10() {
5430
+ function getClient11() {
5131
5431
  return createApiClient();
5132
5432
  }
5133
5433
  async function addNotification(project, opts) {
5134
- const client = getClient10();
5434
+ const client = getClient11();
5135
5435
  const result = await client.createNotification(project, {
5136
5436
  channel: "webhook",
5137
5437
  url: opts.webhook,
@@ -5145,7 +5445,7 @@ async function addNotification(project, opts) {
5145
5445
  printNotification(result);
5146
5446
  }
5147
5447
  async function listNotifications(project, format) {
5148
- const client = getClient10();
5448
+ const client = getClient11();
5149
5449
  const results = await client.listNotifications(project);
5150
5450
  if (format === "json") {
5151
5451
  console.log(JSON.stringify(results, null, 2));
@@ -5163,7 +5463,7 @@ async function listNotifications(project, format) {
5163
5463
  }
5164
5464
  }
5165
5465
  async function removeNotification(project, id, format) {
5166
- const client = getClient10();
5466
+ const client = getClient11();
5167
5467
  await client.deleteNotification(project, id);
5168
5468
  if (format === "json") {
5169
5469
  console.log(JSON.stringify({ project, id, removed: true }, null, 2));
@@ -5172,7 +5472,7 @@ async function removeNotification(project, id, format) {
5172
5472
  console.log(`Notification ${id} removed from "${project}"`);
5173
5473
  }
5174
5474
  async function testNotification(project, id, format) {
5175
- const client = getClient10();
5475
+ const client = getClient11();
5176
5476
  const result = await client.testNotification(project, id);
5177
5477
  if (format === "json") {
5178
5478
  console.log(JSON.stringify({ project, id, ...result }, null, 2));
@@ -5363,11 +5663,11 @@ async function applyConfigs(filePaths, format) {
5363
5663
  }
5364
5664
 
5365
5665
  // src/commands/analytics.ts
5366
- function getClient11() {
5666
+ function getClient12() {
5367
5667
  return createApiClient();
5368
5668
  }
5369
5669
  async function showAnalytics(project, options) {
5370
- const client = getClient11();
5670
+ const client = getClient12();
5371
5671
  const features = options.feature ? [options.feature] : ["metrics", "gaps", "sources"];
5372
5672
  const results = {};
5373
5673
  for (const feature of features) {
@@ -5470,11 +5770,11 @@ Source Origin Breakdown`);
5470
5770
  }
5471
5771
 
5472
5772
  // src/commands/evidence.ts
5473
- function getClient12() {
5773
+ function getClient13() {
5474
5774
  return createApiClient();
5475
5775
  }
5476
5776
  async function showEvidence(project, format) {
5477
- const client = getClient12();
5777
+ const client = getClient13();
5478
5778
  const timeline = await client.getTimeline(project);
5479
5779
  if (format === "json") {
5480
5780
  const enriched = timeline.map((entry) => ({
@@ -5534,11 +5834,11 @@ async function loadLatestRunForExport(client, project) {
5534
5834
  }
5535
5835
 
5536
5836
  // src/commands/history.ts
5537
- function getClient13() {
5837
+ function getClient14() {
5538
5838
  return createApiClient();
5539
5839
  }
5540
5840
  async function showHistory(project, format) {
5541
- const client = getClient13();
5841
+ const client = getClient14();
5542
5842
  try {
5543
5843
  const entries = await client.getHistory(project);
5544
5844
  if (format === "json") {
@@ -5573,11 +5873,11 @@ async function showHistory(project, format) {
5573
5873
  }
5574
5874
 
5575
5875
  // src/commands/status.ts
5576
- function getClient14() {
5876
+ function getClient15() {
5577
5877
  return createApiClient();
5578
5878
  }
5579
5879
  async function showStatus(project, format) {
5580
- const client = getClient14();
5880
+ const client = getClient15();
5581
5881
  const projectData = await client.getProject(project);
5582
5882
  const latest = await getLatestRunSummary(client, project);
5583
5883
  if (format === "json") {
@@ -5708,11 +6008,11 @@ var OPERATOR_CLI_COMMANDS = [
5708
6008
  ];
5709
6009
 
5710
6010
  // src/commands/project.ts
5711
- function getClient15() {
6011
+ function getClient16() {
5712
6012
  return createApiClient();
5713
6013
  }
5714
6014
  async function createProject(name, opts) {
5715
- const client = getClient15();
6015
+ const client = getClient16();
5716
6016
  const result = await client.putProject(name, {
5717
6017
  displayName: opts.displayName,
5718
6018
  canonicalDomain: opts.domain,
@@ -5727,7 +6027,7 @@ async function createProject(name, opts) {
5727
6027
  console.log(`Project created: ${result.name} (${result.id})`);
5728
6028
  }
5729
6029
  async function listProjects(format) {
5730
- const client = getClient15();
6030
+ const client = getClient16();
5731
6031
  const projects2 = await client.listProjects();
5732
6032
  if (format === "json") {
5733
6033
  console.log(JSON.stringify(projects2, null, 2));
@@ -5755,7 +6055,7 @@ async function listProjects(format) {
5755
6055
  }
5756
6056
  }
5757
6057
  async function showProject(name, format) {
5758
- const client = getClient15();
6058
+ const client = getClient16();
5759
6059
  const project = await client.getProject(name);
5760
6060
  if (format === "json") {
5761
6061
  console.log(JSON.stringify(project, null, 2));
@@ -5781,7 +6081,7 @@ async function showProject(name, format) {
5781
6081
  if (project.updatedAt) console.log(` Updated: ${project.updatedAt}`);
5782
6082
  }
5783
6083
  async function updateProjectSettings(name, opts) {
5784
- const client = getClient15();
6084
+ const client = getClient16();
5785
6085
  const project = await client.getProject(name);
5786
6086
  let ownedDomains = opts.ownedDomains ?? project.ownedDomains ?? [];
5787
6087
  if (opts.addOwnedDomain) {
@@ -5806,7 +6106,7 @@ async function updateProjectSettings(name, opts) {
5806
6106
  console.log(`Project updated: ${result.name}`);
5807
6107
  }
5808
6108
  async function deleteProject(name, format) {
5809
- const client = getClient15();
6109
+ const client = getClient16();
5810
6110
  await client.deleteProject(name);
5811
6111
  if (format === "json") {
5812
6112
  console.log(JSON.stringify({ name, deleted: true }, null, 2));
@@ -5815,7 +6115,7 @@ async function deleteProject(name, format) {
5815
6115
  console.log(`Project deleted: ${name}`);
5816
6116
  }
5817
6117
  async function addLocation(project, opts) {
5818
- const client = getClient15();
6118
+ const client = getClient16();
5819
6119
  const location = await client.addLocation(project, {
5820
6120
  label: opts.label,
5821
6121
  city: opts.city,
@@ -5830,7 +6130,7 @@ async function addLocation(project, opts) {
5830
6130
  console.log(`Location added: ${opts.label} (${opts.city}, ${opts.region}, ${opts.country})`);
5831
6131
  }
5832
6132
  async function listLocations(project, format) {
5833
- const client = getClient15();
6133
+ const client = getClient16();
5834
6134
  const result = await client.listLocations(project);
5835
6135
  if (format === "json") {
5836
6136
  console.log(JSON.stringify(result, null, 2));
@@ -5856,7 +6156,7 @@ async function listLocations(project, format) {
5856
6156
  }
5857
6157
  }
5858
6158
  async function removeLocation(project, label, format) {
5859
- const client = getClient15();
6159
+ const client = getClient16();
5860
6160
  await client.removeLocation(project, label);
5861
6161
  if (format === "json") {
5862
6162
  console.log(JSON.stringify({ project, label, removed: true }, null, 2));
@@ -5865,7 +6165,7 @@ async function removeLocation(project, label, format) {
5865
6165
  console.log(`Location removed: ${label}`);
5866
6166
  }
5867
6167
  async function setDefaultLocation(project, label, format) {
5868
- const client = getClient15();
6168
+ const client = getClient16();
5869
6169
  const result = await client.setDefaultLocation(project, label);
5870
6170
  if (format === "json") {
5871
6171
  console.log(JSON.stringify({ project, ...result }, null, 2));
@@ -6097,12 +6397,12 @@ var REPORT_CLI_COMMANDS = [
6097
6397
  ];
6098
6398
 
6099
6399
  // src/commands/run.ts
6100
- function getClient16() {
6400
+ function getClient17() {
6101
6401
  return createApiClient();
6102
6402
  }
6103
6403
  var TERMINAL_STATUSES = /* @__PURE__ */ new Set(["completed", "partial", "failed", "cancelled"]);
6104
6404
  async function triggerRun(project, opts) {
6105
- const client = getClient16();
6405
+ const client = getClient17();
6106
6406
  const body = {};
6107
6407
  if (opts?.provider) {
6108
6408
  const providerInputs = opts.provider.split(",").map((s) => s.trim()).filter(Boolean);
@@ -6198,7 +6498,7 @@ async function triggerRun(project, opts) {
6198
6498
  }
6199
6499
  }
6200
6500
  async function triggerRunAll(opts) {
6201
- const client = getClient16();
6501
+ const client = getClient17();
6202
6502
  const projects2 = await client.listProjects();
6203
6503
  if (projects2.length === 0) {
6204
6504
  if (opts?.format === "json") {
@@ -6256,7 +6556,7 @@ async function triggerRunAll(opts) {
6256
6556
  }
6257
6557
  }
6258
6558
  async function cancelRun(project, runId, format) {
6259
- const client = getClient16();
6559
+ const client = getClient17();
6260
6560
  let targetId = runId;
6261
6561
  if (!targetId) {
6262
6562
  const runs2 = await client.listRuns(project);
@@ -6288,7 +6588,7 @@ To cancel by ID : canonry run cancel ${project} <run-id>`,
6288
6588
  console.log(`Run ${result.id} cancelled.`);
6289
6589
  }
6290
6590
  async function showRun(id, format) {
6291
- const client = getClient16();
6591
+ const client = getClient17();
6292
6592
  const run = await client.getRun(id);
6293
6593
  if (format === "json") {
6294
6594
  console.log(JSON.stringify(run, null, 2));
@@ -6297,7 +6597,7 @@ async function showRun(id, format) {
6297
6597
  printRunDetail(run);
6298
6598
  }
6299
6599
  async function listRuns(project, opts) {
6300
- const client = getClient16();
6600
+ const client = getClient17();
6301
6601
  const runs2 = await client.listRuns(project, opts?.limit);
6302
6602
  if (opts?.format === "json") {
6303
6603
  console.log(JSON.stringify(runs2, null, 2));
@@ -6317,13 +6617,13 @@ async function listRuns(project, opts) {
6317
6617
  );
6318
6618
  }
6319
6619
  }
6320
- var POLL_TIMEOUT_MS = 10 * 60 * 1e3;
6620
+ var POLL_TIMEOUT_MS2 = 10 * 60 * 1e3;
6321
6621
  async function pollRun2(client, runId) {
6322
- const deadline = Date.now() + POLL_TIMEOUT_MS;
6622
+ const deadline = Date.now() + POLL_TIMEOUT_MS2;
6323
6623
  for (; ; ) {
6324
6624
  await new Promise((r) => setTimeout(r, 2e3));
6325
6625
  if (Date.now() > deadline) {
6326
- throw new Error(`Timed out waiting for run ${runId} after ${POLL_TIMEOUT_MS / 1e3}s`);
6626
+ throw new Error(`Timed out waiting for run ${runId} after ${POLL_TIMEOUT_MS2 / 1e3}s`);
6327
6627
  }
6328
6628
  const run = await client.getRun(runId);
6329
6629
  process.stderr.write(".");
@@ -6450,11 +6750,11 @@ var RUN_CLI_COMMANDS = [
6450
6750
  ];
6451
6751
 
6452
6752
  // src/commands/schedule.ts
6453
- function getClient17() {
6753
+ function getClient18() {
6454
6754
  return createApiClient();
6455
6755
  }
6456
6756
  async function setSchedule(project, opts) {
6457
- const client = getClient17();
6757
+ const client = getClient18();
6458
6758
  const body = {};
6459
6759
  if (opts.kind) body.kind = opts.kind;
6460
6760
  if (opts.sourceId) body.sourceId = opts.sourceId;
@@ -6471,7 +6771,7 @@ async function setSchedule(project, opts) {
6471
6771
  printSchedule(result);
6472
6772
  }
6473
6773
  async function showSchedule(project, format, kind) {
6474
- const client = getClient17();
6774
+ const client = getClient18();
6475
6775
  const result = await client.getSchedule(project, kind);
6476
6776
  if (format === "json") {
6477
6777
  console.log(JSON.stringify(result, null, 2));
@@ -6480,7 +6780,7 @@ async function showSchedule(project, format, kind) {
6480
6780
  printSchedule(result);
6481
6781
  }
6482
6782
  async function enableSchedule(project, format, kind) {
6483
- const client = getClient17();
6783
+ const client = getClient18();
6484
6784
  const current = await client.getSchedule(project, kind);
6485
6785
  const body = { kind: current.kind, timezone: current.timezone, enabled: true };
6486
6786
  if (current.preset) body.preset = current.preset;
@@ -6495,7 +6795,7 @@ async function enableSchedule(project, format, kind) {
6495
6795
  console.log(`Schedule enabled for "${project}" (kind: ${result.kind})`);
6496
6796
  }
6497
6797
  async function disableSchedule(project, format, kind) {
6498
- const client = getClient17();
6798
+ const client = getClient18();
6499
6799
  const current = await client.getSchedule(project, kind);
6500
6800
  const body = { kind: current.kind, timezone: current.timezone, enabled: false };
6501
6801
  if (current.preset) body.preset = current.preset;
@@ -6510,7 +6810,7 @@ async function disableSchedule(project, format, kind) {
6510
6810
  console.log(`Schedule disabled for "${project}" (kind: ${result.kind})`);
6511
6811
  }
6512
6812
  async function removeSchedule(project, format, kind) {
6513
- const client = getClient17();
6813
+ const client = getClient18();
6514
6814
  await client.deleteSchedule(project, kind);
6515
6815
  const resolvedKind = kind ?? "answer-visibility";
6516
6816
  if (format === "json") {
@@ -6627,11 +6927,11 @@ var SCHEDULE_CLI_COMMANDS = [
6627
6927
  ];
6628
6928
 
6629
6929
  // src/commands/settings.ts
6630
- function getClient18() {
6930
+ function getClient19() {
6631
6931
  return createApiClient();
6632
6932
  }
6633
6933
  async function setProvider(name, opts) {
6634
- const client = getClient18();
6934
+ const client = getClient19();
6635
6935
  const { format, ...payload } = opts;
6636
6936
  const result = await client.updateProvider(name, payload);
6637
6937
  if (format === "json") {
@@ -6647,7 +6947,7 @@ async function setProvider(name, opts) {
6647
6947
  }
6648
6948
  }
6649
6949
  async function showSettings(format) {
6650
- const client = getClient18();
6950
+ const client = getClient19();
6651
6951
  const config = loadConfig();
6652
6952
  const settings = await client.getSettings();
6653
6953
  if (format === "json") {
@@ -7444,7 +7744,7 @@ function wrapText(font, text, size, maxWidth) {
7444
7744
  }
7445
7745
 
7446
7746
  // src/commands/snapshot.ts
7447
- function getClient19() {
7747
+ function getClient20() {
7448
7748
  return createApiClient();
7449
7749
  }
7450
7750
  function slugify(value) {
@@ -7455,7 +7755,7 @@ function autoOutputPath(companyName, ext) {
7455
7755
  return `${slugify(companyName)}-snapshot-${date}.${ext}`;
7456
7756
  }
7457
7757
  async function createSnapshotReport(companyName, opts) {
7458
- const client = getClient19();
7758
+ const client = getClient20();
7459
7759
  const report = await client.createSnapshot({
7460
7760
  companyName,
7461
7761
  domain: opts.domain,
@@ -9257,7 +9557,7 @@ var SYSTEM_CLI_COMMANDS = [
9257
9557
  import fs12 from "fs";
9258
9558
 
9259
9559
  // src/commands/wordpress.ts
9260
- function getClient20() {
9560
+ function getClient21() {
9261
9561
  return createApiClient();
9262
9562
  }
9263
9563
  function printJson2(value) {
@@ -9404,7 +9704,7 @@ async function wordpressConnect(project, opts) {
9404
9704
  details: { project }
9405
9705
  });
9406
9706
  }
9407
- const client = getClient20();
9707
+ const client = getClient21();
9408
9708
  const result = await client.wordpressConnect(project, {
9409
9709
  url: opts.url,
9410
9710
  stagingUrl: opts.stagingUrl,
@@ -9421,7 +9721,7 @@ async function wordpressConnect(project, opts) {
9421
9721
  printWordpressStatus(project, result);
9422
9722
  }
9423
9723
  async function wordpressDisconnect(project, format) {
9424
- const client = getClient20();
9724
+ const client = getClient21();
9425
9725
  await client.wordpressDisconnect(project);
9426
9726
  if (format === "json") {
9427
9727
  printJson2({ project, disconnected: true });
@@ -9430,7 +9730,7 @@ async function wordpressDisconnect(project, format) {
9430
9730
  console.log(`WordPress disconnected from project "${project}".`);
9431
9731
  }
9432
9732
  async function wordpressStatus(project, format) {
9433
- const client = getClient20();
9733
+ const client = getClient21();
9434
9734
  const result = await client.wordpressStatus(project);
9435
9735
  if (format === "json") {
9436
9736
  printJson2(result);
@@ -9439,7 +9739,7 @@ async function wordpressStatus(project, format) {
9439
9739
  printWordpressStatus(project, result);
9440
9740
  }
9441
9741
  async function wordpressPages(project, opts) {
9442
- const client = getClient20();
9742
+ const client = getClient21();
9443
9743
  const result = await client.wordpressPages(project, opts.env);
9444
9744
  if (opts.format === "json") {
9445
9745
  printJson2(result);
@@ -9448,7 +9748,7 @@ async function wordpressPages(project, opts) {
9448
9748
  printPages(project, result.env, result.pages);
9449
9749
  }
9450
9750
  async function wordpressPage(project, slug, opts) {
9451
- const client = getClient20();
9751
+ const client = getClient21();
9452
9752
  const result = await client.wordpressPage(project, slug, opts.env);
9453
9753
  if (opts.format === "json") {
9454
9754
  printJson2(result);
@@ -9457,7 +9757,7 @@ async function wordpressPage(project, slug, opts) {
9457
9757
  printPageDetail(result);
9458
9758
  }
9459
9759
  async function wordpressCreatePage(project, body) {
9460
- const client = getClient20();
9760
+ const client = getClient21();
9461
9761
  const result = await client.wordpressCreatePage(project, body);
9462
9762
  if (body.format === "json") {
9463
9763
  printJson2(result);
@@ -9468,7 +9768,7 @@ async function wordpressCreatePage(project, body) {
9468
9768
  printPageDetail(result);
9469
9769
  }
9470
9770
  async function wordpressUpdatePage(project, body) {
9471
- const client = getClient20();
9771
+ const client = getClient21();
9472
9772
  const result = await client.wordpressUpdatePage(project, body);
9473
9773
  if (body.format === "json") {
9474
9774
  printJson2(result);
@@ -9479,7 +9779,7 @@ async function wordpressUpdatePage(project, body) {
9479
9779
  printPageDetail(result);
9480
9780
  }
9481
9781
  async function wordpressSetMeta(project, body) {
9482
- const client = getClient20();
9782
+ const client = getClient21();
9483
9783
  const result = await client.wordpressSetMeta(project, body);
9484
9784
  if (body.format === "json") {
9485
9785
  printJson2(result);
@@ -9529,7 +9829,7 @@ async function wordpressBulkSetMeta(project, opts) {
9529
9829
  details: { path: filePath }
9530
9830
  });
9531
9831
  }
9532
- const client = getClient20();
9832
+ const client = getClient21();
9533
9833
  const result = await client.wordpressBulkSetMeta(project, { entries, env: opts.env });
9534
9834
  if (opts.format === "json") {
9535
9835
  printJson2(result);
@@ -9572,7 +9872,7 @@ async function wordpressBulkSetMeta(project, opts) {
9572
9872
  Total: ${applied.length} applied, ${skipped.length} skipped, ${manual.length} manual`);
9573
9873
  }
9574
9874
  async function wordpressSchema(project, slug, opts) {
9575
- const client = getClient20();
9875
+ const client = getClient21();
9576
9876
  const result = await client.wordpressSchema(project, slug, opts.env);
9577
9877
  if (opts.format === "json") {
9578
9878
  printJson2(result);
@@ -9583,7 +9883,7 @@ async function wordpressSchema(project, slug, opts) {
9583
9883
  printSchemaBlocks(result.blocks);
9584
9884
  }
9585
9885
  async function wordpressSetSchema(project, body) {
9586
- const client = getClient20();
9886
+ const client = getClient21();
9587
9887
  const result = await client.wordpressSetSchema(project, body);
9588
9888
  if (body.format === "json") {
9589
9889
  printJson2(result);
@@ -9631,7 +9931,7 @@ async function wordpressSchemaDeploy(project, opts) {
9631
9931
  details: { path: filePath }
9632
9932
  });
9633
9933
  }
9634
- const client = getClient20();
9934
+ const client = getClient21();
9635
9935
  const result = await client.wordpressSchemaDeploy(project, { profile: parsed, env: opts.env });
9636
9936
  if (opts.format === "json") {
9637
9937
  printJson2(result);
@@ -9670,7 +9970,7 @@ async function wordpressSchemaDeploy(project, opts) {
9670
9970
  Total: ${deployed} deployed, ${stripped} stripped, ${skipped} skipped, ${failed} failed`);
9671
9971
  }
9672
9972
  async function wordpressSchemaStatus(project, opts) {
9673
- const client = getClient20();
9973
+ const client = getClient21();
9674
9974
  const result = await client.wordpressSchemaStatus(project, opts.env);
9675
9975
  if (opts.format === "json") {
9676
9976
  printJson2(result);
@@ -9729,7 +10029,7 @@ async function wordpressOnboard(project, opts) {
9729
10029
  });
9730
10030
  }
9731
10031
  }
9732
- const client = getClient20();
10032
+ const client = getClient21();
9733
10033
  const result = await client.wordpressOnboard(project, {
9734
10034
  url: opts.url,
9735
10035
  username: opts.user,
@@ -9754,7 +10054,7 @@ async function wordpressOnboard(project, opts) {
9754
10054
  }
9755
10055
  }
9756
10056
  async function wordpressLlmsTxt(project, opts) {
9757
- const client = getClient20();
10057
+ const client = getClient21();
9758
10058
  const result = await client.wordpressLlmsTxt(project, opts.env);
9759
10059
  if (opts.format === "json") {
9760
10060
  printJson2(result);
@@ -9765,7 +10065,7 @@ async function wordpressLlmsTxt(project, opts) {
9765
10065
  console.log(result.content ?? "(not found)");
9766
10066
  }
9767
10067
  async function wordpressSetLlmsTxt(project, body) {
9768
- const client = getClient20();
10068
+ const client = getClient21();
9769
10069
  const result = await client.wordpressSetLlmsTxt(project, body);
9770
10070
  if (body.format === "json") {
9771
10071
  printJson2(result);
@@ -9774,7 +10074,7 @@ async function wordpressSetLlmsTxt(project, body) {
9774
10074
  printManualAssist(`llms.txt update for "${project}"`, result);
9775
10075
  }
9776
10076
  async function wordpressAudit(project, opts) {
9777
- const client = getClient20();
10077
+ const client = getClient21();
9778
10078
  const result = await client.wordpressAudit(project, opts.env);
9779
10079
  if (opts.format === "json") {
9780
10080
  printJson2(result);
@@ -9788,7 +10088,7 @@ async function wordpressAudit(project, opts) {
9788
10088
  printAuditIssues(result.issues);
9789
10089
  }
9790
10090
  async function wordpressDiff(project, slug, format) {
9791
- const client = getClient20();
10091
+ const client = getClient21();
9792
10092
  const result = await client.wordpressDiff(project, slug);
9793
10093
  if (format === "json") {
9794
10094
  printJson2(result);
@@ -9797,7 +10097,7 @@ async function wordpressDiff(project, slug, format) {
9797
10097
  printDiff(result);
9798
10098
  }
9799
10099
  async function wordpressStagingStatus(project, format) {
9800
- const client = getClient20();
10100
+ const client = getClient21();
9801
10101
  const result = await client.wordpressStagingStatus(project);
9802
10102
  if (format === "json") {
9803
10103
  printJson2(result);
@@ -9811,7 +10111,7 @@ async function wordpressStagingStatus(project, format) {
9811
10111
  console.log(` Admin URL: ${result.adminUrl}`);
9812
10112
  }
9813
10113
  async function wordpressStagingPush(project, format) {
9814
- const client = getClient20();
10114
+ const client = getClient21();
9815
10115
  const result = await client.wordpressStagingPush(project);
9816
10116
  if (format === "json") {
9817
10117
  printJson2(result);
@@ -10809,6 +11109,7 @@ var REGISTERED_CLI_COMMANDS = [
10809
11109
  ...INTELLIGENCE_CLI_COMMANDS,
10810
11110
  ...CONTENT_CLI_COMMANDS,
10811
11111
  ...AGENT_CLI_COMMANDS,
11112
+ ...DISCOVER_CLI_COMMANDS,
10812
11113
  ...DOCTOR_CLI_COMMANDS,
10813
11114
  ...MCP_CLI_COMMANDS
10814
11115
  ];