@greatwait/cli 0.1.0-alpha.5 → 0.1.0-alpha.7

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/catalog.js CHANGED
@@ -80,37 +80,37 @@ export function declaredRequestHeaders(operation) {
80
80
  /* -------------------------------------------------------------------------- */
81
81
  const API_URL = {
82
82
  flag: "--api-url",
83
- summary: "The service to talk to, when it is not the selected one.",
83
+ summary: "The GreatWait API to use, such as https://api.greatwait.dev. Defaults to the one you signed in to.",
84
84
  value: "<origin>",
85
85
  };
86
86
  const PAGE_OPTIONS = [
87
87
  {
88
88
  flag: "--limit",
89
- summary: "How many rows to ask for in one page.",
89
+ summary: "How many to show on one page.",
90
90
  value: "<count>",
91
91
  },
92
92
  {
93
93
  flag: "--cursor",
94
- summary: "Continue from the cursor a previous page returned.",
94
+ summary: "Carry on from here: the cursor the previous page printed.",
95
95
  value: "<cursor>",
96
96
  },
97
97
  {
98
98
  flag: "--all",
99
- summary: "Read up to 50 pages from the start or --cursor; return a cursor if more remain.",
99
+ summary: "Read up to 50 pages. If there are more, it prints a cursor to carry on from.",
100
100
  },
101
101
  ];
102
102
  const CONFIRM = {
103
103
  flag: "--yes",
104
- summary: "Confirm without being asked. Required when there is no terminal to ask on.",
104
+ summary: "Don't ask first. Needed in scripts, where nobody can answer.",
105
105
  };
106
106
  const IF_MATCH = {
107
107
  flag: "--if-match",
108
- summary: "Refuse unless it is still at this version. Read it first to get the ETag.",
108
+ summary: "Only change it if nobody else has since you read it. The ETag comes from the read command.",
109
109
  value: "<etag>",
110
110
  };
111
111
  const IDEMPOTENCY = {
112
112
  flag: "--idempotency-key",
113
- summary: "Make a repeat of this exact request a replay rather than a second.",
113
+ summary: "Any unique string. The command makes one up and prints it if you leave it out. Repeat it to retry safely: it runs once.",
114
114
  value: "<key>",
115
115
  };
116
116
  /* -------------------------------------------------------------------------- */
@@ -123,6 +123,137 @@ const IDEMPOTENCY = {
123
123
  * around, set up a destination, schedule something, watch it, then recover from
124
124
  * it. The groups are the headings.
125
125
  */
126
+ const MEMBER = {
127
+ name: "<member>",
128
+ summary: "The member's id, starting mem_, from members list.",
129
+ };
130
+ const INVITATION = {
131
+ name: "<invitation>",
132
+ summary: "The invitation's id, starting inv_, from invitations list.",
133
+ };
134
+ const PROJECT = {
135
+ name: "<project>",
136
+ summary: "The project's id, starting proj_, from whoami or members list.",
137
+ };
138
+ const MEMBER_RETRY_KEY = {
139
+ flag: "--idempotency-key",
140
+ summary: "Any unique string. The command makes one up and prints it if you leave it out. Repeat it to retry safely: the change happens once.",
141
+ value: "<key>",
142
+ };
143
+ /**
144
+ * The organization's people (W1-09). Listed after the project commands in
145
+ * help and in the reference, because managing who can see a project comes
146
+ * after having one.
147
+ */
148
+ export const MEMBER_COMMANDS = [
149
+ {
150
+ words: "members list",
151
+ group: "Members",
152
+ summary: "List the organization's members and the projects each can see.",
153
+ operations: ["members.list"],
154
+ positionals: [],
155
+ options: [API_URL],
156
+ },
157
+ {
158
+ words: "invitations list",
159
+ group: "Members",
160
+ summary: "List invitations, and whether each is pending, accepted, revoked or expired.",
161
+ operations: ["invitations.list"],
162
+ positionals: [],
163
+ options: [API_URL],
164
+ },
165
+ {
166
+ words: "invitations create",
167
+ group: "Members",
168
+ summary: "Invite someone to the organization by email.",
169
+ operations: ["invitations.create"],
170
+ positionals: [],
171
+ options: [
172
+ API_URL,
173
+ {
174
+ flag: "--email",
175
+ summary: "The address to send the invitation to.",
176
+ value: "<address>",
177
+ },
178
+ {
179
+ flag: "--role",
180
+ summary: "admin or member. Defaults to member. Admins can see every project and manage people.",
181
+ value: "<role>",
182
+ },
183
+ {
184
+ flag: "--projects",
185
+ summary: "The projects a member can see, as ids starting proj_, separated by commas. Not needed for admins, who see every project.",
186
+ value: "<ids>",
187
+ },
188
+ MEMBER_RETRY_KEY,
189
+ CONFIRM,
190
+ ],
191
+ confirms: true,
192
+ },
193
+ {
194
+ words: "invitations resend",
195
+ group: "Members",
196
+ summary: "Send a pending invitation's email again.",
197
+ operations: ["invitations.resend"],
198
+ positionals: [INVITATION],
199
+ options: [API_URL, MEMBER_RETRY_KEY, CONFIRM],
200
+ confirms: true,
201
+ },
202
+ {
203
+ words: "invitations revoke",
204
+ group: "Members",
205
+ summary: "Cancel a pending invitation, so its link stops working.",
206
+ operations: ["invitations.revoke"],
207
+ positionals: [INVITATION],
208
+ options: [API_URL, MEMBER_RETRY_KEY, CONFIRM],
209
+ confirms: true,
210
+ },
211
+ {
212
+ words: "members role",
213
+ group: "Members",
214
+ summary: "Make a member an admin, or an admin a member.",
215
+ operations: ["members.role"],
216
+ positionals: [MEMBER],
217
+ options: [
218
+ API_URL,
219
+ {
220
+ flag: "--role",
221
+ summary: "The new role: admin or member. Admins can see every project and manage people.",
222
+ value: "<role>",
223
+ },
224
+ MEMBER_RETRY_KEY,
225
+ CONFIRM,
226
+ ],
227
+ confirms: true,
228
+ },
229
+ {
230
+ words: "members remove",
231
+ group: "Members",
232
+ summary: "Remove someone from the organization.",
233
+ operations: ["members.remove"],
234
+ positionals: [MEMBER],
235
+ options: [API_URL, MEMBER_RETRY_KEY, CONFIRM],
236
+ confirms: true,
237
+ },
238
+ {
239
+ words: "members add-project",
240
+ group: "Members",
241
+ summary: "Let a member see a project.",
242
+ operations: ["projectmembers.add"],
243
+ positionals: [MEMBER, PROJECT],
244
+ options: [API_URL, MEMBER_RETRY_KEY, CONFIRM],
245
+ confirms: true,
246
+ },
247
+ {
248
+ words: "members remove-project",
249
+ group: "Members",
250
+ summary: "Stop a member seeing a project.",
251
+ operations: ["projectmembers.remove"],
252
+ positionals: [MEMBER, PROJECT],
253
+ options: [API_URL, MEMBER_RETRY_KEY, CONFIRM],
254
+ confirms: true,
255
+ },
256
+ ];
126
257
  export const COMMAND_CATALOG = [
127
258
  /* --- Session ---------------------------------------------------------- */
128
259
  {
@@ -132,11 +263,11 @@ export const COMMAND_CATALOG = [
132
263
  API_URL,
133
264
  {
134
265
  flag: "--api-key",
135
- summary: "Sign in with a scoped API credential instead of a browser. Takes no value: paste it when asked, or pipe it in.",
266
+ summary: "Sign in with an API key instead of a browser. Paste it when asked, or pipe it in. Create one on the dashboard's Access page.",
136
267
  },
137
268
  {
138
269
  flag: "--no-browser",
139
- summary: "Print the authorization address instead of opening it.",
270
+ summary: "Print the sign-in address instead of opening a browser, for a machine without one.",
140
271
  },
141
272
  {
142
273
  // **A way to ask for less than the whole command line can do.** The
@@ -146,12 +277,12 @@ export const COMMAND_CATALOG = [
146
277
  // there. Narrowing is safe in the direction that matters: a command
147
278
  // outside the grant is refused by the service.
148
279
  flag: "--scope",
149
- summary: "Ask for these permissions instead of everything the commands can use, separated by spaces in one argument.",
280
+ summary: 'Ask for fewer permissions than every command needs, such as "schedules:read schedules:write". One argument, separated by spaces.',
150
281
  value: "<scopes>",
151
282
  },
152
283
  ],
153
284
  positionals: [],
154
- summary: "Sign in to a GreatWait service and remember the credential.",
285
+ summary: "Sign in, in a browser or with an API key, and stay signed in.",
155
286
  words: "login",
156
287
  },
157
288
  {
@@ -159,7 +290,7 @@ export const COMMAND_CATALOG = [
159
290
  operations: [],
160
291
  options: [API_URL],
161
292
  positionals: [],
162
- summary: "Revoke the grant where possible and remove the local material.",
293
+ summary: "Sign out, and forget the credential stored on this machine.",
163
294
  words: "logout",
164
295
  },
165
296
  {
@@ -167,7 +298,7 @@ export const COMMAND_CATALOG = [
167
298
  operations: ["context.read"],
168
299
  options: [API_URL],
169
300
  positionals: [],
170
- summary: "Report which service, project and environment this acts in.",
301
+ summary: "Show which service, project and environment commands act in.",
171
302
  words: "whoami",
172
303
  },
173
304
  {
@@ -175,7 +306,7 @@ export const COMMAND_CATALOG = [
175
306
  operations: ["meta.version", "context.read"],
176
307
  options: [API_URL],
177
308
  positionals: [],
178
- summary: "Check the service, the stored configuration and the credential.",
309
+ summary: "Check that the service answers and the stored sign-in still works.",
179
310
  words: "doctor",
180
311
  },
181
312
  {
@@ -186,10 +317,10 @@ export const COMMAND_CATALOG = [
186
317
  {
187
318
  name: "[list | use <origin>]",
188
319
  optional: true,
189
- summary: "Show the signed-in services, or select one.",
320
+ summary: "list shows the services you're signed in to. use picks one by its address.",
190
321
  },
191
322
  ],
192
- summary: "Show or choose the service later commands go to.",
323
+ summary: "Show or choose which service commands go to.",
193
324
  words: "context",
194
325
  },
195
326
  {
@@ -197,7 +328,7 @@ export const COMMAND_CATALOG = [
197
328
  operations: [],
198
329
  options: [API_URL],
199
330
  positionals: [],
200
- summary: "Print the published first-value sequence and its commands.",
331
+ summary: "Print the steps from signing in to a delivered call, with the command for each.",
201
332
  words: "journey",
202
333
  },
203
334
  /* --- Destinations ----------------------------------------------------- */
@@ -206,7 +337,7 @@ export const COMMAND_CATALOG = [
206
337
  operations: ["endpoints.list"],
207
338
  options: [API_URL, ...PAGE_OPTIONS],
208
339
  positionals: [],
209
- summary: "List the destinations this project delivers to.",
340
+ summary: "List the addresses this project calls.",
210
341
  words: "destinations list",
211
342
  },
212
343
  {
@@ -214,24 +345,32 @@ export const COMMAND_CATALOG = [
214
345
  operations: ["endpoints.read"],
215
346
  options: [API_URL],
216
347
  positionals: [
217
- { name: "<destination>", summary: "The destination to read." },
348
+ {
349
+ name: "<destination>",
350
+ summary: "The destination's id, starting ep_, from destinations list or create.",
351
+ },
218
352
  ],
219
- summary: "Read one destination, its status and its signing keys.",
353
+ summary: "Show one destination: its address, status and signing keys.",
220
354
  words: "destinations read",
221
355
  },
222
356
  {
223
357
  group: "Destinations",
224
358
  operations: ["endpoints.create"],
225
359
  options: [
360
+ {
361
+ flag: "--headers",
362
+ summary: "Headers to send with every call, from @file.json or - for standard input. Keeps secret values out of your shell history.",
363
+ value: "<@file|->",
364
+ },
226
365
  API_URL,
227
366
  {
228
367
  flag: "--url",
229
- summary: "The https receiver GreatWait will deliver to.",
368
+ summary: "The https address to call.",
230
369
  value: "<https url>",
231
370
  },
232
371
  ],
233
372
  positionals: [],
234
- summary: "Create a destination and print its signing key once.",
373
+ summary: "Add an address to call, and print its signing secret. This is the only time it's printed.",
235
374
  words: "destinations create",
236
375
  },
237
376
  {
@@ -239,19 +378,27 @@ export const COMMAND_CATALOG = [
239
378
  group: "Destinations",
240
379
  operations: ["endpoints.update"],
241
380
  options: [
381
+ {
382
+ flag: "--headers",
383
+ summary: "Headers to send with every call, from @file.json or - for standard input. Keeps secret values out of your shell history.",
384
+ value: "<@file|->",
385
+ },
242
386
  API_URL,
243
387
  {
244
388
  flag: "--url",
245
- summary: "The new https receiver.",
389
+ summary: "The new https address to call.",
246
390
  value: "<https url>",
247
391
  },
248
392
  IF_MATCH,
249
393
  CONFIRM,
250
394
  ],
251
395
  positionals: [
252
- { name: "<destination>", summary: "The destination to change." },
396
+ {
397
+ name: "<destination>",
398
+ summary: "The destination's id, starting ep_, from destinations list or create.",
399
+ },
253
400
  ],
254
- summary: "Point a destination at a different receiver.",
401
+ summary: "Change a destination's address or headers.",
255
402
  words: "destinations update",
256
403
  },
257
404
  {
@@ -266,9 +413,12 @@ export const COMMAND_CATALOG = [
266
413
  operations: ["endpoints.rotateSigningKey"],
267
414
  options: [API_URL, IF_MATCH, CONFIRM],
268
415
  positionals: [
269
- { name: "<destination>", summary: "The destination to rotate." },
416
+ {
417
+ name: "<destination>",
418
+ summary: "The destination's id, starting ep_, from destinations list or create.",
419
+ },
270
420
  ],
271
- summary: "Mint the next signing key, shown once, with a bounded overlap.",
421
+ summary: "Make a new signing secret and print it once. The old one keeps working for a while, so your receiver can switch over.",
272
422
  words: "destinations rotate-key",
273
423
  },
274
424
  {
@@ -280,9 +430,12 @@ export const COMMAND_CATALOG = [
280
430
  operations: ["endpoints.disable"],
281
431
  options: [API_URL, CONFIRM],
282
432
  positionals: [
283
- { name: "<destination>", summary: "The destination to disable." },
433
+ {
434
+ name: "<destination>",
435
+ summary: "The destination's id, starting ep_, from destinations list or create.",
436
+ },
284
437
  ],
285
- summary: "Stop delivering to a destination, keeping its history readable.",
438
+ summary: "Stop calling a destination. Its history stays readable.",
286
439
  words: "destinations disable",
287
440
  },
288
441
  {
@@ -293,9 +446,12 @@ export const COMMAND_CATALOG = [
293
446
  operations: ["endpoints.enable"],
294
447
  options: [API_URL],
295
448
  positionals: [
296
- { name: "<destination>", summary: "The destination to turn back on." },
449
+ {
450
+ name: "<destination>",
451
+ summary: "The destination's id, starting ep_, from destinations list or create.",
452
+ },
297
453
  ],
298
- summary: "Resume delivering to a destination that was disabled.",
454
+ summary: "Start calling a disabled destination again.",
299
455
  words: "destinations enable",
300
456
  },
301
457
  /* --- Schedules -------------------------------------------------------- */
@@ -306,21 +462,26 @@ export const COMMAND_CATALOG = [
306
462
  API_URL,
307
463
  {
308
464
  flag: "--endpoint",
309
- summary: "Only the schedules that deliver to this destination — everything pointed at it, in one listing.",
465
+ summary: "Only the schedules that call this destination. Its id starts ep_.",
310
466
  value: "<destination>",
311
467
  },
312
468
  ...PAGE_OPTIONS,
313
469
  ],
314
470
  positionals: [],
315
- summary: "List this project's schedules, or those delivering to one destination.",
471
+ summary: "List this project's schedules.",
316
472
  words: "schedules list",
317
473
  },
318
474
  {
319
475
  group: "Schedules",
320
476
  operations: ["schedules.read"],
321
477
  options: [API_URL],
322
- positionals: [{ name: "<schedule>", summary: "The schedule to read." }],
323
- summary: "Read a schedule, its recurrence, its version and its ETag.",
478
+ positionals: [
479
+ {
480
+ name: "<schedule>",
481
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
482
+ },
483
+ ],
484
+ summary: "Show a schedule: when it runs, its status, and the ETag for a safe change.",
324
485
  words: "schedules read",
325
486
  },
326
487
  {
@@ -330,53 +491,77 @@ export const COMMAND_CATALOG = [
330
491
  API_URL,
331
492
  {
332
493
  flag: "--endpoint",
333
- summary: "The destination to deliver to.",
494
+ summary: "The destination to call, by id, starting ep_. Or use --url instead.",
334
495
  value: "<destination>",
335
496
  },
497
+ {
498
+ flag: "--url",
499
+ summary: "The https address to call. Uses this project's destination there, or adds one.",
500
+ value: "<https url>",
501
+ },
336
502
  {
337
503
  flag: "--in",
338
- summary: "Once, after a delay: 30s, 5m, 2h, 1d.",
504
+ summary: "Call once, after this long: 30s, 5m, 2h or 1d.",
339
505
  value: "<duration>",
340
506
  },
341
507
  {
342
508
  flag: "--at",
343
- summary: "Once, at an instant in UTC.",
509
+ summary: "Call once, at this time, such as 2026-10-06T09:00:00Z.",
344
510
  value: "<instant>",
345
511
  },
346
512
  {
347
513
  flag: "--every",
348
- summary: "Repeatedly, at this interval: 30s, 5m, 2h, 1d.",
514
+ summary: "Call repeatedly, this far apart: 30s, 5m, 2h or 1d.",
349
515
  value: "<duration>",
350
516
  },
351
517
  {
352
518
  flag: "--cron",
353
- summary: "Repeatedly, on a cron expression.",
519
+ summary: 'Call repeatedly, on a cron expression such as "0 9 * * 1-5" (9:00, Monday to Friday).',
354
520
  value: "<expression>",
355
521
  },
356
522
  {
357
523
  flag: "--time-zone",
358
- summary: "The zone a cron expression is read in, so daylight saving moves the local time rather than the clock time. IANA names, such as Europe/London.",
524
+ summary: "The time zone --cron runs in, such as Europe/London, so 9:00 stays 9:00 through daylight saving. Defaults to UTC.",
359
525
  value: "<zone>",
360
526
  },
361
527
  {
362
528
  flag: "--partition-key",
363
- summary: "The fairness partition this belongs to.",
529
+ summary: "Your own label, such as a customer id. Each label is paced on its own, so one busy label can't hold up the rest. Can't be changed later.",
364
530
  value: "<key>",
365
531
  },
532
+ {
533
+ flag: "--auto-pause-after-failures",
534
+ summary: 'Pause a recurring schedule after 1–100 consecutive failed runs, or "never". Defaults to 5 on create; omission on replace keeps the setting. Resume resets the count.',
535
+ value: "<count|never>",
536
+ },
366
537
  {
367
538
  flag: "--latency-class",
368
- summary: "How promptly it must fire: realtime or bulk.",
539
+ summary: "realtime or bulk. realtime goes first when both are due. By default a call due within two minutes is realtime, and a repeating one is bulk.",
369
540
  value: "<class>",
370
541
  },
542
+ {
543
+ flag: "--http",
544
+ summary: "The call's method, body and headers, from @file.json or - for standard input. Keeps secret values out of your shell history.",
545
+ value: "<@file|->",
546
+ },
371
547
  {
372
548
  flag: "--data",
373
- summary: "The payload: JSON, @file.json, or - for standard input.",
549
+ summary: "JSON your receiver gets with the call. Inline, @file.json, or - for standard input.",
374
550
  value: "<json>",
375
551
  },
376
552
  IDEMPOTENCY,
553
+ {
554
+ flag: "--wait",
555
+ summary: "Wait for the first call and print how it went: delivered, or why not.",
556
+ },
557
+ {
558
+ flag: "--timeout",
559
+ summary: "How long --wait waits, such as 30s or 5m. Defaults to 3m.",
560
+ value: "<duration>",
561
+ },
377
562
  ],
378
563
  positionals: [],
379
- summary: "Schedule a delivery, once or repeatedly, and print the first occurrence.",
564
+ summary: "Schedule a call to an address, once or repeatedly. Prints the first call's id.",
380
565
  words: "schedules create",
381
566
  },
382
567
  {
@@ -387,70 +572,100 @@ export const COMMAND_CATALOG = [
387
572
  API_URL,
388
573
  {
389
574
  flag: "--endpoint",
390
- summary: "The destination to deliver to.",
575
+ summary: "The destination to call, by id, starting ep_. Or use --url instead.",
391
576
  value: "<destination>",
392
577
  },
578
+ {
579
+ flag: "--url",
580
+ summary: "The https address to call. Uses this project's destination there, or adds one.",
581
+ value: "<https url>",
582
+ },
393
583
  {
394
584
  flag: "--in",
395
- summary: "Once, after a delay: 30s, 5m, 2h, 1d.",
585
+ summary: "Call once, after this long: 30s, 5m, 2h or 1d.",
396
586
  value: "<duration>",
397
587
  },
398
588
  {
399
589
  flag: "--at",
400
- summary: "Once, at an instant in UTC.",
590
+ summary: "Call once, at this time, such as 2026-10-06T09:00:00Z.",
401
591
  value: "<instant>",
402
592
  },
403
593
  {
404
594
  flag: "--every",
405
- summary: "Repeatedly, at this interval: 30s, 5m, 2h, 1d.",
595
+ summary: "Call repeatedly, this far apart: 30s, 5m, 2h or 1d.",
406
596
  value: "<duration>",
407
597
  },
408
598
  {
409
599
  flag: "--cron",
410
- summary: "Repeatedly, on a cron expression.",
600
+ summary: 'Call repeatedly, on a cron expression such as "0 9 * * 1-5" (9:00, Monday to Friday).',
411
601
  value: "<expression>",
412
602
  },
413
603
  {
414
604
  flag: "--time-zone",
415
- summary: "The zone a cron expression is read in, so daylight saving moves the local time rather than the clock time. IANA names, such as Europe/London.",
605
+ summary: "The time zone --cron runs in, such as Europe/London, so 9:00 stays 9:00 through daylight saving. Defaults to UTC.",
416
606
  value: "<zone>",
417
607
  },
418
608
  {
419
609
  flag: "--partition-key",
420
- summary: "The fairness partition this belongs to.",
610
+ summary: "Your own label, such as a customer id. Each label is paced on its own, so one busy label can't hold up the rest. Can't be changed later.",
421
611
  value: "<key>",
422
612
  },
613
+ {
614
+ flag: "--auto-pause-after-failures",
615
+ summary: 'Pause a recurring schedule after 1–100 consecutive failed runs, or "never". Defaults to 5 on create; omission on replace keeps the setting. Resume resets the count.',
616
+ value: "<count|never>",
617
+ },
423
618
  {
424
619
  flag: "--latency-class",
425
- summary: "How promptly it must fire: realtime or bulk.",
620
+ summary: "realtime or bulk. realtime goes first when both are due. By default a call due within two minutes is realtime, and a repeating one is bulk.",
426
621
  value: "<class>",
427
622
  },
623
+ {
624
+ flag: "--http",
625
+ summary: "The call's method, body and headers, from @file.json or - for standard input. Keeps secret values out of your shell history.",
626
+ value: "<@file|->",
627
+ },
428
628
  {
429
629
  flag: "--data",
430
- summary: "The payload: JSON, @file.json, or - for standard input.",
630
+ summary: "JSON your receiver gets with the call. Inline, @file.json, or - for standard input.",
431
631
  value: "<json>",
432
632
  },
433
633
  IF_MATCH,
434
634
  CONFIRM,
435
635
  ],
436
- positionals: [{ name: "<schedule>", summary: "The schedule to replace." }],
437
- summary: "Replace a schedule's definition, discarding what it said before.",
636
+ positionals: [
637
+ {
638
+ name: "<schedule>",
639
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
640
+ },
641
+ ],
642
+ summary: "Change when a schedule runs. Its destination, data and HTTP settings stay unless you give new ones.",
438
643
  words: "schedules replace",
439
644
  },
440
645
  {
441
646
  group: "Schedules",
442
647
  operations: ["schedules.pause"],
443
648
  options: [API_URL, IF_MATCH],
444
- positionals: [{ name: "<schedule>", summary: "The schedule to pause." }],
445
- summary: "Stop firing a schedule without discarding it.",
649
+ positionals: [
650
+ {
651
+ name: "<schedule>",
652
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
653
+ },
654
+ ],
655
+ summary: "Stop a schedule's calls until you resume it.",
446
656
  words: "schedules pause",
447
657
  },
448
658
  {
449
659
  group: "Schedules",
450
660
  operations: ["schedules.resume"],
451
661
  options: [API_URL, IF_MATCH],
452
- positionals: [{ name: "<schedule>", summary: "The schedule to resume." }],
453
- summary: "Start a paused schedule firing again.",
662
+ positionals: [
663
+ {
664
+ name: "<schedule>",
665
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
666
+ },
667
+ ],
668
+ summary: "Start a paused schedule's calls again.",
454
669
  words: "schedules resume",
455
670
  },
456
671
  {
@@ -458,16 +673,26 @@ export const COMMAND_CATALOG = [
458
673
  group: "Schedules",
459
674
  operations: ["schedules.cancel"],
460
675
  options: [API_URL, IF_MATCH, CONFIRM],
461
- positionals: [{ name: "<schedule>", summary: "The schedule to cancel." }],
462
- summary: "Cancel a schedule and everything it had still to deliver.",
676
+ positionals: [
677
+ {
678
+ name: "<schedule>",
679
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
680
+ },
681
+ ],
682
+ summary: "Cancel a schedule and every call it hadn't made yet.",
463
683
  words: "schedules cancel",
464
684
  },
465
685
  {
466
686
  group: "Schedules",
467
687
  operations: ["schedules.archive"],
468
688
  options: [API_URL, IF_MATCH],
469
- positionals: [{ name: "<schedule>", summary: "The schedule to archive." }],
470
- summary: "Move a settled schedule out of the working list.",
689
+ positionals: [
690
+ {
691
+ name: "<schedule>",
692
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
693
+ },
694
+ ],
695
+ summary: "File a finished or cancelled schedule out of schedules list. It stays readable by id.",
471
696
  words: "schedules archive",
472
697
  },
473
698
  /* --- Data exports ---------------------------------------------------- */
@@ -476,23 +701,33 @@ export const COMMAND_CATALOG = [
476
701
  operations: ["exports.create"],
477
702
  options: [API_URL],
478
703
  positionals: [],
479
- summary: "Start a bounded export for this project and environment.",
704
+ summary: "Start exporting this project's records, as NDJSON files.",
480
705
  words: "exports create",
481
706
  },
482
707
  {
483
708
  group: "Data exports",
484
709
  operations: ["exports.read"],
485
710
  options: [API_URL],
486
- positionals: [{ name: "<export>", summary: "The export job to read." }],
487
- summary: "Read an export job's progress and cutoff.",
711
+ positionals: [
712
+ {
713
+ name: "<export>",
714
+ summary: "The export's id, starting exp_, from exports create.",
715
+ },
716
+ ],
717
+ summary: "Show how far an export has got, and the time its data runs up to.",
488
718
  words: "exports read",
489
719
  },
490
720
  {
491
721
  group: "Data exports",
492
722
  operations: ["exports.part"],
493
723
  options: [API_URL, PAGE_OPTIONS[0]],
494
- positionals: [{ name: "<export>", summary: "The export job to download." }],
495
- summary: "Print one bounded NDJSON export part for safe redirection to a file.",
724
+ positionals: [
725
+ {
726
+ name: "<export>",
727
+ summary: "The export's id, starting exp_, from exports create.",
728
+ },
729
+ ],
730
+ summary: "Print one part of a finished export. Redirect it to a file: > export.ndjson.",
496
731
  words: "exports part",
497
732
  },
498
733
  {
@@ -500,8 +735,13 @@ export const COMMAND_CATALOG = [
500
735
  group: "Data exports",
501
736
  operations: ["exports.cancel"],
502
737
  options: [API_URL, CONFIRM],
503
- positionals: [{ name: "<export>", summary: "The export job to cancel." }],
504
- summary: "Permanently cancel an export job.",
738
+ positionals: [
739
+ {
740
+ name: "<export>",
741
+ summary: "The export's id, starting exp_, from exports create.",
742
+ },
743
+ ],
744
+ summary: "Cancel an export. Its parts can't be downloaded afterwards.",
505
745
  words: "exports cancel",
506
746
  },
507
747
  /* --- Occurrences and attempts ----------------------------------------- */
@@ -513,11 +753,16 @@ export const COMMAND_CATALOG = [
513
753
  ...PAGE_OPTIONS,
514
754
  {
515
755
  flag: "--newest",
516
- summary: "Newest first, which is what a person looking at a schedule wants. A cursor belongs to the order it was issued under.",
756
+ summary: "Newest first. Use the same order when you carry on with --cursor.",
757
+ },
758
+ ],
759
+ positionals: [
760
+ {
761
+ name: "<schedule>",
762
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
517
763
  },
518
764
  ],
519
- positionals: [{ name: "<schedule>", summary: "The schedule to list." }],
520
- summary: "List the retained occurrences of a schedule.",
765
+ summary: "List a schedule's calls, one for each time it ran or will run.",
521
766
  words: "occurrences list",
522
767
  },
523
768
  {
@@ -525,10 +770,16 @@ export const COMMAND_CATALOG = [
525
770
  operations: ["occurrences.read"],
526
771
  options: [API_URL],
527
772
  positionals: [
528
- { name: "<schedule>", summary: "The schedule it belongs to." },
529
- { name: "<occurrence>", summary: "The occurrence to read." },
773
+ {
774
+ name: "<schedule>",
775
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
776
+ },
777
+ {
778
+ name: "<occurrence>",
779
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
780
+ },
530
781
  ],
531
- summary: "Read one occurrence and the state it is in.",
782
+ summary: "Show one call and where it's got to.",
532
783
  words: "occurrences read",
533
784
  },
534
785
  {
@@ -538,15 +789,21 @@ export const COMMAND_CATALOG = [
538
789
  API_URL,
539
790
  {
540
791
  flag: "--timeout",
541
- summary: "Give up after this long instead of the published deadline.",
792
+ summary: "How long to wait, such as 30s or 5m. Defaults to 3m.",
542
793
  value: "<duration>",
543
794
  },
544
795
  ],
545
796
  positionals: [
546
- { name: "<schedule>", summary: "The schedule it belongs to." },
547
- { name: "<occurrence>", summary: "The occurrence to wait for." },
797
+ {
798
+ name: "<schedule>",
799
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
800
+ },
801
+ {
802
+ name: "<occurrence>",
803
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
804
+ },
548
805
  ],
549
- summary: "Watch an occurrence until it settles, or until the deadline.",
806
+ summary: "Wait for a call to finish, then print how it went. Gives up after 3m unless --timeout says otherwise.",
550
807
  words: "occurrences wait",
551
808
  },
552
809
  {
@@ -555,10 +812,16 @@ export const COMMAND_CATALOG = [
555
812
  operations: ["occurrences.redeliver"],
556
813
  options: [API_URL, IDEMPOTENCY, CONFIRM],
557
814
  positionals: [
558
- { name: "<schedule>", summary: "The schedule it belongs to." },
559
- { name: "<occurrence>", summary: "The occurrence to send again." },
815
+ {
816
+ name: "<schedule>",
817
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
818
+ },
819
+ {
820
+ name: "<occurrence>",
821
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
822
+ },
560
823
  ],
561
- summary: "Deliver an occurrence again to the destination it belongs to.",
824
+ summary: "Make a call again, to the same destination.",
562
825
  words: "occurrences redeliver",
563
826
  },
564
827
  {
@@ -566,22 +829,44 @@ export const COMMAND_CATALOG = [
566
829
  operations: ["attempts.list"],
567
830
  options: [API_URL, ...PAGE_OPTIONS],
568
831
  positionals: [
569
- { name: "<schedule>", summary: "The schedule it belongs to." },
570
- { name: "<occurrence>", summary: "The occurrence to list attempts for." },
832
+ {
833
+ name: "<schedule>",
834
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
835
+ },
836
+ {
837
+ name: "<occurrence>",
838
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
839
+ },
571
840
  ],
572
- summary: "List every delivery attempt, with its diagnosis.",
841
+ summary: "List each try at a call, what your receiver answered, and why a failed one failed.",
573
842
  words: "attempts list",
574
843
  },
575
844
  {
576
845
  group: "Occurrences and attempts",
577
846
  operations: ["attempts.read"],
578
- options: [API_URL],
847
+ options: [
848
+ API_URL,
849
+ {
850
+ flag: "--response-file",
851
+ value: "path",
852
+ summary: "Save the captured response body in a new private file.",
853
+ },
854
+ ],
579
855
  positionals: [
580
- { name: "<schedule>", summary: "The schedule it belongs to." },
581
- { name: "<occurrence>", summary: "The occurrence it belongs to." },
582
- { name: "<attempt>", summary: "The attempt to read." },
856
+ {
857
+ name: "<schedule>",
858
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
859
+ },
860
+ {
861
+ name: "<occurrence>",
862
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
863
+ },
864
+ {
865
+ name: "<attempt>",
866
+ summary: "The attempt's id, starting att_, from attempts list.",
867
+ },
583
868
  ],
584
- summary: "Read one attempt in full, including what the receiver answered.",
869
+ summary: "Show one try at a call, including what your receiver answered.",
585
870
  words: "attempts read",
586
871
  },
587
872
  /* --- Planning --------------------------------------------------------- */
@@ -592,27 +877,27 @@ export const COMMAND_CATALOG = [
592
877
  API_URL,
593
878
  {
594
879
  flag: "--from",
595
- summary: "The start of the window, in UTC.",
880
+ summary: "Where the window starts, such as 2026-10-06T09:00:00Z.",
596
881
  value: "<instant>",
597
882
  },
598
883
  {
599
884
  flag: "--to",
600
- summary: "The end of the window, in UTC.",
885
+ summary: "Where the window ends, such as 2026-10-06T10:00:00Z.",
601
886
  value: "<instant>",
602
887
  },
603
888
  {
604
889
  flag: "--bucket",
605
- summary: "Bucket width in seconds.",
890
+ summary: "How many seconds each count covers.",
606
891
  value: "<seconds>",
607
892
  },
608
893
  {
609
894
  flag: "--breakdown",
610
- summary: "Group the counts by this dimension.",
895
+ summary: "partitionKey to split the counts by label, or none.",
611
896
  value: "<dimension>",
612
897
  },
613
898
  ],
614
899
  positionals: [],
615
- summary: "Show what is due in a window, and how fresh the answer is.",
900
+ summary: "Show how many calls are due in a window of time.",
616
901
  words: "forecast",
617
902
  },
618
903
  {
@@ -620,7 +905,7 @@ export const COMMAND_CATALOG = [
620
905
  operations: ["limits.read"],
621
906
  options: [API_URL],
622
907
  positionals: [],
623
- summary: "Show the verified organization's effective allowances and policy revisions.",
908
+ summary: "Show the limits that apply to your organization.",
624
909
  words: "limits show",
625
910
  },
626
911
  {
@@ -628,11 +913,19 @@ export const COMMAND_CATALOG = [
628
913
  operations: ["usage.read"],
629
914
  options: [
630
915
  API_URL,
631
- { flag: "--from", summary: "The first day, in UTC.", value: "<instant>" },
632
- { flag: "--to", summary: "The last day, in UTC.", value: "<instant>" },
916
+ {
917
+ flag: "--from",
918
+ summary: "The first day, such as 2026-10-01. Days are UTC.",
919
+ value: "<instant>",
920
+ },
921
+ {
922
+ flag: "--to",
923
+ summary: "The last day, such as 2026-10-06. Days are UTC.",
924
+ value: "<instant>",
925
+ },
633
926
  ],
634
927
  positionals: [],
635
- summary: "Show terminal occurrence volume by day.",
928
+ summary: "Show how many calls finished each day. For what you're billed, use billing ledger.",
636
929
  words: "usage",
637
930
  },
638
931
  {
@@ -640,7 +933,7 @@ export const COMMAND_CATALOG = [
640
933
  operations: ["billing.summary"],
641
934
  options: [API_URL],
642
935
  positionals: [],
643
- summary: "Show exact execution credit and effective billing state.",
936
+ summary: "Show your execution credit and billing status.",
644
937
  words: "billing",
645
938
  },
646
939
  {
@@ -648,7 +941,7 @@ export const COMMAND_CATALOG = [
648
941
  operations: ["billing.funding"],
649
942
  options: [API_URL],
650
943
  positionals: [],
651
- summary: "Show execution funding, automatic payment authority and payment outcomes.",
944
+ summary: "Show how execution credit is funded: automatic top-up, your monthly ceiling, and recent payments.",
652
945
  words: "billing funding",
653
946
  },
654
947
  {
@@ -656,7 +949,7 @@ export const COMMAND_CATALOG = [
656
949
  operations: ["billing.notices"],
657
950
  options: [API_URL, ...PAGE_OPTIONS],
658
951
  positionals: [],
659
- summary: "List persistent organization billing notices and delivery state.",
952
+ summary: "List billing notices, such as low credit, and whether each was emailed.",
660
953
  words: "billing notices",
661
954
  },
662
955
  {
@@ -664,7 +957,7 @@ export const COMMAND_CATALOG = [
664
957
  operations: ["billing.notificationsettings"],
665
958
  options: [API_URL],
666
959
  positionals: [],
667
- summary: "Show billing notification policy and its revision.",
960
+ summary: "Show which billing emails you get, and when.",
668
961
  words: "billing notification-settings",
669
962
  },
670
963
  {
@@ -675,24 +968,24 @@ export const COMMAND_CATALOG = [
675
968
  API_URL,
676
969
  {
677
970
  flag: "--low-credit",
678
- summary: "Send the low-credit notice below this exact USD amount, or auto for a fifth of the latest grant; omit to keep it.",
971
+ summary: "Warn when credit falls below this many dollars, or auto for a fifth of your last top-up. Leave it out to keep the current setting.",
679
972
  value: "<dollars|auto>",
680
973
  },
681
974
  {
682
975
  flag: "--noncritical-email",
683
- summary: "Enable or disable email for noncritical notices.",
976
+ summary: "on or off: email for notices that need no action.",
684
977
  value: "<on|off>",
685
978
  },
686
979
  {
687
980
  flag: "--expected-revision",
688
- summary: "Refuse if notification settings have changed.",
981
+ summary: "Only change it if nobody else has since you read it. The revision comes from billing notification-settings.",
689
982
  value: "<revision>",
690
983
  },
691
984
  IDEMPOTENCY,
692
985
  CONFIRM,
693
986
  ],
694
987
  positionals: [],
695
- summary: "Update optional billing notifications with approval.",
988
+ summary: "Change which billing emails you get.",
696
989
  words: "billing update-notifications",
697
990
  },
698
991
  {
@@ -702,12 +995,12 @@ export const COMMAND_CATALOG = [
702
995
  API_URL,
703
996
  {
704
997
  flag: "--credit",
705
- summary: "Execution credit to buy in USD, at least 10.",
998
+ summary: "How many dollars of credit to buy. At least 10.",
706
999
  value: "<dollars>",
707
1000
  },
708
1001
  ],
709
1002
  positionals: [],
710
- summary: "Preview manual execution funding before tax is calculated at checkout.",
1003
+ summary: "Price a credit purchase before you buy. Tax is added at checkout.",
711
1004
  words: "billing quote-funding",
712
1005
  },
713
1006
  {
@@ -718,14 +1011,14 @@ export const COMMAND_CATALOG = [
718
1011
  API_URL,
719
1012
  {
720
1013
  flag: "--quote",
721
- summary: "The exact object returned by quote-funding (the data field in JSON output).",
1014
+ summary: "The quote from billing quote-funding --json: its data field, inline, @file.json, or - for standard input.",
722
1015
  value: "<json|@file|->",
723
1016
  },
724
1017
  IDEMPOTENCY,
725
1018
  CONFIRM,
726
1019
  ],
727
1020
  positionals: [],
728
- summary: "Confirm a manual execution-credit purchase with a stable retry key.",
1021
+ summary: "Buy the credit a quote priced, and print the link to pay.",
729
1022
  words: "billing purchase",
730
1023
  },
731
1024
  {
@@ -736,19 +1029,19 @@ export const COMMAND_CATALOG = [
736
1029
  API_URL,
737
1030
  {
738
1031
  flag: "--ceiling",
739
- summary: "Set the UTC-month automatic payment ceiling in USD, or turn it off.",
1032
+ summary: "The most automatic payments may charge in a calendar month, in dollars, or off.",
740
1033
  value: "<dollars|off>",
741
1034
  },
742
1035
  {
743
1036
  flag: "--expected-revision",
744
- summary: "Refuse if automatic payment authority has changed.",
1037
+ summary: "Only change it if nobody else has since you read it. The revision comes from billing funding.",
745
1038
  value: "<revision>",
746
1039
  },
747
1040
  IDEMPOTENCY,
748
1041
  CONFIRM,
749
1042
  ],
750
1043
  positionals: [],
751
- summary: "Set exact automatic payment authority with approval.",
1044
+ summary: "Set the most automatic payments may charge each month.",
752
1045
  words: "billing ceiling",
753
1046
  },
754
1047
  {
@@ -758,32 +1051,32 @@ export const COMMAND_CATALOG = [
758
1051
  API_URL,
759
1052
  {
760
1053
  flag: "--action",
761
- summary: "Preview enabling, editing, disabling or resuming the rule.",
1054
+ summary: "What to preview: enable, edit, disable or resume.",
762
1055
  value: "<enable|edit|disable|resume>",
763
1056
  },
764
1057
  {
765
1058
  flag: "--credit",
766
- summary: "Fixed execution credit purchased by enable or edit, in USD.",
1059
+ summary: "How many dollars of credit each top-up buys.",
767
1060
  value: "<dollars>",
768
1061
  },
769
1062
  {
770
1063
  flag: "--trigger-below",
771
- summary: "Trigger when usable execution credit is below this USD amount.",
1064
+ summary: "Top up when credit falls below this many dollars.",
772
1065
  value: "<dollars>",
773
1066
  },
774
1067
  {
775
1068
  flag: "--ceiling",
776
- summary: "Gross automatic-payment ceiling per UTC month, in USD.",
1069
+ summary: "The most top-ups may charge in a calendar month, in dollars.",
777
1070
  value: "<dollars>",
778
1071
  },
779
1072
  {
780
1073
  flag: "--expected-revision",
781
- summary: "Refuse if automatic payment authority has changed.",
1074
+ summary: "Only change it if nobody else has since you read it. The revision comes from billing funding.",
782
1075
  value: "<revision>",
783
1076
  },
784
1077
  ],
785
1078
  positionals: [],
786
- summary: "Preview one exact automatic top-up rule without enabling it.",
1079
+ summary: "Preview an automatic top-up change. Nothing changes until billing apply-topup.",
787
1080
  words: "billing preview-topup",
788
1081
  },
789
1082
  {
@@ -794,14 +1087,14 @@ export const COMMAND_CATALOG = [
794
1087
  API_URL,
795
1088
  {
796
1089
  flag: "--preview",
797
- summary: "The exact object returned by preview-topup (the data field in JSON output).",
1090
+ summary: "The preview from billing preview-topup --json: its data field, inline, @file.json, or - for standard input.",
798
1091
  value: "<json|@file|->",
799
1092
  },
800
1093
  IDEMPOTENCY,
801
1094
  CONFIRM,
802
1095
  ],
803
1096
  positionals: [],
804
- summary: "Confirm an automatic top-up preview with a stable retry key.",
1097
+ summary: "Turn on, change or stop automatic top-up, as a preview described.",
805
1098
  words: "billing apply-topup",
806
1099
  },
807
1100
  {
@@ -812,24 +1105,24 @@ export const COMMAND_CATALOG = [
812
1105
  API_URL,
813
1106
  {
814
1107
  flag: "--payment-operation",
815
- summary: "The paid funding operation to review.",
1108
+ summary: "The payment to refund from, from billing payment-history.",
816
1109
  value: "<operation>",
817
1110
  },
818
1111
  {
819
1112
  flag: "--amount",
820
- summary: "Unused purchased credit requested in USD.",
1113
+ summary: "How many dollars of unused credit to refund.",
821
1114
  value: "<dollars>",
822
1115
  },
823
1116
  {
824
1117
  flag: "--reason",
825
- summary: "Why the credit is reserved for refund.",
1118
+ summary: "Why you're asking for the refund.",
826
1119
  value: "<text>",
827
1120
  },
828
1121
  IDEMPOTENCY,
829
1122
  CONFIRM,
830
1123
  ],
831
1124
  positionals: [],
832
- summary: "Reserve unused purchased credit against a payment for refund.",
1125
+ summary: "Ask for unused credit back. The credit is held until the refund is decided.",
833
1126
  words: "billing refund-request",
834
1127
  },
835
1128
  {
@@ -840,34 +1133,34 @@ export const COMMAND_CATALOG = [
840
1133
  API_URL,
841
1134
  {
842
1135
  flag: "--refund-request",
843
- summary: "The pending refund reservation to complete or decline.",
1136
+ summary: "The refund request to decide, from billing refund-request.",
844
1137
  value: "<request>",
845
1138
  },
846
1139
  {
847
1140
  flag: "--decision",
848
- summary: "Complete with an existing Stripe refund, or release the reservation.",
1141
+ summary: "completed, for a refund already made in Stripe, or declined, which releases the held credit.",
849
1142
  value: "<completed|declined>",
850
1143
  },
851
1144
  {
852
1145
  flag: "--provider-refund",
853
- summary: "Existing Stripe refund ID required for completion.",
1146
+ summary: "The Stripe refund's id, starting re_. Needed for completed.",
854
1147
  value: "<re_...>",
855
1148
  },
856
1149
  {
857
1150
  flag: "--gross",
858
- summary: "Existing provider refund gross amount in USD.",
1151
+ summary: "The Stripe refund's total, in dollars.",
859
1152
  value: "<dollars>",
860
1153
  },
861
1154
  {
862
1155
  flag: "--tax",
863
- summary: "Tax included in the existing provider refund in USD.",
1156
+ summary: "The tax within that total, in dollars.",
864
1157
  value: "<dollars>",
865
1158
  },
866
1159
  IDEMPOTENCY,
867
1160
  CONFIRM,
868
1161
  ],
869
1162
  positionals: [],
870
- summary: "Record a completed or declined external refund review.",
1163
+ summary: "Record whether a refund request was paid in Stripe or declined.",
871
1164
  words: "billing resolve-refund",
872
1165
  },
873
1166
  {
@@ -878,24 +1171,24 @@ export const COMMAND_CATALOG = [
878
1171
  API_URL,
879
1172
  {
880
1173
  flag: "--advisory-budget",
881
- summary: "Set the monthly advisory amount in USD, or turn it off.",
1174
+ summary: "A monthly amount, in dollars, that warns you when spending passes it, or off.",
882
1175
  value: "<dollars|off>",
883
1176
  },
884
1177
  {
885
1178
  flag: "--hard-cap",
886
- summary: "Set the monthly hard cap in USD, or turn it off.",
1179
+ summary: "A monthly amount, in dollars, that stops calls when spending reaches it, or off.",
887
1180
  value: "<dollars|off>",
888
1181
  },
889
1182
  {
890
1183
  flag: "--expected-revision",
891
- summary: "Refuse if the budget policy has changed since this revision.",
1184
+ summary: "Only change it if nobody else has since you read it. The revision comes from billing.",
892
1185
  value: "<revision>",
893
1186
  },
894
1187
  IDEMPOTENCY,
895
1188
  CONFIRM,
896
1189
  ],
897
1190
  positionals: [],
898
- summary: "Set exact monthly execution budgets with approval.",
1191
+ summary: "Set a monthly budget that warns you, a cap that stops calls, or both.",
899
1192
  words: "billing budgets",
900
1193
  },
901
1194
  {
@@ -903,7 +1196,7 @@ export const COMMAND_CATALOG = [
903
1196
  operations: ["billing.projects"],
904
1197
  options: [API_URL],
905
1198
  positionals: [],
906
- summary: "Show named project access, payment recovery and monthly fees.",
1199
+ summary: "Show each project's monthly fee and whether it's paid up.",
907
1200
  words: "billing projects",
908
1201
  },
909
1202
  {
@@ -913,22 +1206,22 @@ export const COMMAND_CATALOG = [
913
1206
  API_URL,
914
1207
  {
915
1208
  flag: "--action",
916
- summary: "Preview an addition, cancellation or included transfer.",
1209
+ summary: "add a paid project, cancel one, or transfer-included to move your included project.",
917
1210
  value: "<add|cancel|transfer-included>",
918
1211
  },
919
1212
  {
920
1213
  flag: "--target-project",
921
- summary: "The named project whose billing changes.",
1214
+ summary: "The project's id, starting proj_, from billing projects.",
922
1215
  value: "<project>",
923
1216
  },
924
1217
  {
925
1218
  flag: "--from-project",
926
- summary: "The former included project for a transfer.",
1219
+ summary: "For transfer-included, the project that's included now.",
927
1220
  value: "<project>",
928
1221
  },
929
1222
  ],
930
1223
  positionals: [],
931
- summary: "Preview a named project billing change without authorizing payment.",
1224
+ summary: "Price a change to which projects you pay for. Nothing changes until billing change-project.",
932
1225
  words: "billing quote-project",
933
1226
  },
934
1227
  {
@@ -939,14 +1232,14 @@ export const COMMAND_CATALOG = [
939
1232
  API_URL,
940
1233
  {
941
1234
  flag: "--quote",
942
- summary: "The exact quote object returned by quote-project (the data field in JSON output).",
1235
+ summary: "The quote from billing quote-project --json: its data field, inline, @file.json, or - for standard input.",
943
1236
  value: "<json|@file|->",
944
1237
  },
945
1238
  IDEMPOTENCY,
946
1239
  CONFIRM,
947
1240
  ],
948
1241
  positionals: [],
949
- summary: "Confirm an exact project billing quote with a stable retry key.",
1242
+ summary: "Make the project change a quote priced.",
950
1243
  words: "billing change-project",
951
1244
  },
952
1245
  {
@@ -955,7 +1248,7 @@ export const COMMAND_CATALOG = [
955
1248
  operations: ["billing.portal"],
956
1249
  options: [API_URL, CONFIRM],
957
1250
  positionals: [],
958
- summary: "Create a hosted payment-method and invoice recovery link.",
1251
+ summary: "Print a link to Stripe's billing portal, to update your card or pay an invoice.",
959
1252
  words: "billing portal",
960
1253
  },
961
1254
  {
@@ -963,7 +1256,7 @@ export const COMMAND_CATALOG = [
963
1256
  operations: ["billing.paymentmethod"],
964
1257
  options: [API_URL],
965
1258
  positionals: [],
966
- summary: "Show the saved payment method (a card, Link or another) that automatic top-ups and project subscriptions charge.",
1259
+ summary: "Show the card or other payment method that top-ups and project fees are charged to.",
967
1260
  words: "billing payment-method",
968
1261
  },
969
1262
  {
@@ -971,7 +1264,7 @@ export const COMMAND_CATALOG = [
971
1264
  operations: ["billing.invoices"],
972
1265
  options: [API_URL],
973
1266
  positionals: [],
974
- summary: "List project subscription charges, most recent first, with their receipts.",
1267
+ summary: "List recent project fee charges, newest first, with links to their receipts.",
975
1268
  words: "billing invoices",
976
1269
  },
977
1270
  {
@@ -979,7 +1272,7 @@ export const COMMAND_CATALOG = [
979
1272
  operations: ["billing.paymenthistory"],
980
1273
  options: [API_URL, ...PAGE_OPTIONS],
981
1274
  positionals: [],
982
- summary: "Read execution-credit payments with continuation to older history.",
1275
+ summary: "List credit purchases and top-ups, newest first.",
983
1276
  words: "billing payment-history",
984
1277
  },
985
1278
  {
@@ -987,7 +1280,7 @@ export const COMMAND_CATALOG = [
987
1280
  operations: ["billing.invoicehistory"],
988
1281
  options: [API_URL, ...PAGE_OPTIONS],
989
1282
  positionals: [],
990
- summary: "Read project subscription charges with continuation to older history.",
1283
+ summary: "List every project fee charge, newest first, page by page.",
991
1284
  words: "billing invoice-history",
992
1285
  },
993
1286
  {
@@ -996,7 +1289,7 @@ export const COMMAND_CATALOG = [
996
1289
  operations: ["billing.paymentmethodsetup"],
997
1290
  options: [API_URL, CONFIRM],
998
1291
  positionals: [],
999
- summary: "Create a hosted link for adding or replacing the saved payment method.",
1292
+ summary: "Print a link to add a card, or replace the one you have.",
1000
1293
  words: "billing add-card",
1001
1294
  },
1002
1295
  {
@@ -1005,7 +1298,7 @@ export const COMMAND_CATALOG = [
1005
1298
  operations: ["billing.paymentmethodremove"],
1006
1299
  options: [API_URL, CONFIRM],
1007
1300
  positionals: [],
1008
- summary: "Remove the saved payment method: project subscriptions stop renewing at the end of the paid period, and automatic top-up turns off.",
1301
+ summary: "Remove your saved card. Project fees stop renewing when the paid period ends, and automatic top-up turns off.",
1009
1302
  words: "billing remove-card",
1010
1303
  },
1011
1304
  {
@@ -1013,7 +1306,7 @@ export const COMMAND_CATALOG = [
1013
1306
  operations: ["billing.ledger"],
1014
1307
  options: [API_URL, ...PAGE_OPTIONS],
1015
1308
  positionals: [],
1016
- summary: "List immutable execution-credit ledger entries.",
1309
+ summary: "List every change to your execution credit: top-ups, charges and refunds.",
1017
1310
  words: "billing ledger",
1018
1311
  },
1019
1312
  {
@@ -1021,7 +1314,7 @@ export const COMMAND_CATALOG = [
1021
1314
  operations: ["timing.summary"],
1022
1315
  options: [API_URL],
1023
1316
  positionals: [],
1024
- summary: "Show the rolling 24-hour delivery timing cohort.",
1317
+ summary: "Show how close to on time this project's calls were, over the last 24 hours.",
1025
1318
  words: "timing",
1026
1319
  },
1027
1320
  /* --- Credentials ------------------------------------------------------ */
@@ -1030,7 +1323,7 @@ export const COMMAND_CATALOG = [
1030
1323
  operations: ["credentials.list"],
1031
1324
  options: [API_URL, ...PAGE_OPTIONS],
1032
1325
  positionals: [],
1033
- summary: "List this project's API credentials, by prefix, never in full.",
1326
+ summary: "List this project's API keys. Only the start of each is shown.",
1034
1327
  words: "credentials list",
1035
1328
  },
1036
1329
  {
@@ -1039,9 +1332,12 @@ export const COMMAND_CATALOG = [
1039
1332
  operations: ["credentials.rotate"],
1040
1333
  options: [API_URL, CONFIRM],
1041
1334
  positionals: [
1042
- { name: "<credential>", summary: "The credential to rotate." },
1335
+ {
1336
+ name: "<credential>",
1337
+ summary: "The key's id, starting ak_, from credentials list.",
1338
+ },
1043
1339
  ],
1044
- summary: "Mint the replacement for a credential, shown once.",
1340
+ summary: "Make a replacement API key and print it. This is the only time it's printed.",
1045
1341
  words: "credentials rotate",
1046
1342
  },
1047
1343
  {
@@ -1050,11 +1346,16 @@ export const COMMAND_CATALOG = [
1050
1346
  operations: ["credentials.revoke"],
1051
1347
  options: [API_URL, CONFIRM],
1052
1348
  positionals: [
1053
- { name: "<credential>", summary: "The credential to revoke." },
1349
+ {
1350
+ name: "<credential>",
1351
+ summary: "The key's id, starting ak_, from credentials list.",
1352
+ },
1054
1353
  ],
1055
- summary: "Stop a credential working, everywhere, immediately.",
1354
+ summary: "Stop an API key working, everywhere, straight away.",
1056
1355
  words: "credentials revoke",
1057
1356
  },
1357
+ /* --- Members ---------------------------------------------------------- */
1358
+ ...MEMBER_COMMANDS,
1058
1359
  /* --- Test sinks ------------------------------------------------------- */
1059
1360
  {
1060
1361
  group: "Test sinks",
@@ -1063,17 +1364,17 @@ export const COMMAND_CATALOG = [
1063
1364
  API_URL,
1064
1365
  {
1065
1366
  flag: "--endpoint",
1066
- summary: "The destination whose deliveries this sink stands in for.",
1367
+ summary: "The destination this sink answers for, by id, starting ep_.",
1067
1368
  value: "<destination>",
1068
1369
  },
1069
1370
  {
1070
1371
  flag: "--program",
1071
- summary: "How it should answer from the start: JSON, @file.json, or - for standard input.",
1372
+ summary: 'How it answers calls, such as {"behavior": "server_error"}. Inline, @file.json, or - for standard input.',
1072
1373
  value: "<json>",
1073
1374
  },
1074
1375
  ],
1075
1376
  positionals: [],
1076
- summary: "Create a receiver GreatWait hosts, for a test environment only.",
1377
+ summary: "Make a receiver GreatWait runs for you, to test against. Test environments only.",
1077
1378
  words: "sinks create",
1078
1379
  },
1079
1380
  {
@@ -1081,15 +1382,20 @@ export const COMMAND_CATALOG = [
1081
1382
  operations: ["testsinks.list"],
1082
1383
  options: [API_URL, ...PAGE_OPTIONS],
1083
1384
  positionals: [],
1084
- summary: "List the test sinks in this project.",
1385
+ summary: "List this project's test sinks.",
1085
1386
  words: "sinks list",
1086
1387
  },
1087
1388
  {
1088
1389
  group: "Test sinks",
1089
1390
  operations: ["testsinks.read"],
1090
1391
  options: [API_URL],
1091
- positionals: [{ name: "<sink>", summary: "The sink to read." }],
1092
- summary: "Read a test sink and the program it is running.",
1392
+ positionals: [
1393
+ {
1394
+ name: "<sink>",
1395
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1396
+ },
1397
+ ],
1398
+ summary: "Show a test sink and how it answers calls.",
1093
1399
  words: "sinks read",
1094
1400
  },
1095
1401
  {
@@ -1099,12 +1405,17 @@ export const COMMAND_CATALOG = [
1099
1405
  API_URL,
1100
1406
  {
1101
1407
  flag: "--program",
1102
- summary: "The behaviour program: JSON, @file.json, or - for standard input.",
1408
+ summary: 'How it answers calls, such as {"behavior": "server_error"}. Inline, @file.json, or - for standard input.',
1103
1409
  value: "<json>",
1104
1410
  },
1105
1411
  ],
1106
- positionals: [{ name: "<sink>", summary: "The sink to program." }],
1107
- summary: "Tell a test sink how to answer, so a failure can be reproduced.",
1412
+ positionals: [
1413
+ {
1414
+ name: "<sink>",
1415
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1416
+ },
1417
+ ],
1418
+ summary: "Change how a test sink answers, to reproduce a failure.",
1108
1419
  words: "sinks configure",
1109
1420
  },
1110
1421
  {
@@ -1112,16 +1423,26 @@ export const COMMAND_CATALOG = [
1112
1423
  group: "Test sinks",
1113
1424
  operations: ["testsinks.delete"],
1114
1425
  options: [API_URL, CONFIRM],
1115
- positionals: [{ name: "<sink>", summary: "The sink to delete." }],
1116
- summary: "Delete a test sink and the deliveries recorded against it.",
1426
+ positionals: [
1427
+ {
1428
+ name: "<sink>",
1429
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1430
+ },
1431
+ ],
1432
+ summary: "Delete a test sink and every call it recorded.",
1117
1433
  words: "sinks delete",
1118
1434
  },
1119
1435
  {
1120
1436
  group: "Test sinks",
1121
1437
  operations: ["sinkdeliveries.list"],
1122
1438
  options: [API_URL, ...PAGE_OPTIONS],
1123
- positionals: [{ name: "<sink>", summary: "The sink to list." }],
1124
- summary: "List what a test sink received.",
1439
+ positionals: [
1440
+ {
1441
+ name: "<sink>",
1442
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1443
+ },
1444
+ ],
1445
+ summary: "List the calls a test sink received.",
1125
1446
  words: "sinks deliveries",
1126
1447
  },
1127
1448
  {
@@ -1129,10 +1450,16 @@ export const COMMAND_CATALOG = [
1129
1450
  operations: ["sinkdeliveries.read"],
1130
1451
  options: [API_URL],
1131
1452
  positionals: [
1132
- { name: "<sink>", summary: "The sink it arrived at." },
1133
- { name: "<delivery>", summary: "The recorded delivery to read." },
1453
+ {
1454
+ name: "<sink>",
1455
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1456
+ },
1457
+ {
1458
+ name: "<delivery>",
1459
+ summary: "The recorded call's id, starting tsd_, from sinks deliveries.",
1460
+ },
1134
1461
  ],
1135
- summary: "Read one recorded delivery, including the bytes that arrived.",
1462
+ summary: "Show one call a test sink received, byte for byte.",
1136
1463
  words: "sinks delivery",
1137
1464
  },
1138
1465
  ];
@@ -1183,6 +1510,11 @@ export const OPERATION_OMISSIONS = [
1183
1510
  ground: "declared",
1184
1511
  operation: "endpoints.acknowledgeSigningKeyRotation",
1185
1512
  },
1513
+ {
1514
+ because: "`greatwait destinations create` already creates a destination and prints its signing key once, which a person at a terminal can keep. The secretless find-or-create exists for agents, whose tool results land in ordinary history (W9-44); a person scheduling to an address uses the dashboard or `destinations create`.",
1515
+ ground: "declared",
1516
+ operation: "endpoints.ensure",
1517
+ },
1186
1518
  {
1187
1519
  because: "Minting a credential needs a signed-in person. A command line holding one credential could otherwise mint another, which is the escalation the control plane refuses by declaring a session principal.",
1188
1520
  ground: "principal-unreachable",