@canonry/canonry 7.32.0 → 7.43.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 (40) hide show
  1. package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +24 -0
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +204 -4
  3. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +14 -2
  4. package/assets/assets/{AuditHistoryPanel-cQyVA85P.js → AuditHistoryPanel-C5oZsvsR.js} +1 -1
  5. package/assets/assets/{BacklinksPage-UGZ_9N7F.js → BacklinksPage-CF5sGSTQ.js} +1 -1
  6. package/assets/assets/{HistoryPage-UJVFZ5LK.js → HistoryPage-DumL6cl5.js} +1 -1
  7. package/assets/assets/{MeasurementPropertyPage-ChpOxQfx.js → MeasurementPropertyPage-DCegOp_w.js} +3 -3
  8. package/assets/assets/ProjectPage-CWDk48Y6.js +8 -0
  9. package/assets/assets/RunsPage-Bb1VMWYu.js +1 -0
  10. package/assets/assets/{SettingsPage-DeKxjuTr.js → SettingsPage-CHGh169l.js} +1 -1
  11. package/assets/assets/{SiteHealthSection-COeVsgop.js → SiteHealthSection-bGzH9m9-.js} +3 -3
  12. package/assets/assets/{TrafficPage-DmMmeJKK.js → TrafficPage-cfnEZ2Mu.js} +1 -1
  13. package/assets/assets/{TrafficSourceDetailPage-CUehseZe.js → TrafficSourceDetailPage-BQS0MAXE.js} +1 -1
  14. package/assets/assets/{extract-error-message-BsxdS7Po.js → extract-error-message-IWhACkO_.js} +1 -1
  15. package/assets/assets/index-BDY3-V1S.js +86 -0
  16. package/assets/assets/{react-sigma_core.esm.min--MbbBWzJ.js → react-sigma_core.esm.min-BQt189AI.js} +1 -1
  17. package/assets/assets/{v2-overview-adapter-D-IScpdp.js → v2-overview-adapter-ZC3VuoTT.js} +1 -1
  18. package/assets/index.html +1 -1
  19. package/dist/{chunk-WRHA54BN.js → chunk-65BHDVYO.js} +5604 -3984
  20. package/dist/{chunk-FW4GX2LO.js → chunk-BPFRGC7K.js} +3 -3
  21. package/dist/{chunk-2C6NWFN4.js → chunk-BWR5MNL5.js} +2 -2
  22. package/dist/chunk-C2I7M3B2.js +22948 -0
  23. package/dist/{chunk-42XUY243.js → chunk-E43JM3QV.js} +11430 -10405
  24. package/dist/chunk-HGMYEDAQ.js +79 -0
  25. package/dist/{chunk-QFXD7GR5.js → chunk-KOIOZ7QW.js} +193 -19
  26. package/dist/{chunk-ZIETXJYU.js → chunk-LYKDNJXR.js} +158 -104
  27. package/dist/chunk-WRUKKEGR.js +562 -0
  28. package/dist/chunk-WU2BRWXY.js +546 -0
  29. package/dist/{chunk-K5EGSSXC.js → chunk-WXX3NL4C.js} +108 -41
  30. package/dist/cli-catalog-J3O6W726.js +15 -0
  31. package/dist/cli-commands-QST2CPDG.js +15 -0
  32. package/dist/cli.js +136 -22525
  33. package/dist/{demo-server-G5OK7SWE.js → demo-server-KA7DWTY6.js} +5 -4
  34. package/dist/index.js +7 -6
  35. package/dist/{intelligence-service-3ZUVTIO7.js → intelligence-service-LHZZTJPH.js} +2 -2
  36. package/dist/mcp.js +30 -15
  37. package/package.json +10 -10
  38. package/assets/assets/ProjectPage-CvxuPSiC.js +0 -8
  39. package/assets/assets/RunsPage-C6U_YcDY.js +0 -1
  40. package/assets/assets/index-ahEr6Oc-.js +0 -86
@@ -0,0 +1,546 @@
1
+ import {
2
+ usageError
3
+ } from "./chunk-HGMYEDAQ.js";
4
+ import {
5
+ AppError,
6
+ parseWindowIn,
7
+ resolveDateRange
8
+ } from "./chunk-E43JM3QV.js";
9
+
10
+ // src/cli-access.ts
11
+ var CLI_ACCESS_BY_ID = Object.freeze({
12
+ "ads.account": "live",
13
+ "ads.activation-grant.create": "write",
14
+ "ads.activation-grant.revoke": "write",
15
+ "ads.ad-group.create": "write",
16
+ "ads.ad-group.pause": "write",
17
+ "ads.ad-group.update": "write",
18
+ "ads.ad.create": "write",
19
+ "ads.ad.pause": "write",
20
+ "ads.ad.update": "write",
21
+ "ads.campaign.activate-tree": "write",
22
+ "ads.campaign.create": "write",
23
+ "ads.campaign.pause": "write",
24
+ "ads.campaign.update": "write",
25
+ "ads.campaigns": "stored",
26
+ "ads.connect": "write",
27
+ "ads.conversions.event-settings": "live",
28
+ "ads.conversions.pixels": "live",
29
+ "ads.delivery-diagnostics": "stored",
30
+ "ads.disconnect": "write",
31
+ "ads.geo.search": "live",
32
+ "ads.image.upload": "write",
33
+ "ads.insights": "stored",
34
+ "ads.live-delivery": "live",
35
+ "ads.operation": "stored",
36
+ "ads.operation.reconcile": "write",
37
+ "ads.operation.resume-activation": "write",
38
+ "ads.operations.unresolved": "stored",
39
+ "ads.status": "stored",
40
+ "ads.summary": "stored",
41
+ "ads.sync": "write",
42
+ "agent.ask": "write",
43
+ "agent.conversations.list": "stored",
44
+ "agent.conversations.new": "write",
45
+ "agent.conversations.show": "stored",
46
+ "agent.conversations.resume": "write",
47
+ "agent.conversations.delete": "write",
48
+ "query.workspace": "stored",
49
+ "query.preview": "stored",
50
+ "query.commit": "write",
51
+ "agent.attach": "write",
52
+ "agent.clear": "write",
53
+ "agent.detach": "write",
54
+ "agent.memory.forget": "write",
55
+ "agent.memory.list": "stored",
56
+ "agent.memory.set": "write",
57
+ "agent.providers": "stored",
58
+ "agent.reset": "write",
59
+ "agent.transcript": "stored",
60
+ "analytics": "stored",
61
+ "apply": "write",
62
+ "backfill": "write",
63
+ "backfill.ai-referral-paths": "write",
64
+ "backfill.answer-mentions": "write",
65
+ "backfill.answer-visibility": "write",
66
+ "backfill.insights": "write",
67
+ "backfill.normalized-paths": "write",
68
+ "backfill.snapshot-attribution": "write",
69
+ "backfill.traffic-classification": "write",
70
+ "backlinks.cache.prune": "write",
71
+ "backlinks.doctor": "live",
72
+ "backlinks.extract": "live",
73
+ "backlinks.install": "write",
74
+ "backlinks.list": "stored",
75
+ "backlinks.releases": "stored",
76
+ "backlinks.releases.latest": "live",
77
+ "backlinks.sources": "stored",
78
+ "backlinks.status": "stored",
79
+ "backlinks.sync": "write",
80
+ "bing": "write",
81
+ "bing.connect": "write",
82
+ "bing.coverage": "write",
83
+ "bing.coverage-history": "stored",
84
+ "bing.disconnect": "write",
85
+ "bing.inspect": "write",
86
+ "bing.inspect-sitemap": "write",
87
+ "bing.inspections": "stored",
88
+ "bing.performance": "live",
89
+ "bing.refresh": "write",
90
+ "bing.request-indexing": "write",
91
+ "bing.set-site": "write",
92
+ "bing.sites": "live",
93
+ "bing.status": "stored",
94
+ "bootstrap": "write",
95
+ "cdp": "stored",
96
+ "cdp.connect": "write",
97
+ "cdp.screenshot": "live",
98
+ "cdp.status": "live",
99
+ "cdp.targets": "live",
100
+ "citations.visibility": "stored",
101
+ "competitor": "write",
102
+ "competitor.add": "write",
103
+ "competitor.aliases": "stored",
104
+ "competitor.aliases.detect": "stored",
105
+ "competitor.delete": "write",
106
+ "competitor.import": "write",
107
+ "competitor.landscape": "stored",
108
+ "competitor.list": "stored",
109
+ "competitor.remove": "write",
110
+ "competitor.suggest": "stored",
111
+ "content.brief": "write",
112
+ "content.dismiss": "write",
113
+ "content.dismissals": "stored",
114
+ "content.gaps": "stored",
115
+ "content.map": "stored",
116
+ "content.restore": "write",
117
+ "content.sources": "stored",
118
+ "content.targets": "stored",
119
+ "conversion-tracking.contracts": "stored",
120
+ "conversion-tracking.contracts.create": "write",
121
+ "conversion-tracking.contracts.delete": "write",
122
+ "conversion-tracking.contracts.get": "stored",
123
+ "conversion-tracking.contracts.integrity": "stored",
124
+ "conversion-tracking.contracts.update": "write",
125
+ "dashboard": "write",
126
+ "dashboard.reset-password": "write",
127
+ "demo": "write",
128
+ "discover.eval": "write",
129
+ "discover.harvest": "live",
130
+ "discover.list": "stored",
131
+ "discover.probe": "stored",
132
+ "discover.promote": "write",
133
+ "discover.promote.preview": "stored",
134
+ "discover.run": "write",
135
+ "discover.seed": "write",
136
+ "discover.show": "stored",
137
+ "doctor": "live",
138
+ "evidence": "stored",
139
+ "export": "stored",
140
+ "feedback": "write",
141
+ "ga": "write",
142
+ "ga.acquisition": "stored",
143
+ "ga.ai-referral-daily": "stored",
144
+ "ga.ai-referral-history": "stored",
145
+ "ga.attribution": "stored",
146
+ "ga.connect": "write",
147
+ "ga.coverage": "stored",
148
+ "ga.disconnect": "write",
149
+ "ga.measurement-analysis": "stored",
150
+ "ga.properties": "live",
151
+ "ga.search-landing-pages": "stored",
152
+ "ga.session-history": "stored",
153
+ "ga.social-referral-history": "stored",
154
+ "ga.social-referral-summary": "stored",
155
+ "ga.status": "stored",
156
+ "ga.sync": "write",
157
+ "ga.traffic": "stored",
158
+ "gbp.accounts": "live",
159
+ "gbp.attributes": "stored",
160
+ "gbp.connect": "write",
161
+ "gbp.disconnect": "write",
162
+ "gbp.keywords": "stored",
163
+ "gbp.locations": "stored",
164
+ "gbp.locations.deselect": "write",
165
+ "gbp.locations.discover": "write",
166
+ "gbp.locations.select": "write",
167
+ "gbp.lodging": "stored",
168
+ "gbp.metrics": "stored",
169
+ "gbp.place-actions": "stored",
170
+ "gbp.places": "stored",
171
+ "gbp.reviews": "stored",
172
+ "gbp.summary": "stored",
173
+ "gbp.sync": "write",
174
+ "get": "stored",
175
+ "google": "write",
176
+ "google-ads.customers": "live",
177
+ "google-ads.disconnect": "write",
178
+ "google-ads.performance": "stored",
179
+ "google-ads.select": "write",
180
+ "google-ads.snapshot": "stored",
181
+ "google-ads.snapshots": "stored",
182
+ "google-ads.status": "stored",
183
+ "google-ads.sync": "write",
184
+ "google.connect": "write",
185
+ "google.coverage": "stored",
186
+ "google.coverage-history": "stored",
187
+ "google.deindexed": "stored",
188
+ "google.disconnect": "write",
189
+ "google.discover-sitemaps": "live",
190
+ "google.inspect": "write",
191
+ "google.inspect-sitemap": "write",
192
+ "google.inspections": "stored",
193
+ "google.list-sitemaps": "live",
194
+ "google.performance": "stored",
195
+ "google.performance-daily": "stored",
196
+ "google.properties": "live",
197
+ "google.query-totals": "stored",
198
+ "google.refresh": "write",
199
+ "google.request-indexing": "write",
200
+ "google.set-property": "write",
201
+ "google.set-sitemap": "write",
202
+ "google.status": "stored",
203
+ "google.submit-sitemap": "write",
204
+ "google.sync": "write",
205
+ "google.top-pages": "stored",
206
+ "gtm.accounts": "live",
207
+ "gtm.containers": "live",
208
+ "gtm.disconnect": "write",
209
+ "gtm.select": "write",
210
+ "gtm.snapshot": "stored",
211
+ "gtm.snapshots": "stored",
212
+ "gtm.status": "stored",
213
+ "gtm.sync": "write",
214
+ "gtm.workspaces": "live",
215
+ "health": "stored",
216
+ "help": "stored",
217
+ "history": "stored",
218
+ "init": "write",
219
+ "insights": "stored",
220
+ "insights.dismiss": "write",
221
+ "key": "stored",
222
+ "key.create": "write",
223
+ "key.list": "stored",
224
+ "key.revoke": "write",
225
+ "key.whoami": "stored",
226
+ "keyword": "stored",
227
+ "keyword.add": "write",
228
+ "keyword.delete": "write",
229
+ "keyword.generate": "write",
230
+ "keyword.import": "write",
231
+ "keyword.list": "stored",
232
+ "keyword.remove": "write",
233
+ "keyword.replace": "write",
234
+ "logs": "stored",
235
+ "mcp": "write",
236
+ "mcp.config": "write",
237
+ "mcp.install": "write",
238
+ "measurement-plan.advanced": "write",
239
+ "measurement-plan.assignments.apply": "write",
240
+ "measurement-plan.assignments.preview": "stored",
241
+ "measurement-plan.assignments.replace": "write",
242
+ "measurement-plan.discover": "live",
243
+ "measurement-plan.groups.apply": "write",
244
+ "measurement-plan.groups.preview": "stored",
245
+ "measurement-plan.property": "stored",
246
+ "measurement-plan.property-evidence": "stored",
247
+ "measurement-plan.publish": "write",
248
+ "measurement-plan.report": "stored",
249
+ "measurement-plan.retire": "write",
250
+ "measurement-plan.show": "stored",
251
+ "measurement-plan.versions": "stored",
252
+ "measurement-plan.visibility": "stored",
253
+ "notify": "write",
254
+ "notify.add": "write",
255
+ "notify.events": "stored",
256
+ "notify.list": "stored",
257
+ "notify.remove": "write",
258
+ "notify.test": "write",
259
+ "organic-evidence": "stored",
260
+ "overview": "stored",
261
+ "project": "write",
262
+ "project.add-location": "write",
263
+ "project.create": "write",
264
+ "project.delete": "write",
265
+ "project.list": "stored",
266
+ "project.locations": "stored",
267
+ "project.remove-location": "write",
268
+ "project.set-default-location": "write",
269
+ "project.show": "stored",
270
+ "project.update": "write",
271
+ "query": "write",
272
+ "query.add": "write",
273
+ "query.delete": "write",
274
+ "query.generate": "write",
275
+ "query.import": "write",
276
+ "query.list": "stored",
277
+ "query.remove": "write",
278
+ "query.replace": "write",
279
+ "research.batch": "write",
280
+ "research.list": "stored",
281
+ "research.run": "write",
282
+ "research.show": "stored",
283
+ "results.clear": "write",
284
+ "results.export": "stored",
285
+ "run": "write",
286
+ "run.cancel": "write",
287
+ "run.completeness": "stored",
288
+ "run.fill": "write",
289
+ "run.list": "stored",
290
+ "run.show": "stored",
291
+ "run.trigger": "write",
292
+ "runs": "stored",
293
+ "schedule": "write",
294
+ "schedule.disable": "write",
295
+ "schedule.enable": "write",
296
+ "schedule.list": "stored",
297
+ "schedule.remove": "write",
298
+ "schedule.set": "write",
299
+ "schedule.show": "stored",
300
+ "search": "stored",
301
+ "site-health.overview": "stored",
302
+ "site-health.pages": "stored",
303
+ "site-health.page-audit": "stored",
304
+ "site-health.structure": "stored",
305
+ "site-health.links": "stored",
306
+ "site-health.neighbors": "stored",
307
+ "site-health.dead-links": "stored",
308
+ "site-health.subgraph": "stored",
309
+ "site-health.path": "stored",
310
+ "site-health.changes": "stored",
311
+ "sentiment": "stored",
312
+ "sentiment.backfill": "write",
313
+ "sentiment.compare": "stored",
314
+ "sentiment.configure": "write",
315
+ "sentiment.evidence": "stored",
316
+ "sentiment.job": "stored",
317
+ "sentiment.jobs": "stored",
318
+ "sentiment.settings": "stored",
319
+ "serve": "write",
320
+ "settings": "stored",
321
+ "settings.google": "write",
322
+ "settings.provider": "write",
323
+ "settings.reload-providers": "write",
324
+ "skills": "write",
325
+ "skills.install": "write",
326
+ "skills.list": "stored",
327
+ "snapshot": "write",
328
+ "sources": "stored",
329
+ "start": "write",
330
+ "status": "stored",
331
+ "stop": "write",
332
+ "support": "stored",
333
+ "technical-aeo.changes": "stored",
334
+ "technical-aeo.crawl": "write",
335
+ "technical-aeo.crawl-pages": "stored",
336
+ "technical-aeo.dead-links": "stored",
337
+ "technical-aeo.links": "stored",
338
+ "technical-aeo.links.neighbors": "stored",
339
+ "technical-aeo.page-audit": "stored",
340
+ "technical-aeo.pages": "stored",
341
+ "technical-aeo.path": "stored",
342
+ "technical-aeo.progress": "stored",
343
+ "technical-aeo.run": "write",
344
+ "technical-aeo.score": "stored",
345
+ "technical-aeo.structure": "stored",
346
+ "technical-aeo.subgraph": "stored",
347
+ "technical-aeo.trend": "stored",
348
+ "telemetry": "write",
349
+ "telemetry.disable": "write",
350
+ "telemetry.enable": "write",
351
+ "telemetry.status": "stored",
352
+ "traffic": "write",
353
+ "traffic.activate": "write",
354
+ "traffic.analytics": "stored",
355
+ "traffic.backfill": "write",
356
+ "traffic.connect": "write",
357
+ "traffic.connect.cloud-run": "write",
358
+ "traffic.connect.cloudflare": "write",
359
+ "traffic.connect.vercel": "write",
360
+ "traffic.connect.wordpress": "write",
361
+ "traffic.events": "stored",
362
+ "traffic.referral-assessment": "stored",
363
+ "traffic.reset": "write",
364
+ "traffic.samples": "stored",
365
+ "traffic.sources": "stored",
366
+ "traffic.status": "stored",
367
+ "traffic.sync": "write",
368
+ "user": "stored",
369
+ "user.create": "write",
370
+ "user.delete": "write",
371
+ "user.list": "stored",
372
+ "visibility-compare": "stored",
373
+ "visibility-stats": "stored",
374
+ "wordpress": "write",
375
+ "wordpress.audit": "live",
376
+ "wordpress.connect": "write",
377
+ "wordpress.create-page": "write",
378
+ "wordpress.diff": "live",
379
+ "wordpress.disconnect": "write",
380
+ "wordpress.llms-txt": "live",
381
+ "wordpress.onboard": "write",
382
+ "wordpress.page": "live",
383
+ "wordpress.pages": "live",
384
+ "wordpress.schema": "live",
385
+ "wordpress.schema.deploy": "write",
386
+ "wordpress.schema.status": "live",
387
+ "wordpress.set-llms-txt": "write",
388
+ "wordpress.set-meta": "write",
389
+ "wordpress.set-schema": "write",
390
+ "wordpress.staging": "stored",
391
+ "wordpress.staging.push": "write",
392
+ "wordpress.staging.status": "live",
393
+ "wordpress.status": "live",
394
+ "wordpress.update-page": "write"
395
+ });
396
+ function resolveCliAccess(spec) {
397
+ const id = spec.path.join(".");
398
+ if (spec.access) return spec.access;
399
+ const access = CLI_ACCESS_BY_ID[id];
400
+ if (!access) throw new Error(`Missing CLI operation access classification: ${id}`);
401
+ return access;
402
+ }
403
+ function resolveCliAccessForInvocation(spec, input) {
404
+ return spec.accessFor?.(input) ?? resolveCliAccess(spec);
405
+ }
406
+
407
+ // src/cli-output.ts
408
+ function emitJsonl(records) {
409
+ let out = "";
410
+ for (const record of records) {
411
+ out += `${JSON.stringify(record)}
412
+ `;
413
+ }
414
+ if (out) process.stdout.write(out);
415
+ }
416
+
417
+ // src/cli-command-helpers.ts
418
+ function getString(values, key) {
419
+ const value = values[key];
420
+ return typeof value === "string" ? value : void 0;
421
+ }
422
+ function getBoolean(values, key) {
423
+ return values[key] === true;
424
+ }
425
+ function getStringArray(values, key) {
426
+ const value = values[key];
427
+ if (Array.isArray(value)) {
428
+ return value.filter((entry) => typeof entry === "string");
429
+ }
430
+ return void 0;
431
+ }
432
+ function requirePositional(input, index, config) {
433
+ const value = input.positionals[index];
434
+ if (value) return value;
435
+ throw usageError(`Error: ${config.message}
436
+ Usage: ${config.usage}`, {
437
+ message: config.message,
438
+ details: {
439
+ command: config.command,
440
+ usage: config.usage
441
+ }
442
+ });
443
+ }
444
+ function requireProject(input, command, usage, message = "project name is required") {
445
+ return requirePositional(input, 0, { command, usage, message });
446
+ }
447
+ function stringOption() {
448
+ return { type: "string" };
449
+ }
450
+ function multiStringOption() {
451
+ return { type: "string", multiple: true };
452
+ }
453
+ function requireStringOption(input, key, config) {
454
+ const value = getString(input.values, key);
455
+ if (value) return value;
456
+ throw usageError(`Error: ${config.message}
457
+ Usage: ${config.usage}`, {
458
+ message: config.message,
459
+ details: {
460
+ command: config.command,
461
+ usage: config.usage,
462
+ ...config.details ?? {}
463
+ }
464
+ });
465
+ }
466
+ function parseIntegerOption(input, key, config) {
467
+ const value = getString(input.values, key);
468
+ if (!value) return void 0;
469
+ const parsed = Number.parseInt(value, 10);
470
+ if (!Number.isNaN(parsed)) {
471
+ return parsed;
472
+ }
473
+ throw usageError(`Error: ${config.message}
474
+ Usage: ${config.usage}`, {
475
+ message: config.message,
476
+ details: {
477
+ command: config.command,
478
+ usage: config.usage,
479
+ option: key,
480
+ value
481
+ }
482
+ });
483
+ }
484
+ function unknownSubcommand(subcommand, config) {
485
+ const resolved = subcommand ?? "(none)";
486
+ throw usageError(`Error: unknown ${config.command} subcommand: ${resolved}
487
+ Usage: ${config.usage}`, {
488
+ message: `unknown ${config.command} subcommand: ${resolved}`,
489
+ details: {
490
+ command: config.command,
491
+ usage: config.usage,
492
+ available: config.available
493
+ }
494
+ });
495
+ }
496
+ function windowOptions(config = {}) {
497
+ const options = {};
498
+ if (config.window) options.window = stringOption();
499
+ if (config.dates) {
500
+ options.start = stringOption();
501
+ options.end = stringOption();
502
+ }
503
+ for (const alias of [config.aliases?.window, config.aliases?.start, config.aliases?.end]) {
504
+ if (alias !== void 0) options[alias] = stringOption();
505
+ }
506
+ return options;
507
+ }
508
+ function readWindowOptions(input, config) {
509
+ const read = (canonical) => {
510
+ const direct = getString(input.values, canonical);
511
+ const alias = config.aliases?.[canonical];
512
+ const old = alias ? getString(input.values, alias) : void 0;
513
+ if (direct !== void 0 && old !== void 0) throw usageError(`Use either --${canonical} or --${alias}, not both.`, { details: { command: config.command, usage: config.usage } });
514
+ return direct ?? old;
515
+ };
516
+ const rawWindow = read("window");
517
+ try {
518
+ const window = rawWindow === void 0 || rawWindow === "" ? void 0 : parseWindowIn(rawWindow, config.allowed ?? [], { fallback: config.allowed?.[0] ?? "", field: "window" });
519
+ const startDate = read("start");
520
+ const endDate = read("end");
521
+ if (rawWindow !== void 0 && (startDate !== void 0 || endDate !== void 0)) throw usageError("Use --window or --start/--end, not both.");
522
+ const dates = resolveDateRange({ startDate, endDate });
523
+ return { window, startDate: dates.startDate ?? void 0, endDate: dates.endDate ?? void 0 };
524
+ } catch (error) {
525
+ if (error instanceof AppError) throw usageError(error.message, { details: error.details });
526
+ throw error;
527
+ }
528
+ }
529
+
530
+ export {
531
+ getString,
532
+ getBoolean,
533
+ getStringArray,
534
+ requirePositional,
535
+ requireProject,
536
+ stringOption,
537
+ multiStringOption,
538
+ requireStringOption,
539
+ parseIntegerOption,
540
+ unknownSubcommand,
541
+ windowOptions,
542
+ readWindowOptions,
543
+ resolveCliAccess,
544
+ resolveCliAccessForInvocation,
545
+ emitJsonl
546
+ };