pinokiod 3.86.0 → 3.88.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 (67) hide show
  1. package/Dockerfile +61 -0
  2. package/docker-entrypoint.sh +75 -0
  3. package/kernel/api/hf/index.js +1 -1
  4. package/kernel/api/index.js +1 -1
  5. package/kernel/api/shell/index.js +6 -0
  6. package/kernel/api/terminal/index.js +166 -0
  7. package/kernel/bin/conda.js +3 -2
  8. package/kernel/bin/index.js +53 -2
  9. package/kernel/bin/setup.js +32 -0
  10. package/kernel/bin/vs.js +11 -2
  11. package/kernel/index.js +42 -2
  12. package/kernel/info.js +36 -0
  13. package/kernel/peer.js +42 -15
  14. package/kernel/router/index.js +23 -15
  15. package/kernel/router/localhost_static_router.js +0 -3
  16. package/kernel/router/pinokio_domain_router.js +333 -0
  17. package/kernel/shells.js +21 -1
  18. package/kernel/util.js +2 -2
  19. package/package.json +2 -1
  20. package/script/install-mode.js +33 -0
  21. package/script/pinokio.json +7 -0
  22. package/server/index.js +513 -173
  23. package/server/public/Socket.js +48 -0
  24. package/server/public/common.js +1441 -276
  25. package/server/public/fseditor.js +71 -12
  26. package/server/public/install.js +1 -1
  27. package/server/public/layout.js +740 -0
  28. package/server/public/modalinput.js +0 -1
  29. package/server/public/style.css +97 -105
  30. package/server/public/tab-idle-notifier.js +629 -0
  31. package/server/public/terminal_input_tracker.js +63 -0
  32. package/server/public/urldropdown.css +319 -53
  33. package/server/public/urldropdown.js +615 -159
  34. package/server/public/window_storage.js +97 -28
  35. package/server/socket.js +40 -9
  36. package/server/views/500.ejs +2 -2
  37. package/server/views/app.ejs +3136 -1367
  38. package/server/views/bookmarklet.ejs +1 -1
  39. package/server/views/bootstrap.ejs +1 -1
  40. package/server/views/columns.ejs +2 -13
  41. package/server/views/connect.ejs +3 -4
  42. package/server/views/container.ejs +1 -2
  43. package/server/views/d.ejs +223 -53
  44. package/server/views/editor.ejs +1 -1
  45. package/server/views/file_explorer.ejs +1 -1
  46. package/server/views/index.ejs +12 -11
  47. package/server/views/index2.ejs +4 -4
  48. package/server/views/init/index.ejs +4 -5
  49. package/server/views/install.ejs +1 -1
  50. package/server/views/layout.ejs +123 -0
  51. package/server/views/net.ejs +39 -7
  52. package/server/views/network.ejs +20 -6
  53. package/server/views/network2.ejs +1 -1
  54. package/server/views/old_network.ejs +2 -2
  55. package/server/views/partials/dynamic.ejs +3 -5
  56. package/server/views/partials/menu.ejs +3 -5
  57. package/server/views/partials/running.ejs +1 -1
  58. package/server/views/pro.ejs +1 -1
  59. package/server/views/prototype/index.ejs +1 -1
  60. package/server/views/review.ejs +11 -23
  61. package/server/views/rows.ejs +2 -13
  62. package/server/views/screenshots.ejs +293 -138
  63. package/server/views/settings.ejs +3 -4
  64. package/server/views/setup.ejs +1 -2
  65. package/server/views/shell.ejs +277 -26
  66. package/server/views/terminal.ejs +322 -49
  67. package/server/views/tools.ejs +448 -4
@@ -2,6 +2,36 @@
2
2
  position: relative;
3
3
  width: 100%;
4
4
  }
5
+ .modal-overlay {
6
+ position: fixed;
7
+ inset: 0;
8
+ padding: 24px;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ z-index: 9999;
13
+ opacity: 0;
14
+ visibility: hidden;
15
+ pointer-events: none;
16
+ transition: opacity 160ms ease, visibility 0s linear 160ms;
17
+ }
18
+ .modal-overlay.is-visible {
19
+ opacity: 1;
20
+ visibility: visible;
21
+ pointer-events: auto;
22
+ transition-delay: 0s;
23
+ }
24
+ @media (prefers-reduced-motion: reduce) {
25
+ .modal-overlay {
26
+ transition: none;
27
+ }
28
+ .create-launcher-modal,
29
+ .url-modal-content,
30
+ .capture-modal {
31
+ animation: none !important;
32
+ transition: none;
33
+ }
34
+ }
5
35
  .url-modal-overlay .url-dropdown {
6
36
  max-height: 50vh;
7
37
  }
@@ -54,6 +84,9 @@ body.dark .url-dropdown-item:hover {
54
84
  display: flex;
55
85
  align-items: center;
56
86
  }
87
+ .url-dropdown-name i {
88
+ margin-right: 8px;
89
+ }
57
90
  body.dark .url-dropdown-name {
58
91
  color: #e2e8f0;
59
92
  }
@@ -122,17 +155,9 @@ body.dark .url-dropdown-empty-description {
122
155
  color: #cbd5f5;
123
156
  }
124
157
  .create-launcher-modal-overlay {
125
- position: fixed;
126
- inset: 0;
127
- padding: 24px;
128
158
  background: rgba(15, 23, 42, 0.35);
129
- display: none;
130
- align-items: center;
131
- justify-content: center;
132
- z-index: 9999;
133
159
  -webkit-backdrop-filter: blur(14px);
134
160
  backdrop-filter: blur(14px);
135
- animation: createLauncherModalFade 160ms ease-out;
136
161
  }
137
162
  .create-launcher-modal {
138
163
  background: rgba(255, 255, 255, 0.86);
@@ -144,10 +169,12 @@ body.dark .url-dropdown-empty-description {
144
169
  display: flex;
145
170
  flex-direction: column;
146
171
  gap: 20px;
172
+ max-height: calc(100vh - 96px);
173
+ overflow-y: auto;
174
+ scrollbar-gutter: stable;
147
175
  font-family: "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
148
176
  -webkit-backdrop-filter: blur(28px);
149
177
  backdrop-filter: blur(28px);
150
- animation: createLauncherModalPop 180ms ease-out;
151
178
  }
152
179
  body.dark .create-launcher-modal {
153
180
  background: rgba(17, 24, 39, 0.82);
@@ -155,6 +182,9 @@ body.dark .create-launcher-modal {
155
182
  color: rgba(226, 232, 240, 0.96);
156
183
  box-shadow: 0 50px 120px rgba(2, 6, 20, 0.82);
157
184
  }
185
+ .modal-overlay.is-visible .create-launcher-modal {
186
+ animation: createLauncherModalPop 180ms ease-out;
187
+ }
158
188
  .create-launcher-modal-header {
159
189
  display: flex;
160
190
  align-items: center;
@@ -491,6 +521,10 @@ body.dark .create-launcher-modal-button.confirm {
491
521
  .create-launcher-modal-button:active {
492
522
  transform: translateY(1px);
493
523
  }
524
+ .create-launcher-modal-button:focus-visible {
525
+ outline: 2px solid rgba(127, 91, 243, 0.8);
526
+ outline-offset: 2px;
527
+ }
494
528
  .create-launcher-modal-links {
495
529
  display: flex;
496
530
  flex-wrap: wrap;
@@ -531,18 +565,143 @@ body.dark .create-launcher-modal-advanced.secondary {
531
565
  body.dark .create-launcher-modal-advanced.secondary:hover {
532
566
  color: rgba(226, 232, 240, 0.98);
533
567
  }
534
- @keyframes createLauncherModalFade {
568
+ @media (max-width: 640px) {
569
+ .modal-overlay {
570
+ padding: 16px;
571
+ }
572
+ .create-launcher-modal {
573
+ width: min(520px, calc(100% - 32px));
574
+ padding: 24px 22px;
575
+ gap: 18px;
576
+ }
577
+ .create-launcher-modal-actions {
578
+ flex-direction: column-reverse;
579
+ align-items: stretch;
580
+ }
581
+ .create-launcher-modal-button {
582
+ width: 100%;
583
+ }
584
+ .url-modal-content {
585
+ width: min(440px, calc(100% - 20px));
586
+ padding: 24px 22px 22px;
587
+ }
588
+ .url-modal-actions {
589
+ flex-direction: column-reverse;
590
+ align-items: stretch;
591
+ }
592
+ .url-modal-button {
593
+ width: 100%;
594
+ }
595
+ .capture-modal {
596
+ width: calc(100% - 24px);
597
+ padding: 24px 20px;
598
+ }
599
+ .capture-modal-actions {
600
+ flex-direction: column;
601
+ }
602
+ .capture-modal-button {
603
+ width: 100%;
604
+ }
605
+ }
606
+ .capture-modal-overlay {
607
+ background: rgba(15, 23, 42, 0.45);
608
+ -webkit-backdrop-filter: blur(16px);
609
+ backdrop-filter: blur(16px);
610
+ }
611
+ .capture-modal {
612
+ width: min(360px, calc(100% - 32px));
613
+ padding: 28px 26px;
614
+ border-radius: 18px;
615
+ background: rgba(255, 255, 255, 0.92);
616
+ border: 1px solid rgba(15, 23, 42, 0.08);
617
+ box-shadow: 0 30px 80px rgba(15, 23, 42, 0.35);
618
+ display: flex;
619
+ flex-direction: column;
620
+ gap: 18px;
621
+ text-align: center;
622
+ }
623
+ body.dark .capture-modal {
624
+ background: rgba(15, 23, 42, 0.9);
625
+ border-color: rgba(148, 163, 184, 0.24);
626
+ color: rgba(226, 232, 240, 0.96);
627
+ box-shadow: 0 34px 88px rgba(2, 6, 20, 0.82);
628
+ }
629
+ .capture-modal-title {
630
+ font-size: 20px;
631
+ font-weight: 600;
632
+ letter-spacing: -0.01em;
633
+ color: rgba(15, 23, 42, 0.92);
634
+ }
635
+ body.dark .capture-modal-title {
636
+ color: inherit;
637
+ }
638
+ .capture-modal-description {
639
+ font-size: 14px;
640
+ line-height: 1.5;
641
+ color: rgba(71, 85, 105, 0.82);
642
+ }
643
+ body.dark .capture-modal-description {
644
+ color: rgba(203, 213, 225, 0.88);
645
+ }
646
+ .capture-modal-actions {
647
+ display: flex;
648
+ justify-content: center;
649
+ gap: 12px;
650
+ }
651
+ .capture-modal-button {
652
+ padding: 10px 20px;
653
+ border-radius: 999px;
654
+ border: 1px solid transparent;
655
+ font-size: 14px;
656
+ font-weight: 600;
657
+ cursor: pointer;
658
+ transition: background 0.18s ease, color 0.18s ease, box-shadow 0.18s ease, transform 0.12s ease;
659
+ }
660
+ .capture-modal-button.primary {
661
+ background: linear-gradient(135deg, rgba(127, 91, 243, 0.95), rgba(84, 63, 196, 0.95));
662
+ color: white;
663
+ box-shadow: 0 16px 36px rgba(111, 76, 242, 0.3);
664
+ }
665
+ .capture-modal-button.primary:hover {
666
+ box-shadow: 0 20px 42px rgba(111, 76, 242, 0.38);
667
+ transform: translateY(-1px);
668
+ }
669
+ .capture-modal-button.secondary {
670
+ background: rgba(148, 163, 184, 0.18);
671
+ color: rgba(15, 23, 42, 0.78);
672
+ }
673
+ .capture-modal-button.secondary:hover {
674
+ background: rgba(148, 163, 184, 0.28);
675
+ box-shadow: 0 12px 28px rgba(15, 23, 42, 0.12);
676
+ }
677
+ body.dark .capture-modal-button.secondary {
678
+ background: rgba(148, 163, 184, 0.2);
679
+ color: rgba(226, 232, 240, 0.92);
680
+ }
681
+ .capture-modal-button:active {
682
+ transform: translateY(1px);
683
+ }
684
+ .capture-modal-button:focus-visible {
685
+ outline: 2px solid rgba(127, 91, 243, 0.8);
686
+ outline-offset: 2px;
687
+ }
688
+ .modal-overlay.is-visible .capture-modal {
689
+ animation: captureModalPop 160ms ease-out;
690
+ }
691
+ @keyframes createLauncherModalPop {
535
692
  from {
536
693
  opacity: 0;
694
+ transform: scale(0.98) translateY(10px);
537
695
  }
538
696
  to {
539
697
  opacity: 1;
698
+ transform: scale(1) translateY(0);
540
699
  }
541
700
  }
542
- @keyframes createLauncherModalPop {
701
+ @keyframes captureModalPop {
543
702
  from {
544
703
  opacity: 0;
545
- transform: scale(0.98) translateY(10px);
704
+ transform: scale(0.97) translateY(12px);
546
705
  }
547
706
  to {
548
707
  opacity: 1;
@@ -561,10 +720,6 @@ body.dark .urlbar input[type=url] {
561
720
  background: rgba(255,255,255,0.1);
562
721
  color: white;
563
722
  }
564
- body.minimized .mobile-link-button {
565
- border-radius: 0;
566
- margin: 0;
567
- }
568
723
  .mobile-link-button {
569
724
  background: rgba(0,0,0,0.05);
570
725
  padding: 5px;
@@ -578,75 +733,186 @@ body.minimized .mobile-link-button {
578
733
  padding: 10px;
579
734
  width: 100%;
580
735
  }
581
- body.minimized header h1 .urlbar {
582
- display: none;
583
- }
584
- body.minimized header h1 .mobile-link-button {
585
- display: block;
586
- }
587
- @media only screen and (max-width: 800px) {
736
+ @media only screen and (max-width: 768px) {
588
737
  header h1 .urlbar {
589
738
  display: none;
590
739
  }
591
740
  header h1 .mobile-link-button {
592
741
  display: block;
593
742
  }
743
+ .mobile-link-button {
744
+ display: block;
745
+ margin: 0;
746
+ border-radius: 0;
747
+ }
594
748
  }
595
749
  .mobile-link-button {
596
750
  display: none;
597
751
  }
598
752
  .url-modal-overlay {
599
- position: fixed;
600
- top: 0;
601
- left: 0;
602
- width: 100%;
603
- height: 100%;
604
- background: rgba(0, 0, 0, 0.5);
605
- z-index: 10000;
606
- display: none;
607
- justify-content: center;
608
- align-items: center;
753
+ background: rgba(15, 23, 42, 0.4);
754
+ -webkit-backdrop-filter: blur(12px);
755
+ backdrop-filter: blur(12px);
609
756
  }
610
757
  .url-modal-content {
611
- background: white;
612
- padding: 50px 10px 10px;
613
- border-radius: 10px;
614
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
615
- width: 90%;
616
- max-width: 500px;
617
758
  position: relative;
759
+ width: min(520px, calc(100% - 40px));
760
+ background: rgba(255, 255, 255, 0.92);
761
+ border-radius: 18px;
762
+ padding: 28px 28px 26px;
763
+ box-shadow: 0 30px 80px rgba(15, 23, 42, 0.35);
764
+ border: 1px solid rgba(15, 23, 42, 0.08);
765
+ display: flex;
766
+ flex-direction: column;
767
+ gap: 16px;
618
768
  }
619
769
  body.dark .url-modal-content {
620
- background: rgb(27, 28, 29);
770
+ background: rgba(15, 23, 42, 0.86);
771
+ border-color: rgba(148, 163, 184, 0.2);
772
+ box-shadow: 0 36px 90px rgba(2, 6, 23, 0.82);
773
+ }
774
+ .modal-overlay.is-visible .url-modal-content {
775
+ animation: createLauncherModalPop 170ms ease-out;
621
776
  }
622
777
  .url-modal-close {
623
778
  position: absolute;
624
- top: 10px;
625
- right: 15px;
626
- font-size: 24px;
627
- color: #aaa;
779
+ top: 14px;
780
+ right: 16px;
781
+ font-size: 22px;
782
+ color: rgba(71, 85, 105, 0.7);
628
783
  cursor: pointer;
629
784
  user-select: none;
785
+ background: none;
786
+ border: none;
787
+ padding: 4px;
788
+ line-height: 1;
789
+ border-radius: 999px;
790
+ transition: color 0.2s ease, background 0.2s ease;
630
791
  }
631
792
  .url-modal-close:hover {
632
- color: #000;
793
+ color: rgba(30, 41, 59, 0.9);
794
+ background: rgba(148, 163, 184, 0.2);
633
795
  }
634
796
  body.dark .url-modal-close:hover {
635
- color: #fff;
797
+ color: rgba(226, 232, 240, 0.95);
798
+ background: rgba(148, 163, 184, 0.18);
799
+ }
800
+ .url-modal-close:focus-visible {
801
+ outline: 2px solid rgba(127, 91, 243, 0.75);
802
+ outline-offset: 2px;
636
803
  }
637
804
  .url-modal-input {
638
805
  width: 100%;
639
- padding: 15px;
640
- font-size: 16px;
641
- border: 1px solid #ddd;
642
- border-radius: 5px;
806
+ padding: 14px 16px;
807
+ font-size: 15px;
808
+ border-radius: 14px;
809
+ border: 1px solid rgba(15, 23, 42, 0.12);
643
810
  box-sizing: border-box;
644
- background: white;
811
+ background: rgba(248, 250, 255, 0.82);
812
+ transition: border-color 0.18s ease, background 0.18s ease, box-shadow 0.18s ease;
813
+ }
814
+ .url-modal-input:focus {
815
+ outline: none;
816
+ border-color: rgba(127, 91, 243, 0.8);
817
+ background: rgba(255, 255, 255, 0.95);
818
+ box-shadow: 0 0 0 4px rgba(127, 91, 243, 0.16);
645
819
  }
646
820
  body.dark .url-modal-input {
647
- background: rgba(255, 255, 255, 0.1);
648
- border-color: rgba(255, 255, 255, 0.2);
821
+ background: rgba(148, 163, 184, 0.14);
822
+ border-color: rgba(148, 163, 184, 0.3);
823
+ color: rgba(226, 232, 240, 0.95);
824
+ }
825
+ body.dark .url-modal-input:focus {
826
+ border-color: rgba(127, 91, 243, 0.7);
827
+ background: rgba(76, 86, 106, 0.3);
828
+ box-shadow: 0 0 0 4px rgba(127, 91, 243, 0.2);
829
+ }
830
+ .url-modal-description {
831
+ margin: 0;
832
+ font-size: 14px;
833
+ line-height: 1.5;
834
+ color: rgba(71, 85, 105, 0.78);
835
+ }
836
+ body.dark .url-modal-description {
837
+ color: rgba(203, 213, 225, 0.88);
838
+ }
839
+ .url-modal-content .url-dropdown {
840
+ position: relative;
841
+ top: 0;
842
+ left: 0;
843
+ right: 0;
844
+ margin-top: 12px;
845
+ border: 1px solid rgba(15, 23, 42, 0.12);
846
+ background: rgba(248, 250, 255, 0.92);
847
+ box-shadow: 0 18px 40px rgba(15, 23, 42, 0.22);
848
+ }
849
+ body.dark .url-modal-content .url-dropdown {
850
+ background: rgba(15, 23, 42, 0.86);
851
+ border-color: rgba(148, 163, 184, 0.26);
852
+ box-shadow: 0 22px 48px rgba(2, 6, 23, 0.7);
853
+ }
854
+ .url-modal-content h3 {
855
+ margin: 0;
856
+ font-size: 22px;
857
+ font-weight: 600;
858
+ letter-spacing: -0.01em;
859
+ color: rgba(15, 23, 42, 0.9);
860
+ }
861
+ body.dark .url-modal-content h3 {
862
+ color: rgba(226, 232, 240, 0.96);
863
+ }
864
+ .url-modal-actions {
865
+ display: flex;
866
+ justify-content: flex-end;
867
+ gap: 12px;
868
+ margin-top: 6px;
869
+ }
870
+ .url-modal-button {
871
+ padding: 10px 20px;
872
+ border-radius: 999px;
873
+ border: 1px solid transparent;
874
+ font-size: 15px;
875
+ font-weight: 600;
876
+ cursor: pointer;
877
+ transition: background 0.18s ease, color 0.18s ease, box-shadow 0.18s ease, transform 0.12s ease;
878
+ }
879
+ .url-modal-button.cancel {
880
+ background: rgba(148, 163, 184, 0.18);
881
+ color: rgba(15, 23, 42, 0.78);
882
+ }
883
+ .url-modal-button.cancel:hover {
884
+ background: rgba(148, 163, 184, 0.28);
885
+ box-shadow: 0 12px 28px rgba(15, 23, 42, 0.12);
886
+ }
887
+ body.dark .url-modal-button.cancel {
888
+ background: rgba(148, 163, 184, 0.2);
889
+ color: rgba(226, 232, 240, 0.9);
890
+ }
891
+ .url-modal-button.confirm {
892
+ background: linear-gradient(135deg, rgba(127, 91, 243, 0.95), rgba(84, 63, 196, 0.95));
649
893
  color: white;
894
+ box-shadow: 0 16px 36px rgba(111, 76, 242, 0.3);
895
+ }
896
+ .url-modal-button.confirm:hover {
897
+ box-shadow: 0 20px 42px rgba(111, 76, 242, 0.38);
898
+ transform: translateY(-1px);
899
+ }
900
+ .url-modal-button:active {
901
+ transform: translateY(1px);
902
+ }
903
+ .url-modal-button:focus-visible {
904
+ outline: 2px solid rgba(127, 91, 243, 0.8);
905
+ outline-offset: 2px;
906
+ }
907
+ .url-modal-button:disabled {
908
+ opacity: 0.6;
909
+ cursor: not-allowed;
910
+ box-shadow: none;
911
+ transform: none;
912
+ }
913
+ .url-modal-button:disabled:hover {
914
+ transform: none;
915
+ box-shadow: none;
650
916
  }
651
917
 
652
918
  /* Host categorization styles */