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

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,72 @@ 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
  },
366
532
  {
367
533
  flag: "--latency-class",
368
- summary: "How promptly it must fire: realtime or bulk.",
534
+ 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
535
  value: "<class>",
370
536
  },
537
+ {
538
+ flag: "--http",
539
+ summary: "The call's method, body and headers, from @file.json or - for standard input. Keeps secret values out of your shell history.",
540
+ value: "<@file|->",
541
+ },
371
542
  {
372
543
  flag: "--data",
373
- summary: "The payload: JSON, @file.json, or - for standard input.",
544
+ summary: "JSON your receiver gets with the call. Inline, @file.json, or - for standard input.",
374
545
  value: "<json>",
375
546
  },
376
547
  IDEMPOTENCY,
548
+ {
549
+ flag: "--wait",
550
+ summary: "Wait for the first call and print how it went: delivered, or why not.",
551
+ },
552
+ {
553
+ flag: "--timeout",
554
+ summary: "How long --wait waits, such as 30s or 5m. Defaults to 3m.",
555
+ value: "<duration>",
556
+ },
377
557
  ],
378
558
  positionals: [],
379
- summary: "Schedule a delivery, once or repeatedly, and print the first occurrence.",
559
+ summary: "Schedule a call to an address, once or repeatedly. Prints the first call's id.",
380
560
  words: "schedules create",
381
561
  },
382
562
  {
@@ -387,70 +567,95 @@ export const COMMAND_CATALOG = [
387
567
  API_URL,
388
568
  {
389
569
  flag: "--endpoint",
390
- summary: "The destination to deliver to.",
570
+ summary: "The destination to call, by id, starting ep_. Or use --url instead.",
391
571
  value: "<destination>",
392
572
  },
573
+ {
574
+ flag: "--url",
575
+ summary: "The https address to call. Uses this project's destination there, or adds one.",
576
+ value: "<https url>",
577
+ },
393
578
  {
394
579
  flag: "--in",
395
- summary: "Once, after a delay: 30s, 5m, 2h, 1d.",
580
+ summary: "Call once, after this long: 30s, 5m, 2h or 1d.",
396
581
  value: "<duration>",
397
582
  },
398
583
  {
399
584
  flag: "--at",
400
- summary: "Once, at an instant in UTC.",
585
+ summary: "Call once, at this time, such as 2026-10-06T09:00:00Z.",
401
586
  value: "<instant>",
402
587
  },
403
588
  {
404
589
  flag: "--every",
405
- summary: "Repeatedly, at this interval: 30s, 5m, 2h, 1d.",
590
+ summary: "Call repeatedly, this far apart: 30s, 5m, 2h or 1d.",
406
591
  value: "<duration>",
407
592
  },
408
593
  {
409
594
  flag: "--cron",
410
- summary: "Repeatedly, on a cron expression.",
595
+ summary: 'Call repeatedly, on a cron expression such as "0 9 * * 1-5" (9:00, Monday to Friday).',
411
596
  value: "<expression>",
412
597
  },
413
598
  {
414
599
  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.",
600
+ summary: "The time zone --cron runs in, such as Europe/London, so 9:00 stays 9:00 through daylight saving. Defaults to UTC.",
416
601
  value: "<zone>",
417
602
  },
418
603
  {
419
604
  flag: "--partition-key",
420
- summary: "The fairness partition this belongs to.",
605
+ 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
606
  value: "<key>",
422
607
  },
423
608
  {
424
609
  flag: "--latency-class",
425
- summary: "How promptly it must fire: realtime or bulk.",
610
+ 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
611
  value: "<class>",
427
612
  },
613
+ {
614
+ flag: "--http",
615
+ summary: "The call's method, body and headers, from @file.json or - for standard input. Keeps secret values out of your shell history.",
616
+ value: "<@file|->",
617
+ },
428
618
  {
429
619
  flag: "--data",
430
- summary: "The payload: JSON, @file.json, or - for standard input.",
620
+ summary: "JSON your receiver gets with the call. Inline, @file.json, or - for standard input.",
431
621
  value: "<json>",
432
622
  },
433
623
  IF_MATCH,
434
624
  CONFIRM,
435
625
  ],
436
- positionals: [{ name: "<schedule>", summary: "The schedule to replace." }],
437
- summary: "Replace a schedule's definition, discarding what it said before.",
626
+ positionals: [
627
+ {
628
+ name: "<schedule>",
629
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
630
+ },
631
+ ],
632
+ summary: "Change when a schedule runs. Its destination, data and HTTP settings stay unless you give new ones.",
438
633
  words: "schedules replace",
439
634
  },
440
635
  {
441
636
  group: "Schedules",
442
637
  operations: ["schedules.pause"],
443
638
  options: [API_URL, IF_MATCH],
444
- positionals: [{ name: "<schedule>", summary: "The schedule to pause." }],
445
- summary: "Stop firing a schedule without discarding it.",
639
+ positionals: [
640
+ {
641
+ name: "<schedule>",
642
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
643
+ },
644
+ ],
645
+ summary: "Stop a schedule's calls until you resume it.",
446
646
  words: "schedules pause",
447
647
  },
448
648
  {
449
649
  group: "Schedules",
450
650
  operations: ["schedules.resume"],
451
651
  options: [API_URL, IF_MATCH],
452
- positionals: [{ name: "<schedule>", summary: "The schedule to resume." }],
453
- summary: "Start a paused schedule firing again.",
652
+ positionals: [
653
+ {
654
+ name: "<schedule>",
655
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
656
+ },
657
+ ],
658
+ summary: "Start a paused schedule's calls again.",
454
659
  words: "schedules resume",
455
660
  },
456
661
  {
@@ -458,16 +663,26 @@ export const COMMAND_CATALOG = [
458
663
  group: "Schedules",
459
664
  operations: ["schedules.cancel"],
460
665
  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.",
666
+ positionals: [
667
+ {
668
+ name: "<schedule>",
669
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
670
+ },
671
+ ],
672
+ summary: "Cancel a schedule and every call it hadn't made yet.",
463
673
  words: "schedules cancel",
464
674
  },
465
675
  {
466
676
  group: "Schedules",
467
677
  operations: ["schedules.archive"],
468
678
  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.",
679
+ positionals: [
680
+ {
681
+ name: "<schedule>",
682
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
683
+ },
684
+ ],
685
+ summary: "File a finished or cancelled schedule out of schedules list. It stays readable by id.",
471
686
  words: "schedules archive",
472
687
  },
473
688
  /* --- Data exports ---------------------------------------------------- */
@@ -476,23 +691,33 @@ export const COMMAND_CATALOG = [
476
691
  operations: ["exports.create"],
477
692
  options: [API_URL],
478
693
  positionals: [],
479
- summary: "Start a bounded export for this project and environment.",
694
+ summary: "Start exporting this project's records, as NDJSON files.",
480
695
  words: "exports create",
481
696
  },
482
697
  {
483
698
  group: "Data exports",
484
699
  operations: ["exports.read"],
485
700
  options: [API_URL],
486
- positionals: [{ name: "<export>", summary: "The export job to read." }],
487
- summary: "Read an export job's progress and cutoff.",
701
+ positionals: [
702
+ {
703
+ name: "<export>",
704
+ summary: "The export's id, starting exp_, from exports create.",
705
+ },
706
+ ],
707
+ summary: "Show how far an export has got, and the time its data runs up to.",
488
708
  words: "exports read",
489
709
  },
490
710
  {
491
711
  group: "Data exports",
492
712
  operations: ["exports.part"],
493
713
  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.",
714
+ positionals: [
715
+ {
716
+ name: "<export>",
717
+ summary: "The export's id, starting exp_, from exports create.",
718
+ },
719
+ ],
720
+ summary: "Print one part of a finished export. Redirect it to a file: > export.ndjson.",
496
721
  words: "exports part",
497
722
  },
498
723
  {
@@ -500,8 +725,13 @@ export const COMMAND_CATALOG = [
500
725
  group: "Data exports",
501
726
  operations: ["exports.cancel"],
502
727
  options: [API_URL, CONFIRM],
503
- positionals: [{ name: "<export>", summary: "The export job to cancel." }],
504
- summary: "Permanently cancel an export job.",
728
+ positionals: [
729
+ {
730
+ name: "<export>",
731
+ summary: "The export's id, starting exp_, from exports create.",
732
+ },
733
+ ],
734
+ summary: "Cancel an export. Its parts can't be downloaded afterwards.",
505
735
  words: "exports cancel",
506
736
  },
507
737
  /* --- Occurrences and attempts ----------------------------------------- */
@@ -513,11 +743,16 @@ export const COMMAND_CATALOG = [
513
743
  ...PAGE_OPTIONS,
514
744
  {
515
745
  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.",
746
+ summary: "Newest first. Use the same order when you carry on with --cursor.",
747
+ },
748
+ ],
749
+ positionals: [
750
+ {
751
+ name: "<schedule>",
752
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
517
753
  },
518
754
  ],
519
- positionals: [{ name: "<schedule>", summary: "The schedule to list." }],
520
- summary: "List the retained occurrences of a schedule.",
755
+ summary: "List a schedule's calls, one for each time it ran or will run.",
521
756
  words: "occurrences list",
522
757
  },
523
758
  {
@@ -525,10 +760,16 @@ export const COMMAND_CATALOG = [
525
760
  operations: ["occurrences.read"],
526
761
  options: [API_URL],
527
762
  positionals: [
528
- { name: "<schedule>", summary: "The schedule it belongs to." },
529
- { name: "<occurrence>", summary: "The occurrence to read." },
763
+ {
764
+ name: "<schedule>",
765
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
766
+ },
767
+ {
768
+ name: "<occurrence>",
769
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
770
+ },
530
771
  ],
531
- summary: "Read one occurrence and the state it is in.",
772
+ summary: "Show one call and where it's got to.",
532
773
  words: "occurrences read",
533
774
  },
534
775
  {
@@ -538,15 +779,21 @@ export const COMMAND_CATALOG = [
538
779
  API_URL,
539
780
  {
540
781
  flag: "--timeout",
541
- summary: "Give up after this long instead of the published deadline.",
782
+ summary: "How long to wait, such as 30s or 5m. Defaults to 3m.",
542
783
  value: "<duration>",
543
784
  },
544
785
  ],
545
786
  positionals: [
546
- { name: "<schedule>", summary: "The schedule it belongs to." },
547
- { name: "<occurrence>", summary: "The occurrence to wait for." },
787
+ {
788
+ name: "<schedule>",
789
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
790
+ },
791
+ {
792
+ name: "<occurrence>",
793
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
794
+ },
548
795
  ],
549
- summary: "Watch an occurrence until it settles, or until the deadline.",
796
+ summary: "Wait for a call to finish, then print how it went. Gives up after 3m unless --timeout says otherwise.",
550
797
  words: "occurrences wait",
551
798
  },
552
799
  {
@@ -555,10 +802,16 @@ export const COMMAND_CATALOG = [
555
802
  operations: ["occurrences.redeliver"],
556
803
  options: [API_URL, IDEMPOTENCY, CONFIRM],
557
804
  positionals: [
558
- { name: "<schedule>", summary: "The schedule it belongs to." },
559
- { name: "<occurrence>", summary: "The occurrence to send again." },
805
+ {
806
+ name: "<schedule>",
807
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
808
+ },
809
+ {
810
+ name: "<occurrence>",
811
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
812
+ },
560
813
  ],
561
- summary: "Deliver an occurrence again to the destination it belongs to.",
814
+ summary: "Make a call again, to the same destination.",
562
815
  words: "occurrences redeliver",
563
816
  },
564
817
  {
@@ -566,10 +819,16 @@ export const COMMAND_CATALOG = [
566
819
  operations: ["attempts.list"],
567
820
  options: [API_URL, ...PAGE_OPTIONS],
568
821
  positionals: [
569
- { name: "<schedule>", summary: "The schedule it belongs to." },
570
- { name: "<occurrence>", summary: "The occurrence to list attempts for." },
822
+ {
823
+ name: "<schedule>",
824
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
825
+ },
826
+ {
827
+ name: "<occurrence>",
828
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
829
+ },
571
830
  ],
572
- summary: "List every delivery attempt, with its diagnosis.",
831
+ summary: "List each try at a call, what your receiver answered, and why a failed one failed.",
573
832
  words: "attempts list",
574
833
  },
575
834
  {
@@ -577,11 +836,20 @@ export const COMMAND_CATALOG = [
577
836
  operations: ["attempts.read"],
578
837
  options: [API_URL],
579
838
  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." },
839
+ {
840
+ name: "<schedule>",
841
+ summary: "The schedule's id, starting sch_, from schedules create or schedules list.",
842
+ },
843
+ {
844
+ name: "<occurrence>",
845
+ summary: "The call's id, starting occ_, from schedules create or occurrences list.",
846
+ },
847
+ {
848
+ name: "<attempt>",
849
+ summary: "The attempt's id, starting att_, from attempts list.",
850
+ },
583
851
  ],
584
- summary: "Read one attempt in full, including what the receiver answered.",
852
+ summary: "Show one try at a call, including what your receiver answered.",
585
853
  words: "attempts read",
586
854
  },
587
855
  /* --- Planning --------------------------------------------------------- */
@@ -592,27 +860,27 @@ export const COMMAND_CATALOG = [
592
860
  API_URL,
593
861
  {
594
862
  flag: "--from",
595
- summary: "The start of the window, in UTC.",
863
+ summary: "Where the window starts, such as 2026-10-06T09:00:00Z.",
596
864
  value: "<instant>",
597
865
  },
598
866
  {
599
867
  flag: "--to",
600
- summary: "The end of the window, in UTC.",
868
+ summary: "Where the window ends, such as 2026-10-06T10:00:00Z.",
601
869
  value: "<instant>",
602
870
  },
603
871
  {
604
872
  flag: "--bucket",
605
- summary: "Bucket width in seconds.",
873
+ summary: "How many seconds each count covers.",
606
874
  value: "<seconds>",
607
875
  },
608
876
  {
609
877
  flag: "--breakdown",
610
- summary: "Group the counts by this dimension.",
878
+ summary: "partitionKey to split the counts by label, or none.",
611
879
  value: "<dimension>",
612
880
  },
613
881
  ],
614
882
  positionals: [],
615
- summary: "Show what is due in a window, and how fresh the answer is.",
883
+ summary: "Show how many calls are due in a window of time.",
616
884
  words: "forecast",
617
885
  },
618
886
  {
@@ -620,7 +888,7 @@ export const COMMAND_CATALOG = [
620
888
  operations: ["limits.read"],
621
889
  options: [API_URL],
622
890
  positionals: [],
623
- summary: "Show the verified organization's effective allowances and policy revisions.",
891
+ summary: "Show the limits that apply to your organization.",
624
892
  words: "limits show",
625
893
  },
626
894
  {
@@ -628,11 +896,19 @@ export const COMMAND_CATALOG = [
628
896
  operations: ["usage.read"],
629
897
  options: [
630
898
  API_URL,
631
- { flag: "--from", summary: "The first day, in UTC.", value: "<instant>" },
632
- { flag: "--to", summary: "The last day, in UTC.", value: "<instant>" },
899
+ {
900
+ flag: "--from",
901
+ summary: "The first day, such as 2026-10-01. Days are UTC.",
902
+ value: "<instant>",
903
+ },
904
+ {
905
+ flag: "--to",
906
+ summary: "The last day, such as 2026-10-06. Days are UTC.",
907
+ value: "<instant>",
908
+ },
633
909
  ],
634
910
  positionals: [],
635
- summary: "Show terminal occurrence volume by day.",
911
+ summary: "Show how many calls finished each day. For what you're billed, use billing ledger.",
636
912
  words: "usage",
637
913
  },
638
914
  {
@@ -640,7 +916,7 @@ export const COMMAND_CATALOG = [
640
916
  operations: ["billing.summary"],
641
917
  options: [API_URL],
642
918
  positionals: [],
643
- summary: "Show exact execution credit and effective billing state.",
919
+ summary: "Show your execution credit and billing status.",
644
920
  words: "billing",
645
921
  },
646
922
  {
@@ -648,7 +924,7 @@ export const COMMAND_CATALOG = [
648
924
  operations: ["billing.funding"],
649
925
  options: [API_URL],
650
926
  positionals: [],
651
- summary: "Show execution funding, automatic payment authority and payment outcomes.",
927
+ summary: "Show how execution credit is funded: automatic top-up, your monthly ceiling, and recent payments.",
652
928
  words: "billing funding",
653
929
  },
654
930
  {
@@ -656,7 +932,7 @@ export const COMMAND_CATALOG = [
656
932
  operations: ["billing.notices"],
657
933
  options: [API_URL, ...PAGE_OPTIONS],
658
934
  positionals: [],
659
- summary: "List persistent organization billing notices and delivery state.",
935
+ summary: "List billing notices, such as low credit, and whether each was emailed.",
660
936
  words: "billing notices",
661
937
  },
662
938
  {
@@ -664,7 +940,7 @@ export const COMMAND_CATALOG = [
664
940
  operations: ["billing.notificationsettings"],
665
941
  options: [API_URL],
666
942
  positionals: [],
667
- summary: "Show billing notification policy and its revision.",
943
+ summary: "Show which billing emails you get, and when.",
668
944
  words: "billing notification-settings",
669
945
  },
670
946
  {
@@ -675,24 +951,24 @@ export const COMMAND_CATALOG = [
675
951
  API_URL,
676
952
  {
677
953
  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.",
954
+ 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
955
  value: "<dollars|auto>",
680
956
  },
681
957
  {
682
958
  flag: "--noncritical-email",
683
- summary: "Enable or disable email for noncritical notices.",
959
+ summary: "on or off: email for notices that need no action.",
684
960
  value: "<on|off>",
685
961
  },
686
962
  {
687
963
  flag: "--expected-revision",
688
- summary: "Refuse if notification settings have changed.",
964
+ summary: "Only change it if nobody else has since you read it. The revision comes from billing notification-settings.",
689
965
  value: "<revision>",
690
966
  },
691
967
  IDEMPOTENCY,
692
968
  CONFIRM,
693
969
  ],
694
970
  positionals: [],
695
- summary: "Update optional billing notifications with approval.",
971
+ summary: "Change which billing emails you get.",
696
972
  words: "billing update-notifications",
697
973
  },
698
974
  {
@@ -702,12 +978,12 @@ export const COMMAND_CATALOG = [
702
978
  API_URL,
703
979
  {
704
980
  flag: "--credit",
705
- summary: "Execution credit to buy in USD, at least 10.",
981
+ summary: "How many dollars of credit to buy. At least 10.",
706
982
  value: "<dollars>",
707
983
  },
708
984
  ],
709
985
  positionals: [],
710
- summary: "Preview manual execution funding before tax is calculated at checkout.",
986
+ summary: "Price a credit purchase before you buy. Tax is added at checkout.",
711
987
  words: "billing quote-funding",
712
988
  },
713
989
  {
@@ -718,14 +994,14 @@ export const COMMAND_CATALOG = [
718
994
  API_URL,
719
995
  {
720
996
  flag: "--quote",
721
- summary: "The exact object returned by quote-funding (the data field in JSON output).",
997
+ summary: "The quote from billing quote-funding --json: its data field, inline, @file.json, or - for standard input.",
722
998
  value: "<json|@file|->",
723
999
  },
724
1000
  IDEMPOTENCY,
725
1001
  CONFIRM,
726
1002
  ],
727
1003
  positionals: [],
728
- summary: "Confirm a manual execution-credit purchase with a stable retry key.",
1004
+ summary: "Buy the credit a quote priced, and print the link to pay.",
729
1005
  words: "billing purchase",
730
1006
  },
731
1007
  {
@@ -736,19 +1012,19 @@ export const COMMAND_CATALOG = [
736
1012
  API_URL,
737
1013
  {
738
1014
  flag: "--ceiling",
739
- summary: "Set the UTC-month automatic payment ceiling in USD, or turn it off.",
1015
+ summary: "The most automatic payments may charge in a calendar month, in dollars, or off.",
740
1016
  value: "<dollars|off>",
741
1017
  },
742
1018
  {
743
1019
  flag: "--expected-revision",
744
- summary: "Refuse if automatic payment authority has changed.",
1020
+ summary: "Only change it if nobody else has since you read it. The revision comes from billing funding.",
745
1021
  value: "<revision>",
746
1022
  },
747
1023
  IDEMPOTENCY,
748
1024
  CONFIRM,
749
1025
  ],
750
1026
  positionals: [],
751
- summary: "Set exact automatic payment authority with approval.",
1027
+ summary: "Set the most automatic payments may charge each month.",
752
1028
  words: "billing ceiling",
753
1029
  },
754
1030
  {
@@ -758,32 +1034,32 @@ export const COMMAND_CATALOG = [
758
1034
  API_URL,
759
1035
  {
760
1036
  flag: "--action",
761
- summary: "Preview enabling, editing, disabling or resuming the rule.",
1037
+ summary: "What to preview: enable, edit, disable or resume.",
762
1038
  value: "<enable|edit|disable|resume>",
763
1039
  },
764
1040
  {
765
1041
  flag: "--credit",
766
- summary: "Fixed execution credit purchased by enable or edit, in USD.",
1042
+ summary: "How many dollars of credit each top-up buys.",
767
1043
  value: "<dollars>",
768
1044
  },
769
1045
  {
770
1046
  flag: "--trigger-below",
771
- summary: "Trigger when usable execution credit is below this USD amount.",
1047
+ summary: "Top up when credit falls below this many dollars.",
772
1048
  value: "<dollars>",
773
1049
  },
774
1050
  {
775
1051
  flag: "--ceiling",
776
- summary: "Gross automatic-payment ceiling per UTC month, in USD.",
1052
+ summary: "The most top-ups may charge in a calendar month, in dollars.",
777
1053
  value: "<dollars>",
778
1054
  },
779
1055
  {
780
1056
  flag: "--expected-revision",
781
- summary: "Refuse if automatic payment authority has changed.",
1057
+ summary: "Only change it if nobody else has since you read it. The revision comes from billing funding.",
782
1058
  value: "<revision>",
783
1059
  },
784
1060
  ],
785
1061
  positionals: [],
786
- summary: "Preview one exact automatic top-up rule without enabling it.",
1062
+ summary: "Preview an automatic top-up change. Nothing changes until billing apply-topup.",
787
1063
  words: "billing preview-topup",
788
1064
  },
789
1065
  {
@@ -794,14 +1070,14 @@ export const COMMAND_CATALOG = [
794
1070
  API_URL,
795
1071
  {
796
1072
  flag: "--preview",
797
- summary: "The exact object returned by preview-topup (the data field in JSON output).",
1073
+ summary: "The preview from billing preview-topup --json: its data field, inline, @file.json, or - for standard input.",
798
1074
  value: "<json|@file|->",
799
1075
  },
800
1076
  IDEMPOTENCY,
801
1077
  CONFIRM,
802
1078
  ],
803
1079
  positionals: [],
804
- summary: "Confirm an automatic top-up preview with a stable retry key.",
1080
+ summary: "Turn on, change or stop automatic top-up, as a preview described.",
805
1081
  words: "billing apply-topup",
806
1082
  },
807
1083
  {
@@ -812,24 +1088,24 @@ export const COMMAND_CATALOG = [
812
1088
  API_URL,
813
1089
  {
814
1090
  flag: "--payment-operation",
815
- summary: "The paid funding operation to review.",
1091
+ summary: "The payment to refund from, from billing payment-history.",
816
1092
  value: "<operation>",
817
1093
  },
818
1094
  {
819
1095
  flag: "--amount",
820
- summary: "Unused purchased credit requested in USD.",
1096
+ summary: "How many dollars of unused credit to refund.",
821
1097
  value: "<dollars>",
822
1098
  },
823
1099
  {
824
1100
  flag: "--reason",
825
- summary: "Why the credit is reserved for refund.",
1101
+ summary: "Why you're asking for the refund.",
826
1102
  value: "<text>",
827
1103
  },
828
1104
  IDEMPOTENCY,
829
1105
  CONFIRM,
830
1106
  ],
831
1107
  positionals: [],
832
- summary: "Reserve unused purchased credit against a payment for refund.",
1108
+ summary: "Ask for unused credit back. The credit is held until the refund is decided.",
833
1109
  words: "billing refund-request",
834
1110
  },
835
1111
  {
@@ -840,34 +1116,34 @@ export const COMMAND_CATALOG = [
840
1116
  API_URL,
841
1117
  {
842
1118
  flag: "--refund-request",
843
- summary: "The pending refund reservation to complete or decline.",
1119
+ summary: "The refund request to decide, from billing refund-request.",
844
1120
  value: "<request>",
845
1121
  },
846
1122
  {
847
1123
  flag: "--decision",
848
- summary: "Complete with an existing Stripe refund, or release the reservation.",
1124
+ summary: "completed, for a refund already made in Stripe, or declined, which releases the held credit.",
849
1125
  value: "<completed|declined>",
850
1126
  },
851
1127
  {
852
1128
  flag: "--provider-refund",
853
- summary: "Existing Stripe refund ID required for completion.",
1129
+ summary: "The Stripe refund's id, starting re_. Needed for completed.",
854
1130
  value: "<re_...>",
855
1131
  },
856
1132
  {
857
1133
  flag: "--gross",
858
- summary: "Existing provider refund gross amount in USD.",
1134
+ summary: "The Stripe refund's total, in dollars.",
859
1135
  value: "<dollars>",
860
1136
  },
861
1137
  {
862
1138
  flag: "--tax",
863
- summary: "Tax included in the existing provider refund in USD.",
1139
+ summary: "The tax within that total, in dollars.",
864
1140
  value: "<dollars>",
865
1141
  },
866
1142
  IDEMPOTENCY,
867
1143
  CONFIRM,
868
1144
  ],
869
1145
  positionals: [],
870
- summary: "Record a completed or declined external refund review.",
1146
+ summary: "Record whether a refund request was paid in Stripe or declined.",
871
1147
  words: "billing resolve-refund",
872
1148
  },
873
1149
  {
@@ -878,24 +1154,24 @@ export const COMMAND_CATALOG = [
878
1154
  API_URL,
879
1155
  {
880
1156
  flag: "--advisory-budget",
881
- summary: "Set the monthly advisory amount in USD, or turn it off.",
1157
+ summary: "A monthly amount, in dollars, that warns you when spending passes it, or off.",
882
1158
  value: "<dollars|off>",
883
1159
  },
884
1160
  {
885
1161
  flag: "--hard-cap",
886
- summary: "Set the monthly hard cap in USD, or turn it off.",
1162
+ summary: "A monthly amount, in dollars, that stops calls when spending reaches it, or off.",
887
1163
  value: "<dollars|off>",
888
1164
  },
889
1165
  {
890
1166
  flag: "--expected-revision",
891
- summary: "Refuse if the budget policy has changed since this revision.",
1167
+ summary: "Only change it if nobody else has since you read it. The revision comes from billing.",
892
1168
  value: "<revision>",
893
1169
  },
894
1170
  IDEMPOTENCY,
895
1171
  CONFIRM,
896
1172
  ],
897
1173
  positionals: [],
898
- summary: "Set exact monthly execution budgets with approval.",
1174
+ summary: "Set a monthly budget that warns you, a cap that stops calls, or both.",
899
1175
  words: "billing budgets",
900
1176
  },
901
1177
  {
@@ -903,7 +1179,7 @@ export const COMMAND_CATALOG = [
903
1179
  operations: ["billing.projects"],
904
1180
  options: [API_URL],
905
1181
  positionals: [],
906
- summary: "Show named project access, payment recovery and monthly fees.",
1182
+ summary: "Show each project's monthly fee and whether it's paid up.",
907
1183
  words: "billing projects",
908
1184
  },
909
1185
  {
@@ -913,22 +1189,22 @@ export const COMMAND_CATALOG = [
913
1189
  API_URL,
914
1190
  {
915
1191
  flag: "--action",
916
- summary: "Preview an addition, cancellation or included transfer.",
1192
+ summary: "add a paid project, cancel one, or transfer-included to move your included project.",
917
1193
  value: "<add|cancel|transfer-included>",
918
1194
  },
919
1195
  {
920
1196
  flag: "--target-project",
921
- summary: "The named project whose billing changes.",
1197
+ summary: "The project's id, starting proj_, from billing projects.",
922
1198
  value: "<project>",
923
1199
  },
924
1200
  {
925
1201
  flag: "--from-project",
926
- summary: "The former included project for a transfer.",
1202
+ summary: "For transfer-included, the project that's included now.",
927
1203
  value: "<project>",
928
1204
  },
929
1205
  ],
930
1206
  positionals: [],
931
- summary: "Preview a named project billing change without authorizing payment.",
1207
+ summary: "Price a change to which projects you pay for. Nothing changes until billing change-project.",
932
1208
  words: "billing quote-project",
933
1209
  },
934
1210
  {
@@ -939,14 +1215,14 @@ export const COMMAND_CATALOG = [
939
1215
  API_URL,
940
1216
  {
941
1217
  flag: "--quote",
942
- summary: "The exact quote object returned by quote-project (the data field in JSON output).",
1218
+ summary: "The quote from billing quote-project --json: its data field, inline, @file.json, or - for standard input.",
943
1219
  value: "<json|@file|->",
944
1220
  },
945
1221
  IDEMPOTENCY,
946
1222
  CONFIRM,
947
1223
  ],
948
1224
  positionals: [],
949
- summary: "Confirm an exact project billing quote with a stable retry key.",
1225
+ summary: "Make the project change a quote priced.",
950
1226
  words: "billing change-project",
951
1227
  },
952
1228
  {
@@ -955,7 +1231,7 @@ export const COMMAND_CATALOG = [
955
1231
  operations: ["billing.portal"],
956
1232
  options: [API_URL, CONFIRM],
957
1233
  positionals: [],
958
- summary: "Create a hosted payment-method and invoice recovery link.",
1234
+ summary: "Print a link to Stripe's billing portal, to update your card or pay an invoice.",
959
1235
  words: "billing portal",
960
1236
  },
961
1237
  {
@@ -963,7 +1239,7 @@ export const COMMAND_CATALOG = [
963
1239
  operations: ["billing.paymentmethod"],
964
1240
  options: [API_URL],
965
1241
  positionals: [],
966
- summary: "Show the saved payment method (a card, Link or another) that automatic top-ups and project subscriptions charge.",
1242
+ summary: "Show the card or other payment method that top-ups and project fees are charged to.",
967
1243
  words: "billing payment-method",
968
1244
  },
969
1245
  {
@@ -971,7 +1247,7 @@ export const COMMAND_CATALOG = [
971
1247
  operations: ["billing.invoices"],
972
1248
  options: [API_URL],
973
1249
  positionals: [],
974
- summary: "List project subscription charges, most recent first, with their receipts.",
1250
+ summary: "List recent project fee charges, newest first, with links to their receipts.",
975
1251
  words: "billing invoices",
976
1252
  },
977
1253
  {
@@ -979,7 +1255,7 @@ export const COMMAND_CATALOG = [
979
1255
  operations: ["billing.paymenthistory"],
980
1256
  options: [API_URL, ...PAGE_OPTIONS],
981
1257
  positionals: [],
982
- summary: "Read execution-credit payments with continuation to older history.",
1258
+ summary: "List credit purchases and top-ups, newest first.",
983
1259
  words: "billing payment-history",
984
1260
  },
985
1261
  {
@@ -987,7 +1263,7 @@ export const COMMAND_CATALOG = [
987
1263
  operations: ["billing.invoicehistory"],
988
1264
  options: [API_URL, ...PAGE_OPTIONS],
989
1265
  positionals: [],
990
- summary: "Read project subscription charges with continuation to older history.",
1266
+ summary: "List every project fee charge, newest first, page by page.",
991
1267
  words: "billing invoice-history",
992
1268
  },
993
1269
  {
@@ -996,7 +1272,7 @@ export const COMMAND_CATALOG = [
996
1272
  operations: ["billing.paymentmethodsetup"],
997
1273
  options: [API_URL, CONFIRM],
998
1274
  positionals: [],
999
- summary: "Create a hosted link for adding or replacing the saved payment method.",
1275
+ summary: "Print a link to add a card, or replace the one you have.",
1000
1276
  words: "billing add-card",
1001
1277
  },
1002
1278
  {
@@ -1005,7 +1281,7 @@ export const COMMAND_CATALOG = [
1005
1281
  operations: ["billing.paymentmethodremove"],
1006
1282
  options: [API_URL, CONFIRM],
1007
1283
  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.",
1284
+ summary: "Remove your saved card. Project fees stop renewing when the paid period ends, and automatic top-up turns off.",
1009
1285
  words: "billing remove-card",
1010
1286
  },
1011
1287
  {
@@ -1013,7 +1289,7 @@ export const COMMAND_CATALOG = [
1013
1289
  operations: ["billing.ledger"],
1014
1290
  options: [API_URL, ...PAGE_OPTIONS],
1015
1291
  positionals: [],
1016
- summary: "List immutable execution-credit ledger entries.",
1292
+ summary: "List every change to your execution credit: top-ups, charges and refunds.",
1017
1293
  words: "billing ledger",
1018
1294
  },
1019
1295
  {
@@ -1021,7 +1297,7 @@ export const COMMAND_CATALOG = [
1021
1297
  operations: ["timing.summary"],
1022
1298
  options: [API_URL],
1023
1299
  positionals: [],
1024
- summary: "Show the rolling 24-hour delivery timing cohort.",
1300
+ summary: "Show how close to on time this project's calls were, over the last 24 hours.",
1025
1301
  words: "timing",
1026
1302
  },
1027
1303
  /* --- Credentials ------------------------------------------------------ */
@@ -1030,7 +1306,7 @@ export const COMMAND_CATALOG = [
1030
1306
  operations: ["credentials.list"],
1031
1307
  options: [API_URL, ...PAGE_OPTIONS],
1032
1308
  positionals: [],
1033
- summary: "List this project's API credentials, by prefix, never in full.",
1309
+ summary: "List this project's API keys. Only the start of each is shown.",
1034
1310
  words: "credentials list",
1035
1311
  },
1036
1312
  {
@@ -1039,9 +1315,12 @@ export const COMMAND_CATALOG = [
1039
1315
  operations: ["credentials.rotate"],
1040
1316
  options: [API_URL, CONFIRM],
1041
1317
  positionals: [
1042
- { name: "<credential>", summary: "The credential to rotate." },
1318
+ {
1319
+ name: "<credential>",
1320
+ summary: "The key's id, starting ak_, from credentials list.",
1321
+ },
1043
1322
  ],
1044
- summary: "Mint the replacement for a credential, shown once.",
1323
+ summary: "Make a replacement API key and print it. This is the only time it's printed.",
1045
1324
  words: "credentials rotate",
1046
1325
  },
1047
1326
  {
@@ -1050,11 +1329,16 @@ export const COMMAND_CATALOG = [
1050
1329
  operations: ["credentials.revoke"],
1051
1330
  options: [API_URL, CONFIRM],
1052
1331
  positionals: [
1053
- { name: "<credential>", summary: "The credential to revoke." },
1332
+ {
1333
+ name: "<credential>",
1334
+ summary: "The key's id, starting ak_, from credentials list.",
1335
+ },
1054
1336
  ],
1055
- summary: "Stop a credential working, everywhere, immediately.",
1337
+ summary: "Stop an API key working, everywhere, straight away.",
1056
1338
  words: "credentials revoke",
1057
1339
  },
1340
+ /* --- Members ---------------------------------------------------------- */
1341
+ ...MEMBER_COMMANDS,
1058
1342
  /* --- Test sinks ------------------------------------------------------- */
1059
1343
  {
1060
1344
  group: "Test sinks",
@@ -1063,17 +1347,17 @@ export const COMMAND_CATALOG = [
1063
1347
  API_URL,
1064
1348
  {
1065
1349
  flag: "--endpoint",
1066
- summary: "The destination whose deliveries this sink stands in for.",
1350
+ summary: "The destination this sink answers for, by id, starting ep_.",
1067
1351
  value: "<destination>",
1068
1352
  },
1069
1353
  {
1070
1354
  flag: "--program",
1071
- summary: "How it should answer from the start: JSON, @file.json, or - for standard input.",
1355
+ summary: 'How it answers calls, such as {"behavior": "server_error"}. Inline, @file.json, or - for standard input.',
1072
1356
  value: "<json>",
1073
1357
  },
1074
1358
  ],
1075
1359
  positionals: [],
1076
- summary: "Create a receiver GreatWait hosts, for a test environment only.",
1360
+ summary: "Make a receiver GreatWait runs for you, to test against. Test environments only.",
1077
1361
  words: "sinks create",
1078
1362
  },
1079
1363
  {
@@ -1081,15 +1365,20 @@ export const COMMAND_CATALOG = [
1081
1365
  operations: ["testsinks.list"],
1082
1366
  options: [API_URL, ...PAGE_OPTIONS],
1083
1367
  positionals: [],
1084
- summary: "List the test sinks in this project.",
1368
+ summary: "List this project's test sinks.",
1085
1369
  words: "sinks list",
1086
1370
  },
1087
1371
  {
1088
1372
  group: "Test sinks",
1089
1373
  operations: ["testsinks.read"],
1090
1374
  options: [API_URL],
1091
- positionals: [{ name: "<sink>", summary: "The sink to read." }],
1092
- summary: "Read a test sink and the program it is running.",
1375
+ positionals: [
1376
+ {
1377
+ name: "<sink>",
1378
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1379
+ },
1380
+ ],
1381
+ summary: "Show a test sink and how it answers calls.",
1093
1382
  words: "sinks read",
1094
1383
  },
1095
1384
  {
@@ -1099,12 +1388,17 @@ export const COMMAND_CATALOG = [
1099
1388
  API_URL,
1100
1389
  {
1101
1390
  flag: "--program",
1102
- summary: "The behaviour program: JSON, @file.json, or - for standard input.",
1391
+ summary: 'How it answers calls, such as {"behavior": "server_error"}. Inline, @file.json, or - for standard input.',
1103
1392
  value: "<json>",
1104
1393
  },
1105
1394
  ],
1106
- positionals: [{ name: "<sink>", summary: "The sink to program." }],
1107
- summary: "Tell a test sink how to answer, so a failure can be reproduced.",
1395
+ positionals: [
1396
+ {
1397
+ name: "<sink>",
1398
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1399
+ },
1400
+ ],
1401
+ summary: "Change how a test sink answers, to reproduce a failure.",
1108
1402
  words: "sinks configure",
1109
1403
  },
1110
1404
  {
@@ -1112,16 +1406,26 @@ export const COMMAND_CATALOG = [
1112
1406
  group: "Test sinks",
1113
1407
  operations: ["testsinks.delete"],
1114
1408
  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.",
1409
+ positionals: [
1410
+ {
1411
+ name: "<sink>",
1412
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1413
+ },
1414
+ ],
1415
+ summary: "Delete a test sink and every call it recorded.",
1117
1416
  words: "sinks delete",
1118
1417
  },
1119
1418
  {
1120
1419
  group: "Test sinks",
1121
1420
  operations: ["sinkdeliveries.list"],
1122
1421
  options: [API_URL, ...PAGE_OPTIONS],
1123
- positionals: [{ name: "<sink>", summary: "The sink to list." }],
1124
- summary: "List what a test sink received.",
1422
+ positionals: [
1423
+ {
1424
+ name: "<sink>",
1425
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1426
+ },
1427
+ ],
1428
+ summary: "List the calls a test sink received.",
1125
1429
  words: "sinks deliveries",
1126
1430
  },
1127
1431
  {
@@ -1129,10 +1433,16 @@ export const COMMAND_CATALOG = [
1129
1433
  operations: ["sinkdeliveries.read"],
1130
1434
  options: [API_URL],
1131
1435
  positionals: [
1132
- { name: "<sink>", summary: "The sink it arrived at." },
1133
- { name: "<delivery>", summary: "The recorded delivery to read." },
1436
+ {
1437
+ name: "<sink>",
1438
+ summary: "The sink's id, starting tsk_, from sinks create or sinks list.",
1439
+ },
1440
+ {
1441
+ name: "<delivery>",
1442
+ summary: "The recorded call's id, starting tsd_, from sinks deliveries.",
1443
+ },
1134
1444
  ],
1135
- summary: "Read one recorded delivery, including the bytes that arrived.",
1445
+ summary: "Show one call a test sink received, byte for byte.",
1136
1446
  words: "sinks delivery",
1137
1447
  },
1138
1448
  ];
@@ -1183,6 +1493,11 @@ export const OPERATION_OMISSIONS = [
1183
1493
  ground: "declared",
1184
1494
  operation: "endpoints.acknowledgeSigningKeyRotation",
1185
1495
  },
1496
+ {
1497
+ 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`.",
1498
+ ground: "declared",
1499
+ operation: "endpoints.ensure",
1500
+ },
1186
1501
  {
1187
1502
  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
1503
  ground: "principal-unreachable",