dsh-plugin 1.4.10 → 1.4.11
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/client/client.js +294 -294
- package/lib/http/routes.js +21 -4
- package/lib/services/install/task-queue.js +50 -12
- package/lib/services/probe.js +18 -5
- package/lib/types/services/install/install-types.d.ts +2 -0
- package/lib/types/services/install/task-queue.d.ts +7 -0
- package/package.json +1 -1
- package/src/server/http/routes.ts +19 -4
- package/src/server/services/install/install-types.ts +2 -0
- package/src/server/services/install/task-queue.ts +48 -11
- package/src/server/services/probe.ts +18 -4
package/client/client.js
CHANGED
|
@@ -698,42 +698,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
698
698
|
css: css$11
|
|
699
699
|
});
|
|
700
700
|
var Header_module_css_default = {
|
|
701
|
-
"
|
|
701
|
+
"logoIcon": "qikqja_logoIcon",
|
|
702
|
+
"segBtn": "qikqja_segBtn",
|
|
703
|
+
"aboutBtn": "qikqja_aboutBtn",
|
|
704
|
+
"brandTitle": "qikqja_brandTitle",
|
|
705
|
+
"versionBtn": "qikqja_versionBtn",
|
|
706
|
+
"sortGroup": "qikqja_sortGroup",
|
|
702
707
|
"segGroup": "qikqja_segGroup",
|
|
703
|
-
"tabActive": "qikqja_tabActive",
|
|
704
708
|
"search": "qikqja_search",
|
|
705
|
-
"copyIcon": "qikqja_copyIcon",
|
|
706
|
-
"headerTitleRow": "qikqja_headerTitleRow",
|
|
707
|
-
"taglineLink": "qikqja_taglineLink",
|
|
708
|
-
"resultSeg": "qikqja_resultSeg",
|
|
709
|
-
"aboutBtn": "qikqja_aboutBtn",
|
|
710
|
-
"adText": "qikqja_adText",
|
|
711
|
-
"tab": "qikqja_tab",
|
|
712
709
|
"tabCount": "qikqja_tabCount",
|
|
710
|
+
"searchRow": "qikqja_searchRow",
|
|
711
|
+
"githubIcon": "qikqja_githubIcon",
|
|
712
|
+
"controls": "qikqja_controls",
|
|
713
|
+
"headerRight": "qikqja_headerRight",
|
|
714
|
+
"tab": "qikqja_tab",
|
|
715
|
+
"langBtn": "qikqja_langBtn",
|
|
713
716
|
"adBadge": "qikqja_adBadge",
|
|
714
|
-
"
|
|
715
|
-
"sortGroup": "qikqja_sortGroup",
|
|
716
|
-
"segBtnActive": "qikqja_segBtnActive",
|
|
717
|
-
"versionBtn": "qikqja_versionBtn",
|
|
717
|
+
"segLabel": "qikqja_segLabel",
|
|
718
718
|
"tabsRow": "qikqja_tabsRow",
|
|
719
|
-
"
|
|
720
|
-
"searchRow": "qikqja_searchRow",
|
|
721
|
-
"version": "qikqja_version",
|
|
722
|
-
"logoIcon": "qikqja_logoIcon",
|
|
723
|
-
"resultCount": "qikqja_resultCount",
|
|
724
|
-
"brandTitle": "qikqja_brandTitle",
|
|
725
|
-
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
726
|
-
"tabs": "qikqja_tabs",
|
|
727
|
-
"adArrow": "qikqja_adArrow",
|
|
719
|
+
"adText": "qikqja_adText",
|
|
728
720
|
"tagline": "qikqja_tagline",
|
|
729
|
-
"
|
|
730
|
-
"
|
|
731
|
-
"headerRight": "qikqja_headerRight",
|
|
721
|
+
"headerTitleRow": "qikqja_headerTitleRow",
|
|
722
|
+
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
732
723
|
"adBanner": "qikqja_adBanner",
|
|
724
|
+
"title": "qikqja_title",
|
|
725
|
+
"adArrow": "qikqja_adArrow",
|
|
726
|
+
"version": "qikqja_version",
|
|
727
|
+
"root": "qikqja_root",
|
|
728
|
+
"tabs": "qikqja_tabs",
|
|
729
|
+
"tabActive": "qikqja_tabActive",
|
|
730
|
+
"resultCount": "qikqja_resultCount",
|
|
731
|
+
"taglineLink": "qikqja_taglineLink",
|
|
732
|
+
"githubLink": "qikqja_githubLink",
|
|
733
733
|
"header": "qikqja_header",
|
|
734
|
-
"
|
|
735
|
-
"
|
|
736
|
-
"
|
|
734
|
+
"copyIcon": "qikqja_copyIcon",
|
|
735
|
+
"resultSeg": "qikqja_resultSeg",
|
|
736
|
+
"segBtnActive": "qikqja_segBtnActive"
|
|
737
737
|
};
|
|
738
738
|
//#endregion
|
|
739
739
|
//#region \0dsh-css:src/client/styles/Modal.module.css.mjs
|
|
@@ -752,136 +752,136 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
752
752
|
css: css$10
|
|
753
753
|
});
|
|
754
754
|
var Modal_module_css_default = {
|
|
755
|
-
"
|
|
756
|
-
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
755
|
+
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
757
756
|
"modalCmd": "BiQ1zG_modalCmd",
|
|
757
|
+
"progressTrack": "BiQ1zG_progressTrack",
|
|
758
|
+
"modalCancel": "BiQ1zG_modalCancel",
|
|
759
|
+
"linkIcon": "BiQ1zG_linkIcon",
|
|
760
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
761
|
+
"noticeMain": "BiQ1zG_noticeMain",
|
|
762
|
+
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
763
|
+
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
764
|
+
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
765
|
+
"failRow": "BiQ1zG_failRow",
|
|
766
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
767
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
768
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
769
|
+
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
770
|
+
"noticeHead": "BiQ1zG_noticeHead",
|
|
771
|
+
"queueSection": "BiQ1zG_queueSection",
|
|
772
|
+
"restartNow": "BiQ1zG_restartNow",
|
|
773
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
774
|
+
"detailPathText": "BiQ1zG_detailPathText",
|
|
775
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
776
|
+
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
777
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
778
|
+
"modalActions": "BiQ1zG_modalActions",
|
|
779
|
+
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
780
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
781
|
+
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
782
|
+
"restartLater": "BiQ1zG_restartLater",
|
|
783
|
+
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
784
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
785
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
786
|
+
"modalIn": "BiQ1zG_modalIn",
|
|
787
|
+
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
788
|
+
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
789
|
+
"modalInstall": "BiQ1zG_modalInstall",
|
|
790
|
+
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
758
791
|
"aboutModal": "BiQ1zG_aboutModal",
|
|
759
|
-
"
|
|
760
|
-
"
|
|
761
|
-
"
|
|
762
|
-
"
|
|
792
|
+
"detailLink": "BiQ1zG_detailLink",
|
|
793
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
794
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
795
|
+
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
796
|
+
"modalValue": "BiQ1zG_modalValue",
|
|
797
|
+
"failList": "BiQ1zG_failList",
|
|
798
|
+
"modalBody": "BiQ1zG_modalBody",
|
|
799
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
763
800
|
"detailDim": "BiQ1zG_detailDim",
|
|
764
|
-
"detailMono": "BiQ1zG_detailMono",
|
|
765
|
-
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
766
|
-
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
767
|
-
"toast": "BiQ1zG_toast",
|
|
768
|
-
"linkIcon": "BiQ1zG_linkIcon",
|
|
769
|
-
"failCopy": "BiQ1zG_failCopy",
|
|
770
801
|
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
771
|
-
"
|
|
772
|
-
"
|
|
773
|
-
"
|
|
774
|
-
"
|
|
775
|
-
"
|
|
776
|
-
"
|
|
777
|
-
"
|
|
802
|
+
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
803
|
+
"modalHead": "BiQ1zG_modalHead",
|
|
804
|
+
"queuedHint": "BiQ1zG_queuedHint",
|
|
805
|
+
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
806
|
+
"failKind": "BiQ1zG_failKind",
|
|
807
|
+
"modalCopy": "BiQ1zG_modalCopy",
|
|
808
|
+
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
809
|
+
"failRepo": "BiQ1zG_failRepo",
|
|
810
|
+
"overlayIn": "BiQ1zG_overlayIn",
|
|
778
811
|
"result": "BiQ1zG_result",
|
|
812
|
+
"detailModal": "BiQ1zG_detailModal",
|
|
813
|
+
"detailLabel": "BiQ1zG_detailLabel",
|
|
814
|
+
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
815
|
+
"modalLabel": "BiQ1zG_modalLabel",
|
|
816
|
+
"aboutContent": "BiQ1zG_aboutContent",
|
|
817
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
818
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
819
|
+
"progress": "BiQ1zG_progress",
|
|
779
820
|
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
821
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
780
822
|
"failHead": "BiQ1zG_failHead",
|
|
781
|
-
"
|
|
782
|
-
"
|
|
783
|
-
"
|
|
784
|
-
"
|
|
785
|
-
"
|
|
786
|
-
"
|
|
787
|
-
"
|
|
788
|
-
"overlay": "BiQ1zG_overlay",
|
|
823
|
+
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
824
|
+
"progressText": "BiQ1zG_progressText",
|
|
825
|
+
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
826
|
+
"failClear": "BiQ1zG_failClear",
|
|
827
|
+
"resultDesc": "BiQ1zG_resultDesc",
|
|
828
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
829
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
789
830
|
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
790
|
-
"
|
|
791
|
-
"
|
|
792
|
-
"
|
|
793
|
-
"
|
|
831
|
+
"trustHint": "BiQ1zG_trustHint",
|
|
832
|
+
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
833
|
+
"noticeTime": "BiQ1zG_noticeTime",
|
|
834
|
+
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
794
835
|
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
795
|
-
"
|
|
796
|
-
"
|
|
836
|
+
"modalRow": "BiQ1zG_modalRow",
|
|
837
|
+
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
797
838
|
"noticeRow": "BiQ1zG_noticeRow",
|
|
798
|
-
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
799
|
-
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
800
|
-
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
801
839
|
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
802
|
-
"
|
|
803
|
-
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
804
|
-
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
840
|
+
"stripCancel": "BiQ1zG_stripCancel",
|
|
805
841
|
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
806
|
-
"failClear": "BiQ1zG_failClear",
|
|
807
|
-
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
808
|
-
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
809
|
-
"failRow": "BiQ1zG_failRow",
|
|
810
|
-
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
811
|
-
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
812
|
-
"progressTrack": "BiQ1zG_progressTrack",
|
|
813
|
-
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
814
|
-
"logModal": "BiQ1zG_logModal",
|
|
815
|
-
"toastIn": "BiQ1zG_toastIn",
|
|
816
|
-
"modalCancel": "BiQ1zG_modalCancel",
|
|
817
|
-
"modalActions": "BiQ1zG_modalActions",
|
|
818
842
|
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
819
|
-
"
|
|
820
|
-
"
|
|
821
|
-
"
|
|
822
|
-
"
|
|
823
|
-
"
|
|
824
|
-
"
|
|
825
|
-
"
|
|
826
|
-
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
827
|
-
"modalCopy": "BiQ1zG_modalCopy",
|
|
828
|
-
"restartLater": "BiQ1zG_restartLater",
|
|
829
|
-
"restartNow": "BiQ1zG_restartNow",
|
|
830
|
-
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
831
|
-
"resultTitle": "BiQ1zG_resultTitle",
|
|
832
|
-
"helpModal": "BiQ1zG_helpModal",
|
|
843
|
+
"errorBox": "BiQ1zG_errorBox",
|
|
844
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
845
|
+
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
846
|
+
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
847
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
848
|
+
"detailArrow": "BiQ1zG_detailArrow",
|
|
849
|
+
"resultCheck": "BiQ1zG_resultCheck",
|
|
833
850
|
"modalClose": "BiQ1zG_modalClose",
|
|
834
|
-
"
|
|
835
|
-
"
|
|
836
|
-
"
|
|
837
|
-
"detailGrid": "BiQ1zG_detailGrid",
|
|
838
|
-
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
839
|
-
"queueRow": "BiQ1zG_queueRow",
|
|
840
|
-
"errorModal": "BiQ1zG_errorModal",
|
|
851
|
+
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
852
|
+
"modalTitle": "BiQ1zG_modalTitle",
|
|
853
|
+
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
841
854
|
"progressFill": "BiQ1zG_progressFill",
|
|
842
|
-
"
|
|
843
|
-
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
844
|
-
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
845
|
-
"detailArrow": "BiQ1zG_detailArrow",
|
|
846
|
-
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
847
|
-
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
848
|
-
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
849
|
-
"modalLabel": "BiQ1zG_modalLabel",
|
|
850
|
-
"modalWide": "BiQ1zG_modalWide",
|
|
851
|
-
"noticeList": "BiQ1zG_noticeList",
|
|
852
|
-
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
853
|
-
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
854
|
-
"detailStars": "BiQ1zG_detailStars",
|
|
855
|
-
"resultDesc": "BiQ1zG_resultDesc",
|
|
856
|
-
"detailRow": "BiQ1zG_detailRow",
|
|
857
|
-
"modalValue": "BiQ1zG_modalValue",
|
|
855
|
+
"failCopy": "BiQ1zG_failCopy",
|
|
858
856
|
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
859
|
-
"
|
|
860
|
-
"
|
|
861
|
-
"
|
|
862
|
-
"
|
|
863
|
-
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
864
|
-
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
865
|
-
"progressText": "BiQ1zG_progressText",
|
|
866
|
-
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
867
|
-
"noticeHead": "BiQ1zG_noticeHead",
|
|
857
|
+
"modalDesc": "BiQ1zG_modalDesc",
|
|
858
|
+
"modalLink": "BiQ1zG_modalLink",
|
|
859
|
+
"toastFail": "BiQ1zG_toastFail",
|
|
860
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
868
861
|
"progressHead": "BiQ1zG_progressHead",
|
|
869
|
-
"
|
|
870
|
-
"
|
|
862
|
+
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
863
|
+
"modal": "BiQ1zG_modal",
|
|
864
|
+
"detailMono": "BiQ1zG_detailMono",
|
|
865
|
+
"modalWide": "BiQ1zG_modalWide",
|
|
871
866
|
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
872
|
-
"
|
|
873
|
-
"modalHead": "BiQ1zG_modalHead",
|
|
874
|
-
"errorBox": "BiQ1zG_errorBox",
|
|
875
|
-
"errorHint": "BiQ1zG_errorHint",
|
|
867
|
+
"queueRow": "BiQ1zG_queueRow",
|
|
876
868
|
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
877
|
-
"
|
|
878
|
-
"
|
|
879
|
-
"
|
|
880
|
-
"
|
|
881
|
-
"
|
|
882
|
-
"
|
|
883
|
-
"
|
|
884
|
-
"
|
|
869
|
+
"overlay": "BiQ1zG_overlay",
|
|
870
|
+
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
871
|
+
"errorModal": "BiQ1zG_errorModal",
|
|
872
|
+
"errorTitle": "BiQ1zG_errorTitle",
|
|
873
|
+
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
874
|
+
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
875
|
+
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
876
|
+
"resultTitle": "BiQ1zG_resultTitle",
|
|
877
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
878
|
+
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
879
|
+
"logModal": "BiQ1zG_logModal",
|
|
880
|
+
"toast": "BiQ1zG_toast",
|
|
881
|
+
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
882
|
+
"detailStars": "BiQ1zG_detailStars",
|
|
883
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
884
|
+
"aboutMeta": "BiQ1zG_aboutMeta"
|
|
885
885
|
};
|
|
886
886
|
//#endregion
|
|
887
887
|
//#region src/client/logic/install-command.ts
|
|
@@ -951,7 +951,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
951
951
|
* tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
|
|
952
952
|
* node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
|
|
953
953
|
*/
|
|
954
|
-
const PLUGIN_VERSION = "1.4.
|
|
954
|
+
const PLUGIN_VERSION = "1.4.11";
|
|
955
955
|
const CATEGORY_ORDER = [
|
|
956
956
|
"interface",
|
|
957
957
|
"session",
|
|
@@ -1588,7 +1588,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1588
1588
|
*/
|
|
1589
1589
|
const hubHasUpdate = (() => {
|
|
1590
1590
|
if (!hubUpdateInfo) return false;
|
|
1591
|
-
if (hubUpdateInfo.version === "1.4.
|
|
1591
|
+
if (hubUpdateInfo.version === "1.4.11") return false;
|
|
1592
1592
|
const publishedAt = hubUpdateInfo.publishedAt;
|
|
1593
1593
|
if (publishedAt) {
|
|
1594
1594
|
const publishedMs = Date.parse(publishedAt);
|
|
@@ -4167,40 +4167,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4167
4167
|
css: css$9
|
|
4168
4168
|
});
|
|
4169
4169
|
var List_module_css_default = {
|
|
4170
|
-
"
|
|
4171
|
-
"
|
|
4172
|
-
"
|
|
4173
|
-
"retryBtn": "_3XaZHa_retryBtn",
|
|
4174
|
-
"stateActions": "_3XaZHa_stateActions",
|
|
4175
|
-
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
4176
|
-
"stateTitle": "_3XaZHa_stateTitle",
|
|
4177
|
-
"list": "_3XaZHa_list",
|
|
4178
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
4170
|
+
"date": "_3XaZHa_date",
|
|
4171
|
+
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
4172
|
+
"fork": "_3XaZHa_fork",
|
|
4179
4173
|
"stateDesc": "_3XaZHa_stateDesc",
|
|
4180
|
-
"diagBtn": "_3XaZHa_diagBtn",
|
|
4181
|
-
"footer": "_3XaZHa_footer",
|
|
4182
|
-
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
4183
|
-
"detailBtn": "_3XaZHa_detailBtn",
|
|
4184
4174
|
"cardMain": "_3XaZHa_cardMain",
|
|
4175
|
+
"cardHead": "_3XaZHa_cardHead",
|
|
4176
|
+
"diagBtn": "_3XaZHa_diagBtn",
|
|
4177
|
+
"star": "_3XaZHa_star",
|
|
4178
|
+
"verified": "_3XaZHa_verified",
|
|
4179
|
+
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
4180
|
+
"versionBadge": "_3XaZHa_versionBadge",
|
|
4185
4181
|
"state": "_3XaZHa_state",
|
|
4186
|
-
"date": "_3XaZHa_date",
|
|
4187
4182
|
"actions": "_3XaZHa_actions",
|
|
4183
|
+
"cardTitle": "_3XaZHa_cardTitle",
|
|
4184
|
+
"topics": "_3XaZHa_topics",
|
|
4185
|
+
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
4186
|
+
"desc": "_3XaZHa_desc",
|
|
4187
|
+
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
4188
|
+
"detailBtn": "_3XaZHa_detailBtn",
|
|
4189
|
+
"retryBtn": "_3XaZHa_retryBtn",
|
|
4190
|
+
"footer": "_3XaZHa_footer",
|
|
4191
|
+
"list": "_3XaZHa_list",
|
|
4188
4192
|
"installBtn": "_3XaZHa_installBtn",
|
|
4189
|
-
"
|
|
4193
|
+
"cardSide": "_3XaZHa_cardSide",
|
|
4194
|
+
"topic": "_3XaZHa_topic",
|
|
4195
|
+
"body": "_3XaZHa_body",
|
|
4196
|
+
"stateTitle": "_3XaZHa_stateTitle",
|
|
4190
4197
|
"card": "_3XaZHa_card",
|
|
4191
|
-
"
|
|
4192
|
-
"
|
|
4198
|
+
"stats": "_3XaZHa_stats",
|
|
4199
|
+
"stateActions": "_3XaZHa_stateActions",
|
|
4200
|
+
"updateBadge": "_3XaZHa_updateBadge",
|
|
4193
4201
|
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
4194
|
-
"desc": "_3XaZHa_desc",
|
|
4195
|
-
"body": "_3XaZHa_body",
|
|
4196
|
-
"topics": "_3XaZHa_topics",
|
|
4197
|
-
"fork": "_3XaZHa_fork",
|
|
4198
4202
|
"footLink": "_3XaZHa_footLink",
|
|
4199
|
-
"
|
|
4200
|
-
"cardHead": "_3XaZHa_cardHead",
|
|
4201
|
-
"cardTitle": "_3XaZHa_cardTitle",
|
|
4202
|
-
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
4203
|
-
"moreSentinel": "_3XaZHa_moreSentinel"
|
|
4203
|
+
"installBtnUpdate": "_3XaZHa_installBtnUpdate"
|
|
4204
4204
|
};
|
|
4205
4205
|
//#endregion
|
|
4206
4206
|
//#region src/client/hooks/useIncrementalList.ts
|
|
@@ -4407,15 +4407,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4407
4407
|
css: css$8
|
|
4408
4408
|
});
|
|
4409
4409
|
var SectionTabs_module_css_default = {
|
|
4410
|
-
"
|
|
4411
|
-
"
|
|
4412
|
-
"tabCount": "_7tvizq_tabCount",
|
|
4410
|
+
"tabCountActive": "_7tvizq_tabCountActive",
|
|
4411
|
+
"noticeCount": "_7tvizq_noticeCount",
|
|
4413
4412
|
"noticeIcon": "_7tvizq_noticeIcon",
|
|
4414
4413
|
"noticeBtn": "_7tvizq_noticeBtn",
|
|
4415
|
-
"
|
|
4414
|
+
"tabCount": "_7tvizq_tabCount",
|
|
4415
|
+
"tabIcon": "_7tvizq_tabIcon",
|
|
4416
|
+
"tabActive": "_7tvizq_tabActive",
|
|
4416
4417
|
"root": "_7tvizq_root",
|
|
4417
|
-
"
|
|
4418
|
-
"tabActive": "_7tvizq_tabActive"
|
|
4418
|
+
"tab": "_7tvizq_tab"
|
|
4419
4419
|
};
|
|
4420
4420
|
//#endregion
|
|
4421
4421
|
//#region src/client/components/layout/SectionTabs.tsx
|
|
@@ -4492,42 +4492,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4492
4492
|
css: css$7
|
|
4493
4493
|
});
|
|
4494
4494
|
var InstalledView_module_css_default = {
|
|
4495
|
-
"
|
|
4495
|
+
"updateBadge": "_1nXeGW_updateBadge",
|
|
4496
4496
|
"rowDetail": "_1nXeGW_rowDetail",
|
|
4497
|
-
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
4498
|
-
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
4499
|
-
"rowDesc": "_1nXeGW_rowDesc",
|
|
4500
|
-
"rowMain": "_1nXeGW_rowMain",
|
|
4501
|
-
"versionBadge": "_1nXeGW_versionBadge",
|
|
4502
|
-
"rowTitle": "_1nXeGW_rowTitle",
|
|
4503
4497
|
"toolbar": "_1nXeGW_toolbar",
|
|
4504
|
-
"
|
|
4498
|
+
"rowDesc": "_1nXeGW_rowDesc",
|
|
4499
|
+
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
4505
4500
|
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
4506
|
-
"rowActions": "_1nXeGW_rowActions",
|
|
4507
|
-
"list": "_1nXeGW_list",
|
|
4508
|
-
"statusInactive": "_1nXeGW_statusInactive",
|
|
4509
|
-
"rowRestart": "_1nXeGW_rowRestart",
|
|
4510
|
-
"searchInput": "_1nXeGW_searchInput",
|
|
4511
|
-
"root": "_1nXeGW_root",
|
|
4512
|
-
"row": "_1nXeGW_row",
|
|
4513
|
-
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
4514
|
-
"rowMeta": "_1nXeGW_rowMeta",
|
|
4515
|
-
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
4516
4501
|
"segLabel": "_1nXeGW_segLabel",
|
|
4517
|
-
"
|
|
4518
|
-
"
|
|
4502
|
+
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
4503
|
+
"statusInactive": "_1nXeGW_statusInactive",
|
|
4519
4504
|
"segRow": "_1nXeGW_segRow",
|
|
4505
|
+
"rowMain": "_1nXeGW_rowMain",
|
|
4520
4506
|
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
4507
|
+
"segGroup": "_1nXeGW_segGroup",
|
|
4508
|
+
"searchInput": "_1nXeGW_searchInput",
|
|
4509
|
+
"segBtn": "_1nXeGW_segBtn",
|
|
4510
|
+
"rowRepo": "_1nXeGW_rowRepo",
|
|
4511
|
+
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
4512
|
+
"versionBadge": "_1nXeGW_versionBadge",
|
|
4513
|
+
"rowRestart": "_1nXeGW_rowRestart",
|
|
4521
4514
|
"statusDot": "_1nXeGW_statusDot",
|
|
4522
|
-
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
4523
4515
|
"empty": "_1nXeGW_empty",
|
|
4524
|
-
"
|
|
4525
|
-
"
|
|
4526
|
-
"
|
|
4516
|
+
"root": "_1nXeGW_root",
|
|
4517
|
+
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
4518
|
+
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
4527
4519
|
"statusPending": "_1nXeGW_statusPending",
|
|
4528
|
-
"rowCategory": "_1nXeGW_rowCategory",
|
|
4529
4520
|
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
4530
|
-
"
|
|
4521
|
+
"exampleRow": "_1nXeGW_exampleRow",
|
|
4522
|
+
"rowActions": "_1nXeGW_rowActions",
|
|
4523
|
+
"searchWrap": "_1nXeGW_searchWrap",
|
|
4524
|
+
"rowMeta": "_1nXeGW_rowMeta",
|
|
4525
|
+
"list": "_1nXeGW_list",
|
|
4526
|
+
"rowTitle": "_1nXeGW_rowTitle",
|
|
4527
|
+
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
4528
|
+
"row": "_1nXeGW_row",
|
|
4529
|
+
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
4530
|
+
"rowCategory": "_1nXeGW_rowCategory"
|
|
4531
4531
|
};
|
|
4532
4532
|
//#endregion
|
|
4533
4533
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -4773,28 +4773,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4773
4773
|
css: css$6
|
|
4774
4774
|
});
|
|
4775
4775
|
var CustomInstallView_module_css_default = {
|
|
4776
|
-
"installCards": "zISxCG_installCards",
|
|
4777
|
-
"installLabel": "zISxCG_installLabel",
|
|
4778
|
-
"installInsertBtn": "zISxCG_installInsertBtn",
|
|
4779
|
-
"installExample": "zISxCG_installExample",
|
|
4780
|
-
"installRow": "zISxCG_installRow",
|
|
4781
|
-
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
4782
4776
|
"helpCmd": "zISxCG_helpCmd",
|
|
4777
|
+
"installExample": "zISxCG_installExample",
|
|
4778
|
+
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
4779
|
+
"desc": "zISxCG_desc",
|
|
4783
4780
|
"channelOffText": "zISxCG_channelOffText",
|
|
4784
|
-
"
|
|
4785
|
-
"channelOff": "zISxCG_channelOff",
|
|
4786
|
-
"installCard": "zISxCG_installCard",
|
|
4781
|
+
"installInsertBtn": "zISxCG_installInsertBtn",
|
|
4787
4782
|
"root": "zISxCG_root",
|
|
4788
|
-
"helpLine": "zISxCG_helpLine",
|
|
4789
|
-
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
4790
|
-
"desc": "zISxCG_desc",
|
|
4791
|
-
"installInputError": "zISxCG_installInputError",
|
|
4792
4783
|
"installCardHead": "zISxCG_installCardHead",
|
|
4784
|
+
"installInputError": "zISxCG_installInputError",
|
|
4785
|
+
"installRow": "zISxCG_installRow",
|
|
4786
|
+
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
4787
|
+
"installInput": "zISxCG_installInput",
|
|
4788
|
+
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
4789
|
+
"installLabel": "zISxCG_installLabel",
|
|
4793
4790
|
"helpBody": "zISxCG_helpBody",
|
|
4794
|
-
"helpNote": "zISxCG_helpNote",
|
|
4795
4791
|
"installError": "zISxCG_installError",
|
|
4796
|
-
"
|
|
4797
|
-
"
|
|
4792
|
+
"helpNote": "zISxCG_helpNote",
|
|
4793
|
+
"installCard": "zISxCG_installCard",
|
|
4794
|
+
"helpLine": "zISxCG_helpLine",
|
|
4795
|
+
"channelOff": "zISxCG_channelOff",
|
|
4796
|
+
"installCards": "zISxCG_installCards",
|
|
4797
|
+
"installBtn": "zISxCG_installBtn"
|
|
4798
4798
|
};
|
|
4799
4799
|
//#endregion
|
|
4800
4800
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -5084,30 +5084,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5084
5084
|
css: css$5
|
|
5085
5085
|
});
|
|
5086
5086
|
var SettingsView_module_css_default = {
|
|
5087
|
-
"
|
|
5088
|
-
"pageHeader": "_506LLG_pageHeader",
|
|
5087
|
+
"settingLabel": "_506LLG_settingLabel",
|
|
5089
5088
|
"settingRowStack": "_506LLG_settingRowStack",
|
|
5090
|
-
"textInput": "_506LLG_textInput",
|
|
5091
5089
|
"navIcon": "_506LLG_navIcon",
|
|
5092
|
-
"
|
|
5090
|
+
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5093
5091
|
"pageTitle": "_506LLG_pageTitle",
|
|
5094
|
-
"
|
|
5092
|
+
"settingControlStack": "_506LLG_settingControlStack",
|
|
5093
|
+
"controlDropdown": "_506LLG_controlDropdown",
|
|
5094
|
+
"settingTitle": "_506LLG_settingTitle",
|
|
5095
|
+
"navItemActive": "_506LLG_navItemActive",
|
|
5096
|
+
"pageHeader": "_506LLG_pageHeader",
|
|
5097
|
+
"card": "_506LLG_card",
|
|
5095
5098
|
"root": "_506LLG_root",
|
|
5099
|
+
"textInput": "_506LLG_textInput",
|
|
5100
|
+
"proxyControl": "_506LLG_proxyControl",
|
|
5096
5101
|
"sidebar": "_506LLG_sidebar",
|
|
5097
|
-
"settingTitle": "_506LLG_settingTitle",
|
|
5098
|
-
"settingLabel": "_506LLG_settingLabel",
|
|
5099
|
-
"settingRow": "_506LLG_settingRow",
|
|
5100
|
-
"settingControlStack": "_506LLG_settingControlStack",
|
|
5101
|
-
"proxyHint": "_506LLG_proxyHint",
|
|
5102
|
-
"settingDesc": "_506LLG_settingDesc",
|
|
5103
5102
|
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
5104
|
-
"
|
|
5105
|
-
"
|
|
5106
|
-
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5107
|
-
"navItemActive": "_506LLG_navItemActive",
|
|
5103
|
+
"settingDesc": "_506LLG_settingDesc",
|
|
5104
|
+
"proxyHint": "_506LLG_proxyHint",
|
|
5108
5105
|
"content": "_506LLG_content",
|
|
5106
|
+
"resetBtn": "_506LLG_resetBtn",
|
|
5107
|
+
"settingRow": "_506LLG_settingRow",
|
|
5109
5108
|
"settingControl": "_506LLG_settingControl",
|
|
5110
|
-
"
|
|
5109
|
+
"pageDesc": "_506LLG_pageDesc",
|
|
5110
|
+
"navItem": "_506LLG_navItem"
|
|
5111
5111
|
};
|
|
5112
5112
|
//#endregion
|
|
5113
5113
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
@@ -5126,18 +5126,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5126
5126
|
css: css$4
|
|
5127
5127
|
});
|
|
5128
5128
|
var Dropdown_module_css_default = {
|
|
5129
|
-
"
|
|
5130
|
-
"
|
|
5131
|
-
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
5132
|
-
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
5129
|
+
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
5130
|
+
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
5133
5131
|
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
5132
|
+
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
5133
|
+
"dropdown": "B_Gxsq_dropdown",
|
|
5134
|
+
"dropdownPanel": "B_Gxsq_dropdownPanel",
|
|
5134
5135
|
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
5135
|
-
"
|
|
5136
|
+
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
5137
|
+
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
5136
5138
|
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
5137
|
-
"dropdown": "B_Gxsq_dropdown",
|
|
5138
|
-
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
5139
5139
|
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
5140
|
-
"
|
|
5140
|
+
"dropdownItemActive": "B_Gxsq_dropdownItemActive"
|
|
5141
5141
|
};
|
|
5142
5142
|
//#endregion
|
|
5143
5143
|
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
@@ -5258,29 +5258,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5258
5258
|
css: css$2
|
|
5259
5259
|
});
|
|
5260
5260
|
var DiagnosticsView_module_css_default = {
|
|
5261
|
+
"headHint": "k9eRya_headHint",
|
|
5262
|
+
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
5263
|
+
"envRow": "k9eRya_envRow",
|
|
5264
|
+
"envLabel": "k9eRya_envLabel",
|
|
5265
|
+
"display": "k9eRya_display",
|
|
5261
5266
|
"envDesc": "k9eRya_envDesc",
|
|
5267
|
+
"runBtn": "k9eRya_runBtn",
|
|
5268
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
5269
|
+
"diagPulse": "k9eRya_diagPulse",
|
|
5262
5270
|
"badgeIdle": "k9eRya_badgeIdle",
|
|
5263
|
-
"summary": "k9eRya_summary",
|
|
5264
5271
|
"envTitle": "k9eRya_envTitle",
|
|
5265
|
-
"badgeOk": "k9eRya_badgeOk",
|
|
5266
|
-
"runBtn": "k9eRya_runBtn",
|
|
5267
|
-
"head": "k9eRya_head",
|
|
5268
|
-
"badgeRunning": "k9eRya_badgeRunning",
|
|
5269
5272
|
"summaryRunning": "k9eRya_summaryRunning",
|
|
5270
|
-
"
|
|
5273
|
+
"badgeRunning": "k9eRya_badgeRunning",
|
|
5274
|
+
"row": "k9eRya_row",
|
|
5271
5275
|
"badge": "k9eRya_badge",
|
|
5272
|
-
"
|
|
5273
|
-
"badgeFail": "k9eRya_badgeFail",
|
|
5274
|
-
"envLabel": "k9eRya_envLabel",
|
|
5276
|
+
"badgeOk": "k9eRya_badgeOk",
|
|
5275
5277
|
"summaryOk": "k9eRya_summaryOk",
|
|
5276
|
-
"
|
|
5278
|
+
"name": "k9eRya_name",
|
|
5277
5279
|
"meta": "k9eRya_meta",
|
|
5280
|
+
"summary": "k9eRya_summary",
|
|
5278
5281
|
"summaryFail": "k9eRya_summaryFail",
|
|
5279
|
-
"headHint": "k9eRya_headHint",
|
|
5280
|
-
"row": "k9eRya_row",
|
|
5281
5282
|
"panel": "k9eRya_panel",
|
|
5282
|
-
"
|
|
5283
|
-
"envRow": "k9eRya_envRow"
|
|
5283
|
+
"head": "k9eRya_head"
|
|
5284
5284
|
};
|
|
5285
5285
|
//#endregion
|
|
5286
5286
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -5458,57 +5458,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5458
5458
|
css: css$1
|
|
5459
5459
|
});
|
|
5460
5460
|
var LogsView_module_css_default = {
|
|
5461
|
-
"
|
|
5461
|
+
"head": "_3j77BW_head",
|
|
5462
|
+
"logList": "_3j77BW_logList",
|
|
5462
5463
|
"event": "_3j77BW_event",
|
|
5463
|
-
"
|
|
5464
|
-
"filterChip": "_3j77BW_filterChip",
|
|
5465
|
-
"search": "_3j77BW_search",
|
|
5466
|
-
"message": "_3j77BW_message",
|
|
5467
|
-
"footFail": "_3j77BW_footFail",
|
|
5468
|
-
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
5469
|
-
"entry": "_3j77BW_entry",
|
|
5470
|
-
"searchInput": "_3j77BW_searchInput",
|
|
5464
|
+
"headHint": "_3j77BW_headHint",
|
|
5471
5465
|
"foot": "_3j77BW_foot",
|
|
5472
|
-
"
|
|
5473
|
-
"
|
|
5474
|
-
"
|
|
5475
|
-
"
|
|
5476
|
-
"
|
|
5477
|
-
"btn": "_3j77BW_btn",
|
|
5478
|
-
"filterBar": "_3j77BW_filterBar",
|
|
5479
|
-
"badgeDebug": "_3j77BW_badgeDebug",
|
|
5480
|
-
"catUninstall": "_3j77BW_catUninstall",
|
|
5481
|
-
"catSystem": "_3j77BW_catSystem",
|
|
5482
|
-
"badge": "_3j77BW_badge",
|
|
5483
|
-
"list": "_3j77BW_list",
|
|
5466
|
+
"badgeWarn": "_3j77BW_badgeWarn",
|
|
5467
|
+
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
5468
|
+
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
5469
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
5470
|
+
"filterChip": "_3j77BW_filterChip",
|
|
5484
5471
|
"empty": "_3j77BW_empty",
|
|
5485
5472
|
"more": "_3j77BW_more",
|
|
5486
|
-
"badgeInfo": "_3j77BW_badgeInfo",
|
|
5487
5473
|
"footPath": "_3j77BW_footPath",
|
|
5488
|
-
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
5489
|
-
"footActions": "_3j77BW_footActions",
|
|
5490
|
-
"time": "_3j77BW_time",
|
|
5491
|
-
"pathDraft": "_3j77BW_pathDraft",
|
|
5492
|
-
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
5493
|
-
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
5494
5474
|
"footCount": "_3j77BW_footCount",
|
|
5495
|
-
"
|
|
5475
|
+
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
5496
5476
|
"headActions": "_3j77BW_headActions",
|
|
5497
|
-
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
5498
|
-
"filterChipActive": "_3j77BW_filterChipActive",
|
|
5499
|
-
"clearBtn": "_3j77BW_clearBtn",
|
|
5500
|
-
"logList": "_3j77BW_logList",
|
|
5501
|
-
"moreEnd": "_3j77BW_moreEnd",
|
|
5502
|
-
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
5503
5477
|
"linkBtn": "_3j77BW_linkBtn",
|
|
5504
|
-
"
|
|
5505
|
-
"
|
|
5506
|
-
"catUpdate": "_3j77BW_catUpdate",
|
|
5507
|
-
"catSettings": "_3j77BW_catSettings",
|
|
5478
|
+
"time": "_3j77BW_time",
|
|
5479
|
+
"pathRow": "_3j77BW_pathRow",
|
|
5508
5480
|
"pathText": "_3j77BW_pathText",
|
|
5481
|
+
"search": "_3j77BW_search",
|
|
5482
|
+
"moreEnd": "_3j77BW_moreEnd",
|
|
5483
|
+
"filterBar": "_3j77BW_filterBar",
|
|
5484
|
+
"btn": "_3j77BW_btn",
|
|
5485
|
+
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
5486
|
+
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
5487
|
+
"badgeError": "_3j77BW_badgeError",
|
|
5488
|
+
"catInstall": "_3j77BW_catInstall",
|
|
5489
|
+
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
5490
|
+
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
5509
5491
|
"pathDialog": "_3j77BW_pathDialog",
|
|
5492
|
+
"badgeInfo": "_3j77BW_badgeInfo",
|
|
5493
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
5494
|
+
"catSystem": "_3j77BW_catSystem",
|
|
5495
|
+
"badge": "_3j77BW_badge",
|
|
5496
|
+
"catBadge": "_3j77BW_catBadge",
|
|
5497
|
+
"badgeDebug": "_3j77BW_badgeDebug",
|
|
5498
|
+
"footActions": "_3j77BW_footActions",
|
|
5499
|
+
"message": "_3j77BW_message",
|
|
5510
5500
|
"actions": "_3j77BW_actions",
|
|
5511
|
-
"
|
|
5501
|
+
"entry": "_3j77BW_entry",
|
|
5502
|
+
"clearBtn": "_3j77BW_clearBtn",
|
|
5503
|
+
"catSettings": "_3j77BW_catSettings",
|
|
5504
|
+
"pathDraft": "_3j77BW_pathDraft",
|
|
5505
|
+
"footFail": "_3j77BW_footFail",
|
|
5506
|
+
"panel": "_3j77BW_panel",
|
|
5507
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
5508
|
+
"searchInput": "_3j77BW_searchInput",
|
|
5509
|
+
"list": "_3j77BW_list",
|
|
5510
|
+
"previewRow": "_3j77BW_previewRow",
|
|
5511
|
+
"filterChipActive": "_3j77BW_filterChipActive"
|
|
5512
5512
|
};
|
|
5513
5513
|
//#endregion
|
|
5514
5514
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -6757,7 +6757,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6757
6757
|
openSection: settingsSection,
|
|
6758
6758
|
onConsumedOpenSection: () => setSettingsSection(null)
|
|
6759
6759
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
6760
|
-
info: catalog.hubUpdateInfo ?? { version: "1.4.
|
|
6760
|
+
info: catalog.hubUpdateInfo ?? { version: "1.4.11" },
|
|
6761
6761
|
lang,
|
|
6762
6762
|
t,
|
|
6763
6763
|
hasUpdate: catalog.hubHasUpdate,
|
package/lib/http/routes.js
CHANGED
|
@@ -851,10 +851,27 @@ export function mountPluginHubRoutes(webServer, profile, loader) {
|
|
|
851
851
|
? settings.proxy
|
|
852
852
|
: (systemProxy() ?? process.env.HTTPS_PROXY ?? process.env.https_proxy ?? '');
|
|
853
853
|
const isGitChannel = repoTarget !== null && target === repoTarget;
|
|
854
|
-
const
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
854
|
+
const npmProbeTarget = `${(settings.npmRegistry.replace(/\/+$/, '') || 'https://registry.npmjs.org')}/`;
|
|
855
|
+
// git 通道的探针换成克隆握手本身:git ls-remote 走的就是 pnpm 克隆前的同一套
|
|
856
|
+
// https 传输。curl 打 github.com 主页会被按协议/端口区分的防火墙与 TLS 复检
|
|
857
|
+
// 拦截(能 git 克隆、打不开网页),把可装的仓库误判成 [network] 而中止
|
|
858
|
+
// (见 issue #71)。握手失败时再用 curl 复核一次主页连通性:只有两者都不通
|
|
859
|
+
// 才判「网络不通」;仅握手失败(仓库不存在、私有仓库、需要凭据)放行,
|
|
860
|
+
// 交给后续预检与真实安装给出准确原因。
|
|
861
|
+
const gitProbeTarget = repoTarget === null ? null : repoTarget.replace(/^git\+/, '');
|
|
862
|
+
let net;
|
|
863
|
+
if (gitProbeTarget !== null) {
|
|
864
|
+
net = await gitLsRemote(gitProbeTarget, effectiveProxy, 6000);
|
|
865
|
+
if (!net.ok) {
|
|
866
|
+
const reachable = await probeUrl('https://github.com/', effectiveProxy, 6000);
|
|
867
|
+
if (reachable.ok)
|
|
868
|
+
net = reachable;
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
else {
|
|
872
|
+
net = await probeUrl(npmProbeTarget, effectiveProxy, 6000);
|
|
873
|
+
}
|
|
874
|
+
const probeTarget = gitProbeTarget ?? npmProbeTarget;
|
|
858
875
|
if (!net.ok) {
|
|
859
876
|
// 错误消息按客户端界面语言提示:中文界面给中文、英文界面给英文,
|
|
860
877
|
// 让用户一眼看懂是网络问题而非插件问题
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { spawn, spawnSync } from 'node:child_process';
|
|
11
11
|
import { resolvePackageEntry } from './package-entry.js';
|
|
12
|
-
import { readFileSync, statSync } from 'node:fs';
|
|
12
|
+
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
13
13
|
import { dirname, join, resolve } from 'node:path';
|
|
14
14
|
import { CAPTURE_LIMIT_BYTES, MAX_TASKS, MAX_TASK_LINES } from './install-types.js';
|
|
15
15
|
import { npmTooLowMarker } from './npm-check.js';
|
|
@@ -112,19 +112,55 @@ function pushLine(task, line) {
|
|
|
112
112
|
task.progress = Math.max(task.progress, 6 + Math.min(79, task.lines.length * 2));
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
|
-
function cliInvocation() {
|
|
115
|
+
function cliInvocation(profile) {
|
|
116
116
|
const entry = process.argv[1];
|
|
117
|
-
if (entry !== undefined
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
117
|
+
if (entry !== undefined) {
|
|
118
|
+
// 打包桌面端(Electron):宿主入口在 app.asar 内,机器上根本没有 `dsh` 可执行文件
|
|
119
|
+
//(Windows 那条 dsh.cmd shim 只存在于宿主进程自己的 PATH 里),直接回退 PATH 必然
|
|
120
|
+
// 报 [dsh-missing](见 issue #71)。这里改用应用自己的 CLI 引导脚本调起同一份打包
|
|
121
|
+
// CLI:Electron 可执行文件 + --expose-internals + desktop-cli.js,与内置终端、
|
|
122
|
+
// 官方插件页安装完全同一条路径 —— desktop profile 由应用独占管理的授权也在其中。
|
|
123
|
+
const bootstrap = desktopCliBootstrap(entry);
|
|
124
|
+
if (bootstrap !== null) {
|
|
125
|
+
return {
|
|
126
|
+
file: process.execPath,
|
|
127
|
+
prefixArgs: ['--expose-internals', bootstrap],
|
|
128
|
+
// 工作目录用 profile 目录(真实存在的目录):asar 内的路径不能作为 spawn 的 cwd
|
|
129
|
+
cwd: profileDirectory(profile),
|
|
130
|
+
useShell: false,
|
|
131
|
+
// Electron 可执行文件只有带这个变量才按 Node 运行引导脚本
|
|
132
|
+
env: { ELECTRON_RUN_AS_NODE: '1' },
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (/[\\/](?:bin\.(?:js|ts)|dsh)$/.test(entry)) {
|
|
136
|
+
const absoluteEntry = resolve(entry);
|
|
137
|
+
return {
|
|
138
|
+
file: process.execPath,
|
|
139
|
+
prefixArgs: [...process.execArgv, absoluteEntry],
|
|
140
|
+
cwd: dirname(absoluteEntry),
|
|
141
|
+
useShell: false,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
125
144
|
}
|
|
126
145
|
return { file: 'dsh', prefixArgs: [], cwd: process.cwd(), useShell: process.platform === 'win32' };
|
|
127
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* 打包桌面端宿主的 CLI 引导脚本路径(`<asar 根>/lib/desktop-cli.js`,即应用内
|
|
149
|
+
* pnpm 服务的 dshBootstrapPath)。宿主入口落在 app.asar 内时按 asar 根反推候选路径,
|
|
150
|
+
* 命中存在的那个才采用;布局不认识(官方改版)时返回 null,调用方回退原逻辑。
|
|
151
|
+
* 导出供单测覆盖路径推导。
|
|
152
|
+
*/
|
|
153
|
+
export function desktopCliBootstrap(entry) {
|
|
154
|
+
const marker = /[\\/]app\.asar(?=[\\/]|$)/i.exec(entry);
|
|
155
|
+
if (marker === null)
|
|
156
|
+
return null;
|
|
157
|
+
const root = entry.slice(0, marker.index + marker[0].length);
|
|
158
|
+
for (const candidate of [join(root, 'lib', 'desktop-cli.js'), join(root, 'dsh', 'lib', 'desktop-cli.js')]) {
|
|
159
|
+
if (existsSync(candidate))
|
|
160
|
+
return candidate;
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
128
164
|
/**
|
|
129
165
|
* dsh 命令存在性探测:which/where 找 PATH 里的 dsh。
|
|
130
166
|
* Windows shell 模式命令缺失时 cmd 只输出 GBK 乱码「不是内部或外部命令」(UTF-8 解码后
|
|
@@ -286,7 +322,7 @@ function spawnMutation(options) {
|
|
|
286
322
|
const isGlobalNpm = (globalNpm ?? []).length > 0;
|
|
287
323
|
const invocation = isGlobalNpm
|
|
288
324
|
? { file: 'npm', prefixArgs: [], cwd: process.cwd(), useShell: process.platform === 'win32' }
|
|
289
|
-
: cliInvocation();
|
|
325
|
+
: cliInvocation(profile);
|
|
290
326
|
// 更新已安装的 npm 包:显式指定 @latest。pnpm add <pkg>(无版本)对已存在依赖
|
|
291
327
|
// (尤其精确 spec 如 "1.3.0")是幂等的 —— 输出 "Already up to date" 且不改 package.json,
|
|
292
328
|
// 导致「更新成功」但实际仍停留在旧版本;git 地址与全局安装不受此影响。
|
|
@@ -334,7 +370,9 @@ function spawnMutation(options) {
|
|
|
334
370
|
}
|
|
335
371
|
child = spawn(invocation.file, attemptArgs, {
|
|
336
372
|
cwd: invocation.cwd,
|
|
337
|
-
env
|
|
373
|
+
// invocation.env 是「必须叠加」的变量(打包桌面端的 ELECTRON_RUN_AS_NODE):
|
|
374
|
+
// 没有它时保持 env 原样透传,有它时必须基于完整环境叠加,否则子进程会丢掉 PATH。
|
|
375
|
+
env: invocation.env === undefined ? env : { ...(env ?? process.env), ...invocation.env },
|
|
338
376
|
shell: invocation.useShell,
|
|
339
377
|
// detached 使子进程成为独立进程组组长:取消时能整组清理(见 stopChild),
|
|
340
378
|
// 且宿主进程崩溃后安装任务不会被连带误杀
|
package/lib/services/probe.js
CHANGED
|
@@ -30,6 +30,8 @@ export function curlTlsArgs() {
|
|
|
30
30
|
export function curlRevokeFlagUnsupported(code, stderr) {
|
|
31
31
|
return code === 2 && /ssl-revoke-best-effort/i.test(stderr) && /unknown|unrecognized/i.test(stderr);
|
|
32
32
|
}
|
|
33
|
+
/** 彻底关闭证书吊销检查的兜底参数(curl ≥ 7.19),比降级参数覆盖更老的 Windows curl。 */
|
|
34
|
+
const NO_REVOKE_ARG = '--ssl-no-revoke';
|
|
33
35
|
/** stderr 是否指向 Schannel 取不到证书吊销信息(据此归因为环境 TLS 问题,而非网络不通)。 */
|
|
34
36
|
export function tlsRevocationBlocked(stderr) {
|
|
35
37
|
return /CRYPT_E_NO_REVOCATION_CHECK|CRYPT_E_REVOCATION_OFFLINE|0x80092012/i.test(stderr);
|
|
@@ -135,13 +137,24 @@ function runCurl(args, env, timeoutMs) {
|
|
|
135
137
|
});
|
|
136
138
|
}
|
|
137
139
|
/** 带 TLS 兜底的 curl 调用:先按平台参数跑(Windows 带吊销检查降级),
|
|
138
|
-
* 若本机 curl 不认这个参数(curl < 7.70
|
|
140
|
+
* 若本机 curl 不认这个参数(curl < 7.70)则去掉参数重跑一次,保证老版本不因此直接失败;
|
|
141
|
+
* 降级后仍被吊销检查拦死(CRYPT_E_NO_REVOCATION_CHECK)时,再用 --ssl-no-revoke
|
|
142
|
+
* 彻底关掉吊销检查跑一次 —— 该参数 curl ≥ 7.19 即存在,覆盖面比降级参数更广,
|
|
143
|
+
* 否则「能上网但取不到 CRL」的 Windows 机器会把所有通道误报成不可达(见 issue #71)。
|
|
144
|
+
* 吊销检查只影响本次探测自身的信任判断,不改变系统 TLS 配置。 */
|
|
139
145
|
async function curlWithTlsFallback(args, env, timeoutMs) {
|
|
140
146
|
const tlsArgs = curlTlsArgs();
|
|
141
|
-
|
|
142
|
-
if (tlsArgs.length
|
|
143
|
-
|
|
144
|
-
|
|
147
|
+
let run = await runCurl([...tlsArgs, ...args], env, timeoutMs);
|
|
148
|
+
if (tlsArgs.length > 0 && curlRevokeFlagUnsupported(run.code, run.stderr)) {
|
|
149
|
+
run = await runCurl(args, env, timeoutMs);
|
|
150
|
+
}
|
|
151
|
+
if (tlsArgs.length > 0 && tlsRevocationBlocked(run.stderr)) {
|
|
152
|
+
const retry = await runCurl([NO_REVOKE_ARG, ...args], env, timeoutMs);
|
|
153
|
+
// 只在兜底本身跑起来(非「不认识该参数」)时采用其结果,否则保留原始失败线索
|
|
154
|
+
if (retry.code !== null && !curlRevokeFlagUnsupported(retry.code, retry.stderr))
|
|
155
|
+
run = retry;
|
|
156
|
+
}
|
|
157
|
+
return run;
|
|
145
158
|
}
|
|
146
159
|
/**
|
|
147
160
|
* curl 子进程探测:spawn curl -s -w '%{http_code}' 并注入代理 env。
|
|
@@ -33,6 +33,13 @@ export declare function hasQueuedTarget(target: string): boolean;
|
|
|
33
33
|
* Returns false when the task is unknown or already finished.
|
|
34
34
|
*/
|
|
35
35
|
export declare function cancelTask(id: number): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* 打包桌面端宿主的 CLI 引导脚本路径(`<asar 根>/lib/desktop-cli.js`,即应用内
|
|
38
|
+
* pnpm 服务的 dshBootstrapPath)。宿主入口落在 app.asar 内时按 asar 根反推候选路径,
|
|
39
|
+
* 命中存在的那个才采用;布局不认识(官方改版)时返回 null,调用方回退原逻辑。
|
|
40
|
+
* 导出供单测覆盖路径推导。
|
|
41
|
+
*/
|
|
42
|
+
export declare function desktopCliBootstrap(entry: string): string | null;
|
|
36
43
|
/**
|
|
37
44
|
* Enqueue a plugin mutation and return its task. Tasks run strictly serially:
|
|
38
45
|
* the queue worker starts the next one only after the previous finishes.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.11",
|
|
4
4
|
"description": "A community plugin marketplace for DeepSeek Harness, built to the official plugin spec — browse, search and install 10000+ human-curated community plugins without leaving the app. · DeepSeek Harness 社区插件市场(遵循官方开发规范):10000+ 人工精选社区插件,每日更新。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -840,10 +840,25 @@ export function mountPluginHubRoutes(webServer: WebServerService, profile: strin
|
|
|
840
840
|
? settings.proxy
|
|
841
841
|
: (systemProxy() ?? process.env.HTTPS_PROXY ?? process.env.https_proxy ?? '')
|
|
842
842
|
const isGitChannel = repoTarget !== null && target === repoTarget
|
|
843
|
-
const
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
843
|
+
const npmProbeTarget = `${(settings.npmRegistry.replace(/\/+$/, '') || 'https://registry.npmjs.org')}/`
|
|
844
|
+
// git 通道的探针换成克隆握手本身:git ls-remote 走的就是 pnpm 克隆前的同一套
|
|
845
|
+
// https 传输。curl 打 github.com 主页会被按协议/端口区分的防火墙与 TLS 复检
|
|
846
|
+
// 拦截(能 git 克隆、打不开网页),把可装的仓库误判成 [network] 而中止
|
|
847
|
+
// (见 issue #71)。握手失败时再用 curl 复核一次主页连通性:只有两者都不通
|
|
848
|
+
// 才判「网络不通」;仅握手失败(仓库不存在、私有仓库、需要凭据)放行,
|
|
849
|
+
// 交给后续预检与真实安装给出准确原因。
|
|
850
|
+
const gitProbeTarget = repoTarget === null ? null : repoTarget.replace(/^git\+/, '')
|
|
851
|
+
let net: Awaited<ReturnType<typeof probeUrl>>
|
|
852
|
+
if (gitProbeTarget !== null) {
|
|
853
|
+
net = await gitLsRemote(gitProbeTarget, effectiveProxy, 6000)
|
|
854
|
+
if (!net.ok) {
|
|
855
|
+
const reachable = await probeUrl('https://github.com/', effectiveProxy, 6000)
|
|
856
|
+
if (reachable.ok) net = reachable
|
|
857
|
+
}
|
|
858
|
+
} else {
|
|
859
|
+
net = await probeUrl(npmProbeTarget, effectiveProxy, 6000)
|
|
860
|
+
}
|
|
861
|
+
const probeTarget = gitProbeTarget ?? npmProbeTarget
|
|
847
862
|
if (!net.ok) {
|
|
848
863
|
// 错误消息按客户端界面语言提示:中文界面给中文、英文界面给英文,
|
|
849
864
|
// 让用户一眼看懂是网络问题而非插件问题
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { spawn, spawnSync } from 'node:child_process'
|
|
11
11
|
import { resolvePackageEntry } from './package-entry.ts'
|
|
12
|
-
import { readFileSync, statSync } from 'node:fs'
|
|
12
|
+
import { existsSync, readFileSync, statSync } from 'node:fs'
|
|
13
13
|
import { dirname, join, resolve } from 'node:path'
|
|
14
14
|
import type { InstallResult, InstallTask, Invocation, QueueItem } from './install-types.ts'
|
|
15
15
|
import { CAPTURE_LIMIT_BYTES, MAX_TASKS, MAX_TASK_LINES } from './install-types.ts'
|
|
@@ -129,20 +129,55 @@ function pushLine(task: InstallTask, line: string): void {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
function cliInvocation(): Invocation {
|
|
132
|
+
function cliInvocation(profile: string): Invocation {
|
|
133
133
|
const entry = process.argv[1]
|
|
134
|
-
if (entry !== undefined
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
134
|
+
if (entry !== undefined) {
|
|
135
|
+
// 打包桌面端(Electron):宿主入口在 app.asar 内,机器上根本没有 `dsh` 可执行文件
|
|
136
|
+
//(Windows 那条 dsh.cmd shim 只存在于宿主进程自己的 PATH 里),直接回退 PATH 必然
|
|
137
|
+
// 报 [dsh-missing](见 issue #71)。这里改用应用自己的 CLI 引导脚本调起同一份打包
|
|
138
|
+
// CLI:Electron 可执行文件 + --expose-internals + desktop-cli.js,与内置终端、
|
|
139
|
+
// 官方插件页安装完全同一条路径 —— desktop profile 由应用独占管理的授权也在其中。
|
|
140
|
+
const bootstrap = desktopCliBootstrap(entry)
|
|
141
|
+
if (bootstrap !== null) {
|
|
142
|
+
return {
|
|
143
|
+
file: process.execPath,
|
|
144
|
+
prefixArgs: ['--expose-internals', bootstrap],
|
|
145
|
+
// 工作目录用 profile 目录(真实存在的目录):asar 内的路径不能作为 spawn 的 cwd
|
|
146
|
+
cwd: profileDirectory(profile),
|
|
147
|
+
useShell: false,
|
|
148
|
+
// Electron 可执行文件只有带这个变量才按 Node 运行引导脚本
|
|
149
|
+
env: { ELECTRON_RUN_AS_NODE: '1' },
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (/[\\/](?:bin\.(?:js|ts)|dsh)$/.test(entry)) {
|
|
153
|
+
const absoluteEntry = resolve(entry)
|
|
154
|
+
return {
|
|
155
|
+
file: process.execPath,
|
|
156
|
+
prefixArgs: [...process.execArgv, absoluteEntry],
|
|
157
|
+
cwd: dirname(absoluteEntry),
|
|
158
|
+
useShell: false,
|
|
159
|
+
}
|
|
141
160
|
}
|
|
142
161
|
}
|
|
143
162
|
return { file: 'dsh', prefixArgs: [], cwd: process.cwd(), useShell: process.platform === 'win32' }
|
|
144
163
|
}
|
|
145
164
|
|
|
165
|
+
/**
|
|
166
|
+
* 打包桌面端宿主的 CLI 引导脚本路径(`<asar 根>/lib/desktop-cli.js`,即应用内
|
|
167
|
+
* pnpm 服务的 dshBootstrapPath)。宿主入口落在 app.asar 内时按 asar 根反推候选路径,
|
|
168
|
+
* 命中存在的那个才采用;布局不认识(官方改版)时返回 null,调用方回退原逻辑。
|
|
169
|
+
* 导出供单测覆盖路径推导。
|
|
170
|
+
*/
|
|
171
|
+
export function desktopCliBootstrap(entry: string): string | null {
|
|
172
|
+
const marker = /[\\/]app\.asar(?=[\\/]|$)/i.exec(entry)
|
|
173
|
+
if (marker === null) return null
|
|
174
|
+
const root = entry.slice(0, marker.index + marker[0].length)
|
|
175
|
+
for (const candidate of [join(root, 'lib', 'desktop-cli.js'), join(root, 'dsh', 'lib', 'desktop-cli.js')]) {
|
|
176
|
+
if (existsSync(candidate)) return candidate
|
|
177
|
+
}
|
|
178
|
+
return null
|
|
179
|
+
}
|
|
180
|
+
|
|
146
181
|
/**
|
|
147
182
|
* dsh 命令存在性探测:which/where 找 PATH 里的 dsh。
|
|
148
183
|
* Windows shell 模式命令缺失时 cmd 只输出 GBK 乱码「不是内部或外部命令」(UTF-8 解码后
|
|
@@ -335,7 +370,7 @@ function spawnMutation(options: {
|
|
|
335
370
|
const isGlobalNpm = (globalNpm ?? []).length > 0
|
|
336
371
|
const invocation = isGlobalNpm
|
|
337
372
|
? { file: 'npm', prefixArgs: [], cwd: process.cwd(), useShell: process.platform === 'win32' }
|
|
338
|
-
: cliInvocation()
|
|
373
|
+
: cliInvocation(profile)
|
|
339
374
|
// 更新已安装的 npm 包:显式指定 @latest。pnpm add <pkg>(无版本)对已存在依赖
|
|
340
375
|
// (尤其精确 spec 如 "1.3.0")是幂等的 —— 输出 "Already up to date" 且不改 package.json,
|
|
341
376
|
// 导致「更新成功」但实际仍停留在旧版本;git 地址与全局安装不受此影响。
|
|
@@ -383,7 +418,9 @@ function spawnMutation(options: {
|
|
|
383
418
|
}
|
|
384
419
|
child = spawn(invocation.file, attemptArgs, {
|
|
385
420
|
cwd: invocation.cwd,
|
|
386
|
-
env
|
|
421
|
+
// invocation.env 是「必须叠加」的变量(打包桌面端的 ELECTRON_RUN_AS_NODE):
|
|
422
|
+
// 没有它时保持 env 原样透传,有它时必须基于完整环境叠加,否则子进程会丢掉 PATH。
|
|
423
|
+
env: invocation.env === undefined ? env : { ...(env ?? process.env), ...invocation.env },
|
|
387
424
|
shell: invocation.useShell,
|
|
388
425
|
// detached 使子进程成为独立进程组组长:取消时能整组清理(见 stopChild),
|
|
389
426
|
// 且宿主进程崩溃后安装任务不会被连带误杀
|
|
@@ -51,6 +51,9 @@ export function curlRevokeFlagUnsupported(code: number | null, stderr: string):
|
|
|
51
51
|
return code === 2 && /ssl-revoke-best-effort/i.test(stderr) && /unknown|unrecognized/i.test(stderr)
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
/** 彻底关闭证书吊销检查的兜底参数(curl ≥ 7.19),比降级参数覆盖更老的 Windows curl。 */
|
|
55
|
+
const NO_REVOKE_ARG = '--ssl-no-revoke'
|
|
56
|
+
|
|
54
57
|
/** stderr 是否指向 Schannel 取不到证书吊销信息(据此归因为环境 TLS 问题,而非网络不通)。 */
|
|
55
58
|
export function tlsRevocationBlocked(stderr: string): boolean {
|
|
56
59
|
return /CRYPT_E_NO_REVOCATION_CHECK|CRYPT_E_REVOCATION_OFFLINE|0x80092012/i.test(stderr)
|
|
@@ -159,12 +162,23 @@ function runCurl(args: string[], env: NodeJS.ProcessEnv, timeoutMs: number): Pro
|
|
|
159
162
|
}
|
|
160
163
|
|
|
161
164
|
/** 带 TLS 兜底的 curl 调用:先按平台参数跑(Windows 带吊销检查降级),
|
|
162
|
-
* 若本机 curl 不认这个参数(curl < 7.70
|
|
165
|
+
* 若本机 curl 不认这个参数(curl < 7.70)则去掉参数重跑一次,保证老版本不因此直接失败;
|
|
166
|
+
* 降级后仍被吊销检查拦死(CRYPT_E_NO_REVOCATION_CHECK)时,再用 --ssl-no-revoke
|
|
167
|
+
* 彻底关掉吊销检查跑一次 —— 该参数 curl ≥ 7.19 即存在,覆盖面比降级参数更广,
|
|
168
|
+
* 否则「能上网但取不到 CRL」的 Windows 机器会把所有通道误报成不可达(见 issue #71)。
|
|
169
|
+
* 吊销检查只影响本次探测自身的信任判断,不改变系统 TLS 配置。 */
|
|
163
170
|
async function curlWithTlsFallback(args: string[], env: NodeJS.ProcessEnv, timeoutMs: number): Promise<CurlRun> {
|
|
164
171
|
const tlsArgs = curlTlsArgs()
|
|
165
|
-
|
|
166
|
-
if (tlsArgs.length
|
|
167
|
-
|
|
172
|
+
let run = await runCurl([...tlsArgs, ...args], env, timeoutMs)
|
|
173
|
+
if (tlsArgs.length > 0 && curlRevokeFlagUnsupported(run.code, run.stderr)) {
|
|
174
|
+
run = await runCurl(args, env, timeoutMs)
|
|
175
|
+
}
|
|
176
|
+
if (tlsArgs.length > 0 && tlsRevocationBlocked(run.stderr)) {
|
|
177
|
+
const retry = await runCurl([NO_REVOKE_ARG, ...args], env, timeoutMs)
|
|
178
|
+
// 只在兜底本身跑起来(非「不认识该参数」)时采用其结果,否则保留原始失败线索
|
|
179
|
+
if (retry.code !== null && !curlRevokeFlagUnsupported(retry.code, retry.stderr)) run = retry
|
|
180
|
+
}
|
|
181
|
+
return run
|
|
168
182
|
}
|
|
169
183
|
|
|
170
184
|
/**
|