@shortcut-cli/shortcut-cli 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +428 -8
- package/build/bin/{short-api.cjs → short-api.js} +13 -16
- package/build/bin/short-create.js +76 -0
- package/build/bin/short-custom-field.js +50 -0
- package/build/bin/short-custom-fields.js +29 -0
- package/build/bin/{short-doc.cjs → short-doc.js} +34 -36
- package/build/bin/{short-docs.cjs → short-docs.js} +23 -15
- package/build/bin/short-epic.js +186 -0
- package/build/bin/short-epics.js +36 -0
- package/build/bin/short-find.js +6 -0
- package/build/bin/short-install.js +87 -0
- package/build/bin/{short-iteration.cjs → short-iteration.js} +41 -45
- package/build/bin/{short-iterations.cjs → short-iterations.js} +15 -19
- package/build/bin/short-label.js +130 -0
- package/build/bin/short-labels.js +27 -0
- package/build/bin/short-members.js +31 -0
- package/build/bin/short-objective.js +151 -0
- package/build/bin/short-objectives.js +63 -0
- package/build/bin/short-projects.js +31 -0
- package/build/bin/short-search.js +45 -0
- package/build/bin/short-story.js +458 -0
- package/build/bin/short-team.js +78 -0
- package/build/bin/short-teams.js +28 -0
- package/build/bin/short-workflows.js +29 -0
- package/build/bin/short-workspace.js +63 -0
- package/build/bin/short.js +8 -0
- package/build/lib/client.js +9 -0
- package/build/lib/{configure.cjs → configure.js} +18 -27
- package/build/lib/spinner.js +12 -0
- package/build/lib/{stories.cjs → stories.js} +116 -78
- package/build/package.js +5 -0
- package/package.json +44 -44
- package/build/_virtual/rolldown_runtime.cjs +0 -29
- package/build/bin/short-create.cjs +0 -58
- package/build/bin/short-epic.cjs +0 -74
- package/build/bin/short-epics.cjs +0 -36
- package/build/bin/short-find.cjs +0 -7
- package/build/bin/short-install.cjs +0 -42
- package/build/bin/short-members.cjs +0 -34
- package/build/bin/short-projects.cjs +0 -34
- package/build/bin/short-search.cjs +0 -49
- package/build/bin/short-story.cjs +0 -213
- package/build/bin/short-workflows.cjs +0 -32
- package/build/bin/short-workspace.cjs +0 -64
- package/build/bin/short.cjs +0 -10
- package/build/lib/client.cjs +0 -11
- package/build/lib/spinner.cjs +0 -17
- package/build/package.cjs +0 -18
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://github.com/shortcut-cli/shortcut-cli/blob/main/LICENSE)
|
|
5
5
|
[]()
|
|
6
6
|
|
|
7
|
-
This is a community-driven command line interface for [Shortcut](https://shortcut.com)
|
|
7
|
+
This is a community-driven command line interface for [Shortcut](https://shortcut.com). It covers story search and updates, saved workspaces, and newer workspace resources such as teams, labels, epics, objectives, iterations, docs, projects, and raw API access.
|
|
8
8
|
|
|
9
9
|
## Table of Contents
|
|
10
10
|
|
|
@@ -15,7 +15,11 @@ This is a community-driven command line interface for [Shortcut](https://shortcu
|
|
|
15
15
|
- [Story Creation](#story-creation)
|
|
16
16
|
- [Workspace](#workspace)
|
|
17
17
|
- [Members](#members)
|
|
18
|
+
- [Teams](#teams)
|
|
19
|
+
- [Labels](#labels)
|
|
20
|
+
- [Custom Fields](#custom-fields)
|
|
18
21
|
- [Epics](#epics)
|
|
22
|
+
- [Objectives](#objectives)
|
|
19
23
|
- [Iterations](#iterations)
|
|
20
24
|
- [Docs](#docs)
|
|
21
25
|
- [Workflows](#workflows)
|
|
@@ -31,7 +35,7 @@ This is a community-driven command line interface for [Shortcut](https://shortcu
|
|
|
31
35
|
Install via npm:
|
|
32
36
|
|
|
33
37
|
```sh
|
|
34
|
-
npm install @shortcut-cli/shortcut-cli
|
|
38
|
+
npm install -g @shortcut-cli/shortcut-cli
|
|
35
39
|
short install
|
|
36
40
|
```
|
|
37
41
|
|
|
@@ -84,16 +88,25 @@ short story 3300
|
|
|
84
88
|
|
|
85
89
|
install install and configure API access
|
|
86
90
|
search search stories with optional query
|
|
91
|
+
find [DEPRECATED] search stories with optional query
|
|
87
92
|
members list members
|
|
88
|
-
|
|
93
|
+
teams list teams
|
|
94
|
+
team view a team or list its stories
|
|
95
|
+
labels list labels
|
|
96
|
+
label view stories for a label
|
|
97
|
+
custom-fields list custom fields
|
|
98
|
+
custom-field view a custom field
|
|
99
|
+
story view or manipulate stories
|
|
89
100
|
create create a story
|
|
90
101
|
workflows list workflows and their states
|
|
91
102
|
epics list epics and their states
|
|
92
103
|
iterations list iterations
|
|
93
104
|
iteration view, create, update, or delete an iteration
|
|
105
|
+
objectives list objectives and their states
|
|
106
|
+
objective view, create, or update objectives
|
|
94
107
|
docs list and search docs
|
|
95
108
|
doc view, create, update, or delete a doc
|
|
96
|
-
projects list
|
|
109
|
+
projects list projects and their states
|
|
97
110
|
workspace list stories matching saved workspace query
|
|
98
111
|
api make a request to the Shortcut API
|
|
99
112
|
help [cmd] display help for [cmd]
|
|
@@ -102,7 +115,7 @@ short story 3300
|
|
|
102
115
|
### Search
|
|
103
116
|
|
|
104
117
|
```
|
|
105
|
-
Usage: short
|
|
118
|
+
Usage: short search [options] [SEARCH OPERATORS]
|
|
106
119
|
|
|
107
120
|
Search through Shortcut stories. Arguments (non-flag/options) will
|
|
108
121
|
be passed to Shortcut story search API as search operators. Passing '%self%' as
|
|
@@ -197,6 +210,7 @@ The default sorting for stories found is `state.position:asc,position:asc`, whic
|
|
|
197
210
|
|
|
198
211
|
Options:
|
|
199
212
|
|
|
213
|
+
-a, --archived Update story as archived
|
|
200
214
|
-I, --idonly Print only ID of story results
|
|
201
215
|
-s, --state [id|name] Update workflow state of story
|
|
202
216
|
-e, --estimate [number] Update estimate of story
|
|
@@ -216,12 +230,17 @@ The default sorting for stories found is `state.position:asc,position:asc`, whic
|
|
|
216
230
|
--move-down [n] Move story position downward by n stories
|
|
217
231
|
--move-up [n] Move story position upward by n stories
|
|
218
232
|
-c, --comment [text] Add comment to story
|
|
233
|
+
--deadline [date] Update due date of story (YYYY-MM-DD)
|
|
234
|
+
--external-link [url] Add external link to story, comma-separated
|
|
235
|
+
--follower [id|name] Update followers of story, comma-separated
|
|
219
236
|
-o, --owners [id|name] Update owners of story, comma-separated
|
|
220
237
|
-O, --open Open story in browser
|
|
221
238
|
--oe, --open-epic Open story's epic in browser
|
|
222
239
|
--oi, --open-iteration Open story's iteration in browser
|
|
223
240
|
--op, --open-project Open story's project in browser
|
|
224
241
|
-q, --quiet Print only story output, no loading dialog
|
|
242
|
+
--requester [id|name] Update requester of story
|
|
243
|
+
-T, --team [id|name] Update team/group of story
|
|
225
244
|
-t, --title [text] Update title of story
|
|
226
245
|
--task [text] Create new task on story
|
|
227
246
|
--task-complete [text] Toggle completion of story task matching text
|
|
@@ -229,6 +248,44 @@ The default sorting for stories found is `state.position:asc,position:asc`, whic
|
|
|
229
248
|
-h, --help output usage information
|
|
230
249
|
```
|
|
231
250
|
|
|
251
|
+
History:
|
|
252
|
+
|
|
253
|
+
```sh
|
|
254
|
+
npx short story history 17
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Comments:
|
|
258
|
+
|
|
259
|
+
```sh
|
|
260
|
+
npx short story comments 17
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Tasks:
|
|
264
|
+
|
|
265
|
+
```sh
|
|
266
|
+
npx short story tasks 17
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Sub-tasks:
|
|
270
|
+
|
|
271
|
+
```sh
|
|
272
|
+
npx short story sub-tasks 17
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Relations:
|
|
276
|
+
|
|
277
|
+
```sh
|
|
278
|
+
npx short story relation add 17 44 --type relates-to
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Update examples:
|
|
282
|
+
|
|
283
|
+
```sh
|
|
284
|
+
npx short story 17 --deadline 2026-03-31
|
|
285
|
+
npx short story 17 --requester test3969 --follower test3969
|
|
286
|
+
npx short story 17 --external-link "https://example.com/spec"
|
|
287
|
+
```
|
|
288
|
+
|
|
232
289
|
Example output:
|
|
233
290
|
|
|
234
291
|
```
|
|
@@ -267,7 +324,7 @@ Comment: This is a comment
|
|
|
267
324
|
-T, --team [id|name] Set team of story
|
|
268
325
|
-t, --title [text] Set title of story, required
|
|
269
326
|
-s, --state [id|name] Set workflow state of story, required if --project is not set
|
|
270
|
-
-y, --type
|
|
327
|
+
-y, --type <name> Set type of story (feature, bug, chore; default: feature)
|
|
271
328
|
-h, --help output usage information
|
|
272
329
|
--git-branch Checkout git branch from story slug <mention-name>/ch<id>/<type>-<title>
|
|
273
330
|
as required by the Git integration: https://bit.ly/2RKO1FF
|
|
@@ -306,6 +363,158 @@ Comment: This is a comment
|
|
|
306
363
|
-h, --help output usage information
|
|
307
364
|
```
|
|
308
365
|
|
|
366
|
+
### Teams
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
Usage: short teams [options]
|
|
370
|
+
|
|
371
|
+
Display teams available for stories and epics
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
Options:
|
|
375
|
+
|
|
376
|
+
-a, --archived List teams including archived
|
|
377
|
+
-s, --search [query] List teams with name containing query
|
|
378
|
+
-h, --help output usage information
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
```
|
|
382
|
+
Usage: short team [command] [options]
|
|
383
|
+
|
|
384
|
+
view a team or list its stories
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
Commands:
|
|
388
|
+
|
|
389
|
+
view <idOrName> view a team by id or name
|
|
390
|
+
stories <idOrName> list stories for a team by id or name
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
View a team:
|
|
394
|
+
|
|
395
|
+
```sh
|
|
396
|
+
npx short team test-team
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
List team stories:
|
|
400
|
+
|
|
401
|
+
```sh
|
|
402
|
+
npx short team stories test-team
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### Labels
|
|
406
|
+
|
|
407
|
+
```
|
|
408
|
+
Usage: short labels [options]
|
|
409
|
+
|
|
410
|
+
Display labels available for stories and epics
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
Options:
|
|
414
|
+
|
|
415
|
+
-a, --archived List labels including archived
|
|
416
|
+
-s, --search [query] List labels with name containing query
|
|
417
|
+
-h, --help output usage information
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
```
|
|
421
|
+
Usage: short label [command] [options]
|
|
422
|
+
|
|
423
|
+
create labels or view stories for a label
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
Commands:
|
|
427
|
+
|
|
428
|
+
create create a new label
|
|
429
|
+
update <idOrName> update an existing label
|
|
430
|
+
epics <idOrName> list epics for a label by id or name
|
|
431
|
+
stories <idOrName> list stories for a label by id or name
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
Create a label:
|
|
435
|
+
|
|
436
|
+
```
|
|
437
|
+
Usage: short label create [options]
|
|
438
|
+
|
|
439
|
+
Options:
|
|
440
|
+
|
|
441
|
+
-n, --name [text] Set name of label, required
|
|
442
|
+
-d, --description [text] Set description of label
|
|
443
|
+
-c, --color [hex] Set label color in hex format like #3366cc
|
|
444
|
+
-I, --idonly Print only ID of label result
|
|
445
|
+
-h, --help output usage information
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
Update a label:
|
|
449
|
+
|
|
450
|
+
```
|
|
451
|
+
Usage: short label update <idOrName> [options]
|
|
452
|
+
|
|
453
|
+
Options:
|
|
454
|
+
|
|
455
|
+
-n, --name [text] Set name of label
|
|
456
|
+
-d, --description [text] Set description of label
|
|
457
|
+
-c, --color [hex] Set label color in hex format like #3366cc
|
|
458
|
+
-a, --archived Archive label
|
|
459
|
+
-h, --help output usage information
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
List stories for a label:
|
|
463
|
+
|
|
464
|
+
```
|
|
465
|
+
Usage: short label stories <idOrName> [options]
|
|
466
|
+
|
|
467
|
+
Options:
|
|
468
|
+
|
|
469
|
+
-d, --detailed Show more details for each story
|
|
470
|
+
-f, --format [template] Format each story output by template
|
|
471
|
+
-h, --help output usage information
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
List epics for a label:
|
|
475
|
+
|
|
476
|
+
```
|
|
477
|
+
Usage: short label epics <idOrName>
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
Example:
|
|
481
|
+
|
|
482
|
+
```sh
|
|
483
|
+
npx short labels --search client
|
|
484
|
+
npx short label create --name "triage-needed" --color "#3366cc"
|
|
485
|
+
npx short label update triage-needed --description "Queue for manual review"
|
|
486
|
+
npx short label epics client_web
|
|
487
|
+
npx short label stories client_web
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Custom Fields
|
|
491
|
+
|
|
492
|
+
```
|
|
493
|
+
Usage: short custom-fields [options]
|
|
494
|
+
|
|
495
|
+
Display custom fields available for stories
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
Options:
|
|
499
|
+
|
|
500
|
+
-d, --disabled List custom fields including disabled
|
|
501
|
+
-s, --search [query] List custom fields with name containing query
|
|
502
|
+
-h, --help output usage information
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
```
|
|
506
|
+
Usage: short custom-field <id> [options]
|
|
507
|
+
|
|
508
|
+
view a custom field by id
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
Example:
|
|
512
|
+
|
|
513
|
+
```sh
|
|
514
|
+
npx short custom-fields --search priority
|
|
515
|
+
npx short custom-field 123e4567-e89b-12d3-a456-426614174000
|
|
516
|
+
```
|
|
517
|
+
|
|
309
518
|
### Epics
|
|
310
519
|
|
|
311
520
|
```
|
|
@@ -321,12 +530,49 @@ Comment: This is a comment
|
|
|
321
530
|
-d, --detailed List more details for each epic
|
|
322
531
|
-f, --format [template] Format epic output by template
|
|
323
532
|
-M, --milestone [ID] List only epics with the given milestone ID
|
|
533
|
+
--objectives [id|name] List epics linked to objective id/name, comma-separated
|
|
324
534
|
-t, --title [query] List epics with name/title containing query
|
|
325
535
|
-s, --started List epics that have been started
|
|
326
536
|
-h, --help output usage information
|
|
327
537
|
```
|
|
328
538
|
|
|
329
|
-
|
|
539
|
+
Example:
|
|
540
|
+
|
|
541
|
+
```sh
|
|
542
|
+
npx short epics --objectives "Our first Tactical Objective"
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
#### Epic Commands
|
|
546
|
+
|
|
547
|
+
```
|
|
548
|
+
Usage: short epic [command] [options]
|
|
549
|
+
|
|
550
|
+
create, view, or update epics
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
Commands:
|
|
554
|
+
|
|
555
|
+
create create a new epic
|
|
556
|
+
view <id> view an epic by id
|
|
557
|
+
update <id> update an existing epic
|
|
558
|
+
stories <id> list stories in an epic
|
|
559
|
+
comments <id> list comments on an epic
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
You can use `short epic` to create, view, or update a single epic.
|
|
563
|
+
|
|
564
|
+
View an epic:
|
|
565
|
+
|
|
566
|
+
```
|
|
567
|
+
Usage: short epic view <id> [options]
|
|
568
|
+
|
|
569
|
+
Options:
|
|
570
|
+
|
|
571
|
+
-O, --open Open epic in browser
|
|
572
|
+
-h, --help output usage information
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
Create an epic:
|
|
330
576
|
|
|
331
577
|
```
|
|
332
578
|
Usage: short epic create [options]
|
|
@@ -344,11 +590,70 @@ Comment: This is a comment
|
|
|
344
590
|
-o, --owners [id|name] Set owners of epic, comma-separated
|
|
345
591
|
-T, --team [id|name] Set team of epic
|
|
346
592
|
-l, --label [id|name] Set labels of epic, comma-separated
|
|
593
|
+
-M, --milestone [id] Set milestone of epic (deprecated, use objectives)
|
|
594
|
+
--objectives [id|name] Set objectives of epic, comma-separated
|
|
347
595
|
-I, --idonly Print only ID of epic result
|
|
348
596
|
-O, --open Open epic in browser
|
|
349
597
|
-h, --help output usage information
|
|
350
598
|
```
|
|
351
599
|
|
|
600
|
+
Update an epic:
|
|
601
|
+
|
|
602
|
+
```
|
|
603
|
+
Usage: short epic update <id> [options]
|
|
604
|
+
|
|
605
|
+
Options:
|
|
606
|
+
|
|
607
|
+
-n, --name [text] Set name of epic
|
|
608
|
+
-d, --description [text] Set description of epic
|
|
609
|
+
-s, --state [name] Set state of epic (to do, in progress, done)
|
|
610
|
+
--deadline [date] Set deadline for epic (YYYY-MM-DD)
|
|
611
|
+
--planned-start [date] Set planned start date (YYYY-MM-DD)
|
|
612
|
+
-o, --owners [id|name] Set owners of epic, comma-separated
|
|
613
|
+
-T, --team [id|name] Set team of epic
|
|
614
|
+
-l, --label [id|name] Set labels of epic, comma-separated
|
|
615
|
+
-M, --milestone [id] Set milestone of epic (deprecated, use objectives)
|
|
616
|
+
--objectives [id|name] Set objectives of epic, comma-separated
|
|
617
|
+
-a, --archived Archive epic
|
|
618
|
+
-O, --open Open epic in browser
|
|
619
|
+
-h, --help output usage information
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
List stories in an epic:
|
|
623
|
+
|
|
624
|
+
```
|
|
625
|
+
Usage: short epic stories <id> [options]
|
|
626
|
+
|
|
627
|
+
Options:
|
|
628
|
+
|
|
629
|
+
-d, --detailed Show more details for each story
|
|
630
|
+
-f, --format [template] Format each story output by template
|
|
631
|
+
-h, --help output usage information
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
Example:
|
|
635
|
+
|
|
636
|
+
```sh
|
|
637
|
+
npx short epic stories 36
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
List comments on an epic:
|
|
641
|
+
|
|
642
|
+
```
|
|
643
|
+
Usage: short epic comments <id> [options]
|
|
644
|
+
|
|
645
|
+
Options:
|
|
646
|
+
|
|
647
|
+
-d, --detailed Show nested replies for each comment
|
|
648
|
+
-h, --help output usage information
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
Example:
|
|
652
|
+
|
|
653
|
+
```sh
|
|
654
|
+
npx short epic comments 16
|
|
655
|
+
```
|
|
656
|
+
|
|
352
657
|
#### Epic Output Formatting
|
|
353
658
|
|
|
354
659
|
Templating variables:
|
|
@@ -357,6 +662,7 @@ Templating variables:
|
|
|
357
662
|
%id Print ID of epic
|
|
358
663
|
%t Print title/name of epic
|
|
359
664
|
%m Print milestone of epic
|
|
665
|
+
%obj Print linked objectives of epic
|
|
360
666
|
%s Print epic state
|
|
361
667
|
%dl Print epic deadline
|
|
362
668
|
%d Print epic description
|
|
@@ -364,11 +670,104 @@ Templating variables:
|
|
|
364
670
|
%ps Print epic total points started
|
|
365
671
|
%pd Print epic total points done
|
|
366
672
|
%c Print epic total completion percentage
|
|
367
|
-
%
|
|
673
|
+
%ar Print archived status of epic
|
|
368
674
|
%st Print started status of epic
|
|
369
675
|
%co Print completed status of epic
|
|
370
676
|
```
|
|
371
677
|
|
|
678
|
+
### Objectives
|
|
679
|
+
|
|
680
|
+
```
|
|
681
|
+
Usage: short objectives [options] [SEARCH OPERATORS]
|
|
682
|
+
|
|
683
|
+
List and search Shortcut objectives. By default, lists all objectives.
|
|
684
|
+
Passing search operators will use the Shortcut objective search API and
|
|
685
|
+
page through all results.
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
Options:
|
|
689
|
+
|
|
690
|
+
-a, --archived List only objectives including archived
|
|
691
|
+
-c, --completed List only objectives that have been completed
|
|
692
|
+
-d, --detailed List more details for each objective
|
|
693
|
+
-f, --format [template] Format each objective output by template
|
|
694
|
+
-s, --started List objectives that have been started
|
|
695
|
+
-S, --state [state] Filter objectives by state
|
|
696
|
+
-t, --title [query] Filter objectives with name/title containing query
|
|
697
|
+
-h, --help output usage information
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
#### Objective Commands
|
|
701
|
+
|
|
702
|
+
```
|
|
703
|
+
Usage: short objective [command] [options]
|
|
704
|
+
|
|
705
|
+
view, create, or update objectives
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
Commands:
|
|
709
|
+
|
|
710
|
+
view <id> view an objective by id
|
|
711
|
+
create create a new objective
|
|
712
|
+
update <id> update an existing objective
|
|
713
|
+
epics <id> list epics in an objective
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
You can use `short objective` to view, create, or update a single objective.
|
|
717
|
+
|
|
718
|
+
View an objective:
|
|
719
|
+
|
|
720
|
+
```
|
|
721
|
+
Usage: short objective view <id> [options]
|
|
722
|
+
|
|
723
|
+
Options:
|
|
724
|
+
|
|
725
|
+
-O, --open Open objective in browser
|
|
726
|
+
-h, --help output usage information
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
You can also view an objective directly by ID: `short objective <id>`
|
|
730
|
+
|
|
731
|
+
Create an objective:
|
|
732
|
+
|
|
733
|
+
```
|
|
734
|
+
Usage: short objective create [options]
|
|
735
|
+
|
|
736
|
+
Options:
|
|
737
|
+
|
|
738
|
+
-n, --name [text] Set name of objective, required
|
|
739
|
+
-d, --description [text] Set description of objective
|
|
740
|
+
-s, --state [name] Set state of objective (to do, in progress, done)
|
|
741
|
+
--started-at [date] Set started override (ISO date or YYYY-MM-DD)
|
|
742
|
+
--completed-at [date] Set completed override (ISO date or YYYY-MM-DD)
|
|
743
|
+
-I, --idonly Print only ID of objective result
|
|
744
|
+
-O, --open Open objective in browser
|
|
745
|
+
-h, --help output usage information
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
Update an objective:
|
|
749
|
+
|
|
750
|
+
```
|
|
751
|
+
Usage: short objective update <id> [options]
|
|
752
|
+
|
|
753
|
+
Options:
|
|
754
|
+
|
|
755
|
+
-n, --name [text] Set name of objective
|
|
756
|
+
-d, --description [text] Set description of objective
|
|
757
|
+
-s, --state [name] Set state of objective (to do, in progress, done)
|
|
758
|
+
--started-at [date] Set started override (ISO date or YYYY-MM-DD)
|
|
759
|
+
--completed-at [date] Set completed override (ISO date or YYYY-MM-DD)
|
|
760
|
+
-a, --archived Archive objective
|
|
761
|
+
-O, --open Open objective in browser
|
|
762
|
+
-h, --help output usage information
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
List epics in an objective:
|
|
766
|
+
|
|
767
|
+
```
|
|
768
|
+
Usage: short objective epics <id>
|
|
769
|
+
```
|
|
770
|
+
|
|
372
771
|
### Iterations
|
|
373
772
|
|
|
374
773
|
```
|
|
@@ -631,6 +1030,18 @@ Delete a doc:
|
|
|
631
1030
|
|
|
632
1031
|
## Development
|
|
633
1032
|
|
|
1033
|
+
Install dependencies first:
|
|
1034
|
+
|
|
1035
|
+
```sh
|
|
1036
|
+
pnpm install
|
|
1037
|
+
```
|
|
1038
|
+
|
|
1039
|
+
Build the CLI:
|
|
1040
|
+
|
|
1041
|
+
```sh
|
|
1042
|
+
pnpm run build
|
|
1043
|
+
```
|
|
1044
|
+
|
|
634
1045
|
You can use TypeScript watcher which will recompile your code automatically:
|
|
635
1046
|
|
|
636
1047
|
```sh
|
|
@@ -643,6 +1054,15 @@ You can run shortcut-cli with TypeScript map enabled:
|
|
|
643
1054
|
pnpm start -- story 1234
|
|
644
1055
|
```
|
|
645
1056
|
|
|
1057
|
+
Run the main checks:
|
|
1058
|
+
|
|
1059
|
+
```sh
|
|
1060
|
+
pnpm test
|
|
1061
|
+
pnpm run test:format
|
|
1062
|
+
pnpm run type-check
|
|
1063
|
+
pnpm run lint
|
|
1064
|
+
```
|
|
1065
|
+
|
|
646
1066
|
## Acknowledgments
|
|
647
1067
|
|
|
648
1068
|
- [Repository for this code](https://github.com/shortcut-cli/shortcut-cli)
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
let debug = require("debug");
|
|
7
|
-
debug = require_rolldown_runtime.__toESM(debug);
|
|
8
|
-
|
|
2
|
+
import client from "../lib/client.js";
|
|
3
|
+
import spinner from "../lib/spinner.js";
|
|
4
|
+
import { Command } from "commander";
|
|
5
|
+
import debugging from "debug";
|
|
9
6
|
//#region src/bin/short-api.ts
|
|
10
|
-
const debug
|
|
7
|
+
const debug = debugging("short-api");
|
|
11
8
|
const log = console.log;
|
|
12
9
|
const logError = console.error;
|
|
13
|
-
const spin =
|
|
10
|
+
const spin = spinner();
|
|
14
11
|
const parseKeyVal = (input, separator = "=") => {
|
|
15
12
|
const parts = input.split(separator);
|
|
16
13
|
return [parts.shift() ?? "", parts.join(separator)];
|
|
@@ -19,7 +16,7 @@ const collect = (val, memo) => {
|
|
|
19
16
|
memo.push(val);
|
|
20
17
|
return memo;
|
|
21
18
|
};
|
|
22
|
-
const program = new
|
|
19
|
+
const program = new Command().description("Make a request to the Shortcut API.").arguments("<path>").option("-X, --method <method>", "The HTTP method to use.", "GET").option("-H, --header <header>", "Add a header to the request (e.g., \"Content-Type: application/json\"). Can be specified multiple times.", collect, []).option("-f, --raw-field <key=value>", "Add a string parameter. Can be specified multiple times.", collect, []).on("--help", () => {
|
|
23
20
|
log("");
|
|
24
21
|
log("Examples:");
|
|
25
22
|
log(` $ short api /search/iterations -f page_size=10 -f query=123`);
|
|
@@ -41,12 +38,12 @@ const main = async () => {
|
|
|
41
38
|
if (opts.header) opts.header.forEach((h) => {
|
|
42
39
|
const [key, value] = parseKeyVal(h, ":");
|
|
43
40
|
headers[key] = value;
|
|
44
|
-
debug
|
|
41
|
+
debug(`adding header: ${key}: ${value}`);
|
|
45
42
|
});
|
|
46
43
|
if (opts.rawField) opts.rawField.forEach((f) => {
|
|
47
44
|
const [key, value] = parseKeyVal(f);
|
|
48
45
|
params[key] = value;
|
|
49
|
-
debug
|
|
46
|
+
debug(`adding raw field: ${key}: ${value}`);
|
|
50
47
|
});
|
|
51
48
|
const requestOptions = {
|
|
52
49
|
path: "/api/v3" + (path.startsWith("/") ? "" : "/") + path,
|
|
@@ -62,9 +59,9 @@ const main = async () => {
|
|
|
62
59
|
if (!headers["Content-Type"]) headers["Content-Type"] = "application/json";
|
|
63
60
|
} else requestOptions.query = params;
|
|
64
61
|
try {
|
|
65
|
-
debug
|
|
62
|
+
debug("request options:", requestOptions);
|
|
66
63
|
spin.start();
|
|
67
|
-
const response = await
|
|
64
|
+
const response = await client.request(requestOptions);
|
|
68
65
|
spin.stop(true);
|
|
69
66
|
log(JSON.stringify(response.data, null, 2));
|
|
70
67
|
} catch (err) {
|
|
@@ -75,5 +72,5 @@ const main = async () => {
|
|
|
75
72
|
}
|
|
76
73
|
};
|
|
77
74
|
main();
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
//#endregion
|
|
76
|
+
export {};
|