hjworktree-cli 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.context-snapshots/context-snapshot-20260106-180000.md +108 -0
  3. package/.context-snapshots/context-snapshot-20260106-235500.md +108 -0
  4. package/README.md +134 -0
  5. package/dist/server/routes/api.d.ts.map +1 -1
  6. package/dist/server/routes/api.js +45 -1
  7. package/dist/server/routes/api.js.map +1 -1
  8. package/dist/server/services/worktreeService.d.ts +23 -0
  9. package/dist/server/services/worktreeService.d.ts.map +1 -1
  10. package/dist/server/services/worktreeService.js +156 -14
  11. package/dist/server/services/worktreeService.js.map +1 -1
  12. package/dist/server/socketHandlers.d.ts.map +1 -1
  13. package/dist/server/socketHandlers.js +74 -1
  14. package/dist/server/socketHandlers.js.map +1 -1
  15. package/dist/shared/types/index.d.ts +36 -0
  16. package/dist/shared/types/index.d.ts.map +1 -1
  17. package/dist/web/assets/{index-C61yAbey.css → index-CsixHL-D.css} +1 -1
  18. package/dist/web/assets/index-D8dr9mJa.js +53 -0
  19. package/dist/web/assets/index-D8dr9mJa.js.map +1 -0
  20. package/dist/web/index.html +2 -2
  21. package/package.json +1 -1
  22. package/server/routes/api.ts +51 -2
  23. package/server/services/worktreeService.ts +181 -13
  24. package/server/socketHandlers.ts +91 -2
  25. package/shared/types/index.ts +45 -0
  26. package/web/src/App.tsx +3 -0
  27. package/web/src/components/Layout/LeftNavBar.tsx +290 -26
  28. package/web/src/components/Layout/MainLayout.tsx +2 -6
  29. package/web/src/components/Modals/AddWorktreeModal.tsx +87 -0
  30. package/web/src/components/Modals/ConfirmDeleteModal.tsx +114 -0
  31. package/web/src/components/Modals/ModalContainer.tsx +21 -0
  32. package/web/src/components/Terminal/TerminalPanel.tsx +32 -37
  33. package/web/src/stores/useAppStore.ts +200 -3
  34. package/web/src/styles/global.css +522 -0
  35. package/dist/web/assets/index-WEdVUKxb.js +0 -53
  36. package/dist/web/assets/index-WEdVUKxb.js.map +0 -1
@@ -693,3 +693,525 @@ body {
693
693
  font-weight: 500;
694
694
  color: var(--text-primary);
695
695
  }
696
+
697
+ /* ========================================
698
+ Enhanced LNB Styles (Sessions + Setup)
699
+ ======================================== */
700
+
701
+ .left-nav-bar {
702
+ width: 280px;
703
+ background-color: var(--bg-secondary);
704
+ border-right: 1px solid var(--border-color);
705
+ display: flex;
706
+ flex-direction: column;
707
+ flex-shrink: 0;
708
+ overflow-y: auto;
709
+ }
710
+
711
+ /* LNB Section */
712
+ .lnb-section {
713
+ border-bottom: 1px solid var(--border-color);
714
+ }
715
+
716
+ .lnb-section-header {
717
+ display: flex;
718
+ align-items: center;
719
+ justify-content: space-between;
720
+ padding: 16px;
721
+ cursor: pointer;
722
+ user-select: none;
723
+ transition: background-color 0.2s;
724
+ }
725
+
726
+ .lnb-section-header:hover {
727
+ background-color: var(--bg-tertiary);
728
+ }
729
+
730
+ .section-title {
731
+ font-size: 11px;
732
+ font-weight: 600;
733
+ color: var(--text-muted);
734
+ text-transform: uppercase;
735
+ letter-spacing: 0.5px;
736
+ }
737
+
738
+ .collapse-icon {
739
+ font-size: 14px;
740
+ color: var(--text-muted);
741
+ }
742
+
743
+ /* Session Section */
744
+ .sessions-section {
745
+ flex: 1;
746
+ display: flex;
747
+ flex-direction: column;
748
+ min-height: 0;
749
+ }
750
+
751
+ .session-count {
752
+ font-size: 11px;
753
+ background-color: var(--bg-tertiary);
754
+ color: var(--text-secondary);
755
+ padding: 2px 8px;
756
+ border-radius: 10px;
757
+ margin-left: 8px;
758
+ }
759
+
760
+ .session-list {
761
+ flex: 1;
762
+ overflow-y: auto;
763
+ padding: 8px;
764
+ }
765
+
766
+ /* Session Group */
767
+ .session-group {
768
+ margin-bottom: 8px;
769
+ }
770
+
771
+ .session-group-header {
772
+ display: flex;
773
+ align-items: center;
774
+ gap: 8px;
775
+ padding: 8px 12px;
776
+ cursor: pointer;
777
+ border-radius: 6px;
778
+ transition: background-color 0.2s;
779
+ }
780
+
781
+ .session-group-header:hover {
782
+ background-color: var(--bg-tertiary);
783
+ }
784
+
785
+ .group-collapse-icon {
786
+ font-size: 10px;
787
+ color: var(--text-muted);
788
+ }
789
+
790
+ .group-name {
791
+ font-size: 12px;
792
+ font-weight: 500;
793
+ color: var(--text-secondary);
794
+ flex: 1;
795
+ }
796
+
797
+ .group-count {
798
+ font-size: 11px;
799
+ color: var(--text-muted);
800
+ }
801
+
802
+ .session-group-items {
803
+ padding-left: 12px;
804
+ }
805
+
806
+ /* Session Item */
807
+ .session-item {
808
+ display: flex;
809
+ align-items: center;
810
+ gap: 8px;
811
+ padding: 8px 12px;
812
+ cursor: pointer;
813
+ border-radius: 6px;
814
+ margin: 2px 0;
815
+ border: 1px solid transparent;
816
+ transition: all 0.2s;
817
+ }
818
+
819
+ .session-item:hover {
820
+ background-color: var(--bg-tertiary);
821
+ }
822
+
823
+ .session-item.active {
824
+ background-color: rgba(88, 166, 255, 0.1);
825
+ border-color: var(--accent-blue);
826
+ }
827
+
828
+ .session-item.selected {
829
+ background-color: rgba(88, 166, 255, 0.05);
830
+ }
831
+
832
+ .session-checkbox {
833
+ width: 14px;
834
+ height: 14px;
835
+ cursor: pointer;
836
+ accent-color: var(--accent-blue);
837
+ }
838
+
839
+ .status-indicator {
840
+ width: 8px;
841
+ height: 8px;
842
+ border-radius: 50%;
843
+ flex-shrink: 0;
844
+ }
845
+
846
+ .session-name {
847
+ flex: 1;
848
+ font-size: 12px;
849
+ color: var(--text-primary);
850
+ overflow: hidden;
851
+ text-overflow: ellipsis;
852
+ white-space: nowrap;
853
+ }
854
+
855
+ .session-agent {
856
+ font-size: 10px;
857
+ font-weight: 600;
858
+ color: var(--text-muted);
859
+ background-color: var(--bg-tertiary);
860
+ padding: 2px 6px;
861
+ border-radius: 4px;
862
+ }
863
+
864
+ .session-close {
865
+ padding: 2px 6px;
866
+ background: transparent;
867
+ border: none;
868
+ color: var(--text-muted);
869
+ cursor: pointer;
870
+ border-radius: 4px;
871
+ font-size: 14px;
872
+ line-height: 1;
873
+ opacity: 0;
874
+ transition: all 0.2s;
875
+ }
876
+
877
+ .session-item:hover .session-close {
878
+ opacity: 1;
879
+ }
880
+
881
+ .session-close:hover {
882
+ background-color: var(--bg-primary);
883
+ color: var(--accent-red);
884
+ }
885
+
886
+ /* Add Session Button */
887
+ .add-session-btn {
888
+ margin: 8px 16px 16px;
889
+ padding: 10px;
890
+ background-color: transparent;
891
+ border: 1px dashed var(--border-color);
892
+ border-radius: 6px;
893
+ color: var(--text-secondary);
894
+ font-size: 12px;
895
+ cursor: pointer;
896
+ transition: all 0.2s;
897
+ }
898
+
899
+ .add-session-btn:hover {
900
+ border-color: var(--accent-blue);
901
+ color: var(--accent-blue);
902
+ background-color: rgba(88, 166, 255, 0.05);
903
+ }
904
+
905
+ /* Bulk Actions Bar */
906
+ .bulk-actions-bar {
907
+ display: flex;
908
+ align-items: center;
909
+ gap: 12px;
910
+ padding: 12px 16px;
911
+ background-color: var(--bg-tertiary);
912
+ border-top: 1px solid var(--border-color);
913
+ }
914
+
915
+ .selected-count {
916
+ font-size: 12px;
917
+ color: var(--text-secondary);
918
+ flex: 1;
919
+ }
920
+
921
+ .bulk-delete-btn {
922
+ padding: 6px 12px;
923
+ background-color: var(--accent-red);
924
+ border: none;
925
+ border-radius: 4px;
926
+ color: white;
927
+ font-size: 11px;
928
+ font-weight: 500;
929
+ cursor: pointer;
930
+ transition: filter 0.2s;
931
+ }
932
+
933
+ .bulk-delete-btn:hover {
934
+ filter: brightness(1.1);
935
+ }
936
+
937
+ .bulk-cancel-btn {
938
+ padding: 6px 12px;
939
+ background-color: transparent;
940
+ border: 1px solid var(--border-color);
941
+ border-radius: 4px;
942
+ color: var(--text-secondary);
943
+ font-size: 11px;
944
+ cursor: pointer;
945
+ transition: all 0.2s;
946
+ }
947
+
948
+ .bulk-cancel-btn:hover {
949
+ background-color: var(--bg-primary);
950
+ color: var(--text-primary);
951
+ }
952
+
953
+ /* ========================================
954
+ Modal Styles
955
+ ======================================== */
956
+
957
+ .modal-overlay {
958
+ position: fixed;
959
+ top: 0;
960
+ left: 0;
961
+ right: 0;
962
+ bottom: 0;
963
+ background-color: rgba(0, 0, 0, 0.7);
964
+ display: flex;
965
+ align-items: center;
966
+ justify-content: center;
967
+ z-index: 1000;
968
+ }
969
+
970
+ .modal-content {
971
+ background-color: var(--bg-secondary);
972
+ border: 1px solid var(--border-color);
973
+ border-radius: 12px;
974
+ width: 100%;
975
+ max-width: 440px;
976
+ max-height: 90vh;
977
+ overflow: hidden;
978
+ display: flex;
979
+ flex-direction: column;
980
+ }
981
+
982
+ .modal-confirm {
983
+ max-width: 400px;
984
+ }
985
+
986
+ .modal-header {
987
+ display: flex;
988
+ align-items: center;
989
+ justify-content: space-between;
990
+ padding: 20px 24px;
991
+ border-bottom: 1px solid var(--border-color);
992
+ }
993
+
994
+ .modal-header h2 {
995
+ font-size: 16px;
996
+ font-weight: 600;
997
+ color: var(--text-primary);
998
+ }
999
+
1000
+ .modal-close {
1001
+ padding: 4px 8px;
1002
+ background: transparent;
1003
+ border: none;
1004
+ color: var(--text-muted);
1005
+ font-size: 20px;
1006
+ cursor: pointer;
1007
+ border-radius: 4px;
1008
+ line-height: 1;
1009
+ }
1010
+
1011
+ .modal-close:hover {
1012
+ background-color: var(--bg-tertiary);
1013
+ color: var(--text-primary);
1014
+ }
1015
+
1016
+ .modal-body {
1017
+ padding: 24px;
1018
+ overflow-y: auto;
1019
+ }
1020
+
1021
+ .modal-footer {
1022
+ display: flex;
1023
+ justify-content: flex-end;
1024
+ gap: 12px;
1025
+ padding: 16px 24px;
1026
+ border-top: 1px solid var(--border-color);
1027
+ }
1028
+
1029
+ /* Form Group */
1030
+ .form-group {
1031
+ margin-bottom: 20px;
1032
+ }
1033
+
1034
+ .form-group:last-child {
1035
+ margin-bottom: 0;
1036
+ }
1037
+
1038
+ .form-group label {
1039
+ display: block;
1040
+ font-size: 13px;
1041
+ font-weight: 500;
1042
+ color: var(--text-primary);
1043
+ margin-bottom: 8px;
1044
+ }
1045
+
1046
+ .form-group select {
1047
+ width: 100%;
1048
+ padding: 10px 12px;
1049
+ background-color: var(--bg-tertiary);
1050
+ border: 1px solid var(--border-color);
1051
+ border-radius: 6px;
1052
+ color: var(--text-primary);
1053
+ font-size: 14px;
1054
+ font-family: inherit;
1055
+ }
1056
+
1057
+ .form-group select:focus {
1058
+ outline: none;
1059
+ border-color: var(--accent-blue);
1060
+ }
1061
+
1062
+ /* Agent Options in Modal */
1063
+ .agent-options {
1064
+ display: flex;
1065
+ gap: 8px;
1066
+ }
1067
+
1068
+ .agent-option {
1069
+ flex: 1;
1070
+ padding: 12px;
1071
+ background-color: var(--bg-tertiary);
1072
+ border: 2px solid var(--border-color);
1073
+ border-radius: 6px;
1074
+ cursor: pointer;
1075
+ transition: all 0.2s;
1076
+ text-align: center;
1077
+ }
1078
+
1079
+ .agent-option:hover {
1080
+ border-color: var(--accent-blue);
1081
+ }
1082
+
1083
+ .agent-option.selected {
1084
+ border-color: var(--accent-blue);
1085
+ background-color: rgba(88, 166, 255, 0.1);
1086
+ }
1087
+
1088
+ .agent-option .agent-name {
1089
+ font-size: 12px;
1090
+ font-weight: 500;
1091
+ color: var(--text-primary);
1092
+ }
1093
+
1094
+ /* Modal Buttons */
1095
+ .btn-primary {
1096
+ padding: 10px 20px;
1097
+ background-color: var(--accent-blue);
1098
+ border: none;
1099
+ border-radius: 6px;
1100
+ color: white;
1101
+ font-size: 13px;
1102
+ font-weight: 500;
1103
+ cursor: pointer;
1104
+ transition: filter 0.2s;
1105
+ font-family: inherit;
1106
+ }
1107
+
1108
+ .btn-primary:hover:not(:disabled) {
1109
+ filter: brightness(1.1);
1110
+ }
1111
+
1112
+ .btn-primary:disabled {
1113
+ background-color: var(--bg-tertiary);
1114
+ color: var(--text-muted);
1115
+ cursor: not-allowed;
1116
+ }
1117
+
1118
+ .btn-secondary {
1119
+ padding: 10px 20px;
1120
+ background-color: transparent;
1121
+ border: 1px solid var(--border-color);
1122
+ border-radius: 6px;
1123
+ color: var(--text-secondary);
1124
+ font-size: 13px;
1125
+ font-weight: 500;
1126
+ cursor: pointer;
1127
+ transition: all 0.2s;
1128
+ font-family: inherit;
1129
+ }
1130
+
1131
+ .btn-secondary:hover:not(:disabled) {
1132
+ background-color: var(--bg-tertiary);
1133
+ color: var(--text-primary);
1134
+ }
1135
+
1136
+ .btn-danger {
1137
+ padding: 10px 20px;
1138
+ background-color: var(--accent-red);
1139
+ border: none;
1140
+ border-radius: 6px;
1141
+ color: white;
1142
+ font-size: 13px;
1143
+ font-weight: 500;
1144
+ cursor: pointer;
1145
+ transition: filter 0.2s;
1146
+ font-family: inherit;
1147
+ }
1148
+
1149
+ .btn-danger:hover:not(:disabled) {
1150
+ filter: brightness(1.1);
1151
+ }
1152
+
1153
+ .btn-danger:disabled {
1154
+ opacity: 0.5;
1155
+ cursor: not-allowed;
1156
+ }
1157
+
1158
+ /* Confirm Modal Styles */
1159
+ .confirm-message {
1160
+ font-size: 14px;
1161
+ color: var(--text-primary);
1162
+ margin-bottom: 16px;
1163
+ }
1164
+
1165
+ .delete-list {
1166
+ list-style: none;
1167
+ padding: 12px;
1168
+ background-color: var(--bg-tertiary);
1169
+ border-radius: 6px;
1170
+ margin-bottom: 16px;
1171
+ max-height: 150px;
1172
+ overflow-y: auto;
1173
+ }
1174
+
1175
+ .delete-list li {
1176
+ display: flex;
1177
+ align-items: center;
1178
+ gap: 8px;
1179
+ padding: 6px 0;
1180
+ font-size: 13px;
1181
+ color: var(--text-secondary);
1182
+ }
1183
+
1184
+ .delete-list .status {
1185
+ width: 6px;
1186
+ height: 6px;
1187
+ border-radius: 50%;
1188
+ }
1189
+
1190
+ .warning-text {
1191
+ font-size: 12px;
1192
+ color: var(--accent-yellow);
1193
+ padding: 12px;
1194
+ background-color: rgba(210, 153, 34, 0.1);
1195
+ border-radius: 6px;
1196
+ }
1197
+
1198
+ /* Empty Terminal Panel */
1199
+ .terminal-panel.empty {
1200
+ display: flex;
1201
+ align-items: center;
1202
+ justify-content: center;
1203
+ }
1204
+
1205
+ .empty-message {
1206
+ text-align: center;
1207
+ color: var(--text-muted);
1208
+ }
1209
+
1210
+ .empty-message p {
1211
+ margin: 8px 0;
1212
+ }
1213
+
1214
+ .empty-message p:first-child {
1215
+ font-size: 16px;
1216
+ color: var(--text-secondary);
1217
+ }