@cleocode/cleo 2026.5.33 → 2026.5.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -441,11 +441,785 @@ var init_format_context = __esm({
441
441
  }
442
442
  });
443
443
 
444
+ // packages/animations/src/animate-context.ts
445
+ function createAnimateContext(input) {
446
+ const format = input.flagResolution.format;
447
+ const quiet = input.flagResolution.quiet;
448
+ const isTTY = input.isTTY ?? Boolean(process.stdout.isTTY);
449
+ const noColor3 = input.noColor ?? process.env.NO_COLOR != null;
450
+ const inputs = { format, quiet, isTTY, noColor: noColor3 };
451
+ if (format !== "human") {
452
+ return { enabled: false, reason: "format-json", inputs };
453
+ }
454
+ if (quiet) {
455
+ return { enabled: false, reason: "quiet", inputs };
456
+ }
457
+ if (!isTTY) {
458
+ return { enabled: false, reason: "no-tty", inputs };
459
+ }
460
+ if (noColor3) {
461
+ return { enabled: false, reason: "no-color", inputs };
462
+ }
463
+ return { enabled: true, reason: "enabled", inputs };
464
+ }
465
+ var SILENT_CONTEXT;
466
+ var init_animate_context = __esm({
467
+ "packages/animations/src/animate-context.ts"() {
468
+ "use strict";
469
+ SILENT_CONTEXT = Object.freeze({
470
+ enabled: false,
471
+ reason: "format-json",
472
+ inputs: Object.freeze({
473
+ format: "json",
474
+ quiet: false,
475
+ isTTY: false,
476
+ noColor: false
477
+ })
478
+ });
479
+ }
480
+ });
481
+
482
+ // packages/animations/src/braille.ts
483
+ function gridToBraille(grid) {
484
+ const rows = grid.length;
485
+ const cols = grid[0] ? grid[0].length : 0;
486
+ const charCount = Math.ceil(cols / 2);
487
+ let result = "";
488
+ for (let c = 0; c < charCount; c++) {
489
+ let code = 10240;
490
+ for (let r = 0; r < 4 && r < rows; r++) {
491
+ for (let d = 0; d < 2; d++) {
492
+ const col = c * 2 + d;
493
+ if (col < cols && grid[r] && grid[r][col]) {
494
+ code |= BRAILLE_DOT_MAP[r][d];
495
+ }
496
+ }
497
+ }
498
+ result += String.fromCodePoint(code);
499
+ }
500
+ return result;
501
+ }
502
+ function makeGrid(rows, cols) {
503
+ if (rows <= 0 || cols <= 0) return [];
504
+ return Array.from({ length: rows }, () => Array(cols).fill(false));
505
+ }
506
+ function genScan() {
507
+ const W = 8, H = 4, frames = [];
508
+ for (let pos = -1; pos < W + 1; pos++) {
509
+ const g = makeGrid(H, W);
510
+ for (let r = 0; r < H; r++) {
511
+ for (let c = 0; c < W; c++) {
512
+ if (c === pos || c === pos - 1) g[r][c] = true;
513
+ }
514
+ }
515
+ frames.push(gridToBraille(g));
516
+ }
517
+ return frames;
518
+ }
519
+ function genRain() {
520
+ const W = 8, H = 4, totalFrames = 12, frames = [];
521
+ const offsets = [0, 3, 1, 5, 2, 7, 4, 6];
522
+ for (let f = 0; f < totalFrames; f++) {
523
+ const g = makeGrid(H, W);
524
+ for (let c = 0; c < W; c++) {
525
+ const row = (f + offsets[c]) % (H + 2);
526
+ if (row < H) g[row][c] = true;
527
+ }
528
+ frames.push(gridToBraille(g));
529
+ }
530
+ return frames;
531
+ }
532
+ function genScanLine() {
533
+ const W = 6, H = 4, frames = [];
534
+ const positions = [0, 1, 2, 3, 2, 1];
535
+ for (const row of positions) {
536
+ const g = makeGrid(H, W);
537
+ for (let c = 0; c < W; c++) {
538
+ g[row][c] = true;
539
+ if (row > 0) g[row - 1][c] = c % 2 === 0;
540
+ }
541
+ frames.push(gridToBraille(g));
542
+ }
543
+ return frames;
544
+ }
545
+ function genPulse() {
546
+ const W = 6, H = 4, frames = [];
547
+ const cx = W / 2 - 0.5, cy = H / 2 - 0.5;
548
+ const radii = [0.5, 1.2, 2, 3, 3.5];
549
+ for (const r of radii) {
550
+ const g = makeGrid(H, W);
551
+ for (let row = 0; row < H; row++) {
552
+ for (let col = 0; col < W; col++) {
553
+ const dist = Math.sqrt((col - cx) ** 2 + (row - cy) ** 2);
554
+ if (Math.abs(dist - r) < 0.9) g[row][col] = true;
555
+ }
556
+ }
557
+ frames.push(gridToBraille(g));
558
+ }
559
+ return frames;
560
+ }
561
+ function genSnake() {
562
+ const W = 4, H = 4;
563
+ const path5 = [];
564
+ for (let r = 0; r < H; r++) {
565
+ if (r % 2 === 0) {
566
+ for (let c = 0; c < W; c++) path5.push([r, c]);
567
+ } else {
568
+ for (let c = W - 1; c >= 0; c--) path5.push([r, c]);
569
+ }
570
+ }
571
+ const frames = [];
572
+ for (let i = 0; i < path5.length; i++) {
573
+ const g = makeGrid(H, W);
574
+ for (let t = 0; t < 4; t++) {
575
+ const idx = (i - t + path5.length) % path5.length;
576
+ g[path5[idx][0]][path5[idx][1]] = true;
577
+ }
578
+ frames.push(gridToBraille(g));
579
+ }
580
+ return frames;
581
+ }
582
+ function genSparkle() {
583
+ const patterns = [
584
+ [
585
+ 1,
586
+ 0,
587
+ 0,
588
+ 1,
589
+ 0,
590
+ 0,
591
+ 1,
592
+ 0,
593
+ 0,
594
+ 0,
595
+ 1,
596
+ 0,
597
+ 0,
598
+ 1,
599
+ 0,
600
+ 0,
601
+ 0,
602
+ 1,
603
+ 0,
604
+ 0,
605
+ 1,
606
+ 0,
607
+ 0,
608
+ 1,
609
+ 1,
610
+ 0,
611
+ 0,
612
+ 0,
613
+ 0,
614
+ 1,
615
+ 0,
616
+ 0
617
+ ],
618
+ [
619
+ 0,
620
+ 1,
621
+ 0,
622
+ 0,
623
+ 1,
624
+ 0,
625
+ 0,
626
+ 1,
627
+ 1,
628
+ 0,
629
+ 0,
630
+ 1,
631
+ 0,
632
+ 0,
633
+ 0,
634
+ 1,
635
+ 0,
636
+ 0,
637
+ 0,
638
+ 1,
639
+ 0,
640
+ 1,
641
+ 0,
642
+ 0,
643
+ 0,
644
+ 0,
645
+ 1,
646
+ 0,
647
+ 1,
648
+ 0,
649
+ 1,
650
+ 0
651
+ ],
652
+ [
653
+ 0,
654
+ 0,
655
+ 1,
656
+ 0,
657
+ 0,
658
+ 1,
659
+ 0,
660
+ 0,
661
+ 0,
662
+ 1,
663
+ 0,
664
+ 0,
665
+ 0,
666
+ 0,
667
+ 1,
668
+ 0,
669
+ 1,
670
+ 0,
671
+ 1,
672
+ 0,
673
+ 0,
674
+ 0,
675
+ 0,
676
+ 1,
677
+ 0,
678
+ 1,
679
+ 0,
680
+ 1,
681
+ 0,
682
+ 0,
683
+ 0,
684
+ 1
685
+ ],
686
+ [
687
+ 1,
688
+ 0,
689
+ 0,
690
+ 0,
691
+ 0,
692
+ 0,
693
+ 1,
694
+ 1,
695
+ 0,
696
+ 0,
697
+ 1,
698
+ 0,
699
+ 1,
700
+ 0,
701
+ 0,
702
+ 0,
703
+ 0,
704
+ 0,
705
+ 0,
706
+ 0,
707
+ 1,
708
+ 0,
709
+ 1,
710
+ 0,
711
+ 1,
712
+ 0,
713
+ 0,
714
+ 1,
715
+ 0,
716
+ 0,
717
+ 1,
718
+ 0
719
+ ],
720
+ [
721
+ 0,
722
+ 0,
723
+ 0,
724
+ 1,
725
+ 1,
726
+ 0,
727
+ 0,
728
+ 0,
729
+ 0,
730
+ 1,
731
+ 0,
732
+ 0,
733
+ 0,
734
+ 1,
735
+ 0,
736
+ 1,
737
+ 1,
738
+ 0,
739
+ 0,
740
+ 1,
741
+ 0,
742
+ 0,
743
+ 0,
744
+ 0,
745
+ 0,
746
+ 1,
747
+ 0,
748
+ 0,
749
+ 0,
750
+ 1,
751
+ 0,
752
+ 1
753
+ ],
754
+ [
755
+ 0,
756
+ 1,
757
+ 1,
758
+ 0,
759
+ 0,
760
+ 0,
761
+ 0,
762
+ 1,
763
+ 0,
764
+ 0,
765
+ 0,
766
+ 1,
767
+ 0,
768
+ 0,
769
+ 1,
770
+ 0,
771
+ 0,
772
+ 1,
773
+ 0,
774
+ 0,
775
+ 0,
776
+ 1,
777
+ 0,
778
+ 0,
779
+ 0,
780
+ 0,
781
+ 1,
782
+ 0,
783
+ 1,
784
+ 0,
785
+ 0,
786
+ 0
787
+ ]
788
+ ];
789
+ const W = 8, H = 4, frames = [];
790
+ for (const pat of patterns) {
791
+ const g = makeGrid(H, W);
792
+ for (let r = 0; r < H; r++) {
793
+ for (let c = 0; c < W; c++) {
794
+ g[r][c] = !!pat[r * W + c];
795
+ }
796
+ }
797
+ frames.push(gridToBraille(g));
798
+ }
799
+ return frames;
800
+ }
801
+ function genCascade() {
802
+ const W = 8, H = 4, frames = [];
803
+ for (let offset = -2; offset < W + H; offset++) {
804
+ const g = makeGrid(H, W);
805
+ for (let r = 0; r < H; r++) {
806
+ for (let c = 0; c < W; c++) {
807
+ const diag = c + r;
808
+ if (diag === offset || diag === offset - 1) g[r][c] = true;
809
+ }
810
+ }
811
+ frames.push(gridToBraille(g));
812
+ }
813
+ return frames;
814
+ }
815
+ function genColumns() {
816
+ const W = 6, H = 4, frames = [];
817
+ for (let col = 0; col < W; col++) {
818
+ for (let fillTo = H - 1; fillTo >= 0; fillTo--) {
819
+ const g = makeGrid(H, W);
820
+ for (let pc = 0; pc < col; pc++) {
821
+ for (let r = 0; r < H; r++) g[r][pc] = true;
822
+ }
823
+ for (let r = fillTo; r < H; r++) g[r][col] = true;
824
+ frames.push(gridToBraille(g));
825
+ }
826
+ }
827
+ const full = makeGrid(H, W);
828
+ for (let r = 0; r < H; r++) for (let c = 0; c < W; c++) full[r][c] = true;
829
+ frames.push(gridToBraille(full));
830
+ frames.push(gridToBraille(makeGrid(H, W)));
831
+ return frames;
832
+ }
833
+ function genOrbit() {
834
+ const W = 2, H = 4;
835
+ const path5 = [
836
+ [0, 0],
837
+ [0, 1],
838
+ [1, 1],
839
+ [2, 1],
840
+ [3, 1],
841
+ [3, 0],
842
+ [2, 0],
843
+ [1, 0]
844
+ ];
845
+ const frames = [];
846
+ for (let i = 0; i < path5.length; i++) {
847
+ const g = makeGrid(H, W);
848
+ g[path5[i][0]][path5[i][1]] = true;
849
+ const t1 = (i - 1 + path5.length) % path5.length;
850
+ g[path5[t1][0]][path5[t1][1]] = true;
851
+ frames.push(gridToBraille(g));
852
+ }
853
+ return frames;
854
+ }
855
+ function genBreathe() {
856
+ const stages = [
857
+ [],
858
+ [[1, 0]],
859
+ [
860
+ [0, 1],
861
+ [2, 0]
862
+ ],
863
+ [
864
+ [0, 0],
865
+ [1, 1],
866
+ [3, 0]
867
+ ],
868
+ [
869
+ [0, 0],
870
+ [1, 1],
871
+ [2, 0],
872
+ [3, 1]
873
+ ],
874
+ [
875
+ [0, 0],
876
+ [0, 1],
877
+ [1, 1],
878
+ [2, 0],
879
+ [3, 1]
880
+ ],
881
+ [
882
+ [0, 0],
883
+ [0, 1],
884
+ [1, 0],
885
+ [2, 1],
886
+ [3, 0],
887
+ [3, 1]
888
+ ],
889
+ [
890
+ [0, 0],
891
+ [0, 1],
892
+ [1, 0],
893
+ [1, 1],
894
+ [2, 0],
895
+ [3, 0],
896
+ [3, 1]
897
+ ],
898
+ [
899
+ [0, 0],
900
+ [0, 1],
901
+ [1, 0],
902
+ [1, 1],
903
+ [2, 0],
904
+ [2, 1],
905
+ [3, 0],
906
+ [3, 1]
907
+ ]
908
+ ];
909
+ const frames = [];
910
+ const sequence = [...stages, ...stages.slice().reverse().slice(1)];
911
+ for (const dots of sequence) {
912
+ const g = makeGrid(4, 2);
913
+ for (const [r, c] of dots) g[r][c] = true;
914
+ frames.push(gridToBraille(g));
915
+ }
916
+ return frames;
917
+ }
918
+ function genWaveRows() {
919
+ const W = 8, H = 4, totalFrames = 16, frames = [];
920
+ for (let f = 0; f < totalFrames; f++) {
921
+ const g = makeGrid(H, W);
922
+ for (let c = 0; c < W; c++) {
923
+ const phase = f - c * 0.5;
924
+ const row = Math.round((Math.sin(phase * 0.8) + 1) / 2 * (H - 1));
925
+ g[row][c] = true;
926
+ if (row > 0) g[row - 1][c] = (f + c) % 3 === 0;
927
+ }
928
+ frames.push(gridToBraille(g));
929
+ }
930
+ return frames;
931
+ }
932
+ function genCheckerboard() {
933
+ const W = 6, H = 4, frames = [];
934
+ for (let phase = 0; phase < 4; phase++) {
935
+ const g = makeGrid(H, W);
936
+ for (let r = 0; r < H; r++) {
937
+ for (let c = 0; c < W; c++) {
938
+ if (phase < 2) {
939
+ g[r][c] = (r + c + phase) % 2 === 0;
940
+ } else {
941
+ g[r][c] = (r + c + phase) % 3 === 0;
942
+ }
943
+ }
944
+ }
945
+ frames.push(gridToBraille(g));
946
+ }
947
+ return frames;
948
+ }
949
+ function genHelix() {
950
+ const W = 8, H = 4, totalFrames = 16, frames = [];
951
+ for (let f = 0; f < totalFrames; f++) {
952
+ const g = makeGrid(H, W);
953
+ for (let c = 0; c < W; c++) {
954
+ const phase = (f + c) * (Math.PI / 4);
955
+ const y1 = Math.round((Math.sin(phase) + 1) / 2 * (H - 1));
956
+ const y2 = Math.round((Math.sin(phase + Math.PI) + 1) / 2 * (H - 1));
957
+ g[y1][c] = true;
958
+ g[y2][c] = true;
959
+ }
960
+ frames.push(gridToBraille(g));
961
+ }
962
+ return frames;
963
+ }
964
+ function genFillSweep() {
965
+ const W = 4, H = 4, frames = [];
966
+ for (let row = H - 1; row >= 0; row--) {
967
+ const g = makeGrid(H, W);
968
+ for (let r = row; r < H; r++) {
969
+ for (let c = 0; c < W; c++) g[r][c] = true;
970
+ }
971
+ frames.push(gridToBraille(g));
972
+ }
973
+ const full = makeGrid(H, W);
974
+ for (let r = 0; r < H; r++) for (let c = 0; c < W; c++) full[r][c] = true;
975
+ frames.push(gridToBraille(full));
976
+ frames.push(gridToBraille(full));
977
+ for (let row = 0; row < H; row++) {
978
+ const g = makeGrid(H, W);
979
+ for (let r = row + 1; r < H; r++) {
980
+ for (let c = 0; c < W; c++) g[r][c] = true;
981
+ }
982
+ frames.push(gridToBraille(g));
983
+ }
984
+ frames.push(gridToBraille(makeGrid(H, W)));
985
+ return frames;
986
+ }
987
+ function genDiagonalSwipe() {
988
+ const W = 4, H = 4, frames = [];
989
+ const maxDiag = W + H - 2;
990
+ for (let d = 0; d <= maxDiag; d++) {
991
+ const g = makeGrid(H, W);
992
+ for (let r = 0; r < H; r++) {
993
+ for (let c = 0; c < W; c++) {
994
+ if (r + c <= d) g[r][c] = true;
995
+ }
996
+ }
997
+ frames.push(gridToBraille(g));
998
+ }
999
+ const full = makeGrid(H, W);
1000
+ for (let r = 0; r < H; r++) for (let c = 0; c < W; c++) full[r][c] = true;
1001
+ frames.push(gridToBraille(full));
1002
+ for (let d = 0; d <= maxDiag; d++) {
1003
+ const g = makeGrid(H, W);
1004
+ for (let r = 0; r < H; r++) {
1005
+ for (let c = 0; c < W; c++) {
1006
+ if (r + c > d) g[r][c] = true;
1007
+ }
1008
+ }
1009
+ frames.push(gridToBraille(g));
1010
+ }
1011
+ frames.push(gridToBraille(makeGrid(H, W)));
1012
+ return frames;
1013
+ }
1014
+ function resolveSpinner(name) {
1015
+ if (name in spinners) {
1016
+ return spinners[name];
1017
+ }
1018
+ if (name in canonSpinners) {
1019
+ return canonSpinners[name];
1020
+ }
1021
+ return void 0;
1022
+ }
1023
+ var BRAILLE_DOT_MAP, spinners, CANON_TO_GENERIC, canonSpinners;
1024
+ var init_braille = __esm({
1025
+ "packages/animations/src/braille.ts"() {
1026
+ "use strict";
1027
+ BRAILLE_DOT_MAP = [
1028
+ [1, 8],
1029
+ // row 0
1030
+ [2, 16],
1031
+ // row 1
1032
+ [4, 32],
1033
+ // row 2
1034
+ [64, 128]
1035
+ // row 3
1036
+ ];
1037
+ spinners = {
1038
+ // === Classic braille single-char ===
1039
+ braille: {
1040
+ frames: ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"],
1041
+ interval: 80
1042
+ },
1043
+ braillewave: {
1044
+ frames: ["\u2801\u2802\u2804\u2840", "\u2802\u2804\u2840\u2880", "\u2804\u2840\u2880\u2820", "\u2840\u2880\u2820\u2810", "\u2880\u2820\u2810\u2808", "\u2820\u2810\u2808\u2801", "\u2810\u2808\u2801\u2802", "\u2808\u2801\u2802\u2804"],
1045
+ interval: 100
1046
+ },
1047
+ dna: {
1048
+ frames: [
1049
+ "\u280B\u2809\u2819\u281A",
1050
+ "\u2809\u2819\u281A\u2812",
1051
+ "\u2819\u281A\u2812\u2802",
1052
+ "\u281A\u2812\u2802\u2802",
1053
+ "\u2812\u2802\u2802\u2812",
1054
+ "\u2802\u2802\u2812\u2832",
1055
+ "\u2802\u2812\u2832\u2834",
1056
+ "\u2812\u2832\u2834\u2824",
1057
+ "\u2832\u2834\u2824\u2804",
1058
+ "\u2834\u2824\u2804\u280B",
1059
+ "\u2824\u2804\u280B\u2809",
1060
+ "\u2804\u280B\u2809\u2819"
1061
+ ],
1062
+ interval: 80
1063
+ },
1064
+ // === Generated braille grid animations ===
1065
+ scan: { frames: genScan(), interval: 70 },
1066
+ rain: { frames: genRain(), interval: 100 },
1067
+ scanline: { frames: genScanLine(), interval: 120 },
1068
+ pulse: { frames: genPulse(), interval: 180 },
1069
+ snake: { frames: genSnake(), interval: 80 },
1070
+ sparkle: { frames: genSparkle(), interval: 150 },
1071
+ cascade: { frames: genCascade(), interval: 60 },
1072
+ columns: { frames: genColumns(), interval: 60 },
1073
+ orbit: { frames: genOrbit(), interval: 100 },
1074
+ breathe: { frames: genBreathe(), interval: 100 },
1075
+ waverows: { frames: genWaveRows(), interval: 90 },
1076
+ checkerboard: { frames: genCheckerboard(), interval: 250 },
1077
+ helix: { frames: genHelix(), interval: 80 },
1078
+ fillsweep: { frames: genFillSweep(), interval: 100 },
1079
+ diagswipe: { frames: genDiagonalSwipe(), interval: 60 }
1080
+ };
1081
+ CANON_TO_GENERIC = {
1082
+ looming: "helix",
1083
+ weaving: "braillewave",
1084
+ heartbeat: "breathe",
1085
+ awakening: "pulse",
1086
+ sweeping: "scan",
1087
+ watching: "orbit",
1088
+ cascade: "cascade",
1089
+ tapestry: "waverows",
1090
+ refinery: "columns"
1091
+ };
1092
+ canonSpinners = {
1093
+ looming: spinners[CANON_TO_GENERIC.looming],
1094
+ weaving: spinners[CANON_TO_GENERIC.weaving],
1095
+ heartbeat: spinners[CANON_TO_GENERIC.heartbeat],
1096
+ awakening: spinners[CANON_TO_GENERIC.awakening],
1097
+ sweeping: spinners[CANON_TO_GENERIC.sweeping],
1098
+ watching: spinners[CANON_TO_GENERIC.watching],
1099
+ cascade: spinners[CANON_TO_GENERIC.cascade],
1100
+ tapestry: spinners[CANON_TO_GENERIC.tapestry],
1101
+ refinery: spinners[CANON_TO_GENERIC.refinery]
1102
+ };
1103
+ }
1104
+ });
1105
+
1106
+ // packages/animations/src/spinner-handle.ts
1107
+ function ensureProcessExitListeners() {
1108
+ if (exitListenersInstalled) return;
1109
+ exitListenersInstalled = true;
1110
+ const restoreAll = () => {
1111
+ for (const fn of activeRestores) {
1112
+ try {
1113
+ fn();
1114
+ } catch {
1115
+ }
1116
+ }
1117
+ activeRestores.clear();
1118
+ };
1119
+ process.once("exit", restoreAll);
1120
+ process.once("SIGINT", () => {
1121
+ restoreAll();
1122
+ process.exit(130);
1123
+ });
1124
+ process.once("SIGTERM", () => {
1125
+ restoreAll();
1126
+ process.exit(143);
1127
+ });
1128
+ }
1129
+ function createSpinnerHandle(context, name, label, options) {
1130
+ if (!context.enabled) return NOOP_HANDLE;
1131
+ const spinner = resolveSpinner(name);
1132
+ if (!spinner) return NOOP_HANDLE;
1133
+ const delayMs = options?.delayMs ?? 150;
1134
+ let timer = null;
1135
+ let delayTimer = null;
1136
+ let frameIndex = 0;
1137
+ let currentLabel = label;
1138
+ let visible = false;
1139
+ let registeredRestore = null;
1140
+ function render() {
1141
+ const frame = spinner.frames[frameIndex++ % spinner.frames.length];
1142
+ process.stdout.write(`${CLEAR_LINE} ${frame} ${currentLabel}`);
1143
+ }
1144
+ function clear() {
1145
+ if (visible) {
1146
+ process.stdout.write(`${CLEAR_LINE}${SHOW_CURSOR}`);
1147
+ visible = false;
1148
+ }
1149
+ }
1150
+ function deregister() {
1151
+ if (registeredRestore) {
1152
+ activeRestores.delete(registeredRestore);
1153
+ registeredRestore = null;
1154
+ }
1155
+ }
1156
+ return {
1157
+ enabled: true,
1158
+ start() {
1159
+ if (timer || delayTimer) return;
1160
+ ensureProcessExitListeners();
1161
+ registeredRestore = clear;
1162
+ activeRestores.add(registeredRestore);
1163
+ delayTimer = setTimeout(() => {
1164
+ delayTimer = null;
1165
+ process.stdout.write(HIDE_CURSOR);
1166
+ visible = true;
1167
+ render();
1168
+ timer = setInterval(render, spinner.interval);
1169
+ }, delayMs);
1170
+ },
1171
+ stop(finalLine) {
1172
+ if (delayTimer) {
1173
+ clearTimeout(delayTimer);
1174
+ delayTimer = null;
1175
+ }
1176
+ if (timer) {
1177
+ clearInterval(timer);
1178
+ timer = null;
1179
+ }
1180
+ clear();
1181
+ deregister();
1182
+ if (finalLine !== void 0 && finalLine.length > 0) {
1183
+ process.stdout.write(`${finalLine}
1184
+ `);
1185
+ }
1186
+ },
1187
+ update(newLabel) {
1188
+ currentLabel = newLabel;
1189
+ }
1190
+ };
1191
+ }
1192
+ var HIDE_CURSOR, SHOW_CURSOR, CLEAR_LINE, NOOP_HANDLE, activeRestores, exitListenersInstalled;
1193
+ var init_spinner_handle = __esm({
1194
+ "packages/animations/src/spinner-handle.ts"() {
1195
+ "use strict";
1196
+ init_braille();
1197
+ HIDE_CURSOR = "\x1B[?25l";
1198
+ SHOW_CURSOR = "\x1B[?25h";
1199
+ CLEAR_LINE = "\r\x1B[2K";
1200
+ NOOP_HANDLE = Object.freeze({
1201
+ start() {
1202
+ },
1203
+ stop() {
1204
+ },
1205
+ update() {
1206
+ },
1207
+ enabled: false
1208
+ });
1209
+ activeRestores = /* @__PURE__ */ new Set();
1210
+ exitListenersInstalled = false;
1211
+ }
1212
+ });
1213
+
1214
+ // packages/animations/src/index.ts
1215
+ var init_src = __esm({
1216
+ "packages/animations/src/index.ts"() {
1217
+ init_animate_context();
1218
+ init_spinner_handle();
1219
+ }
1220
+ });
1221
+
444
1222
  // packages/cleo/src/cli/animation-bridge.ts
445
- import {
446
- createAnimateContext,
447
- createSpinnerHandle
448
- } from "@cleocode/animations";
449
1223
  function deriveSpinnerLabel(domain, operation) {
450
1224
  const key = `${domain}.${operation}`;
451
1225
  switch (key) {
@@ -487,6 +1261,7 @@ function createDispatchSpinner(domain, operation) {
487
1261
  var init_animation_bridge = __esm({
488
1262
  "packages/cleo/src/cli/animation-bridge.ts"() {
489
1263
  "use strict";
1264
+ init_src();
490
1265
  init_format_context();
491
1266
  }
492
1267
  });
@@ -1430,7 +2205,7 @@ var init_archive = __esm({
1430
2205
  });
1431
2206
 
1432
2207
  // packages/contracts/src/index.ts
1433
- var init_src = __esm({
2208
+ var init_src2 = __esm({
1434
2209
  "packages/contracts/src/index.ts"() {
1435
2210
  init_acceptance_gate_schema();
1436
2211
  init_attachment_schema();
@@ -1550,7 +2325,7 @@ var ENVELOPE_SUCCESS_KEY, ENVELOPE_DATA_KEY, ENVELOPE_META_KEY, LafsViolationErr
1550
2325
  var init_lafs_validator = __esm({
1551
2326
  "packages/cleo/src/cli/renderers/lafs-validator.ts"() {
1552
2327
  "use strict";
1553
- init_src();
2328
+ init_src2();
1554
2329
  ENVELOPE_SUCCESS_KEY = "success";
1555
2330
  ENVELOPE_DATA_KEY = "data";
1556
2331
  ENVELOPE_META_KEY = "meta";
@@ -1742,7 +2517,7 @@ var colorsEnabled, unicodeEnabled, BOLD, DIM, NC, RED, GREEN, YELLOW, BLUE, MAGE
1742
2517
  var init_colors = __esm({
1743
2518
  "packages/cleo/src/cli/renderers/colors.ts"() {
1744
2519
  "use strict";
1745
- init_src();
2520
+ init_src2();
1746
2521
  colorsEnabled = (() => {
1747
2522
  if (process.env["NO_COLOR"] !== void 0) return false;
1748
2523
  if (process.env["FORCE_COLOR"] !== void 0) return true;
@@ -22484,7 +23259,7 @@ __export(src_exports, {
22484
23259
  validatePlaybookCompliance: () => validatePlaybookCompliance
22485
23260
  });
22486
23261
  var PLAYBOOKS_PACKAGE_VERSION;
22487
- var init_src2 = __esm({
23262
+ var init_src3 = __esm({
22488
23263
  "packages/playbooks/src/index.ts"() {
22489
23264
  init_approval();
22490
23265
  init_migrate_e4();
@@ -22663,7 +23438,7 @@ var __playbookRuntimeOverrides, _playbookTypedHandler, QUERY_OPS5, MUTATE_OPS5,
22663
23438
  var init_playbook2 = __esm({
22664
23439
  "packages/cleo/src/dispatch/domains/playbook.ts"() {
22665
23440
  "use strict";
22666
- init_src2();
23441
+ init_src3();
22667
23442
  init_typed();
22668
23443
  init_base();
22669
23444
  init_meta2();
@@ -23566,7 +24341,7 @@ async function handleApproveGate(params, startTime) {
23566
24341
  startTime
23567
24342
  );
23568
24343
  const db = await acquirePlaybookDb();
23569
- const { approveGate: approveGate2 } = await Promise.resolve().then(() => (init_src2(), src_exports));
24344
+ const { approveGate: approveGate2 } = await Promise.resolve().then(() => (init_src3(), src_exports));
23570
24345
  const updated = approveGate2(db, resumeToken, approver, reason);
23571
24346
  return {
23572
24347
  meta: dispatchMeta("mutate", "orchestrate", "approve", startTime),
@@ -23647,7 +24422,7 @@ async function handleRejectGate(params, startTime) {
23647
24422
  startTime
23648
24423
  );
23649
24424
  const db = await acquirePlaybookDb();
23650
- const { rejectGate: rejectGate2 } = await Promise.resolve().then(() => (init_src2(), src_exports));
24425
+ const { rejectGate: rejectGate2 } = await Promise.resolve().then(() => (init_src3(), src_exports));
23651
24426
  const updated = rejectGate2(db, resumeToken, approver, reason);
23652
24427
  return {
23653
24428
  meta: dispatchMeta("mutate", "orchestrate", "reject", startTime),
@@ -34221,7 +34996,7 @@ var init_registry_args = __esm({
34221
34996
  "packages/cleo/src/cli/lib/registry-args.ts"() {
34222
34997
  "use strict";
34223
34998
  init_registry();
34224
- init_src();
34999
+ init_src2();
34225
35000
  }
34226
35001
  });
34227
35002
 
@@ -34531,7 +35306,7 @@ var checkpointCommand;
34531
35306
  var init_checkpoint = __esm({
34532
35307
  "packages/cleo/src/cli/commands/checkpoint.ts"() {
34533
35308
  "use strict";
34534
- init_src();
35309
+ init_src2();
34535
35310
  init_dist();
34536
35311
  init_renderers();
34537
35312
  checkpointCommand = defineCommand({
@@ -35720,7 +36495,7 @@ var STATUS_EXIT_CODE, statusCommand3, checkCommand3, pullCommand, contextCommand
35720
36495
  var init_context = __esm({
35721
36496
  "packages/cleo/src/cli/commands/context.ts"() {
35722
36497
  "use strict";
35723
- init_src();
36498
+ init_src2();
35724
36499
  init_dist();
35725
36500
  init_cli();
35726
36501
  init_renderers();
@@ -36479,7 +37254,7 @@ var overviewCommand, showCommand4, wavesCommand, criticalPathCommand, impactComm
36479
37254
  var init_deps = __esm({
36480
37255
  "packages/cleo/src/cli/commands/deps.ts"() {
36481
37256
  "use strict";
36482
- init_src();
37257
+ init_src2();
36483
37258
  init_dist();
36484
37259
  init_cli();
36485
37260
  init_renderers();
@@ -36741,7 +37516,7 @@ var detectDriftCommand;
36741
37516
  var init_detect_drift = __esm({
36742
37517
  "packages/cleo/src/cli/commands/detect-drift.ts"() {
36743
37518
  "use strict";
36744
- init_src();
37519
+ init_src2();
36745
37520
  init_dist();
36746
37521
  init_paths();
36747
37522
  init_renderers();
@@ -37330,7 +38105,7 @@ var addCommand4, listCommand7, fetchCommand, removeCommand2, generateCommand, ex
37330
38105
  var init_docs3 = __esm({
37331
38106
  "packages/cleo/src/cli/commands/docs.ts"() {
37332
38107
  "use strict";
37333
- init_src();
38108
+ init_src2();
37334
38109
  init_dist();
37335
38110
  init_cli();
37336
38111
  init_renderers();
@@ -38892,7 +39667,7 @@ var existsCommand;
38892
39667
  var init_exists = __esm({
38893
39668
  "packages/cleo/src/cli/commands/exists.ts"() {
38894
39669
  "use strict";
38895
- init_src();
39670
+ init_src2();
38896
39671
  init_dist();
38897
39672
  init_renderers();
38898
39673
  existsCommand = defineCommand({
@@ -39088,7 +39863,7 @@ var findCommand2;
39088
39863
  var init_find = __esm({
39089
39864
  "packages/cleo/src/cli/commands/find.ts"() {
39090
39865
  "use strict";
39091
- init_src();
39866
+ init_src2();
39092
39867
  init_dist();
39093
39868
  init_cli();
39094
39869
  init_renderers();
@@ -39431,7 +40206,7 @@ var generateChangelogCommand;
39431
40206
  var init_generate_changelog = __esm({
39432
40207
  "packages/cleo/src/cli/commands/generate-changelog.ts"() {
39433
40208
  "use strict";
39434
- init_src();
40209
+ init_src2();
39435
40210
  init_dist();
39436
40211
  init_renderers();
39437
40212
  generateChangelogCommand = defineCommand({
@@ -40635,7 +41410,7 @@ var listArgs, listCommand9;
40635
41410
  var init_list = __esm({
40636
41411
  "packages/cleo/src/cli/commands/list.ts"() {
40637
41412
  "use strict";
40638
- init_src();
41413
+ init_src2();
40639
41414
  init_dist();
40640
41415
  init_cli();
40641
41416
  init_registry_args();
@@ -48305,7 +49080,7 @@ var addRemoteCommand, removeRemoteCommand, listRemoteCommand, statusRemoteComman
48305
49080
  var init_remote = __esm({
48306
49081
  "packages/cleo/src/cli/commands/remote.ts"() {
48307
49082
  "use strict";
48308
- init_src();
49083
+ init_src2();
48309
49084
  init_dist();
48310
49085
  init_renderers();
48311
49086
  addRemoteCommand = defineCommand({
@@ -49220,7 +49995,7 @@ var finalizeCommand, backupSubCommand, taskSubCommand, restoreCommand;
49220
49995
  var init_restore = __esm({
49221
49996
  "packages/cleo/src/cli/commands/restore.ts"() {
49222
49997
  "use strict";
49223
- init_src();
49998
+ init_src2();
49224
49999
  init_dist();
49225
50000
  init_cli();
49226
50001
  init_paths();
@@ -50279,7 +51054,7 @@ var execAsync, GITHUB_REPO, selfUpdateCommand;
50279
51054
  var init_self_update = __esm({
50280
51055
  "packages/cleo/src/cli/commands/self-update.ts"() {
50281
51056
  "use strict";
50282
- init_src();
51057
+ init_src2();
50283
51058
  init_dist();
50284
51059
  init_progress();
50285
51060
  init_renderers();
@@ -51282,7 +52057,7 @@ var startCommand8, endCommand, handoffCommand2, statusCommand11, resumeCommand2,
51282
52057
  var init_session4 = __esm({
51283
52058
  "packages/cleo/src/cli/commands/session.ts"() {
51284
52059
  "use strict";
51285
- init_src();
52060
+ init_src2();
51286
52061
  init_dist();
51287
52062
  init_cli();
51288
52063
  init_renderers();
@@ -52438,7 +53213,7 @@ var addCommand8, listCommand21, showCommand15, convertCommand, archiveCommand4,
52438
53213
  var init_sticky3 = __esm({
52439
53214
  "packages/cleo/src/cli/commands/sticky.ts"() {
52440
53215
  "use strict";
52441
- init_src();
53216
+ init_src2();
52442
53217
  init_dist();
52443
53218
  init_cli();
52444
53219
  init_renderers();
@@ -52774,7 +53549,7 @@ var linksRemoveCommand, linksCommand2, reconcileCommand4, syncCommand5;
52774
53549
  var init_sync = __esm({
52775
53550
  "packages/cleo/src/cli/commands/sync.ts"() {
52776
53551
  "use strict";
52777
- init_src();
53552
+ init_src2();
52778
53553
  init_dist();
52779
53554
  init_cli();
52780
53555
  init_renderers();
@@ -54240,7 +55015,7 @@ var DEFAULT_PORT, DEFAULT_HOST, startCommand10, stopCommand5, restartCommand, st
54240
55015
  var init_web = __esm({
54241
55016
  "packages/cleo/src/cli/commands/web.ts"() {
54242
55017
  "use strict";
54243
- init_src();
55018
+ init_src2();
54244
55019
  init_dist();
54245
55020
  init_renderers();
54246
55021
  DEFAULT_PORT = 3456;