cli_doc 0.1.2

Documentation generator for CLI
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="generator" content="cli-doc 0.1.1" />
    <link rel="icon" type="image/x-icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABeCAYAAAC5BeOaAAAACXBIWXMAAA3nAAAN5wGZFKomAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABN9JREFUeNrtnG9oVXUYxz/PvHObZrWWGsuwWkWT2uhVf/bCQlKMsj9vo39kFjoKIhAMkuiNBb7JysV60SRchCj4ohiVmo0MKVqQXg2WM2VabMNkc5tz9+nF+cVy7Xbv7j33/LvPF35wOefcc3773N/v+3ue55wzUVVM/qvCEBhYA2sysAbWwJoMrIGNoVKlvoCI3AvMB0ZU9VC5gJVSZ14ikgZuB46paqNZgSmaViAiVwK3OBsAWCAijwGDwElV/d2sIH+YC4F1wOPAXTlmxDngMPAlsFtVf0sUWVUtujmArwIjgBbQMsBOP/oSlZbyYZRWAB8DTxVzGuCEWcHlYFuBbUX2IwM0qGqfRQVTo3Vjlt0TwBfOSwEGgDZgP/DHtGO7kgS1aI918elMnjkELHPHpN229LTvNgDrge+AR5Pkr3547KIs2w+o6tEcP2gv8IFrliBM01CW7c0iUmNFmMLVB4zNsP1mYJ+I3GlgC/PnYWBPlt33AD3OSw1sAdrk0tRs5690n28QkY0iUmfVrfzDrvuA3cDiPA4fBTqBbarak1iyfoUXQD2wd5ap7C5gadJCLVX1vx7rRu9m4EGXqubSsItj95kV5Ae4EdgArAWqchw+BqxU1W8NbP6A/7mDkMmxWB4F7tCEPEwW5B2EX4HlwJEs+5cBTRZuFbZQHnTxbTrLIY0G1pvmtSJSW0BS0ZVld8rATk3f0yLykYisEJE5efwYVcCKLLtPJQWsHyNkHvC8awMi0o1XCjwCnPzXNWpEZB3QCsxUQzgPfG9RgTf6WoBun/ryhqq+ZVbgr74B3klSglCsFYznEZ/mUgfQqqrjs5gpS/KsSxSii8BxVb0Yaq0AWAq87ixhIs8awRCwE7h7lte6Hviawm6xz6YNAs9Eplbg7hrcileDXQTUAq8BdcBZ4GWXKPyiqpOzPHcK+AFoDirsBh5W1c9DrW79zyib8WZiAedZGcBInd66Cu1vnB6KuzGEa94U96ggHx2L0zWDSCG3Oo8dLPI83S4sWx4Q1AlgS2hRQZANuBrYgVe/LaW3poFVkbqDEEi66NUbFpdoxp1T1aFQU1pTMhYvA2sysAbWwJoMrIE1sCbfawXyItcitKDMDf2vUkap5qC+y/nQskNfHuN8iUdQOpl6vTMKGkBYo20ciiVYeZr51HAar0ASNfVSz226mUz8PLaa5ohCBWignyXxXLzm0I9Xaouixhgtug4cDljdTh9ejTSK2qo7GInv4vUmKfpZj7IKiUBUABdQ9tBOh2o4s8nqsZYgGFiTgTWwBtbkyZcijGzgOi7xPrAaiMLr9MMIu5jLK2EVYooesSIIl9gLPBERqABXoDzLOB1hdaD4IswLNFHBzxGdkUolC/W94NNaPzy2MsJWJ4yH84pT8WD/ogc4HlGw+7X9P/8xKR5g9TMmUdagHI6UBcBXwJOx9djLTtZKHRmuChXpBMo4f4ZV1SoJWJMlCAbWwJoMbGxqBQCylmtI0YJSXYLgKYPQox/SGxewfj2w8RDKp8CCEvY1g/C2trGpLMC6BzZO4b3eGYR5PaDbOZB8j51HU2BQvXF7f3ksXpOcDbjPZ8oCrLZzAvgkoP72UkVn+UQF9TzHGX5CWY2UxBYuoPxIhi1hPppptQJLEAysycAaWANrMrAGNun6G7tgGklbFFTHAAAAAElFTkSuQmCC">
    <title>hq: CLI doc</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
            background: #fafafa;
            color: #333;
            line-height: 1.5;
        }

        .container {
            max-width: 1200px;
            margin: 0 auto;
            min-height: 100vh;
            padding: 20px;
        }

        .header {
            background: white;
            border: 1px solid #e1e1e1;
            border-radius: 6px;
            padding: 16px;
            margin-bottom: 10px;
        }

        .search-container {;
            display: flex;
            gap: 8px;
            align-items: center;
            position: relative;
        }

        .search-input {
            flex: 1;
            padding: 8px 12px;
            border: 1px solid #d1d1d1;
            border-radius: 4px;
            font-size: 14px;
        }

        .search-input:focus {
            outline: none;
            border-color: #007acc;
        }

        .btn {
            padding: 8px 16px;
            border: 1px solid #d1d1d1;
            border-radius: 4px;
            background: white;
            font-size: 14px;
            cursor: pointer;
        }

        .btn:hover {
            background: #f5f5f5;
        }

        .btn-primary {
            background: #007acc;
            color: white;
            border-color: #007acc;
        }

        .btn-primary:hover {
            background: #005a9e;
        }

        .main-content {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 20px;
            height: calc(100vh - 146px);
        }

        .column {
            background: white;
            border: 1px solid #e1e1e1;
            border-radius: 6px;
            overflow: hidden;
        }

        .column-header {
            padding: 12px 16px;
            background: #f8f8f8;
            border-bottom: 1px solid #e1e1e1;
            font-weight: 600;
            font-size: 14px;
            text-transform: uppercase;
            letter-spacing: 0.5px;
            color: #666;
        }

        .column-content {
            padding: 16px;
            height: calc(100% - 65px);
            overflow-y: auto;
        }

        .info-section {
            margin-bottom: 16px;
            padding: 12px;
            border: 1px solid #e8e8e8;
            border-radius: 4px;
            background: #fafafa;
        }

        .info-header {
            font-weight: 600;
            font-size: 12px;
            text-transform: uppercase;
            letter-spacing: 0.5px;
            color: #666;
            margin-bottom: 8px;
            cursor: pointer;
            display: flex;
            align-items: center;
            justify-content: space-between;
        }

        .info-content {
            font-size: 13px;
            line-height: 1.4;
            color: #555;
        }

        .info-brief {
            font-style: italic;
            color: #777;
        }

        .command-text {
            flex: 1;
        }

        .command-signature {
            font-family: 'Monaco', 'Courier New', monospace;
            background: white;
            padding: 8px;
            border-radius: 3px;
            border: 1px solid #e1e1e1;
            margin: 8px 0;
            font-size: 13px;
        }

        .argument-item {
            margin: 6px 0;
            padding: 8px;
            background: white;
            border: 1px solid #f0f0f0;
            border-radius: 3px;
            cursor: pointer;
        }

        .argument-item:hover {
            border-color: #d1d1d1;
            background: #f9f9f9;
        }

        .argument-name {
            font-family: 'Monaco', 'Courier New', monospace;
            font-weight: 600;
            color: #d73a49;
            font-size: 13px;
        }

        .argument-description {
            color: #666;
            font-size: 12px;
            margin-top: 2px;
        }

        .option-header {
            display: flex;
            color: #aaa;
            justify-content: space-between;
            align-items: flex-start;
        }

        .option-main {
            flex: 1;
        }
        .non-expanding-text {
            padding-left: 1.5em;
        }

        .expand-triangle {
            width: 16px;
            height: 16px;
            margin-right: 3px;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            font-size: 12px;
            transition: transform 0.2s ease;
            flex-shrink: 0;
        }

        .expand-triangle:hover {
            color: #333;
        }

        .expand-triangle.expanded {
            transform: rotate(90deg);
        }

        .tree-item {
            padding: 8px 12px;
            margin: 2px 0;
            cursor: pointer;
            border-radius: 4px;
            font-family: 'Monaco', 'Courier New', monospace;
            font-size: 14px;
            position: relative;
            border: 1px solid transparent;
            transition: all 0.15s ease;
            display: flex;
            align-items: center;
            user-select: none;
        }

        .tree-item:hover {
            background: #f0f0f0;
            border-color: #d1d1d1;
        }

        .tree-item.selected {
            background: #007acc;
            color: white !important;
        }

        .tree-item.level-0 {
            font-weight: 600;
            margin-bottom: 4px;
        }

        .tree-item.level-1 {
            margin-left: 16px;
            color: #666;
        }

        .tree-item.level-2 {
            margin-left: 32px;
            color: #888;
            font-size: 13px;
        }

        .tree-children {
            display: none;
        }

        .tree-children.expanded {
            display: block;
        }

        .hidden {
            display: none;
        }


        .option-item {
            padding: 12px;
            margin: 4px 0;
            /*border: 1px solid #f0f0f0;*/
            /*border-radius: 4px;*/
        }

        .option-item:nth-child(even) {
            background-color: #f2f2f2;
        }

        .option-item-expandable {
            cursor: pointer;
            transition: all 0.15s ease;
            /*border: 1px solid #f0f0f0;*/
            /*border-radius: 4px;*/
        }


        .option-item:hover {
            border-color: #d1d1d1;
            background: #e5e5e5;
        }

        .option-name {
            font-family: 'Monaco', 'Courier New', monospace;
            font-weight: 600;
            font-size: 14px;
            color: #007acc;
        }

        .option-description {
            color: #666;
            font-size: 13px;
            margin-top: 4px;
        }

        .option-full-doc {
            margin-top: 8px;
            /*border-radius: 4px;*/
            font-size: 13px;
            display: none;
        }

        .option-full-doc.expanded {
            display: block;
        }

        .option-short {
            color: #ac7acc;
        }

        .no-selection {
            text-align: center;
            color: #999;
            font-style: italic;
            margin-top: 40px;
        }

        .usage-option {
            color: #ac7acc;
        }

        .usage-argument {
            color: #d73a49;;
        }

        .rich-text ul {
            margin: 0;
            padding: 0 0 0 1em;
        }

        .rt-config {
            font-weight: bold;
        }

        .rt-config-value {
            font-style: italic;
        }

        .version {
            color: #999;
            font-family: 'Monaco', 'Courier New', monospace;
            text-align: right;
            font-size: 16px;
        }

        .search-results-widget {
            position: absolute;
            top: 100%;
            right: 0;
            background: white;
            border: 1px solid #d1d1d1;
            border-radius: 4px;
            padding: 8px 12px;
            margin-top: 4px;
            display: none;
            box-shadow: 0 2px 8px rgba(0,0,0,0.1);
            z-index: 1000;
        }

        .search-results-widget.visible {
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .search-counter {
            font-size: 12px;
            color: #666;
            font-weight: 500;
            min-width: 30px;
        }

        .search-nav-buttons {
            display: flex;
            gap: 2px;
        }

        .search-nav-btn {
            padding: 4px 6px;
            border: 1px solid #d1d1d1;
            border-radius: 3px;
            background: white;
            font-size: 12px;
            cursor: pointer;
            display: flex;
            align-items: center;
            justify-content: center;
            width: 24px;
            height: 24px;
        }

        .search-nav-btn:hover:not(:disabled) {
            background: #f5f5f5;
        }

        .search-nav-btn:disabled {
            opacity: 0.5;
            cursor: not-allowed;
        }

        .search-highlight-command {
            background-color: #ffccaa !important;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="header">
        <div class="search-container">
            <input type="text" class="search-input" placeholder="Search commands..." id="searchInput" oninput="resetSearch()">
            <button class="btn btn-primary" onclick="performSearch()">Search</button>

            <div class="search-results-widget" id="searchWidget">
                <div class="search-counter" id="searchCounter">1/4</div>
                <div class="search-nav-buttons">
                    <button class="search-nav-btn" id="searchPrev" onclick="navigateSearch(-1)" title="Previous result">↑</button>
                    <button class="search-nav-btn" id="searchNext" onclick="navigateSearch(1)" title="Next result">↓</button>
                    <button class="search-nav-btn" onclick="resetSearch()" title="Clear search">×</button>
                </div>
            </div>
        </div>
    </div>

    <div class="version">
    hyperqueue 0.22.0-dev
    </div>

    <div class="main-content">
        <div class="column">
            <div class="column-header">Commands</div>
            <div class="column-content" id="commandTree">
                <div id="node-c0" class="tree-item level-0 selected expanded" onclick="selectCommand('c0', this)" data-command="0"><div id="triangle-c0" class="expand-triangle expanded" onclick='toggleEvent(event, "c0")'>▶</div>
    <div class="command-text">hq</div></div>
<div class="tree-item-children ">

    <div id="node-c1" class="tree-item level-1 " onclick="selectCommand('c1', this)" data-command="1"><div id="triangle-c1" class="expand-triangle " onclick='toggleEvent(event, "c1")'>▶</div>
    <div class="command-text">server</div></div>
<div class="tree-item-children hidden">

    <div id="node-c2" class="tree-item level-2 " onclick="selectCommand('c2', this)" data-command="2"><div class="command-text non-expanding-text">start</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c3" class="tree-item level-2 " onclick="selectCommand('c3', this)" data-command="3"><div class="command-text non-expanding-text">stop</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c4" class="tree-item level-2 " onclick="selectCommand('c4', this)" data-command="4"><div class="command-text non-expanding-text">info</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c5" class="tree-item level-2 " onclick="selectCommand('c5', this)" data-command="5"><div class="command-text non-expanding-text">generate-access</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c6" class="tree-item level-1 " onclick="selectCommand('c6', this)" data-command="6"><div id="triangle-c6" class="expand-triangle " onclick='toggleEvent(event, "c6")'>▶</div>
    <div class="command-text">job</div></div>
<div class="tree-item-children hidden">

    <div id="node-c7" class="tree-item level-2 " onclick="selectCommand('c7', this)" data-command="7"><div class="command-text non-expanding-text">list</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c8" class="tree-item level-2 " onclick="selectCommand('c8', this)" data-command="8"><div class="command-text non-expanding-text">summary</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c9" class="tree-item level-2 " onclick="selectCommand('c9', this)" data-command="9"><div class="command-text non-expanding-text">info</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c10" class="tree-item level-2 " onclick="selectCommand('c10', this)" data-command="10"><div class="command-text non-expanding-text">cancel</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c11" class="tree-item level-2 " onclick="selectCommand('c11', this)" data-command="11"><div class="command-text non-expanding-text">forget</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c12" class="tree-item level-2 " onclick="selectCommand('c12', this)" data-command="12"><div class="command-text non-expanding-text">cat</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c13" class="tree-item level-2 " onclick="selectCommand('c13', this)" data-command="13"><div class="command-text non-expanding-text">submit</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c14" class="tree-item level-2 " onclick="selectCommand('c14', this)" data-command="14"><div class="command-text non-expanding-text">submit-file</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c15" class="tree-item level-2 " onclick="selectCommand('c15', this)" data-command="15"><div class="command-text non-expanding-text">wait</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c16" class="tree-item level-2 " onclick="selectCommand('c16', this)" data-command="16"><div class="command-text non-expanding-text">progress</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c17" class="tree-item level-2 " onclick="selectCommand('c17', this)" data-command="17"><div class="command-text non-expanding-text">task-ids</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c18" class="tree-item level-2 " onclick="selectCommand('c18', this)" data-command="18"><div class="command-text non-expanding-text">open</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c19" class="tree-item level-2 " onclick="selectCommand('c19', this)" data-command="19"><div class="command-text non-expanding-text">close</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c20" class="tree-item level-1 " onclick="selectCommand('c20', this)" data-command="20"><div id="triangle-c20" class="expand-triangle " onclick='toggleEvent(event, "c20")'>▶</div>
    <div class="command-text">task</div></div>
<div class="tree-item-children hidden">

    <div id="node-c21" class="tree-item level-2 " onclick="selectCommand('c21', this)" data-command="21"><div class="command-text non-expanding-text">list</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c22" class="tree-item level-2 " onclick="selectCommand('c22', this)" data-command="22"><div class="command-text non-expanding-text">info</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c23" class="tree-item level-2 " onclick="selectCommand('c23', this)" data-command="23"><div class="command-text non-expanding-text">explain</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c24" class="tree-item level-1 " onclick="selectCommand('c24', this)" data-command="24"><div class="command-text non-expanding-text">submit</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c25" class="tree-item level-1 " onclick="selectCommand('c25', this)" data-command="25"><div id="triangle-c25" class="expand-triangle " onclick='toggleEvent(event, "c25")'>▶</div>
    <div class="command-text">worker</div></div>
<div class="tree-item-children hidden">

    <div id="node-c26" class="tree-item level-2 " onclick="selectCommand('c26', this)" data-command="26"><div class="command-text non-expanding-text">start</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c27" class="tree-item level-2 " onclick="selectCommand('c27', this)" data-command="27"><div class="command-text non-expanding-text">stop</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c28" class="tree-item level-2 " onclick="selectCommand('c28', this)" data-command="28"><div class="command-text non-expanding-text">list</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c29" class="tree-item level-2 " onclick="selectCommand('c29', this)" data-command="29"><div class="command-text non-expanding-text">hwdetect</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c30" class="tree-item level-2 " onclick="selectCommand('c30', this)" data-command="30"><div class="command-text non-expanding-text">info</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c31" class="tree-item level-2 " onclick="selectCommand('c31', this)" data-command="31"><div class="command-text non-expanding-text">address</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c32" class="tree-item level-2 " onclick="selectCommand('c32', this)" data-command="32"><div class="command-text non-expanding-text">wait</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c33" class="tree-item level-2 " onclick="selectCommand('c33', this)" data-command="33"><div class="command-text non-expanding-text">deploy-ssh</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c34" class="tree-item level-1 " onclick="selectCommand('c34', this)" data-command="34"><div id="triangle-c34" class="expand-triangle " onclick='toggleEvent(event, "c34")'>▶</div>
    <div class="command-text">output-log</div></div>
<div class="tree-item-children hidden">

    <div id="node-c35" class="tree-item level-2 " onclick="selectCommand('c35', this)" data-command="35"><div class="command-text non-expanding-text">summary</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c36" class="tree-item level-2 " onclick="selectCommand('c36', this)" data-command="36"><div class="command-text non-expanding-text">jobs</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c37" class="tree-item level-2 " onclick="selectCommand('c37', this)" data-command="37"><div class="command-text non-expanding-text">show</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c38" class="tree-item level-2 " onclick="selectCommand('c38', this)" data-command="38"><div class="command-text non-expanding-text">cat</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c39" class="tree-item level-2 " onclick="selectCommand('c39', this)" data-command="39"><div class="command-text non-expanding-text">export</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c40" class="tree-item level-1 " onclick="selectCommand('c40', this)" data-command="40"><div id="triangle-c40" class="expand-triangle " onclick='toggleEvent(event, "c40")'>▶</div>
    <div class="command-text">alloc</div></div>
<div class="tree-item-children hidden">

    <div id="node-c41" class="tree-item level-2 " onclick="selectCommand('c41', this)" data-command="41"><div class="command-text non-expanding-text">list</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c42" class="tree-item level-2 " onclick="selectCommand('c42', this)" data-command="42"><div class="command-text non-expanding-text">info</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c43" class="tree-item level-2 " onclick="selectCommand('c43', this)" data-command="43"><div id="triangle-c43" class="expand-triangle " onclick='toggleEvent(event, "c43")'>▶</div>
    <div class="command-text">add</div></div>
<div class="tree-item-children hidden">

    <div id="node-c44" class="tree-item level-2 " onclick="selectCommand('c44', this)" data-command="44"><div class="command-text non-expanding-text">pbs</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c45" class="tree-item level-2 " onclick="selectCommand('c45', this)" data-command="45"><div class="command-text non-expanding-text">slurm</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c46" class="tree-item level-2 " onclick="selectCommand('c46', this)" data-command="46"><div class="command-text non-expanding-text">pause</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c47" class="tree-item level-2 " onclick="selectCommand('c47', this)" data-command="47"><div class="command-text non-expanding-text">resume</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c48" class="tree-item level-2 " onclick="selectCommand('c48', this)" data-command="48"><div id="triangle-c48" class="expand-triangle " onclick='toggleEvent(event, "c48")'>▶</div>
    <div class="command-text">dry-run</div></div>
<div class="tree-item-children hidden">

    <div id="node-c49" class="tree-item level-2 " onclick="selectCommand('c49', this)" data-command="49"><div class="command-text non-expanding-text">pbs</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c50" class="tree-item level-2 " onclick="selectCommand('c50', this)" data-command="50"><div class="command-text non-expanding-text">slurm</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c51" class="tree-item level-2 " onclick="selectCommand('c51', this)" data-command="51"><div class="command-text non-expanding-text">remove</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c52" class="tree-item level-1 " onclick="selectCommand('c52', this)" data-command="52"><div id="triangle-c52" class="expand-triangle " onclick='toggleEvent(event, "c52")'>▶</div>
    <div class="command-text">journal</div></div>
<div class="tree-item-children hidden">

    <div id="node-c53" class="tree-item level-2 " onclick="selectCommand('c53', this)" data-command="53"><div class="command-text non-expanding-text">export</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c54" class="tree-item level-2 " onclick="selectCommand('c54', this)" data-command="54"><div class="command-text non-expanding-text">stream</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c55" class="tree-item level-2 " onclick="selectCommand('c55', this)" data-command="55"><div class="command-text non-expanding-text">replay</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c56" class="tree-item level-2 " onclick="selectCommand('c56', this)" data-command="56"><div class="command-text non-expanding-text">prune</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c57" class="tree-item level-2 " onclick="selectCommand('c57', this)" data-command="57"><div class="command-text non-expanding-text">flush</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c58" class="tree-item level-1 " onclick="selectCommand('c58', this)" data-command="58"><div id="triangle-c58" class="expand-triangle " onclick='toggleEvent(event, "c58")'>▶</div>
    <div class="command-text">data</div></div>
<div class="tree-item-children hidden">

    <div id="node-c59" class="tree-item level-2 " onclick="selectCommand('c59', this)" data-command="59"><div class="command-text non-expanding-text">put</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c60" class="tree-item level-2 " onclick="selectCommand('c60', this)" data-command="60"><div class="command-text non-expanding-text">get</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c61" class="tree-item level-1 " onclick="selectCommand('c61', this)" data-command="61"><div id="triangle-c61" class="expand-triangle " onclick='toggleEvent(event, "c61")'>▶</div>
    <div class="command-text">dashboard</div></div>
<div class="tree-item-children hidden">

    <div id="node-c62" class="tree-item level-2 " onclick="selectCommand('c62', this)" data-command="62"><div class="command-text non-expanding-text">stream</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c63" class="tree-item level-2 " onclick="selectCommand('c63', this)" data-command="63"><div class="command-text non-expanding-text">replay</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c64" class="tree-item level-1 " onclick="selectCommand('c64', this)" data-command="64"><div id="triangle-c64" class="expand-triangle " onclick='toggleEvent(event, "c64")'>▶</div>
    <div class="command-text">doc</div></div>
<div class="tree-item-children hidden">

    <div id="node-c65" class="tree-item level-2 " onclick="selectCommand('c65', this)" data-command="65"><div class="command-text non-expanding-text">job</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c66" class="tree-item level-2 " onclick="selectCommand('c66', this)" data-command="66"><div class="command-text non-expanding-text">taskarray</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c67" class="tree-item level-2 " onclick="selectCommand('c67', this)" data-command="67"><div class="command-text non-expanding-text">resources</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c68" class="tree-item level-2 " onclick="selectCommand('c68', this)" data-command="68"><div class="command-text non-expanding-text">worker</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c69" class="tree-item level-2 " onclick="selectCommand('c69', this)" data-command="69"><div class="command-text non-expanding-text">autoalloc</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c70" class="tree-item level-2 " onclick="selectCommand('c70', this)" data-command="70"><div class="command-text non-expanding-text">python-api</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c71" class="tree-item level-2 " onclick="selectCommand('c71', this)" data-command="71"><div class="command-text non-expanding-text">cheatsheet</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c72" class="tree-item level-2 " onclick="selectCommand('c72', this)" data-command="72"><div class="command-text non-expanding-text">changelog</div></div>
<div class="tree-item-children hidden">

</div>

    <div id="node-c73" class="tree-item level-2 " onclick="selectCommand('c73', this)" data-command="73"><div class="command-text non-expanding-text">faq</div></div>
<div class="tree-item-children hidden">

</div>

</div>

    <div id="node-c74" class="tree-item level-1 " onclick="selectCommand('c74', this)" data-command="74"><div class="command-text non-expanding-text">generate-completion</div></div>
<div class="tree-item-children hidden">

</div>

</div>
            </div>
        </div>

        <div class="column">
            <div class="column-header">Options</div>
            <div class="column-content" id="optionsPanel">
                <div class="info-section">
                    <div class="info-header">
                        Command Info
                    </div>
                    <div class="info-content" id="commandInfo">
                        <div class="info-brief">Git is a distributed version control system</div>
                        <div class="command-signature">git [--version] [--help] [command]</div>
                        <div style="margin-top: 8px;">
                            Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
                        </div>
                    </div>
                </div>

                <div id="argumentsInfo"></div>
                <div id="categoryList"></div>
            </div>
        </div>
    </div>
</div>

<script>
    const commandData = {"c30":{"name":"info","parent":"c25","brief":"<div class=\"rich-text\"><p>Display information about a worker</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-command\">info</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;WORKER_ID&#62;</span>"],"arguments":[{"name":"&#60;WORKER_ID&#62;","brief":"<div class=\"rich-text\"><p>Worker ID</p></div>","description":null}],"categories":[]},"c12":{"name":"cat","parent":"c6","brief":"<div class=\"rich-text\"><p>Shows task(s) stdout and stderr</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">cat</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;JOB_SELECTOR&#62;</span> <span class=\"usage-argument\">&#60;STREAM&#62;</span>"],"arguments":[{"name":"&#60;JOB_SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Select a job</p></div>","description":null},{"name":"&#60;STREAM&#62;","brief":"<div class=\"rich-text\"><p>Type of output stream to display</p></div>","description":"<div class=\"rich-text\"><p>Possible values:</p><ul><li>stdout: Displays stdout output stream for given job and task(s)</li><li>stderr: Displays stderr output stream for given job and task(s)</li></ul></div>"}],"categories":[{"title":"Options","options":[{"id":"o12-1","short":null,"long":"--tasks &#60;TASKS&#62;","brief":"<div class=\"rich-text\"><p>Filter task(s) by ID</p></div>","description":null},{"id":"o12-2","short":null,"long":"--task-status &#60;TASK_STATUS&#62;","brief":"<div class=\"rich-text\"><p>Filter task(s) by status. You can use multiple states separated by a comma</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">waiting, running, finished, failed, canceled, opened</span>]</p></div>"},{"id":"o12-3","short":null,"long":"--print-task-header","brief":"<div class=\"rich-text\"><p>Add task headers to the output</p></div>","description":"<div class=\"rich-text\"><p>Prepends the output of each task with a header line that identifies the task which produced that output.</p></div>"}]}]},"c57":{"name":"flush","parent":"c52","brief":"<div class=\"rich-text\"><p>Forces to flush its journal of a running server</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">journal</span> <span class=\"usage-command\">flush</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c31":{"name":"address","parent":"c25","brief":"<div class=\"rich-text\"><p>Display worker&#39;s hostname</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-command\">address</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;WORKER_ID&#62;</span>"],"arguments":[{"name":"&#60;WORKER_ID&#62;","brief":"<div class=\"rich-text\"><p>Worker ID</p></div>","description":null}],"categories":[]},"c15":{"name":"wait","parent":"c6","brief":"<div class=\"rich-text\"><p>Waits until a job is finished</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">wait</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Jobs to wait for</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o15-1","short":null,"long":"--without-close","brief":"<div class=\"rich-text\"><p>Waits until all tasks are completed, even if the job is still open</p></div>","description":null}]}]},"c69":{"name":"autoalloc","parent":"c64","brief":"<div class=\"rich-text\"><p>Automatic allocator subsystem</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">autoalloc</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c73":{"name":"faq","parent":"c64","brief":"<div class=\"rich-text\"><p>Frequently asked questions about HyperQueue</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">faq</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c23":{"name":"explain","parent":"c20","brief":"<div class=\"rich-text\"><p>Explain if task can run on a selected worker</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">task</span> <span class=\"usage-command\">explain</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;JOB_SELECTOR&#62;</span> <span class=\"usage-argument\">&#60;TASK_ID&#62;</span>"],"arguments":[{"name":"&#60;JOB_SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Select specific job</p></div>","description":null},{"name":"&#60;TASK_ID&#62;","brief":"<div class=\"rich-text\"><p>Select specific task(s)</p></div>","description":null}],"categories":[]},"c63":{"name":"replay","parent":"c61","brief":"<div class=\"rich-text\"><p>Replay events from a journal file</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">dashboard</span> <span class=\"usage-command\">replay</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;JOURNAL&#62;</span>"],"arguments":[{"name":"&#60;JOURNAL&#62;","brief":"<div class=\"rich-text\"><p>Path to a journal file</p></div>","description":"<div class=\"rich-text\"><p>New journal file can be created by `hq server start --journal=&#60;path&#62;`.</p></div>"}],"categories":[]},"c60":{"name":"get","parent":"c58","brief":"<div class=\"rich-text\"><p>Inside a task, get an input data object into the local datanode</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">data</span> <span class=\"usage-command\">get</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;INPUT_ID&#62;</span> <span class=\"usage-argument\">&#60;PATH&#62;</span>"],"arguments":[{"name":"&#60;INPUT_ID&#62;","brief":"<div class=\"rich-text\"><p>Input ID</p></div>","description":null},{"name":"&#60;PATH&#62;","brief":"<div class=\"rich-text\"><p>Path of file/directory that should be downloaded</p></div>","description":null}],"categories":[]},"c18":{"name":"open","parent":"c6","brief":"<div class=\"rich-text\"><p>Open a new job (without attaching any tasks yet)</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">open</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o18-1","short":null,"long":"--name &#60;NAME&#62;","brief":"<div class=\"rich-text\"><p>The name of the job</p></div>","description":null},{"id":"o18-2","short":null,"long":"--max-fails &#60;MAX_FAILS&#62;","brief":"<div class=\"rich-text\"><p>Maximum number tasks that may fail in the job</p></div>","description":"<div class=\"rich-text\"><p>If this limit is reached, the all other tasks are cancelled.</p></div>"}]}]},"c55":{"name":"replay","parent":"c52","brief":"<div class=\"rich-text\"><p>Replays old events, then terminate</p></div>","description":"<div class=\"rich-text\"><p>Events are exported as NDJSON on `stdout`.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">journal</span> <span class=\"usage-command\">replay</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c49":{"name":"pbs","parent":"c48","brief":"<div class=\"rich-text\"><p>Try to create a PBS allocation</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">dry-run</span> <span class=\"usage-command\">pbs</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-command\">--time-limit</span> <span class=\"usage-argument\">&#60;TIME_LIMIT&#62;</span> <span class=\"usage-option\">[ADDITIONAL_ARGS]...</span>"],"arguments":[{"name":"[ADDITIONAL_ARGS]...","brief":"<div class=\"rich-text\"><p>Additional arguments passed to the submit command</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o49-1","short":"-b","long":"--backlog &#60;BACKLOG&#62;","brief":"<div class=\"rich-text\"><p>The maximal number of jobs that can be waiting in the queue</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1</span>]</p></div>"},{"id":"o49-2","short":"-t","long":"--time-limit &#60;TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Time limit (walltime) of PBS/Slurm allocations</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o49-3","short":"-w","long":"--workers-per-alloc &#60;WORKERS_PER_ALLOC&#62;","brief":"<div class=\"rich-text\"><p>The number of workers (nodes) in each allocation</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1</span>]</p></div>"},{"id":"o49-4","short":null,"long":"--max-worker-count &#60;MAX_WORKER_COUNT&#62;","brief":"<div class=\"rich-text\"><p>Maximum number of concurrent workers in any state</p></div>","description":"<div class=\"rich-text\"><p>It counts workers that can be queued or running.</p></div>"},{"id":"o49-5","short":"-n","long":"--name &#60;NAME&#62;","brief":"<div class=\"rich-text\"><p>Name of the allocation queue (for debug purposes only)</p></div>","description":null},{"id":"o49-6","short":null,"long":"--cpus &#60;CPUS&#62;","brief":"<div class=\"rich-text\"><p>The cores assigned to the worker</p></div>","description":null},{"id":"o49-7","short":null,"long":"--resource &#60;RESOURCE&#62;","brief":"<div class=\"rich-text\"><p>Resources provided by the worker</p></div>","description":"<div class=\"rich-text\"><p>Examples:</p><ul><li>`--resource gpus=[0,1,2,3]`</li><li>`--resource &#34;memory=sum(1024)&#34;`</li></ul></div>"},{"id":"o49-8","short":null,"long":"--group &#60;GROUP&#62;","brief":"<div class=\"rich-text\"><p>Sets worker&#39;s group</p></div>","description":"<div class=\"rich-text\"><p>Workers from the same group are used for multi-node tasks.</p><p>By default, the worker tries to detect allocation name from SLURM/PBS, if running outside a manager, then the group is empty.</p></div>"},{"id":"o49-9","short":null,"long":"--no-detect-resources","brief":"<div class=\"rich-text\"><p>Disables auto-detection of resources</p></div>","description":null},{"id":"o49-10","short":null,"long":"--no-hyper-threading","brief":"<div class=\"rich-text\"><p>Ignores hyper-threading while detecting CPU cores</p></div>","description":null},{"id":"o49-11","short":null,"long":"--idle-timeout &#60;IDLE_TIMEOUT&#62;","brief":"<div class=\"rich-text\"><p>Duration after which will an idle worker automatically stop</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o49-12","short":null,"long":"--overview-interval &#60;OVERVIEW_INTERVAL&#62;","brief":"<div class=\"rich-text\"><p>The period of reporting the overview to the server</p></div>","description":"<div class=\"rich-text\"><p>The overview contains information about HW usage. It serves only for the user&#39;s informing the user (e.g., in dashboard), the server scheduler is independent on worker&#39;s overviews.</p><p>Set to &#34;0s&#34; to disable overview updates. By default, overview updates are disabled to reduce network bandwidth and event journal size.</p></div>"},{"id":"o49-13","short":null,"long":"--on-server-lost &#60;ON_SERVER_LOST&#62;","brief":"<div class=\"rich-text\"><p>The policy when a connection to a server is lost</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">finish-running</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">stop, finish-running</span>]</p></div>"},{"id":"o49-14","short":null,"long":"--no-dry-run","brief":"<div class=\"rich-text\"><p>Disables veryfing the parameter correctness via dry-run</p></div>","description":"<div class=\"rich-text\"><p>If dry run is enabled, the server tries to submit a probing allocation to verify whether the parameters are correct. The allocation is immediately canceled.</p></div>"},{"id":"o49-15","short":null,"long":"--worker-start-cmd &#60;WORKER_START_CMD&#62;","brief":"<div class=\"rich-text\"><p>A command executed before the start of the worker</p></div>","description":"<div class=\"rich-text\"><p>It is executed as a shell command.</p></div>"},{"id":"o49-16","short":null,"long":"--worker-stop-cmd &#60;WORKER_STOP_CMD&#62;","brief":"<div class=\"rich-text\"><p>A command executed after the worker terminates</p></div>","description":"<div class=\"rich-text\"><p>It is executed as a shell command. Note that this execution is best-effort. It is not guaranteed that the script will always be executed.</p></div>"},{"id":"o49-17","short":null,"long":"--worker-time-limit &#60;WORKER_TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Worker&#39;s time limit</p></div>","description":"<div class=\"rich-text\"><p>Time limit after which workers in the submitted allocations will be stopped. By default, it is set to the time limit of the allocation. However, if you want the workers to be stopped sooner, for example to give `worker_stop_cmd` more time to execute before the allocation is killed, you can lower the worker time limit.</p><p>The limit must not be larger than the allocation time limit.</p><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"}]}]},"c66":{"name":"taskarray","parent":"c64","brief":"<div class=\"rich-text\"><p>Jobs containing large amounts of similar tasks</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">taskarray</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c37":{"name":"show","parent":"c34","brief":"<div class=\"rich-text\"><p>Prints the stream content ordered by time</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">output-log</span> <span class=\"usage-argument\">&#60;PATH&#62;</span> <span class=\"usage-command\">show</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o37-1","short":null,"long":"--job &#60;JOB&#62;","brief":"<div class=\"rich-text\"><p>JobId</p></div>","description":null},{"id":"o37-2","short":null,"long":"--channel &#60;CHANNEL&#62;","brief":"<div class=\"rich-text\"><p>Show only the specific channel</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">stdout, stderr</span>]</p></div>"}]}]},"c61":{"name":"dashboard","parent":"c0","brief":"<div class=\"rich-text\"><p>Starts CLI dashboard</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">dashboard</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-option\">[COMMAND]</span>"],"arguments":[],"categories":[]},"c24":{"name":"submit","parent":"c0","brief":"<div class=\"rich-text\"><p>Submit a new job</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">submit</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMANDS&#62;...</span>"],"arguments":[{"name":"&#60;COMMANDS&#62;...","brief":"<div class=\"rich-text\"><p>Command that should be executed by each task</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o24-1","short":null,"long":"--name &#60;NAME&#62;","brief":"<div class=\"rich-text\"><p>The name of the job</p></div>","description":null},{"id":"o24-2","short":null,"long":"--max-fails &#60;MAX_FAILS&#62;","brief":"<div class=\"rich-text\"><p>Maximum number tasks that may fail in the job</p></div>","description":"<div class=\"rich-text\"><p>If this limit is reached, the all other tasks are cancelled.</p></div>"},{"id":"o24-3","short":null,"long":"--nodes &#60;NODES&#62;","brief":"<div class=\"rich-text\"><p>The number of nodes</p></div>","description":"<div class=\"rich-text\"><p>If a positive integer is set; a multinode task is submitted. The zero means a subnode task.</p><p class=\"rt-config\">[default: <span class=\"rt-config-value\">0</span>]</p></div>"},{"id":"o24-4","short":null,"long":"--cpus &#60;CPUS&#62;","brief":"<div class=\"rich-text\"><p>The number and placement of CPUs for each job</p></div>","description":null},{"id":"o24-5","short":null,"long":"--resource &#60;RESOURCE&#62;","brief":"<div class=\"rich-text\"><p>The request of resources in the form &#60;NAME&#62;=&#60;AMOUNT&#62;</p></div>","description":null},{"id":"o24-6","short":null,"long":"--time-request &#60;TIME_REQUEST&#62;","brief":"<div class=\"rich-text\"><p>Minimal lifetime of the worker needed to start the job</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul><p class=\"rt-config\">[default: <span class=\"rt-config-value\">0ms</span>]</p></div>"},{"id":"o24-7","short":null,"long":"--pin &#60;PIN&#62;","brief":"<div class=\"rich-text\"><p>Pins the job to the cores specified in `--cpus`</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">taskset, omp</span>]</p></div>"},{"id":"o24-8","short":null,"long":"--cwd &#60;CWD&#62;","brief":"<div class=\"rich-text\"><p>Working directory for submitted tasks</p></div>","description":"<div class=\"rich-text\"><p>The path must be accessible from worker nodes [default: %{SUBMIT_DIR}]</p></div>"},{"id":"o24-9","short":null,"long":"--stdout &#60;STDOUT&#62;","brief":"<div class=\"rich-text\"><p>Where to store the standard output of tasks</p></div>","description":"<div class=\"rich-text\"><p>The path must be accessible from worker nodes.</p></div>"},{"id":"o24-10","short":null,"long":"--stderr &#60;STDERR&#62;","brief":"<div class=\"rich-text\"><p>Where to store the standard error output of tasks</p></div>","description":"<div class=\"rich-text\"><p>The path must be accessible from worker nodes</p></div>"},{"id":"o24-11","short":null,"long":"--env &#60;ENV&#62;","brief":"<div class=\"rich-text\"><p>Additional environment variable for tasks</p></div>","description":"<div class=\"rich-text\"><p>You can pass this flag multiple times to pass multiple variables. `--env=KEY=VAL` - set an environment variable named `KEY` with the value `VAL`</p></div>"},{"id":"o24-12","short":null,"long":"--each-line &#60;EACH_LINE&#62;","brief":"<div class=\"rich-text\"><p>Creates a task for each line of the given file</p></div>","description":"<div class=\"rich-text\"><p>The corresponding line will be passed to the task in the environment variable `HQ_ENTRY`.</p></div>"},{"id":"o24-13","short":null,"long":"--from-json &#60;FROM_JSON&#62;","brief":"<div class=\"rich-text\"><p>Creates a task for each item of JSON array in the given file</p></div>","description":"<div class=\"rich-text\"><p>The corresponding item from the array will be passed as a JSON string to the task in the environment variable `HQ_ENTRY`.</p></div>"},{"id":"o24-14","short":null,"long":"--array &#60;ARRAY&#62;","brief":"<div class=\"rich-text\"><p>Creates a task array</p></div>","description":"<div class=\"rich-text\"><p>Create a task for each integer in the specified number range. Each task will be passed an environment variable `HQ_TASK_ID`.</p><p>`--array=3-5` - create a task array with three jobs with task IDs 3, 4, 5</p><p>`--array=5` - create a task array with one job with task ID 5</p></div>"},{"id":"o24-15","short":null,"long":"--priority &#60;PRIORITY&#62;","brief":"<div class=\"rich-text\"><p>Tasks priority</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">0</span>]</p></div>"},{"id":"o24-16","short":null,"long":"--time-limit &#60;TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Time limit per task. E.g. --time-limit=10min</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o24-17","short":null,"long":"--stream &#60;STREAM&#62;","brief":"<div class=\"rich-text\"><p>Stream the output of tasks into the given log file</p></div>","description":null},{"id":"o24-18","short":null,"long":"--task-dir","brief":"<div class=\"rich-text\"><p>Create a temporary directory for task(s)</p></div>","description":"<div class=\"rich-text\"><p>The path is provided in HQ_TASK_DIR. The directory is automatically deleted when the task is finished.</p></div>"},{"id":"o24-19","short":null,"long":"--crash-limit &#60;CRASH_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Sets the crash counter limit</p></div>","description":"<div class=\"rich-text\"><p>Crash counter counts how many times a task was in a running state while a worker was lost. The crash limit is *not* increased when terminated by `hq worker stop` or worker&#39;s time limit is reached.</p><p>If the crash limit is reached, the task is marked as failed.</p><p>The option takes a positive integer, &#34;never-restart&#34;, or &#34;unlimited&#34;.</p><ul><li>&#34;never-restart&#34; = task is never restarted even the crash counter is not increased * &#34;unlimited&#34; = there is no limit on crash counter value</li></ul><p class=\"rt-config\">[default: <span class=\"rt-config-value\">5</span>]</p></div>"},{"id":"o24-20","short":null,"long":"--job &#60;JOB&#62;","brief":"<div class=\"rich-text\"><p>Attach a submission to an open job</p></div>","description":null},{"id":"o24-21","short":null,"long":"--wait","brief":"<div class=\"rich-text\"><p>Wait for the job to finish</p></div>","description":null},{"id":"o24-22","short":null,"long":"--progress","brief":"<div class=\"rich-text\"><p>Shows a progressbar</p></div>","description":"<div class=\"rich-text\"><p>It is the same as call `hq progress` immediately called after the submit</p></div>"},{"id":"o24-23","short":null,"long":"--stdin","brief":"<div class=\"rich-text\"><p>Attach the stdin to the task</p></div>","description":"<div class=\"rich-text\"><p>Captures stdin and start the task with the given stdin. The job will be submitted when the stdin is closed.</p></div>"},{"id":"o24-24","short":null,"long":"--directives &#60;DIRECTIVES&#62;","brief":"<div class=\"rich-text\"><p>Select directives parsing mode</p></div>","description":"<div class=\"rich-text\"><p>`auto`: Directives will be parsed if the suffix of the first command is &#34;.sh&#34;.</p><p>`file`: Directives will be parsed regardless of the first command extension. `stdin`: Directives will be parsed from standard input passed to `hq submit` instead from the submitted command. `off`: Directives will not be parsed.</p><p>If enabled, HQ will parse `#HQ` directives from a file located in the first entered command. Parameters following the `#HQ` prefix will be used as parameters for `hq submit`.</p><p>Example (script.sh):</p><p>#!/bin/bash #HQ --name my-job #HQ --cpus=2</p><p>program --foo=bar</p><p class=\"rt-config\">[default: <span class=\"rt-config-value\">auto</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">auto, file, stdin, off</span>]</p></div>"}]}]},"c56":{"name":"prune","parent":"c52","brief":"<div class=\"rich-text\"><p>Prune a journal of a running server</p></div>","description":"<div class=\"rich-text\"><p>Connects to a server and remove completed tasks and non-active workers from the journal.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">journal</span> <span class=\"usage-command\">prune</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c51":{"name":"remove","parent":"c40","brief":"<div class=\"rich-text\"><p>Removes an allocation queue with the given ID</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">remove</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;QUEUE_ID&#62;</span>"],"arguments":[{"name":"&#60;QUEUE_ID&#62;","brief":"<div class=\"rich-text\"><p>ID of the allocation queue that should be removed</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o51-1","short":null,"long":"--force","brief":"<div class=\"rich-text\"><p>Remove the queue even if there are currently running jobs</p></div>","description":"<div class=\"rich-text\"><p>The running jobs will be canceled.</p></div>"}]}]},"c58":{"name":"data","parent":"c0","brief":"<div class=\"rich-text\"><p>Data object management inside a task</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">data</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c70":{"name":"python-api","parent":"c64","brief":"<div class=\"rich-text\"><p>Python API</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">python-api</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c43":{"name":"add","parent":"c40","brief":"<div class=\"rich-text\"><p>Add a new allocation queue</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">add</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c59":{"name":"put","parent":"c58","brief":"<div class=\"rich-text\"><p>Inside a task, put a data object into the local datanode</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">data</span> <span class=\"usage-command\">put</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;DATA_ID&#62;</span> <span class=\"usage-argument\">&#60;PATH&#62;</span>"],"arguments":[{"name":"&#60;DATA_ID&#62;","brief":"<div class=\"rich-text\"><p>DataId of task output</p></div>","description":null},{"name":"&#60;PATH&#62;","brief":"<div class=\"rich-text\"><p>Path of file/directory that should be uploaded</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o59-1","short":null,"long":"--mime-type &#60;MIME_TYPE&#62;","brief":"<div class=\"rich-text\"><p>DataId of task output</p></div>","description":null}]}]},"c16":{"name":"progress","parent":"c6","brief":"<div class=\"rich-text\"><p>Shows a progressbar with tasks/jobs</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">progress</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Job(s) to observe</p></div>","description":null}],"categories":[]},"c20":{"name":"task","parent":"c0","brief":"<div class=\"rich-text\"><p>Commands for tasks</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">task</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c33":{"name":"deploy-ssh","parent":"c25","brief":"<div class=\"rich-text\"><p>Deploy a set of workers using SSH.</p></div>","description":"<div class=\"rich-text\"><p>Note that to use this command, an OpenSSH-compatible `ssh` binary has to be available on the local node.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-command\">deploy-ssh</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;HOSTFILE&#62;</span> <span class=\"usage-option\">[WORKER_START_ARGS]...</span>"],"arguments":[{"name":"&#60;HOSTFILE&#62;","brief":"<div class=\"rich-text\"><p>Path to a file with target hostnames</p></div>","description":"<div class=\"rich-text\"><p>Path to a file that contains the hostnames to which should workers be deployed to. Each line in the file should correspond to one hostname address.</p></div>"},{"name":"[WORKER_START_ARGS]...","brief":"<div class=\"rich-text\"><p>Arguments passed to `worker start` at the remote node.</p></div>","description":"<div class=\"rich-text\"><p>To display possible options, use `deploy-ssh -- --help`.</p></div>"}],"categories":[{"title":"Options","options":[{"id":"o33-1","short":null,"long":"--show-output","brief":"<div class=\"rich-text\"><p>Show log output of the spawned worker(s)</p></div>","description":null}]}]},"c47":{"name":"resume","parent":"c40","brief":"<div class=\"rich-text\"><p>Resume a previously paused allocation queue</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">resume</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;QUEUE_ID&#62;</span>"],"arguments":[{"name":"&#60;QUEUE_ID&#62;","brief":"<div class=\"rich-text\"><p>ID of the allocation queue that should be resumed</p></div>","description":null}],"categories":[]},"c1":{"name":"server","parent":"c0","brief":"<div class=\"rich-text\"><p>Commands for the server</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">server</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c21":{"name":"list","parent":"c20","brief":"<div class=\"rich-text\"><p>Displays task(s) associated with selected job(s)</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">task</span> <span class=\"usage-command\">list</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;JOB_SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;JOB_SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Select specific job(s)</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o21-1","short":null,"long":"--tasks &#60;TASKS&#62;","brief":"<div class=\"rich-text\"><p>Filter task(s) by ID</p></div>","description":null},{"id":"o21-2","short":null,"long":"--task-status &#60;TASK_STATUS&#62;","brief":"<div class=\"rich-text\"><p>Filter task(s) by status. You can use multiple states separated by a comma</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">waiting, running, finished, failed, canceled, opened</span>]</p></div>"},{"id":"o21-3","short":null,"long":"-v...","brief":"<div class=\"rich-text\"><p>Use this flag to enable verbose output</p></div>","description":null}]}]},"c4":{"name":"info","parent":"c1","brief":"<div class=\"rich-text\"><p>Show info of a running server</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">server</span> <span class=\"usage-command\">info</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c38":{"name":"cat","parent":"c34","brief":"<div class=\"rich-text\"><p>Prints the content of a stream&#39;s channel</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">output-log</span> <span class=\"usage-argument\">&#60;PATH&#62;</span> <span class=\"usage-command\">cat</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;JOB&#62;</span> <span class=\"usage-argument\">&#60;CHANNEL&#62;</span>"],"arguments":[{"name":"&#60;JOB&#62;","brief":"<div class=\"rich-text\"><p>JobId</p></div>","description":null},{"name":"&#60;CHANNEL&#62;","brief":"<div class=\"rich-text\"><p>Channel name: &#34;stdout&#34; or &#34;stderr&#34;</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">stdout, stderr</span>]</p></div>"}],"categories":[{"title":"Options","options":[{"id":"o38-1","short":null,"long":"--task &#60;TASK&#62;","brief":"<div class=\"rich-text\"><p>Prints only outputs of the selected tasks</p></div>","description":"<div class=\"rich-text\"><p>You can use the array syntax to specify multiple tasks.</p></div>"},{"id":"o38-2","short":null,"long":"--allow-unfinished","brief":"<div class=\"rich-text\"><p>Allow unfinished channels</p></div>","description":null}]}]},"c28":{"name":"list","parent":"c25","brief":"<div class=\"rich-text\"><p>Display information about workers</p></div>","description":"<div class=\"rich-text\"><p>By default, only running workers will be displayed.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-command\">list</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o28-1","short":null,"long":"--all","brief":"<div class=\"rich-text\"><p>Display all workers</p></div>","description":null},{"id":"o28-2","short":null,"long":"--filter &#60;FILTER&#62;","brief":"<div class=\"rich-text\"><p>Select only workers in the given state</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">running, offline</span>]</p></div>"}]}]},"c39":{"name":"export","parent":"c34","brief":"<div class=\"rich-text\"><p>Exports stream into JSON</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">output-log</span> <span class=\"usage-argument\">&#60;PATH&#62;</span> <span class=\"usage-command\">export</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;JOB&#62;</span>"],"arguments":[{"name":"&#60;JOB&#62;","brief":"<div class=\"rich-text\"><p>Job to export</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o39-1","short":null,"long":"--task &#60;TASK&#62;","brief":"<div class=\"rich-text\"><p>Exports only output of the selected tasks</p></div>","description":"<div class=\"rich-text\"><p>You can use the array syntax to specify multiple tasks.</p></div>"}]}]},"c19":{"name":"close","parent":"c6","brief":"<div class=\"rich-text\"><p>Close an open job</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">close</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Select job(s) to close</p></div>","description":null}],"categories":[]},"c54":{"name":"stream","parent":"c52","brief":"<div class=\"rich-text\"><p>Replays all old events, then streams new events</p></div>","description":"<div class=\"rich-text\"><p>The command blocks and waits for new live events until the server is not stopped.</p><p>Events are exported as NDJSON on `stdout`.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">journal</span> <span class=\"usage-command\">stream</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c64":{"name":"doc","parent":"c0","brief":"<div class=\"rich-text\"><p>Show documentation</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-option\">[COMMAND]</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o64-1","short":null,"long":"--open","brief":"<div class=\"rich-text\"><p>Open the documentation in the default browser</p></div>","description":null}]}]},"c35":{"name":"summary","parent":"c34","brief":"<div class=\"rich-text\"><p>Prints summary of the log file</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">output-log</span> <span class=\"usage-argument\">&#60;PATH&#62;</span> <span class=\"usage-command\">summary</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c17":{"name":"task-ids","parent":"c6","brief":"<div class=\"rich-text\"><p>Prints task ids for a job</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">task-ids</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Selects job(s)</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o17-1","short":null,"long":"--filter &#60;FILTER&#62;","brief":"<div class=\"rich-text\"><p>Selects only tasks with the given state(s)</p></div>","description":"<div class=\"rich-text\"><p>You can use multiple states separated by a comma.</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">waiting, running, finished, failed, canceled, opened</span>]</p></div>"}]}]},"c46":{"name":"pause","parent":"c40","brief":"<div class=\"rich-text\"><p>Pause an existing allocation queue</p></div>","description":"<div class=\"rich-text\"><p>Paused queues do not submit new allocations.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">pause</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;QUEUE_ID&#62;</span>"],"arguments":[{"name":"&#60;QUEUE_ID&#62;","brief":"<div class=\"rich-text\"><p>ID of the allocation queue that should be paused</p></div>","description":null}],"categories":[]},"c27":{"name":"stop","parent":"c25","brief":"<div class=\"rich-text\"><p>Stop a worker</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-command\">stop</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SELECTOR_ARG&#62;</span>"],"arguments":[{"name":"&#60;SELECTOR_ARG&#62;","brief":"<div class=\"rich-text\"><p>Selectes worker(s) to stop</p></div>","description":null}],"categories":[]},"c50":{"name":"slurm","parent":"c48","brief":"<div class=\"rich-text\"><p>Try to create a SLURM allocation</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">dry-run</span> <span class=\"usage-command\">slurm</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-command\">--time-limit</span> <span class=\"usage-argument\">&#60;TIME_LIMIT&#62;</span> <span class=\"usage-option\">[ADDITIONAL_ARGS]...</span>"],"arguments":[{"name":"[ADDITIONAL_ARGS]...","brief":"<div class=\"rich-text\"><p>Additional arguments passed to the submit command</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o50-1","short":"-b","long":"--backlog &#60;BACKLOG&#62;","brief":"<div class=\"rich-text\"><p>The maximal number of jobs that can be waiting in the queue</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1</span>]</p></div>"},{"id":"o50-2","short":"-t","long":"--time-limit &#60;TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Time limit (walltime) of PBS/Slurm allocations</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o50-3","short":"-w","long":"--workers-per-alloc &#60;WORKERS_PER_ALLOC&#62;","brief":"<div class=\"rich-text\"><p>The number of workers (nodes) in each allocation</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1</span>]</p></div>"},{"id":"o50-4","short":null,"long":"--max-worker-count &#60;MAX_WORKER_COUNT&#62;","brief":"<div class=\"rich-text\"><p>Maximum number of concurrent workers in any state</p></div>","description":"<div class=\"rich-text\"><p>It counts workers that can be queued or running.</p></div>"},{"id":"o50-5","short":"-n","long":"--name &#60;NAME&#62;","brief":"<div class=\"rich-text\"><p>Name of the allocation queue (for debug purposes only)</p></div>","description":null},{"id":"o50-6","short":null,"long":"--cpus &#60;CPUS&#62;","brief":"<div class=\"rich-text\"><p>The cores assigned to the worker</p></div>","description":null},{"id":"o50-7","short":null,"long":"--resource &#60;RESOURCE&#62;","brief":"<div class=\"rich-text\"><p>Resources provided by the worker</p></div>","description":"<div class=\"rich-text\"><p>Examples:</p><ul><li>`--resource gpus=[0,1,2,3]`</li><li>`--resource &#34;memory=sum(1024)&#34;`</li></ul></div>"},{"id":"o50-8","short":null,"long":"--group &#60;GROUP&#62;","brief":"<div class=\"rich-text\"><p>Sets worker&#39;s group</p></div>","description":"<div class=\"rich-text\"><p>Workers from the same group are used for multi-node tasks.</p><p>By default, the worker tries to detect allocation name from SLURM/PBS, if running outside a manager, then the group is empty.</p></div>"},{"id":"o50-9","short":null,"long":"--no-detect-resources","brief":"<div class=\"rich-text\"><p>Disables auto-detection of resources</p></div>","description":null},{"id":"o50-10","short":null,"long":"--no-hyper-threading","brief":"<div class=\"rich-text\"><p>Ignores hyper-threading while detecting CPU cores</p></div>","description":null},{"id":"o50-11","short":null,"long":"--idle-timeout &#60;IDLE_TIMEOUT&#62;","brief":"<div class=\"rich-text\"><p>Duration after which will an idle worker automatically stop</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o50-12","short":null,"long":"--overview-interval &#60;OVERVIEW_INTERVAL&#62;","brief":"<div class=\"rich-text\"><p>The period of reporting the overview to the server</p></div>","description":"<div class=\"rich-text\"><p>The overview contains information about HW usage. It serves only for the user&#39;s informing the user (e.g., in dashboard), the server scheduler is independent on worker&#39;s overviews.</p><p>Set to &#34;0s&#34; to disable overview updates. By default, overview updates are disabled to reduce network bandwidth and event journal size.</p></div>"},{"id":"o50-13","short":null,"long":"--on-server-lost &#60;ON_SERVER_LOST&#62;","brief":"<div class=\"rich-text\"><p>The policy when a connection to a server is lost</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">finish-running</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">stop, finish-running</span>]</p></div>"},{"id":"o50-14","short":null,"long":"--no-dry-run","brief":"<div class=\"rich-text\"><p>Disables veryfing the parameter correctness via dry-run</p></div>","description":"<div class=\"rich-text\"><p>If dry run is enabled, the server tries to submit a probing allocation to verify whether the parameters are correct. The allocation is immediately canceled.</p></div>"},{"id":"o50-15","short":null,"long":"--worker-start-cmd &#60;WORKER_START_CMD&#62;","brief":"<div class=\"rich-text\"><p>A command executed before the start of the worker</p></div>","description":"<div class=\"rich-text\"><p>It is executed as a shell command.</p></div>"},{"id":"o50-16","short":null,"long":"--worker-stop-cmd &#60;WORKER_STOP_CMD&#62;","brief":"<div class=\"rich-text\"><p>A command executed after the worker terminates</p></div>","description":"<div class=\"rich-text\"><p>It is executed as a shell command. Note that this execution is best-effort. It is not guaranteed that the script will always be executed.</p></div>"},{"id":"o50-17","short":null,"long":"--worker-time-limit &#60;WORKER_TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Worker&#39;s time limit</p></div>","description":"<div class=\"rich-text\"><p>Time limit after which workers in the submitted allocations will be stopped. By default, it is set to the time limit of the allocation. However, if you want the workers to be stopped sooner, for example to give `worker_stop_cmd` more time to execute before the allocation is killed, you can lower the worker time limit.</p><p>The limit must not be larger than the allocation time limit.</p><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"}]}]},"c72":{"name":"changelog","parent":"c64","brief":"<div class=\"rich-text\"><p>Changelog</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">changelog</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c40":{"name":"alloc","parent":"c0","brief":"<div class=\"rich-text\"><p>Automatic allocation management</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c7":{"name":"list","parent":"c6","brief":"<div class=\"rich-text\"><p>Display information about jobs</p></div>","description":"<div class=\"rich-text\"><p>By default, only queued or running jobs will be displayed.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">list</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o7-1","short":null,"long":"--all","brief":"<div class=\"rich-text\"><p>Display all jobs</p></div>","description":null},{"id":"o7-2","short":null,"long":"--filter &#60;FILTER&#62;","brief":"<div class=\"rich-text\"><p>Display only jobs with the given states</p></div>","description":"<div class=\"rich-text\"><p>You can use multiple states separated by a comma.</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">waiting, running, finished, failed, canceled, opened</span>]</p></div>"}]}]},"c22":{"name":"info","parent":"c20","brief":"<div class=\"rich-text\"><p>Displays detailed task info</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">task</span> <span class=\"usage-command\">info</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;JOB_SELECTOR&#62;</span> <span class=\"usage-argument\">&#60;TASK_SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;JOB_SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Select specific job</p></div>","description":null},{"name":"&#60;TASK_SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Select specific task(s)</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o22-1","short":null,"long":"-v...","brief":"<div class=\"rich-text\"><p>Use this flag to enable verbose output</p></div>","description":null}]}]},"c14":{"name":"submit-file","parent":"c6","brief":"<div class=\"rich-text\"><p>Submit a job by a job definition file</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">submit-file</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;PATH&#62;</span>"],"arguments":[{"name":"&#60;PATH&#62;","brief":"<div class=\"rich-text\"><p>Path to file with job definition</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o14-1","short":null,"long":"--job &#60;JOB&#62;","brief":"<div class=\"rich-text\"><p>Attach a submission to an open job</p></div>","description":null}]}]},"c41":{"name":"list","parent":"c40","brief":"<div class=\"rich-text\"><p>Displays allocation queues</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">list</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c8":{"name":"summary","parent":"c6","brief":"<div class=\"rich-text\"><p>Display a summary with the number of jobs</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">summary</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c5":{"name":"generate-access","parent":"c1","brief":"<div class=\"rich-text\"><p>Generate an access file without starting the server</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">server</span> <span class=\"usage-command\">generate-access</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-command\">--client-port</span> <span class=\"usage-argument\">&#60;CLIENT_PORT&#62;</span> <span class=\"usage-command\">--worker-port</span> <span class=\"usage-argument\">&#60;WORKER_PORT&#62;</span> <span class=\"usage-argument\">&#60;ACCESS_FILE&#62;</span>"],"arguments":[{"name":"&#60;ACCESS_FILE&#62;","brief":"<div class=\"rich-text\"><p>The filename of the generated full access file</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o5-1","short":null,"long":"--client-file &#60;CLIENT_FILE&#62;","brief":"<div class=\"rich-text\"><p>The filename of the generated client&#39;s access file</p></div>","description":null},{"id":"o5-2","short":null,"long":"--worker-file &#60;WORKER_FILE&#62;","brief":"<div class=\"rich-text\"><p>The filename of the generated worker&#39;s access file</p></div>","description":null},{"id":"o5-3","short":null,"long":"--host &#60;HOST&#62;","brief":"<div class=\"rich-text\"><p>Override the target host name</p></div>","description":"<div class=\"rich-text\"><p>If not set, the local hostname is used</p></div>"},{"id":"o5-4","short":null,"long":"--client-host &#60;CLIENT_HOST&#62;","brief":"<div class=\"rich-text\"><p>Override target host name for clients</p></div>","description":null},{"id":"o5-5","short":null,"long":"--worker-host &#60;WORKER_HOST&#62;","brief":"<div class=\"rich-text\"><p>Override target host name for workers</p></div>","description":null},{"id":"o5-6","short":null,"long":"--client-port &#60;CLIENT_PORT&#62;","brief":"<div class=\"rich-text\"><p>The port for connecting client</p></div>","description":null},{"id":"o5-7","short":null,"long":"--worker-port &#60;WORKER_PORT&#62;","brief":"<div class=\"rich-text\"><p>The port for connecting workers</p></div>","description":null}]}]},"c68":{"name":"worker","parent":"c64","brief":"<div class=\"rich-text\"><p>Deployment of workers</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">worker</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c3":{"name":"stop","parent":"c1","brief":"<div class=\"rich-text\"><p>Stop the server</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">server</span> <span class=\"usage-command\">stop</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c13":{"name":"submit","parent":"c6","brief":"<div class=\"rich-text\"><p>Submit a new job</p></div>","description":"<div class=\"rich-text\"><p>This is the same as `hq submit`</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">submit</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMANDS&#62;...</span>"],"arguments":[{"name":"&#60;COMMANDS&#62;...","brief":"<div class=\"rich-text\"><p>Command that should be executed by each task</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o13-1","short":null,"long":"--name &#60;NAME&#62;","brief":"<div class=\"rich-text\"><p>The name of the job</p></div>","description":null},{"id":"o13-2","short":null,"long":"--max-fails &#60;MAX_FAILS&#62;","brief":"<div class=\"rich-text\"><p>Maximum number tasks that may fail in the job</p></div>","description":"<div class=\"rich-text\"><p>If this limit is reached, the all other tasks are cancelled.</p></div>"},{"id":"o13-3","short":null,"long":"--nodes &#60;NODES&#62;","brief":"<div class=\"rich-text\"><p>The number of nodes</p></div>","description":"<div class=\"rich-text\"><p>If a positive integer is set; a multinode task is submitted. The zero means a subnode task.</p><p class=\"rt-config\">[default: <span class=\"rt-config-value\">0</span>]</p></div>"},{"id":"o13-4","short":null,"long":"--cpus &#60;CPUS&#62;","brief":"<div class=\"rich-text\"><p>The number and placement of CPUs for each job</p></div>","description":null},{"id":"o13-5","short":null,"long":"--resource &#60;RESOURCE&#62;","brief":"<div class=\"rich-text\"><p>The request of resources in the form &#60;NAME&#62;=&#60;AMOUNT&#62;</p></div>","description":null},{"id":"o13-6","short":null,"long":"--time-request &#60;TIME_REQUEST&#62;","brief":"<div class=\"rich-text\"><p>Minimal lifetime of the worker needed to start the job</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul><p class=\"rt-config\">[default: <span class=\"rt-config-value\">0ms</span>]</p></div>"},{"id":"o13-7","short":null,"long":"--pin &#60;PIN&#62;","brief":"<div class=\"rich-text\"><p>Pins the job to the cores specified in `--cpus`</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">taskset, omp</span>]</p></div>"},{"id":"o13-8","short":null,"long":"--cwd &#60;CWD&#62;","brief":"<div class=\"rich-text\"><p>Working directory for submitted tasks</p></div>","description":"<div class=\"rich-text\"><p>The path must be accessible from worker nodes [default: %{SUBMIT_DIR}]</p></div>"},{"id":"o13-9","short":null,"long":"--stdout &#60;STDOUT&#62;","brief":"<div class=\"rich-text\"><p>Where to store the standard output of tasks</p></div>","description":"<div class=\"rich-text\"><p>The path must be accessible from worker nodes.</p></div>"},{"id":"o13-10","short":null,"long":"--stderr &#60;STDERR&#62;","brief":"<div class=\"rich-text\"><p>Where to store the standard error output of tasks</p></div>","description":"<div class=\"rich-text\"><p>The path must be accessible from worker nodes</p></div>"},{"id":"o13-11","short":null,"long":"--env &#60;ENV&#62;","brief":"<div class=\"rich-text\"><p>Additional environment variable for tasks</p></div>","description":"<div class=\"rich-text\"><p>You can pass this flag multiple times to pass multiple variables. `--env=KEY=VAL` - set an environment variable named `KEY` with the value `VAL`</p></div>"},{"id":"o13-12","short":null,"long":"--each-line &#60;EACH_LINE&#62;","brief":"<div class=\"rich-text\"><p>Creates a task for each line of the given file</p></div>","description":"<div class=\"rich-text\"><p>The corresponding line will be passed to the task in the environment variable `HQ_ENTRY`.</p></div>"},{"id":"o13-13","short":null,"long":"--from-json &#60;FROM_JSON&#62;","brief":"<div class=\"rich-text\"><p>Creates a task for each item of JSON array in the given file</p></div>","description":"<div class=\"rich-text\"><p>The corresponding item from the array will be passed as a JSON string to the task in the environment variable `HQ_ENTRY`.</p></div>"},{"id":"o13-14","short":null,"long":"--array &#60;ARRAY&#62;","brief":"<div class=\"rich-text\"><p>Creates a task array</p></div>","description":"<div class=\"rich-text\"><p>Create a task for each integer in the specified number range. Each task will be passed an environment variable `HQ_TASK_ID`.</p><p>`--array=3-5` - create a task array with three jobs with task IDs 3, 4, 5</p><p>`--array=5` - create a task array with one job with task ID 5</p></div>"},{"id":"o13-15","short":null,"long":"--priority &#60;PRIORITY&#62;","brief":"<div class=\"rich-text\"><p>Tasks priority</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">0</span>]</p></div>"},{"id":"o13-16","short":null,"long":"--time-limit &#60;TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Time limit per task. E.g. --time-limit=10min</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o13-17","short":null,"long":"--stream &#60;STREAM&#62;","brief":"<div class=\"rich-text\"><p>Stream the output of tasks into the given log file</p></div>","description":null},{"id":"o13-18","short":null,"long":"--task-dir","brief":"<div class=\"rich-text\"><p>Create a temporary directory for task(s)</p></div>","description":"<div class=\"rich-text\"><p>The path is provided in HQ_TASK_DIR. The directory is automatically deleted when the task is finished.</p></div>"},{"id":"o13-19","short":null,"long":"--crash-limit &#60;CRASH_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Sets the crash counter limit</p></div>","description":"<div class=\"rich-text\"><p>Crash counter counts how many times a task was in a running state while a worker was lost. The crash limit is *not* increased when terminated by `hq worker stop` or worker&#39;s time limit is reached.</p><p>If the crash limit is reached, the task is marked as failed.</p><p>The option takes a positive integer, &#34;never-restart&#34;, or &#34;unlimited&#34;.</p><ul><li>&#34;never-restart&#34; = task is never restarted even the crash counter is not increased * &#34;unlimited&#34; = there is no limit on crash counter value</li></ul><p class=\"rt-config\">[default: <span class=\"rt-config-value\">5</span>]</p></div>"},{"id":"o13-20","short":null,"long":"--job &#60;JOB&#62;","brief":"<div class=\"rich-text\"><p>Attach a submission to an open job</p></div>","description":null},{"id":"o13-21","short":null,"long":"--wait","brief":"<div class=\"rich-text\"><p>Wait for the job to finish</p></div>","description":null},{"id":"o13-22","short":null,"long":"--progress","brief":"<div class=\"rich-text\"><p>Shows a progressbar</p></div>","description":"<div class=\"rich-text\"><p>It is the same as call `hq progress` immediately called after the submit</p></div>"},{"id":"o13-23","short":null,"long":"--stdin","brief":"<div class=\"rich-text\"><p>Attach the stdin to the task</p></div>","description":"<div class=\"rich-text\"><p>Captures stdin and start the task with the given stdin. The job will be submitted when the stdin is closed.</p></div>"},{"id":"o13-24","short":null,"long":"--directives &#60;DIRECTIVES&#62;","brief":"<div class=\"rich-text\"><p>Select directives parsing mode</p></div>","description":"<div class=\"rich-text\"><p>`auto`: Directives will be parsed if the suffix of the first command is &#34;.sh&#34;.</p><p>`file`: Directives will be parsed regardless of the first command extension. `stdin`: Directives will be parsed from standard input passed to `hq submit` instead from the submitted command. `off`: Directives will not be parsed.</p><p>If enabled, HQ will parse `#HQ` directives from a file located in the first entered command. Parameters following the `#HQ` prefix will be used as parameters for `hq submit`.</p><p>Example (script.sh):</p><p>#!/bin/bash #HQ --name my-job #HQ --cpus=2</p><p>program --foo=bar</p><p class=\"rt-config\">[default: <span class=\"rt-config-value\">auto</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">auto, file, stdin, off</span>]</p></div>"}]}]},"c25":{"name":"worker","parent":"c0","brief":"<div class=\"rich-text\"><p>Commands for workers</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c42":{"name":"info","parent":"c40","brief":"<div class=\"rich-text\"><p>Display allocations of the specified allocation queue</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">info</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;QUEUE&#62;</span>"],"arguments":[{"name":"&#60;QUEUE&#62;","brief":"<div class=\"rich-text\"><p>ID of the allocation queue</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o42-1","short":null,"long":"--filter &#60;FILTER&#62;","brief":"<div class=\"rich-text\"><p>Display only allocations with the given state</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">queued, running, finished, failed</span>]</p></div>"}]}]},"c45":{"name":"slurm","parent":"c43","brief":"<div class=\"rich-text\"><p>Create a SLURM allocation queue</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">add</span> <span class=\"usage-command\">slurm</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-command\">--time-limit</span> <span class=\"usage-argument\">&#60;TIME_LIMIT&#62;</span> <span class=\"usage-option\">[ADDITIONAL_ARGS]...</span>"],"arguments":[{"name":"[ADDITIONAL_ARGS]...","brief":"<div class=\"rich-text\"><p>Additional arguments passed to the submit command</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o45-1","short":"-b","long":"--backlog &#60;BACKLOG&#62;","brief":"<div class=\"rich-text\"><p>The maximal number of jobs that can be waiting in the queue</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1</span>]</p></div>"},{"id":"o45-2","short":"-t","long":"--time-limit &#60;TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Time limit (walltime) of PBS/Slurm allocations</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o45-3","short":"-w","long":"--workers-per-alloc &#60;WORKERS_PER_ALLOC&#62;","brief":"<div class=\"rich-text\"><p>The number of workers (nodes) in each allocation</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1</span>]</p></div>"},{"id":"o45-4","short":null,"long":"--max-worker-count &#60;MAX_WORKER_COUNT&#62;","brief":"<div class=\"rich-text\"><p>Maximum number of concurrent workers in any state</p></div>","description":"<div class=\"rich-text\"><p>It counts workers that can be queued or running.</p></div>"},{"id":"o45-5","short":"-n","long":"--name &#60;NAME&#62;","brief":"<div class=\"rich-text\"><p>Name of the allocation queue (for debug purposes only)</p></div>","description":null},{"id":"o45-6","short":null,"long":"--cpus &#60;CPUS&#62;","brief":"<div class=\"rich-text\"><p>The cores assigned to the worker</p></div>","description":null},{"id":"o45-7","short":null,"long":"--resource &#60;RESOURCE&#62;","brief":"<div class=\"rich-text\"><p>Resources provided by the worker</p></div>","description":"<div class=\"rich-text\"><p>Examples:</p><ul><li>`--resource gpus=[0,1,2,3]`</li><li>`--resource &#34;memory=sum(1024)&#34;`</li></ul></div>"},{"id":"o45-8","short":null,"long":"--group &#60;GROUP&#62;","brief":"<div class=\"rich-text\"><p>Sets worker&#39;s group</p></div>","description":"<div class=\"rich-text\"><p>Workers from the same group are used for multi-node tasks.</p><p>By default, the worker tries to detect allocation name from SLURM/PBS, if running outside a manager, then the group is empty.</p></div>"},{"id":"o45-9","short":null,"long":"--no-detect-resources","brief":"<div class=\"rich-text\"><p>Disables auto-detection of resources</p></div>","description":null},{"id":"o45-10","short":null,"long":"--no-hyper-threading","brief":"<div class=\"rich-text\"><p>Ignores hyper-threading while detecting CPU cores</p></div>","description":null},{"id":"o45-11","short":null,"long":"--idle-timeout &#60;IDLE_TIMEOUT&#62;","brief":"<div class=\"rich-text\"><p>Duration after which will an idle worker automatically stop</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o45-12","short":null,"long":"--overview-interval &#60;OVERVIEW_INTERVAL&#62;","brief":"<div class=\"rich-text\"><p>The period of reporting the overview to the server</p></div>","description":"<div class=\"rich-text\"><p>The overview contains information about HW usage. It serves only for the user&#39;s informing the user (e.g., in dashboard), the server scheduler is independent on worker&#39;s overviews.</p><p>Set to &#34;0s&#34; to disable overview updates. By default, overview updates are disabled to reduce network bandwidth and event journal size.</p></div>"},{"id":"o45-13","short":null,"long":"--on-server-lost &#60;ON_SERVER_LOST&#62;","brief":"<div class=\"rich-text\"><p>The policy when a connection to a server is lost</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">finish-running</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">stop, finish-running</span>]</p></div>"},{"id":"o45-14","short":null,"long":"--no-dry-run","brief":"<div class=\"rich-text\"><p>Disables veryfing the parameter correctness via dry-run</p></div>","description":"<div class=\"rich-text\"><p>If dry run is enabled, the server tries to submit a probing allocation to verify whether the parameters are correct. The allocation is immediately canceled.</p></div>"},{"id":"o45-15","short":null,"long":"--worker-start-cmd &#60;WORKER_START_CMD&#62;","brief":"<div class=\"rich-text\"><p>A command executed before the start of the worker</p></div>","description":"<div class=\"rich-text\"><p>It is executed as a shell command.</p></div>"},{"id":"o45-16","short":null,"long":"--worker-stop-cmd &#60;WORKER_STOP_CMD&#62;","brief":"<div class=\"rich-text\"><p>A command executed after the worker terminates</p></div>","description":"<div class=\"rich-text\"><p>It is executed as a shell command. Note that this execution is best-effort. It is not guaranteed that the script will always be executed.</p></div>"},{"id":"o45-17","short":null,"long":"--worker-time-limit &#60;WORKER_TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Worker&#39;s time limit</p></div>","description":"<div class=\"rich-text\"><p>Time limit after which workers in the submitted allocations will be stopped. By default, it is set to the time limit of the allocation. However, if you want the workers to be stopped sooner, for example to give `worker_stop_cmd` more time to execute before the allocation is killed, you can lower the worker time limit.</p><p>The limit must not be larger than the allocation time limit.</p><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"}]}]},"c36":{"name":"jobs","parent":"c34","brief":"<div class=\"rich-text\"><p>Prints jobs ids in the stream</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">output-log</span> <span class=\"usage-argument\">&#60;PATH&#62;</span> <span class=\"usage-command\">jobs</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c53":{"name":"export","parent":"c52","brief":"<div class=\"rich-text\"><p>Export events from a journal file</p></div>","description":"<div class=\"rich-text\"><p>Events are exported as NDJSON on `stdout`.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">journal</span> <span class=\"usage-command\">export</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;JOURNAL&#62;</span>"],"arguments":[{"name":"&#60;JOURNAL&#62;","brief":"<div class=\"rich-text\"><p>Path to a journal</p></div>","description":"<div class=\"rich-text\"><p>It had to be created with `hq server start --journal=&#60;PATH&#62;`.</p></div>"}],"categories":[]},"c74":{"name":"generate-completion","parent":"c0","brief":"<div class=\"rich-text\"><p>Generate shell completion script</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">generate-completion</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SHELL&#62;</span>"],"arguments":[{"name":"&#60;SHELL&#62;","brief":"<div class=\"rich-text\"><p>Shell flavour for which the completion script should be generated</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">bash, elvish, fish, powershell, zsh</span>]</p></div>"}],"categories":[]},"c6":{"name":"job","parent":"c0","brief":"<div class=\"rich-text\"><p>Commands for jobs</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c26":{"name":"start","parent":"c25","brief":"<div class=\"rich-text\"><p>Start a worker</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-command\">start</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o26-1","short":null,"long":"--cpus &#60;CPUS&#62;","brief":"<div class=\"rich-text\"><p>The cores assigned to the worker</p></div>","description":null},{"id":"o26-2","short":null,"long":"--resource &#60;RESOURCE&#62;","brief":"<div class=\"rich-text\"><p>Resources provided by the worker</p></div>","description":"<div class=\"rich-text\"><p>Examples:</p><ul><li>`--resource gpus=[0,1,2,3]`</li><li>`--resource &#34;memory=sum(1024)&#34;`</li></ul></div>"},{"id":"o26-3","short":null,"long":"--group &#60;GROUP&#62;","brief":"<div class=\"rich-text\"><p>Sets worker&#39;s group</p></div>","description":"<div class=\"rich-text\"><p>Workers from the same group are used for multi-node tasks.</p><p>By default, the worker tries to detect allocation name from SLURM/PBS, if running outside a manager, then the group is empty.</p></div>"},{"id":"o26-4","short":null,"long":"--no-detect-resources","brief":"<div class=\"rich-text\"><p>Disables auto-detection of resources</p></div>","description":null},{"id":"o26-5","short":null,"long":"--no-hyper-threading","brief":"<div class=\"rich-text\"><p>Ignores hyper-threading while detecting CPU cores</p></div>","description":null},{"id":"o26-6","short":null,"long":"--idle-timeout &#60;IDLE_TIMEOUT&#62;","brief":"<div class=\"rich-text\"><p>Duration after which will an idle worker automatically stop</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o26-7","short":null,"long":"--overview-interval &#60;OVERVIEW_INTERVAL&#62;","brief":"<div class=\"rich-text\"><p>The period of reporting the overview to the server</p></div>","description":"<div class=\"rich-text\"><p>The overview contains information about HW usage. It serves only for the user&#39;s informing the user (e.g., in dashboard), the server scheduler is independent on worker&#39;s overviews.</p><p>Set to &#34;0s&#34; to disable overview updates. By default, overview updates are disabled to reduce network bandwidth and event journal size.</p></div>"},{"id":"o26-8","short":null,"long":"--heartbeat &#60;HEARTBEAT&#62;","brief":"<div class=\"rich-text\"><p>How often heartbeats are sent</p></div>","description":"<div class=\"rich-text\"><p>Heartbeats are used to detect worker&#39;s liveness. If the worker does not send a heartbeat for given time, then the worker is considered as lost.</p><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul><p class=\"rt-config\">[default: <span class=\"rt-config-value\">8s</span>]</p></div>"},{"id":"o26-9","short":null,"long":"--time-limit &#60;TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Worker time limit</p></div>","description":"<div class=\"rich-text\"><p>Worker exits after given time.</p><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o26-10","short":null,"long":"--manager &#60;MANAGER&#62;","brief":"<div class=\"rich-text\"><p>Sets HPC job manager for the worker</p></div>","description":"<div class=\"rich-text\"><p>It modifies what variables are read from the environment</p><p class=\"rt-config\">[default: <span class=\"rt-config-value\">detect</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">detect, none, pbs, slurm</span>]</p></div>"},{"id":"o26-11","short":null,"long":"--hostname &#60;HOSTNAME&#62;","brief":"<div class=\"rich-text\"><p>Overwrites worker hostname</p></div>","description":null},{"id":"o26-12","short":null,"long":"--on-server-lost &#60;ON_SERVER_LOST&#62;","brief":"<div class=\"rich-text\"><p>The policy when a connection to a server is lost</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">stop</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">stop, finish-running</span>]</p></div>"},{"id":"o26-13","short":null,"long":"--work-dir &#60;WORK_DIR&#62;","brief":"<div class=\"rich-text\"><p>Sets the working directory for the worker</p></div>","description":"<div class=\"rich-text\"><p>It is a directory for internal usage of the worker and where temporal task directories are created.</p><p>By default, it is placed in /tmp. It should *NOT* be placed on a network filesystem.</p></div>"},{"id":"o26-14","short":null,"long":"--max-parallel-downloads &#60;MAX_PARALLEL_DOWNLOADS&#62;","brief":"<div class=\"rich-text\"><p>The maximal parallel downloads for data objects</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">4</span>]</p></div>"},{"id":"o26-15","short":null,"long":"--max-download-tries &#60;MAX_DOWNLOAD_TRIES&#62;","brief":"<div class=\"rich-text\"><p>The maximal data object download tries</p></div>","description":"<div class=\"rich-text\"><p>Specifies how many times the worker tries to download a data object from the remote side before download is considered as failed.</p><p class=\"rt-config\">[default: <span class=\"rt-config-value\">8</span>]</p></div>"},{"id":"o26-16","short":null,"long":"--wait-between-download-tries &#60;TIME&#62;","brief":"<div class=\"rich-text\"><p>The delay between download attempts</p></div>","description":"<div class=\"rich-text\"><p>Sets how long to wait between failed downloads of data object. This time is multiplied by the number of previous retries. Therefore between 4th and 5th retry it waits 4 * the given duration</p><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1s</span>]</p></div>"}]}]},"c29":{"name":"hwdetect","parent":"c25","brief":"<div class=\"rich-text\"><p>Perform hardware detection</p></div>","description":"<div class=\"rich-text\"><p>This serves to test how a worker sees the hardware on a machine where command is invoked.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-command\">hwdetect</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o29-1","short":null,"long":"--no-hyper-threading","brief":"<div class=\"rich-text\"><p>Detect only physical cores</p></div>","description":null}]}]},"c0":{"name":"hq","parent":null,"brief":"<div class=\"rich-text\"><p>Task execution system for clusters</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o0-1","short":"-h","long":"--help","brief":"<div class=\"rich-text\"><p>Print help (see a summary with &#39;-h&#39;)</p></div>","description":null},{"id":"o0-2","short":"-V","long":"--version","brief":"<div class=\"rich-text\"><p>Print version</p></div>","description":null}]},{"title":"GLOBAL OPTIONS","options":[{"id":"o0-3","short":null,"long":"--server-dir &#60;SERVER_DIR&#62;","brief":"<div class=\"rich-text\"><p>The path where access files are stored</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[env: <span class=\"rt-config-value\">HQ_SERVER_DIR=</span>]</p></div>"},{"id":"o0-4","short":null,"long":"--colors &#60;COLORS&#62;","brief":"<div class=\"rich-text\"><p>Sets console color policy</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">auto</span>]</p><p>Possible values:</p><ul><li>auto:   Use colors if the stdout is detected to be a terminal</li><li>always: Always use colors</li><li>never:  Never use colors</li></ul></div>"},{"id":"o0-5","short":null,"long":"--output-mode &#60;OUTPUT_MODE&#62;","brief":"<div class=\"rich-text\"><p>Sets output formatting</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[env: <span class=\"rt-config-value\">HQ_OUTPUT_MODE=</span>]</p><p class=\"rt-config\">[default: <span class=\"rt-config-value\">cli</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">cli, json, quiet</span>]</p></div>"},{"id":"o0-6","short":null,"long":"--debug","brief":"<div class=\"rich-text\"><p>Enables more detailed log output</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[env: <span class=\"rt-config-value\">HQ_DEBUG=</span>]</p></div>"}]}]},"c48":{"name":"dry-run","parent":"c40","brief":"<div class=\"rich-text\"><p>Try to submit an allocation to test allocation parameters</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">dry-run</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c65":{"name":"job","parent":"c64","brief":"<div class=\"rich-text\"><p>Submitting and examining tasks and jobs</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">job</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c62":{"name":"stream","parent":"c61","brief":"<div class=\"rich-text\"><p>Stream events from a server</p></div>","description":"<div class=\"rich-text\"><p>Note: It will replay all events from the currently active journal file before new events are streamed.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">dashboard</span> <span class=\"usage-command\">stream</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c2":{"name":"start","parent":"c1","brief":"<div class=\"rich-text\"><p>Start the server</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">server</span> <span class=\"usage-command\">start</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[{"title":"Options","options":[{"id":"o2-1","short":null,"long":"--host &#60;HOST&#62;","brief":"<div class=\"rich-text\"><p>Hostname/IP of the machine under which is visible to others</p></div>","description":"<div class=\"rich-text\"><p>Default: hostname</p></div>"},{"id":"o2-2","short":null,"long":"--idle-timeout &#60;IDLE_TIMEOUT&#62;","brief":"<div class=\"rich-text\"><p>Duration after which will an idle worker automatically stop.</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o2-3","short":null,"long":"--client-port &#60;CLIENT_PORT&#62;","brief":"<div class=\"rich-text\"><p>The port for client connections</p></div>","description":null},{"id":"o2-4","short":null,"long":"--worker-port &#60;WORKER_PORT&#62;","brief":"<div class=\"rich-text\"><p>The port for worker connections</p></div>","description":null},{"id":"o2-5","short":null,"long":"--journal &#60;JOURNAL&#62;","brief":"<div class=\"rich-text\"><p>The path to a journal file</p></div>","description":"<div class=\"rich-text\"><p>If the file already exists, the file is first used to restore the server state.</p></div>"},{"id":"o2-6","short":null,"long":"--journal-flush-period &#60;JOURNAL_FLUSH_PERIOD&#62;","brief":"<div class=\"rich-text\"><p>Configure how often should be the journal written.</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul><p class=\"rt-config\">[default: <span class=\"rt-config-value\">30s</span>]</p></div>"},{"id":"o2-7","short":null,"long":"--access-file &#60;ACCESS_FILE&#62;","brief":"<div class=\"rich-text\"><p>The path to an access file</p></div>","description":null},{"id":"o2-8","short":null,"long":"--disable-client-authentication-and-encryption","brief":"<div class=\"rich-text\"><p>If set, the client connection will NOT be AUTHENTICATED and ENCRYPTED.</p></div>","description":"<div class=\"rich-text\"><p>ANYONE CAN CONNECT TO THE SERVER AS CLIENT! USE AT YOUR OWN RISK.</p></div>"},{"id":"o2-9","short":null,"long":"--disable-worker-authentication-and-encryption","brief":"<div class=\"rich-text\"><p>If set, the worker connection will NOT be AUTHENTICATED and ENCRYPTED.</p></div>","description":"<div class=\"rich-text\"><p>ANYONE CAN CONNECT TO THE SERVER AS WORKER! USE AT YOUR OWN RISK.</p></div>"}]}]},"c11":{"name":"forget","parent":"c6","brief":"<div class=\"rich-text\"><p>Forget a job</p></div>","description":"<div class=\"rich-text\"><p>This will remove the job from the server&#39;s memory, forgetting it completely and reducing the server&#39;s memory usage.</p><p>You can only forget jobs that have been completed, i.e. that are not running or waiting to be executed. If they are not completed, you have to cancel these jobs first.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">forget</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Select job(s) to forget</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o11-1","short":null,"long":"--filter &#60;FILTER&#62;","brief":"<div class=\"rich-text\"><p>Forget only jobs with the given states</p></div>","description":"<div class=\"rich-text\"><p>You can use multiple states separated by a comma. You can only filter by states that mark a completed job.</p><p class=\"rt-config\">[default: <span class=\"rt-config-value\">finished,failed,canceled</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">finished, failed, canceled</span>]</p></div>"}]}]},"c34":{"name":"output-log","parent":"c0","brief":"<div class=\"rich-text\"><p>Operations for streaming logs</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">output-log</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;PATH&#62;</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[{"name":"&#60;PATH&#62;","brief":"<div class=\"rich-text\"><p>Path of the log file</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o34-1","short":null,"long":"--server-uid &#60;SERVER_UID&#62;","brief":"<div class=\"rich-text\"><p>Filter files for the given server instance</p></div>","description":null}]}]},"c10":{"name":"cancel","parent":"c6","brief":"<div class=\"rich-text\"><p>Cancel a job</p></div>","description":"<div class=\"rich-text\"><p>This will cancel all job&#39;s tasks, stopping them from being computation.</p></div>","usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">cancel</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Select job(s) to cancel</p></div>","description":null}],"categories":[]},"c71":{"name":"cheatsheet","parent":"c64","brief":"<div class=\"rich-text\"><p>Cheatsheet with the most common HyperQueue commands</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">cheatsheet</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c9":{"name":"info","parent":"c6","brief":"<div class=\"rich-text\"><p>Display detailed information of a job</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">job</span> <span class=\"usage-command\">info</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;SELECTOR&#62;</span>"],"arguments":[{"name":"&#60;SELECTOR&#62;","brief":"<div class=\"rich-text\"><p>Single ID, ID range or `last` to display the most recently submitted job</p></div>","description":null}],"categories":[]},"c52":{"name":"journal","parent":"c0","brief":"<div class=\"rich-text\"><p>Journal management</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">journal</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;COMMAND&#62;</span>"],"arguments":[],"categories":[]},"c67":{"name":"resources","parent":"c64","brief":"<div class=\"rich-text\"><p>CPU and generic resources of tasks</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">doc</span> <span class=\"usage-command\">resources</span> <span class=\"usage-option\">[OPTIONS]</span>"],"arguments":[],"categories":[]},"c44":{"name":"pbs","parent":"c43","brief":"<div class=\"rich-text\"><p>Create a PBS allocation queue</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">alloc</span> <span class=\"usage-command\">add</span> <span class=\"usage-command\">pbs</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-command\">--time-limit</span> <span class=\"usage-argument\">&#60;TIME_LIMIT&#62;</span> <span class=\"usage-option\">[ADDITIONAL_ARGS]...</span>"],"arguments":[{"name":"[ADDITIONAL_ARGS]...","brief":"<div class=\"rich-text\"><p>Additional arguments passed to the submit command</p></div>","description":null}],"categories":[{"title":"Options","options":[{"id":"o44-1","short":"-b","long":"--backlog &#60;BACKLOG&#62;","brief":"<div class=\"rich-text\"><p>The maximal number of jobs that can be waiting in the queue</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1</span>]</p></div>"},{"id":"o44-2","short":"-t","long":"--time-limit &#60;TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Time limit (walltime) of PBS/Slurm allocations</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o44-3","short":"-w","long":"--workers-per-alloc &#60;WORKERS_PER_ALLOC&#62;","brief":"<div class=\"rich-text\"><p>The number of workers (nodes) in each allocation</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">1</span>]</p></div>"},{"id":"o44-4","short":null,"long":"--max-worker-count &#60;MAX_WORKER_COUNT&#62;","brief":"<div class=\"rich-text\"><p>Maximum number of concurrent workers in any state</p></div>","description":"<div class=\"rich-text\"><p>It counts workers that can be queued or running.</p></div>"},{"id":"o44-5","short":"-n","long":"--name &#60;NAME&#62;","brief":"<div class=\"rich-text\"><p>Name of the allocation queue (for debug purposes only)</p></div>","description":null},{"id":"o44-6","short":null,"long":"--cpus &#60;CPUS&#62;","brief":"<div class=\"rich-text\"><p>The cores assigned to the worker</p></div>","description":null},{"id":"o44-7","short":null,"long":"--resource &#60;RESOURCE&#62;","brief":"<div class=\"rich-text\"><p>Resources provided by the worker</p></div>","description":"<div class=\"rich-text\"><p>Examples:</p><ul><li>`--resource gpus=[0,1,2,3]`</li><li>`--resource &#34;memory=sum(1024)&#34;`</li></ul></div>"},{"id":"o44-8","short":null,"long":"--group &#60;GROUP&#62;","brief":"<div class=\"rich-text\"><p>Sets worker&#39;s group</p></div>","description":"<div class=\"rich-text\"><p>Workers from the same group are used for multi-node tasks.</p><p>By default, the worker tries to detect allocation name from SLURM/PBS, if running outside a manager, then the group is empty.</p></div>"},{"id":"o44-9","short":null,"long":"--no-detect-resources","brief":"<div class=\"rich-text\"><p>Disables auto-detection of resources</p></div>","description":null},{"id":"o44-10","short":null,"long":"--no-hyper-threading","brief":"<div class=\"rich-text\"><p>Ignores hyper-threading while detecting CPU cores</p></div>","description":null},{"id":"o44-11","short":null,"long":"--idle-timeout &#60;IDLE_TIMEOUT&#62;","brief":"<div class=\"rich-text\"><p>Duration after which will an idle worker automatically stop</p></div>","description":"<div class=\"rich-text\"><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"},{"id":"o44-12","short":null,"long":"--overview-interval &#60;OVERVIEW_INTERVAL&#62;","brief":"<div class=\"rich-text\"><p>The period of reporting the overview to the server</p></div>","description":"<div class=\"rich-text\"><p>The overview contains information about HW usage. It serves only for the user&#39;s informing the user (e.g., in dashboard), the server scheduler is independent on worker&#39;s overviews.</p><p>Set to &#34;0s&#34; to disable overview updates. By default, overview updates are disabled to reduce network bandwidth and event journal size.</p></div>"},{"id":"o44-13","short":null,"long":"--on-server-lost &#60;ON_SERVER_LOST&#62;","brief":"<div class=\"rich-text\"><p>The policy when a connection to a server is lost</p></div>","description":"<div class=\"rich-text\"><p class=\"rt-config\">[default: <span class=\"rt-config-value\">finish-running</span>]</p><p class=\"rt-config\">[possible values: <span class=\"rt-config-value\">stop, finish-running</span>]</p></div>"},{"id":"o44-14","short":null,"long":"--no-dry-run","brief":"<div class=\"rich-text\"><p>Disables veryfing the parameter correctness via dry-run</p></div>","description":"<div class=\"rich-text\"><p>If dry run is enabled, the server tries to submit a probing allocation to verify whether the parameters are correct. The allocation is immediately canceled.</p></div>"},{"id":"o44-15","short":null,"long":"--worker-start-cmd &#60;WORKER_START_CMD&#62;","brief":"<div class=\"rich-text\"><p>A command executed before the start of the worker</p></div>","description":"<div class=\"rich-text\"><p>It is executed as a shell command.</p></div>"},{"id":"o44-16","short":null,"long":"--worker-stop-cmd &#60;WORKER_STOP_CMD&#62;","brief":"<div class=\"rich-text\"><p>A command executed after the worker terminates</p></div>","description":"<div class=\"rich-text\"><p>It is executed as a shell command. Note that this execution is best-effort. It is not guaranteed that the script will always be executed.</p></div>"},{"id":"o44-17","short":null,"long":"--worker-time-limit &#60;WORKER_TIME_LIMIT&#62;","brief":"<div class=\"rich-text\"><p>Worker&#39;s time limit</p></div>","description":"<div class=\"rich-text\"><p>Time limit after which workers in the submitted allocations will be stopped. By default, it is set to the time limit of the allocation. However, if you want the workers to be stopped sooner, for example to give `worker_stop_cmd` more time to execute before the allocation is killed, you can lower the worker time limit.</p><p>The limit must not be larger than the allocation time limit.</p><p>You can use either the `HH:MM:SS` format or a &#34;humantime&#34; format. For example:</p><ul><li>01:00:00 =&#62; 1 hour</li><li>02:05:10 =&#62; 2 hours, 5 minutes, 10 seconds</li><li>1h =&#62; 1 hour</li><li>2h5m10s =&#62; 2 hours, 5 minutes, 10 seconds</li><li>3h 10m 5s =&#62; 3 hours, 10 minutes, 5 seconds</li><li>2 hours 5 minutes =&#62; 2 hours, 5 minutes</li></ul></div>"}]}]},"c32":{"name":"wait","parent":"c25","brief":"<div class=\"rich-text\"><p>Waits on the connection of worker(s)</p></div>","description":null,"usages":["<span class=\"usage-command\">hq</span> <span class=\"usage-command\">worker</span> <span class=\"usage-command\">wait</span> <span class=\"usage-option\">[OPTIONS]</span> <span class=\"usage-argument\">&#60;WORKER_COUNT&#62;</span>"],"arguments":[{"name":"&#60;WORKER_COUNT&#62;","brief":"<div class=\"rich-text\"><p>The number of worker(s) to wait on</p></div>","description":null}],"categories":[]}};
    let searchResults = null;
    let searchIndex = 0;
    let currentCommand = "c0";
    function toggleEvent(event, commandId) {
    event.stopPropagation();
    toggleCommand(commandId);
}

function toggleCommand(commandId, onlyExpand = false) {
    const triangleElement = document.getElementById("triangle-" + commandId);
    const isExpanded = triangleElement.classList.contains('expanded');

    if (isExpanded && onlyExpand) {
        return
    }

    const treeItem = triangleElement.parentElement;
    const childrenContainer = treeItem.nextElementSibling;

    triangleElement.classList.toggle('expanded');

    if (isExpanded) {
        triangleElement.classList.remove('expanded');
        childrenContainer.classList.add('hidden');
    } else {
        triangleElement.classList.add('expanded');
        childrenContainer.classList.remove('hidden');
    }
}


function selectCommand(command, element) {
    document.querySelectorAll('.tree-item').forEach(item => {
        item.classList.remove('selected');
    });
    element.classList.add('selected');
    showCommandDetails(command);
    currentCommand = command;
}

function showCommandDetails(command) {
    const data = commandData[command];

    if (!data) {
        return;
    }

    const usages = data.usages.map(usage => {
        return `<div class="command-signature">${usage}</div>`;
    }).join('');

    let desc = "";
    if (data.description) {
        desc = `<div style="margin-top: 8px;">${data.description}</div>`
    }

    document.getElementById('commandInfo').innerHTML = `
                 <div class="info-brief">${data.brief}</div>
                ${usages} ${desc}
            `;

    if (data.arguments.length === 0) {
        document.getElementById('argumentsInfo').innerHTML = '';
    } else {
        let items = data.arguments.map(argument => {
            let desc = "";
            let className = "";
            let showMore = "";
            let onClick = "";
            if (argument.description) {
                desc = `<div class="option-full-doc">${argument.description}</div>`;
                className = "option-item-expandable";
                showMore = '<div class="show-more-indicator">Show more</div>';
                onClick = 'onClick="toggleFullDoc(this)"';
            }
            return `<div class="option-item ${className}" ${onClick}">
                    <div class="option-header">
                        <div class="option-main">
                          <div class="argument-name">${argument.name}</div>
                          <div class="option-description">${argument.brief}</div>
                        </div>
                        ${showMore}
                    </div>
                    ${desc}
                </div>`
        });
        document.getElementById('argumentsInfo').innerHTML = `<div class="info-section">
                    <div class="info-header">
                        Arguments
                    </div>
                    <div class="info-content" id="optionsList">
                        ${items.join("")}
                    </div>
                </div>`;
    }

    if (data.categories.length === 0) {
        document.getElementById('categoryList').innerHTML = '';
    } else {

        document.getElementById('categoryList').innerHTML = data.categories.map(category => {
                const items = category.options.map(option => {
                    let desc = "";
                    let className = "";
                    let showMore = "";
                    let onClick = "";
                    if (option.description) {
                        desc = `<div class="option-full-doc">${option.description}</div>`;
                        className = "option-item-expandable";
                        showMore = '<div class="show-more-indicator">Show more</div>';
                        onClick = 'onClick="toggleFullDoc(this)"';
                    }
                    let short = "";
                    if (option.short) {
                        short = `<span class="option-short">${option.short},</span> `
                    }
                    return `<div class="option-item ${className}" id="${option.id}" ${onClick}">
                                    <div class="option-header">
                                        <div class="option-main">
                                          <div class="option-name">${short}${option.long}</div>
                                          <div class="option-description">${option.brief}</div>
                                        </div>
                                        ${showMore}
                                    </div>
                                    ${desc}
                                </div>`
                });
                return `<div class="info-section">
                            <div class="info-header">
                                ${category.title}
                            </div>
                            <div class="info-content" id="optionsList">
                                ${items.join("")}
                            </div>
                        </div>`
            }
        ).join("");
    }
}

function expandArgument(element) {
    const fullDoc = element.querySelector('.option-full-doc');
    const isExpanded = fullDoc.classList.contains('expanded');

    document.querySelectorAll('.option-full-doc.expanded').forEach(doc => {
        doc.classList.remove('expanded');
    });

    if (!isExpanded) {
        fullDoc.classList.add('expanded');
    }
}

function toggleFullDoc(element) {
    const fullDoc = element.querySelector('.option-full-doc');
    const isExpanded = fullDoc.classList.contains('expanded');

    document.querySelectorAll('.option-full-doc.expanded').forEach(doc => {
        doc.classList.remove('expanded');
    });

    if (!isExpanded) {
        fullDoc.classList.add('expanded');
    }
}

function expandCommandsTo(id) {
    toggleCommand(id, true);
    let command = commandData[id];
    if (command.parent) {
        expandCommandsTo(command.parent);
    }
}

function performSearch() {
    resetHighlights();
    const searchTerm = document.getElementById('searchInput').value.toLowerCase();
    if (!searchTerm) {
        return;
    }

    const results = [];
    const keys = Object.keys(commandData).toSorted();
    keys.forEach(command => {
        const data = commandData[command];
        if (data.name.toLowerCase().includes(searchTerm)) {
            results.push({command: command});
        }
        data.categories.forEach(category => {
            category.options.forEach(option => {
                if (option.long.toLowerCase().includes(searchTerm) || option.brief.toLowerCase().includes(searchTerm)) {
                    results.push({command: command, child_id: option.id});
                }
            })
        })
    })
    searchResults = results;
    searchIndex = 0;
    navigateSearch(0);
    updateSearchWidget();
}

function hideSearchWidget() {
    const widget = document.getElementById('searchWidget');
    widget.classList.remove('visible');
}

function resetHighlights() {
    document.querySelectorAll('.search-highlight-command').forEach(item => {
        item.classList.remove('search-highlight-command');
    })
}

function navigateSearch(direction) {
    if (searchResults.length === 0) {
        return;
    }
    const newIndex = searchIndex + direction;
    if (newIndex >= 0 && newIndex < searchResults.length) {
        resetHighlights();
        searchIndex = newIndex;
        let result = searchResults[newIndex];
        let parent = commandData[result.command].parent;
        if (parent) {
            expandCommandsTo(parent);
        }
        const commandNodeId = `node-${result.command}`;
        selectCommand(result.command, document.getElementById(commandNodeId));
        let elementId;
        if (result.child_id) {
            elementId = result.child_id;
        } else {
            elementId = commandNodeId;
        }
        let element = document.getElementById(elementId);
        element.classList.add("search-highlight-command");
        element.scrollIntoView({
            behavior: 'smooth',
            block: 'center'
        });
        updateSearchWidget();
    }
}

function updateSearchWidget() {
    const widget = document.getElementById('searchWidget');

    if (searchResults.length > 0) {
        const counter = document.getElementById('searchCounter');
        const prevBtn = document.getElementById('searchPrev');
        const nextBtn = document.getElementById('searchNext');

        widget.classList.add('visible');
        counter.textContent = `${searchIndex + 1}/${searchResults.length}`;

        prevBtn.disabled = searchIndex === 0;
        nextBtn.disabled = searchIndex === searchResults.length - 1;
    } else {
        widget.classList.remove('visible');
    }
}

function resetSearch() {
    if (searchResults) {
        resetHighlights();
        hideSearchWidget();
        searchResults = null;
    }
}
    showCommandDetails('c0');
</script>
</body>
</html>