@shortcut-cli/shortcut-cli 3.8.1 → 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 CHANGED
@@ -4,7 +4,7 @@
4
4
  [![GitHub License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/shortcut-cli/shortcut-cli/blob/main/LICENSE)
5
5
  [![PRs welcome!](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)]()
6
6
 
7
- This is a community-driven command line interface for [Shortcut](https://shortcut.com), focused on the display and manipulation of stories. With this, you can run custom searches, save them as local workspaces, and recall those workspaces. You can also view full stories, update most attributes on a story, and create brand new stories quickly.
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,12 @@ 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)
23
+ - [Iterations](#iterations)
19
24
  - [Docs](#docs)
20
25
  - [Workflows](#workflows)
21
26
  - [Projects](#projects)
@@ -30,7 +35,7 @@ This is a community-driven command line interface for [Shortcut](https://shortcu
30
35
  Install via npm:
31
36
 
32
37
  ```sh
33
- npm install @shortcut-cli/shortcut-cli -g
38
+ npm install -g @shortcut-cli/shortcut-cli
34
39
  short install
35
40
  ```
36
41
 
@@ -83,14 +88,25 @@ short story 3300
83
88
 
84
89
  install install and configure API access
85
90
  search search stories with optional query
91
+ find [DEPRECATED] search stories with optional query
86
92
  members list members
87
- story view or manipulate a story or stories
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
88
100
  create create a story
89
101
  workflows list workflows and their states
90
102
  epics list epics and their states
103
+ iterations list iterations
104
+ iteration view, create, update, or delete an iteration
105
+ objectives list objectives and their states
106
+ objective view, create, or update objectives
91
107
  docs list and search docs
92
108
  doc view, create, update, or delete a doc
93
- projects list or search projects
109
+ projects list projects and their states
94
110
  workspace list stories matching saved workspace query
95
111
  api make a request to the Shortcut API
96
112
  help [cmd] display help for [cmd]
@@ -99,7 +115,7 @@ short story 3300
99
115
  ### Search
100
116
 
101
117
  ```
102
- Usage: short find [options] [SEARCH OPERATORS]
118
+ Usage: short search [options] [SEARCH OPERATORS]
103
119
 
104
120
  Search through Shortcut stories. Arguments (non-flag/options) will
105
121
  be passed to Shortcut story search API as search operators. Passing '%self%' as
@@ -194,6 +210,7 @@ The default sorting for stories found is `state.position:asc,position:asc`, whic
194
210
 
195
211
  Options:
196
212
 
213
+ -a, --archived Update story as archived
197
214
  -I, --idonly Print only ID of story results
198
215
  -s, --state [id|name] Update workflow state of story
199
216
  -e, --estimate [number] Update estimate of story
@@ -213,12 +230,17 @@ The default sorting for stories found is `state.position:asc,position:asc`, whic
213
230
  --move-down [n] Move story position downward by n stories
214
231
  --move-up [n] Move story position upward by n stories
215
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
216
236
  -o, --owners [id|name] Update owners of story, comma-separated
217
237
  -O, --open Open story in browser
218
238
  --oe, --open-epic Open story's epic in browser
219
239
  --oi, --open-iteration Open story's iteration in browser
220
240
  --op, --open-project Open story's project in browser
221
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
222
244
  -t, --title [text] Update title of story
223
245
  --task [text] Create new task on story
224
246
  --task-complete [text] Toggle completion of story task matching text
@@ -226,6 +248,44 @@ The default sorting for stories found is `state.position:asc,position:asc`, whic
226
248
  -h, --help output usage information
227
249
  ```
228
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
+
229
289
  Example output:
230
290
 
231
291
  ```
@@ -264,7 +324,7 @@ Comment: This is a comment
264
324
  -T, --team [id|name] Set team of story
265
325
  -t, --title [text] Set title of story, required
266
326
  -s, --state [id|name] Set workflow state of story, required if --project is not set
267
- -y, --type [name] Set type of story, default: feature
327
+ -y, --type <name> Set type of story (feature, bug, chore; default: feature)
268
328
  -h, --help output usage information
269
329
  --git-branch Checkout git branch from story slug <mention-name>/ch<id>/<type>-<title>
270
330
  as required by the Git integration: https://bit.ly/2RKO1FF
@@ -303,6 +363,158 @@ Comment: This is a comment
303
363
  -h, --help output usage information
304
364
  ```
305
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
+
306
518
  ### Epics
307
519
 
308
520
  ```
@@ -318,12 +530,49 @@ Comment: This is a comment
318
530
  -d, --detailed List more details for each epic
319
531
  -f, --format [template] Format epic output by template
320
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
321
534
  -t, --title [query] List epics with name/title containing query
322
535
  -s, --started List epics that have been started
323
536
  -h, --help output usage information
324
537
  ```
325
538
 
326
- #### Epic Creation
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:
327
576
 
328
577
  ```
329
578
  Usage: short epic create [options]
@@ -341,11 +590,70 @@ Comment: This is a comment
341
590
  -o, --owners [id|name] Set owners of epic, comma-separated
342
591
  -T, --team [id|name] Set team of epic
343
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
344
595
  -I, --idonly Print only ID of epic result
345
596
  -O, --open Open epic in browser
346
597
  -h, --help output usage information
347
598
  ```
348
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
+
349
657
  #### Epic Output Formatting
350
658
 
351
659
  Templating variables:
@@ -354,6 +662,7 @@ Templating variables:
354
662
  %id Print ID of epic
355
663
  %t Print title/name of epic
356
664
  %m Print milestone of epic
665
+ %obj Print linked objectives of epic
357
666
  %s Print epic state
358
667
  %dl Print epic deadline
359
668
  %d Print epic description
@@ -361,11 +670,220 @@ Templating variables:
361
670
  %ps Print epic total points started
362
671
  %pd Print epic total points done
363
672
  %c Print epic total completion percentage
364
- %a Print archived status of epic
673
+ %ar Print archived status of epic
365
674
  %st Print started status of epic
366
675
  %co Print completed status of epic
367
676
  ```
368
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
+
771
+ ### Iterations
772
+
773
+ ```
774
+ Usage: short iterations [options]
775
+
776
+ Display iterations available for stories
777
+
778
+
779
+ Options:
780
+
781
+ -S, --status [status] Filter by status (unstarted, started, done)
782
+ -T, --team [id|name] Filter by team/group id or name
783
+ -C, --current Show only current/active iterations
784
+ -t, --title [query] Filter iterations with name containing query
785
+ -d, --detailed Show more details for each iteration
786
+ -f, --format [template] Format each iteration output by template
787
+ -h, --help output usage information
788
+ ```
789
+
790
+ #### Iteration View, Create, Update, Delete
791
+
792
+ ```
793
+ Usage: short iteration [command] [options]
794
+
795
+ view, create, update, or delete iterations
796
+
797
+
798
+ Commands:
799
+
800
+ view <id> view an iteration by id
801
+ create create a new iteration
802
+ update <id> update an existing iteration
803
+ delete <id> delete an iteration
804
+ stories <id> list stories in an iteration
805
+ ```
806
+
807
+ View an iteration:
808
+
809
+ ```
810
+ Usage: short iteration view <id> [options]
811
+
812
+ Options:
813
+
814
+ -O, --open Open iteration in browser
815
+ -h, --help output usage information
816
+ ```
817
+
818
+ Create an iteration:
819
+
820
+ ```
821
+ Usage: short iteration create [options]
822
+
823
+ Options:
824
+
825
+ -n, --name [text] Set name of iteration (required)
826
+ -d, --description [text] Set description of iteration
827
+ --start-date [date] Set start date (YYYY-MM-DD, required)
828
+ --end-date [date] Set end date (YYYY-MM-DD, required)
829
+ -T, --team [id|name] Set team/group of iteration
830
+ -I, --idonly Print only ID of iteration result
831
+ -O, --open Open iteration in browser
832
+ -h, --help output usage information
833
+ ```
834
+
835
+ Update an iteration:
836
+
837
+ ```
838
+ Usage: short iteration update <id> [options]
839
+
840
+ Options:
841
+
842
+ -n, --name [text] Set name of iteration
843
+ -d, --description [text] Set description of iteration
844
+ --start-date [date] Set start date (YYYY-MM-DD)
845
+ --end-date [date] Set end date (YYYY-MM-DD)
846
+ -T, --team [id|name] Set team/group of iteration
847
+ -O, --open Open iteration in browser
848
+ -h, --help output usage information
849
+ ```
850
+
851
+ Delete an iteration:
852
+
853
+ ```
854
+ Usage: short iteration delete <id>
855
+ ```
856
+
857
+ List stories in an iteration:
858
+
859
+ ```
860
+ Usage: short iteration stories <id> [options]
861
+
862
+ Options:
863
+
864
+ -f, --format [template] Format each story output by template
865
+ -h, --help output usage information
866
+ ```
867
+
868
+ #### Iteration Output Formatting
869
+
870
+ Templating variables:
871
+
872
+ ```
873
+ %id Print ID of iteration
874
+ %t Print title/name of iteration
875
+ %s Print iteration status
876
+ %start Print iteration start date
877
+ %end Print iteration end date
878
+ %teams Print teams assigned to iteration
879
+ %stories Print total number of stories
880
+ %done Print number of completed stories
881
+ %points Print total points
882
+ %pdone Print completed points
883
+ %completion Print completion percentage
884
+ %url Print URL of iteration
885
+ ```
886
+
369
887
  ### Docs
370
888
 
371
889
  ```
@@ -512,16 +1030,37 @@ Delete a doc:
512
1030
 
513
1031
  ## Development
514
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
+
515
1045
  You can use TypeScript watcher which will recompile your code automatically:
516
1046
 
517
1047
  ```sh
518
- npm run build:watch
1048
+ pnpm run build:watch
519
1049
  ```
520
1050
 
521
1051
  You can run shortcut-cli with TypeScript map enabled:
522
1052
 
523
1053
  ```sh
524
- npm start -- story 1234
1054
+ pnpm start -- story 1234
1055
+ ```
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
525
1064
  ```
526
1065
 
527
1066
  ## Acknowledgments