dsh-plugin 1.3.3 → 1.3.4

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 CHANGED
@@ -632,42 +632,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
632
632
  css: css$11
633
633
  });
634
634
  var Header_module_css_default = {
635
+ "headerTitleRow": "qikqja_headerTitleRow",
636
+ "sortGroup": "qikqja_sortGroup",
637
+ "segGroup": "qikqja_segGroup",
638
+ "segBtn": "qikqja_segBtn",
635
639
  "tabsRow": "qikqja_tabsRow",
640
+ "search": "qikqja_search",
641
+ "header": "qikqja_header",
642
+ "tabs": "qikqja_tabs",
636
643
  "copyIcon": "qikqja_copyIcon",
644
+ "adBanner": "qikqja_adBanner",
637
645
  "segBtnActive": "qikqja_segBtnActive",
638
- "segBtn": "qikqja_segBtn",
646
+ "githubLink": "qikqja_githubLink",
647
+ "langBtn": "qikqja_langBtn",
639
648
  "headerRight": "qikqja_headerRight",
640
- "sortGroup": "qikqja_sortGroup",
641
- "versionBtn": "qikqja_versionBtn",
649
+ "tabActive": "qikqja_tabActive",
642
650
  "aboutBtn": "qikqja_aboutBtn",
643
- "controls": "qikqja_controls",
644
- "taglineLink": "qikqja_taglineLink",
645
- "tagline": "qikqja_tagline",
646
651
  "resultSeg": "qikqja_resultSeg",
647
- "tabActive": "qikqja_tabActive",
648
- "segGroup": "qikqja_segGroup",
649
- "brandTitle": "qikqja_brandTitle",
650
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
651
- "header": "qikqja_header",
652
+ "root": "qikqja_root",
653
+ "adBadge": "qikqja_adBadge",
654
+ "tagline": "qikqja_tagline",
655
+ "version": "qikqja_version",
656
+ "versionBtn": "qikqja_versionBtn",
652
657
  "logoIcon": "qikqja_logoIcon",
653
- "adArrow": "qikqja_adArrow",
658
+ "brandTitle": "qikqja_brandTitle",
659
+ "searchRow": "qikqja_searchRow",
660
+ "githubIcon": "qikqja_githubIcon",
661
+ "segLabel": "qikqja_segLabel",
654
662
  "tab": "qikqja_tab",
655
663
  "tabCount": "qikqja_tabCount",
656
- "langBtn": "qikqja_langBtn",
664
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
657
665
  "resultCount": "qikqja_resultCount",
658
- "adText": "qikqja_adText",
659
- "githubLink": "qikqja_githubLink",
660
- "segLabel": "qikqja_segLabel",
661
- "version": "qikqja_version",
662
- "root": "qikqja_root",
663
- "githubIcon": "qikqja_githubIcon",
664
- "headerTitleRow": "qikqja_headerTitleRow",
665
- "adBanner": "qikqja_adBanner",
666
- "adBadge": "qikqja_adBadge",
667
- "searchRow": "qikqja_searchRow",
668
- "search": "qikqja_search",
669
666
  "title": "qikqja_title",
670
- "tabs": "qikqja_tabs"
667
+ "taglineLink": "qikqja_taglineLink",
668
+ "adText": "qikqja_adText",
669
+ "controls": "qikqja_controls",
670
+ "adArrow": "qikqja_adArrow"
671
671
  };
672
672
  //#endregion
673
673
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
@@ -686,134 +686,134 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
686
686
  css: css$10
687
687
  });
688
688
  var Modal_module_css_default = {
689
- "queueSection": "BiQ1zG_queueSection",
690
- "modalDesc": "BiQ1zG_modalDesc",
691
- "modalHead": "BiQ1zG_modalHead",
692
- "queueRowTrack": "BiQ1zG_queueRowTrack",
693
- "modalWide": "BiQ1zG_modalWide",
694
- "errorBox": "BiQ1zG_errorBox",
695
- "aboutMeta": "BiQ1zG_aboutMeta",
696
- "modalTitle": "BiQ1zG_modalTitle",
697
- "queuedHint": "BiQ1zG_queuedHint",
698
- "linkIcon": "BiQ1zG_linkIcon",
699
- "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
700
- "queueRowPct": "BiQ1zG_queueRowPct",
701
- "logModal": "BiQ1zG_logModal",
689
+ "resultCheck": "BiQ1zG_resultCheck",
702
690
  "dangerConfirm": "BiQ1zG_dangerConfirm",
703
- "noticeFoot": "BiQ1zG_noticeFoot",
704
- "noticeIgnore": "BiQ1zG_noticeIgnore",
705
- "failRepo": "BiQ1zG_failRepo",
691
+ "detailModal": "BiQ1zG_detailModal",
706
692
  "modalCloseIcon": "BiQ1zG_modalCloseIcon",
707
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
708
- "failList": "BiQ1zG_failList",
709
- "noticeRowMain": "BiQ1zG_noticeRowMain",
710
- "noticeTextFail": "BiQ1zG_noticeTextFail",
711
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
712
- "detailLink": "BiQ1zG_detailLink",
713
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
693
+ "modalLabel": "BiQ1zG_modalLabel",
694
+ "toast": "BiQ1zG_toast",
695
+ "queueRowHead": "BiQ1zG_queueRowHead",
696
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
697
+ "queueSection": "BiQ1zG_queueSection",
698
+ "errorTitle": "BiQ1zG_errorTitle",
699
+ "progressTrack": "BiQ1zG_progressTrack",
714
700
  "failKindUninstall": "BiQ1zG_failKindUninstall",
715
- "pendingRowActions": "BiQ1zG_pendingRowActions",
716
- "modalCopy": "BiQ1zG_modalCopy",
717
- "modalRow": "BiQ1zG_modalRow",
701
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
718
702
  "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
719
- "errorModal": "BiQ1zG_errorModal",
720
- "failKind": "BiQ1zG_failKind",
721
- "detailMono": "BiQ1zG_detailMono",
703
+ "errorBox": "BiQ1zG_errorBox",
704
+ "detailStatusText": "BiQ1zG_detailStatusText",
705
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
706
+ "failHead": "BiQ1zG_failHead",
707
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
708
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
709
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
710
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
722
711
  "progress": "BiQ1zG_progress",
723
- "queueRowTarget": "BiQ1zG_queueRowTarget",
724
- "queueRowStatus": "BiQ1zG_queueRowStatus",
712
+ "aboutContent": "BiQ1zG_aboutContent",
725
713
  "overlayIn": "BiQ1zG_overlayIn",
726
- "overlay": "BiQ1zG_overlay",
727
- "noticeMain": "BiQ1zG_noticeMain",
728
- "modalCmdText": "BiQ1zG_modalCmdText",
729
- "detailDim": "BiQ1zG_detailDim",
714
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
730
715
  "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
731
- "errorCopySoft": "BiQ1zG_errorCopySoft",
732
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
733
- "resultTitle": "BiQ1zG_resultTitle",
734
- "noticeRemove": "BiQ1zG_noticeRemove",
735
- "noticeVersion": "BiQ1zG_noticeVersion",
736
- "detailStatusPending": "BiQ1zG_detailStatusPending",
737
- "failEmpty": "BiQ1zG_failEmpty",
716
+ "noticeList": "BiQ1zG_noticeList",
717
+ "failKindInstall": "BiQ1zG_failKindInstall",
718
+ "modalDesc": "BiQ1zG_modalDesc",
719
+ "modalLink": "BiQ1zG_modalLink",
720
+ "restartNow": "BiQ1zG_restartNow",
721
+ "detailDim": "BiQ1zG_detailDim",
722
+ "detailMono": "BiQ1zG_detailMono",
723
+ "modalWide": "BiQ1zG_modalWide",
724
+ "queuedHint": "BiQ1zG_queuedHint",
725
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
726
+ "overlay": "BiQ1zG_overlay",
738
727
  "detailStatusRunning": "BiQ1zG_detailStatusRunning",
739
- "errorHint": "BiQ1zG_errorHint",
740
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
728
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
729
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
730
+ "resultTitle": "BiQ1zG_resultTitle",
731
+ "detailArrow": "BiQ1zG_detailArrow",
732
+ "noticeHead": "BiQ1zG_noticeHead",
733
+ "noticeTextFail": "BiQ1zG_noticeTextFail",
734
+ "modalValue": "BiQ1zG_modalValue",
735
+ "noticeRowOk": "BiQ1zG_noticeRowOk",
736
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
737
+ "detailPathActions": "BiQ1zG_detailPathActions",
738
+ "trustHint": "BiQ1zG_trustHint",
739
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
741
740
  "confirmPrimary": "BiQ1zG_confirmPrimary",
742
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
743
- "failCopy": "BiQ1zG_failCopy",
741
+ "progressText": "BiQ1zG_progressText",
742
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
743
+ "failClear": "BiQ1zG_failClear",
744
744
  "failBigIssue": "BiQ1zG_failBigIssue",
745
- "detailPathBtn": "BiQ1zG_detailPathBtn",
746
- "progressFill": "BiQ1zG_progressFill",
747
- "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
748
- "detailPathActions": "BiQ1zG_detailPathActions",
749
- "progressFillFail": "BiQ1zG_progressFillFail",
750
- "failKindInstall": "BiQ1zG_failKindInstall",
751
- "modalClose": "BiQ1zG_modalClose",
752
- "noticeTime": "BiQ1zG_noticeTime",
745
+ "failRepo": "BiQ1zG_failRepo",
753
746
  "modalCmd": "BiQ1zG_modalCmd",
754
- "uninstallConfirm": "BiQ1zG_uninstallConfirm",
755
- "failClear": "BiQ1zG_failClear",
756
- "detailLabel": "BiQ1zG_detailLabel",
757
- "modalLabel": "BiQ1zG_modalLabel",
758
- "confirmIconDanger": "BiQ1zG_confirmIconDanger",
759
- "toast": "BiQ1zG_toast",
747
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
748
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
749
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
750
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
751
+ "errorHint": "BiQ1zG_errorHint",
752
+ "stripCancel": "BiQ1zG_stripCancel",
753
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
754
+ "queueRow": "BiQ1zG_queueRow",
755
+ "noticeTime": "BiQ1zG_noticeTime",
756
+ "helpModal": "BiQ1zG_helpModal",
760
757
  "result": "BiQ1zG_result",
758
+ "failCopy": "BiQ1zG_failCopy",
759
+ "queueRowTrack": "BiQ1zG_queueRowTrack",
761
760
  "resultRestarting": "BiQ1zG_resultRestarting",
762
- "failRow": "BiQ1zG_failRow",
761
+ "detailUpdateHint": "BiQ1zG_detailUpdateHint",
762
+ "detailPathText": "BiQ1zG_detailPathText",
763
+ "resultDesc": "BiQ1zG_resultDesc",
764
+ "failList": "BiQ1zG_failList",
765
+ "aboutModal": "BiQ1zG_aboutModal",
766
+ "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
767
+ "progressFill": "BiQ1zG_progressFill",
768
+ "aboutMeta": "BiQ1zG_aboutMeta",
769
+ "modalRow": "BiQ1zG_modalRow",
770
+ "noticeRemove": "BiQ1zG_noticeRemove",
771
+ "queueRowBody": "BiQ1zG_queueRowBody",
772
+ "queueRowPct": "BiQ1zG_queueRowPct",
773
+ "detailLink": "BiQ1zG_detailLink",
774
+ "modalClose": "BiQ1zG_modalClose",
775
+ "noticeRow": "BiQ1zG_noticeRow",
776
+ "modalBody": "BiQ1zG_modalBody",
763
777
  "toastFail": "BiQ1zG_toastFail",
764
- "modalLink": "BiQ1zG_modalLink",
765
- "modalInstall": "BiQ1zG_modalInstall",
766
- "progressHead": "BiQ1zG_progressHead",
767
- "restartNow": "BiQ1zG_restartNow",
768
- "noticeTextOk": "BiQ1zG_noticeTextOk",
769
- "detailStars": "BiQ1zG_detailStars",
770
- "queueRow": "BiQ1zG_queueRow",
771
- "aboutContent": "BiQ1zG_aboutContent",
772
- "failedCopyHint": "BiQ1zG_failedCopyHint",
773
- "progressTrack": "BiQ1zG_progressTrack",
774
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
775
- "modal": "BiQ1zG_modal",
776
- "failPrepareHint": "BiQ1zG_failPrepareHint",
777
- "noticeRowOk": "BiQ1zG_noticeRowOk",
778
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
779
+ "noticeFoot": "BiQ1zG_noticeFoot",
780
+ "detailGrid": "BiQ1zG_detailGrid",
781
+ "detailRow": "BiQ1zG_detailRow",
782
+ "modalCopy": "BiQ1zG_modalCopy",
778
783
  "restartLater": "BiQ1zG_restartLater",
779
- "toastIn": "BiQ1zG_toastIn",
780
- "stripCancel": "BiQ1zG_stripCancel",
781
- "modalCancel": "BiQ1zG_modalCancel",
784
+ "progressHead": "BiQ1zG_progressHead",
785
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
782
786
  "queueRowDesc": "BiQ1zG_queueRowDesc",
783
- "modalBody": "BiQ1zG_modalBody",
784
- "detailUpdateHint": "BiQ1zG_detailUpdateHint",
785
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
786
- "detailModal": "BiQ1zG_detailModal",
787
- "detailRow": "BiQ1zG_detailRow",
788
- "modalActions": "BiQ1zG_modalActions",
789
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
790
- "restartNowWarning": "BiQ1zG_restartNowWarning",
791
- "detailArrow": "BiQ1zG_detailArrow",
792
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
793
- "errorTitle": "BiQ1zG_errorTitle",
794
- "resultCheck": "BiQ1zG_resultCheck",
787
+ "progressFillFail": "BiQ1zG_progressFillFail",
788
+ "modalTitle": "BiQ1zG_modalTitle",
789
+ "modal": "BiQ1zG_modal",
790
+ "errorModal": "BiQ1zG_errorModal",
791
+ "modalHead": "BiQ1zG_modalHead",
795
792
  "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
796
- "detailPath": "BiQ1zG_detailPath",
797
- "queueRowBody": "BiQ1zG_queueRowBody",
798
- "aboutModal": "BiQ1zG_aboutModal",
799
- "detailGrid": "BiQ1zG_detailGrid",
800
- "detailValue": "BiQ1zG_detailValue",
801
- "helpModal": "BiQ1zG_helpModal",
793
+ "noticeMain": "BiQ1zG_noticeMain",
794
+ "failEmpty": "BiQ1zG_failEmpty",
802
795
  "confirmIcon": "BiQ1zG_confirmIcon",
803
- "confirmIconWrap": "BiQ1zG_confirmIconWrap",
804
- "queueRowHead": "BiQ1zG_queueRowHead",
805
- "noticeHead": "BiQ1zG_noticeHead",
806
- "detailPathText": "BiQ1zG_detailPathText",
807
- "detailStatusText": "BiQ1zG_detailStatusText",
796
+ "detailValue": "BiQ1zG_detailValue",
797
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
798
+ "detailLabel": "BiQ1zG_detailLabel",
799
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
800
+ "modalCmdText": "BiQ1zG_modalCmdText",
801
+ "logModal": "BiQ1zG_logModal",
802
+ "modalInstall": "BiQ1zG_modalInstall",
803
+ "restartNowWarning": "BiQ1zG_restartNowWarning",
804
+ "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
805
+ "failRow": "BiQ1zG_failRow",
806
+ "noticeVersion": "BiQ1zG_noticeVersion",
807
+ "modalCancel": "BiQ1zG_modalCancel",
808
+ "linkIcon": "BiQ1zG_linkIcon",
809
+ "failKind": "BiQ1zG_failKind",
808
810
  "modalIn": "BiQ1zG_modalIn",
809
- "progressText": "BiQ1zG_progressText",
810
- "modalValue": "BiQ1zG_modalValue",
811
- "failHead": "BiQ1zG_failHead",
812
- "noticeRow": "BiQ1zG_noticeRow",
813
- "noticeList": "BiQ1zG_noticeList",
814
- "resultDesc": "BiQ1zG_resultDesc",
815
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
816
- "trustHint": "BiQ1zG_trustHint"
811
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
812
+ "toastIn": "BiQ1zG_toastIn",
813
+ "detailPath": "BiQ1zG_detailPath",
814
+ "modalActions": "BiQ1zG_modalActions",
815
+ "detailStars": "BiQ1zG_detailStars",
816
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon"
817
817
  };
818
818
  //#endregion
819
819
  //#region src/client/logic/install-command.ts
@@ -883,7 +883,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
883
883
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
884
884
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
885
885
  */
886
- const PLUGIN_VERSION = "1.3.3";
886
+ const PLUGIN_VERSION = "1.3.4";
887
887
  const CATEGORY_ORDER = [
888
888
  "interface",
889
889
  "session",
@@ -1516,7 +1516,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1516
1516
  */
1517
1517
  const hubHasUpdate = (() => {
1518
1518
  if (!hubUpdateInfo) return false;
1519
- return hubUpdateInfo.version !== "1.3.3";
1519
+ return hubUpdateInfo.version !== "1.3.4";
1520
1520
  })();
1521
1521
  (0, react.useMemo)(() => {
1522
1522
  if (!plugins) return [];
@@ -3879,38 +3879,38 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3879
3879
  css: css$9
3880
3880
  });
3881
3881
  var List_module_css_default = {
3882
- "stateTitle": "_3XaZHa_stateTitle",
3883
- "fork": "_3XaZHa_fork",
3884
- "installBtn": "_3XaZHa_installBtn",
3885
- "detailBtn": "_3XaZHa_detailBtn",
3882
+ "desc": "_3XaZHa_desc",
3883
+ "cardHead": "_3XaZHa_cardHead",
3886
3884
  "moreSentinel": "_3XaZHa_moreSentinel",
3887
- "versionBadge": "_3XaZHa_versionBadge",
3888
- "list": "_3XaZHa_list",
3889
- "date": "_3XaZHa_date",
3885
+ "cardTitle": "_3XaZHa_cardTitle",
3886
+ "installBtn": "_3XaZHa_installBtn",
3887
+ "stateTitle": "_3XaZHa_stateTitle",
3888
+ "retryBtn": "_3XaZHa_retryBtn",
3889
+ "cardSide": "_3XaZHa_cardSide",
3890
+ "footLink": "_3XaZHa_footLink",
3890
3891
  "installBtnUpdate": "_3XaZHa_installBtnUpdate",
3891
- "topics": "_3XaZHa_topics",
3892
- "topic": "_3XaZHa_topic",
3893
- "actions": "_3XaZHa_actions",
3892
+ "categoryBadge": "_3XaZHa_categoryBadge",
3894
3893
  "installBtnInstalled": "_3XaZHa_installBtnInstalled",
3895
- "body": "_3XaZHa_body",
3894
+ "cardMain": "_3XaZHa_cardMain",
3895
+ "verified": "_3XaZHa_verified",
3896
+ "topic": "_3XaZHa_topic",
3896
3897
  "card": "_3XaZHa_card",
3898
+ "body": "_3XaZHa_body",
3899
+ "fork": "_3XaZHa_fork",
3900
+ "list": "_3XaZHa_list",
3901
+ "uninstallBtn": "_3XaZHa_uninstallBtn",
3897
3902
  "stats": "_3XaZHa_stats",
3898
- "updateBadge": "_3XaZHa_updateBadge",
3899
3903
  "state": "_3XaZHa_state",
3900
- "verified": "_3XaZHa_verified",
3901
- "star": "_3XaZHa_star",
3902
- "cardTitle": "_3XaZHa_cardTitle",
3903
- "uninstallBtn": "_3XaZHa_uninstallBtn",
3904
3904
  "stateDesc": "_3XaZHa_stateDesc",
3905
- "footLink": "_3XaZHa_footLink",
3906
- "installBtnCopied": "_3XaZHa_installBtnCopied",
3905
+ "updateBadge": "_3XaZHa_updateBadge",
3906
+ "versionBadge": "_3XaZHa_versionBadge",
3907
+ "topics": "_3XaZHa_topics",
3908
+ "star": "_3XaZHa_star",
3909
+ "actions": "_3XaZHa_actions",
3907
3910
  "footer": "_3XaZHa_footer",
3908
- "categoryBadge": "_3XaZHa_categoryBadge",
3909
- "desc": "_3XaZHa_desc",
3910
- "cardHead": "_3XaZHa_cardHead",
3911
- "retryBtn": "_3XaZHa_retryBtn",
3912
- "cardSide": "_3XaZHa_cardSide",
3913
- "cardMain": "_3XaZHa_cardMain"
3911
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
3912
+ "detailBtn": "_3XaZHa_detailBtn",
3913
+ "date": "_3XaZHa_date"
3914
3914
  };
3915
3915
  //#endregion
3916
3916
  //#region src/client/hooks/useIncrementalList.ts
@@ -4112,15 +4112,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4112
4112
  css: css$8
4113
4113
  });
4114
4114
  var SectionTabs_module_css_default = {
4115
- "tab": "_7tvizq_tab",
4115
+ "root": "_7tvizq_root",
4116
4116
  "tabIcon": "_7tvizq_tabIcon",
4117
- "tabCountActive": "_7tvizq_tabCountActive",
4118
- "noticeIcon": "_7tvizq_noticeIcon",
4119
4117
  "noticeBtn": "_7tvizq_noticeBtn",
4118
+ "noticeIcon": "_7tvizq_noticeIcon",
4120
4119
  "tabActive": "_7tvizq_tabActive",
4121
- "noticeCount": "_7tvizq_noticeCount",
4122
4120
  "tabCount": "_7tvizq_tabCount",
4123
- "root": "_7tvizq_root"
4121
+ "tab": "_7tvizq_tab",
4122
+ "tabCountActive": "_7tvizq_tabCountActive",
4123
+ "noticeCount": "_7tvizq_noticeCount"
4124
4124
  };
4125
4125
  //#endregion
4126
4126
  //#region src/client/components/layout/SectionTabs.tsx
@@ -4197,42 +4197,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4197
4197
  css: css$7
4198
4198
  });
4199
4199
  var InstalledView_module_css_default = {
4200
- "rowTitleLine": "_1nXeGW_rowTitleLine",
4201
- "statusInactive": "_1nXeGW_statusInactive",
4202
- "rowMeta": "_1nXeGW_rowMeta",
4200
+ "root": "_1nXeGW_root",
4201
+ "empty": "_1nXeGW_empty",
4202
+ "segGroup": "_1nXeGW_segGroup",
4203
4203
  "toolbar": "_1nXeGW_toolbar",
4204
- "segBtn": "_1nXeGW_segBtn",
4204
+ "statusDot": "_1nXeGW_statusDot",
4205
+ "list": "_1nXeGW_list",
4206
+ "segBtnActive": "_1nXeGW_segBtnActive",
4205
4207
  "emptyDesc": "_1nXeGW_emptyDesc",
4206
- "searchWrap": "_1nXeGW_searchWrap",
4207
- "root": "_1nXeGW_root",
4208
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
4209
+ "searchInput": "_1nXeGW_searchInput",
4210
+ "segBtn": "_1nXeGW_segBtn",
4211
+ "emptyTitle": "_1nXeGW_emptyTitle",
4212
+ "row": "_1nXeGW_row",
4213
+ "exampleBadge": "_1nXeGW_exampleBadge",
4214
+ "exampleRow": "_1nXeGW_exampleRow",
4215
+ "rowTitleLine": "_1nXeGW_rowTitleLine",
4216
+ "rowRestart": "_1nXeGW_rowRestart",
4217
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4218
+ "rowRepo": "_1nXeGW_rowRepo",
4219
+ "segRow": "_1nXeGW_segRow",
4208
4220
  "rowDesc": "_1nXeGW_rowDesc",
4221
+ "updateBadge": "_1nXeGW_updateBadge",
4209
4222
  "rowActions": "_1nXeGW_rowActions",
4210
- "exampleBadge": "_1nXeGW_exampleBadge",
4211
- "rowUninstall": "_1nXeGW_rowUninstall",
4223
+ "statusPending": "_1nXeGW_statusPending",
4224
+ "searchWrap": "_1nXeGW_searchWrap",
4225
+ "rowDetail": "_1nXeGW_rowDetail",
4226
+ "statusInactive": "_1nXeGW_statusInactive",
4227
+ "versionBadge": "_1nXeGW_versionBadge",
4212
4228
  "rowCategory": "_1nXeGW_rowCategory",
4213
- "segLabel": "_1nXeGW_segLabel",
4214
- "list": "_1nXeGW_list",
4215
- "empty": "_1nXeGW_empty",
4216
- "rowMain": "_1nXeGW_rowMain",
4217
- "rowSourceTag": "_1nXeGW_rowSourceTag",
4218
4229
  "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4219
- "rowDetail": "_1nXeGW_rowDetail",
4230
+ "rowMeta": "_1nXeGW_rowMeta",
4231
+ "rowUninstall": "_1nXeGW_rowUninstall",
4232
+ "segLabel": "_1nXeGW_segLabel",
4220
4233
  "rowTitle": "_1nXeGW_rowTitle",
4221
- "segGroup": "_1nXeGW_segGroup",
4222
- "segRow": "_1nXeGW_segRow",
4223
- "statusPending": "_1nXeGW_statusPending",
4224
4234
  "rowUpdate": "_1nXeGW_rowUpdate",
4225
- "updateBadge": "_1nXeGW_updateBadge",
4226
- "emptyTitle": "_1nXeGW_emptyTitle",
4227
- "rowRepo": "_1nXeGW_rowRepo",
4228
- "exampleRow": "_1nXeGW_exampleRow",
4229
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4230
- "statusDot": "_1nXeGW_statusDot",
4231
- "versionBadge": "_1nXeGW_versionBadge",
4232
- "searchInput": "_1nXeGW_searchInput",
4233
- "segBtnActive": "_1nXeGW_segBtnActive",
4234
- "rowRestart": "_1nXeGW_rowRestart",
4235
- "row": "_1nXeGW_row"
4235
+ "rowMain": "_1nXeGW_rowMain"
4236
4236
  };
4237
4237
  //#endregion
4238
4238
  //#region src/client/components/views/InstalledView.tsx
@@ -4478,27 +4478,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4478
4478
  css: css$6
4479
4479
  });
4480
4480
  var CustomInstallView_module_css_default = {
4481
- "channelOffText": "zISxCG_channelOffText",
4482
- "helpLine": "zISxCG_helpLine",
4483
- "installCardDisabled": "zISxCG_installCardDisabled",
4484
- "installHelpBtn": "zISxCG_installHelpBtn",
4485
- "installCard": "zISxCG_installCard",
4486
- "desc": "zISxCG_desc",
4487
4481
  "installError": "zISxCG_installError",
4488
- "helpBody": "zISxCG_helpBody",
4489
4482
  "installInputError": "zISxCG_installInputError",
4490
- "channelOff": "zISxCG_channelOff",
4491
- "installExample": "zISxCG_installExample",
4492
- "installRow": "zISxCG_installRow",
4493
- "helpCmd": "zISxCG_helpCmd",
4494
- "installBtn": "zISxCG_installBtn",
4495
4483
  "installCards": "zISxCG_installCards",
4484
+ "helpNote": "zISxCG_helpNote",
4485
+ "installBtn": "zISxCG_installBtn",
4486
+ "installExample": "zISxCG_installExample",
4487
+ "installCardDisabled": "zISxCG_installCardDisabled",
4488
+ "channelOffText": "zISxCG_channelOffText",
4489
+ "channelOffBtn": "zISxCG_channelOffBtn",
4490
+ "helpLine": "zISxCG_helpLine",
4491
+ "root": "zISxCG_root",
4492
+ "channelOff": "zISxCG_channelOff",
4496
4493
  "installLabel": "zISxCG_installLabel",
4497
- "installCardHead": "zISxCG_installCardHead",
4498
4494
  "installInput": "zISxCG_installInput",
4499
- "channelOffBtn": "zISxCG_channelOffBtn",
4500
- "helpNote": "zISxCG_helpNote",
4501
- "root": "zISxCG_root"
4495
+ "installCardHead": "zISxCG_installCardHead",
4496
+ "helpBody": "zISxCG_helpBody",
4497
+ "installCard": "zISxCG_installCard",
4498
+ "installRow": "zISxCG_installRow",
4499
+ "desc": "zISxCG_desc",
4500
+ "installHelpBtn": "zISxCG_installHelpBtn",
4501
+ "helpCmd": "zISxCG_helpCmd"
4502
4502
  };
4503
4503
  //#endregion
4504
4504
  //#region src/client/components/views/CustomInstallView.tsx
@@ -4771,26 +4771,26 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4771
4771
  css: css$5
4772
4772
  });
4773
4773
  var SettingsView_module_css_default = {
4774
- "settingControl": "_506LLG_settingControl",
4775
- "root": "_506LLG_root",
4776
4774
  "pageHeader": "_506LLG_pageHeader",
4777
- "pageDesc": "_506LLG_pageDesc",
4775
+ "navItemActive": "_506LLG_navItemActive",
4778
4776
  "controlDropdown": "_506LLG_controlDropdown",
4777
+ "settingRow": "_506LLG_settingRow",
4779
4778
  "textInput": "_506LLG_textInput",
4780
- "settingDesc": "_506LLG_settingDesc",
4781
4779
  "settingLabel": "_506LLG_settingLabel",
4782
- "pageTitle": "_506LLG_pageTitle",
4783
- "settingControlStack": "_506LLG_settingControlStack",
4780
+ "root": "_506LLG_root",
4781
+ "pageDesc": "_506LLG_pageDesc",
4784
4782
  "settingRowStack": "_506LLG_settingRowStack",
4785
- "navItemActive": "_506LLG_navItemActive",
4786
4783
  "navIcon": "_506LLG_navIcon",
4787
- "content": "_506LLG_content",
4788
- "settingTitle": "_506LLG_settingTitle",
4789
4784
  "sidebar": "_506LLG_sidebar",
4790
4785
  "navItem": "_506LLG_navItem",
4791
- "settingRow": "_506LLG_settingRow",
4786
+ "settingControlStack": "_506LLG_settingControlStack",
4787
+ "content": "_506LLG_content",
4788
+ "settingDesc": "_506LLG_settingDesc",
4792
4789
  "resetBtn": "_506LLG_resetBtn",
4793
- "card": "_506LLG_card"
4790
+ "card": "_506LLG_card",
4791
+ "settingTitle": "_506LLG_settingTitle",
4792
+ "settingControl": "_506LLG_settingControl",
4793
+ "pageTitle": "_506LLG_pageTitle"
4794
4794
  };
4795
4795
  //#endregion
4796
4796
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -4809,17 +4809,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4809
4809
  css: css$4
4810
4810
  });
4811
4811
  var Dropdown_module_css_default = {
4812
- "dropdownItemActive": "B_Gxsq_dropdownItemActive",
4812
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
4813
+ "dropdownItem": "B_Gxsq_dropdownItem",
4814
+ "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
4815
+ "dropdown": "B_Gxsq_dropdown",
4813
4816
  "dropdownCount": "B_Gxsq_dropdownCount",
4817
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
4818
+ "dropdownBtn": "B_Gxsq_dropdownBtn",
4814
4819
  "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4815
- "dropdownArrow": "B_Gxsq_dropdownArrow",
4816
- "dropdown": "B_Gxsq_dropdown",
4817
4820
  "dropdownPanel": "B_Gxsq_dropdownPanel",
4818
- "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
4819
- "dropdownBtn": "B_Gxsq_dropdownBtn",
4820
- "dropdownItem": "B_Gxsq_dropdownItem",
4821
- "dropdownLabel": "B_Gxsq_dropdownLabel",
4822
- "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen"
4821
+ "dropdownArrow": "B_Gxsq_dropdownArrow",
4822
+ "dropdownItemLabel": "B_Gxsq_dropdownItemLabel"
4823
4823
  };
4824
4824
  //#endregion
4825
4825
  //#region src/client/components/ui/Dropdown.tsx
@@ -4897,9 +4897,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4897
4897
  css: css$3
4898
4898
  });
4899
4899
  var Toggle_module_css_default = {
4900
- "toggleOn": "k-cD4G_toggleOn",
4901
4900
  "toggle": "k-cD4G_toggle",
4902
- "knob": "k-cD4G_knob"
4901
+ "knob": "k-cD4G_knob",
4902
+ "toggleOn": "k-cD4G_toggleOn"
4903
4903
  };
4904
4904
  //#endregion
4905
4905
  //#region src/client/components/ui/Toggle.tsx
@@ -4940,29 +4940,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4940
4940
  css: css$2
4941
4941
  });
4942
4942
  var DiagnosticsView_module_css_default = {
4943
- "summary": "k9eRya_summary",
4944
4943
  "summaryRunning": "k9eRya_summaryRunning",
4944
+ "envDesc": "k9eRya_envDesc",
4945
+ "name": "k9eRya_name",
4946
+ "row": "k9eRya_row",
4945
4947
  "meta": "k9eRya_meta",
4946
- "diagPulse": "k9eRya_diagPulse",
4947
4948
  "badge": "k9eRya_badge",
4948
- "summaryOk": "k9eRya_summaryOk",
4949
- "head": "k9eRya_head",
4950
- "envCopyBtn": "k9eRya_envCopyBtn",
4951
- "envDesc": "k9eRya_envDesc",
4952
- "display": "k9eRya_display",
4953
- "headHint": "k9eRya_headHint",
4954
- "envRow": "k9eRya_envRow",
4955
4949
  "badgeOk": "k9eRya_badgeOk",
4950
+ "envRow": "k9eRya_envRow",
4951
+ "badgeIdle": "k9eRya_badgeIdle",
4956
4952
  "badgeRunning": "k9eRya_badgeRunning",
4953
+ "summary": "k9eRya_summary",
4957
4954
  "envTitle": "k9eRya_envTitle",
4958
- "summaryFail": "k9eRya_summaryFail",
4959
- "envLabel": "k9eRya_envLabel",
4960
- "badgeIdle": "k9eRya_badgeIdle",
4961
- "name": "k9eRya_name",
4962
4955
  "runBtn": "k9eRya_runBtn",
4963
- "row": "k9eRya_row",
4956
+ "diagPulse": "k9eRya_diagPulse",
4957
+ "head": "k9eRya_head",
4958
+ "envCopyBtn": "k9eRya_envCopyBtn",
4959
+ "panel": "k9eRya_panel",
4960
+ "headHint": "k9eRya_headHint",
4961
+ "display": "k9eRya_display",
4962
+ "summaryOk": "k9eRya_summaryOk",
4963
+ "summaryFail": "k9eRya_summaryFail",
4964
4964
  "badgeFail": "k9eRya_badgeFail",
4965
- "panel": "k9eRya_panel"
4965
+ "envLabel": "k9eRya_envLabel"
4966
4966
  };
4967
4967
  //#endregion
4968
4968
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5125,57 +5125,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5125
5125
  css: css$1
5126
5126
  });
5127
5127
  var LogsView_module_css_default = {
5128
- "pathDraft": "_3j77BW_pathDraft",
5129
- "searchInput": "_3j77BW_searchInput",
5128
+ "filterBar": "_3j77BW_filterBar",
5129
+ "pathDialogRow": "_3j77BW_pathDialogRow",
5130
+ "more": "_3j77BW_more",
5131
+ "catBadge": "_3j77BW_catBadge",
5130
5132
  "panel": "_3j77BW_panel",
5131
- "list": "_3j77BW_list",
5132
- "foot": "_3j77BW_foot",
5133
- "catInstall": "_3j77BW_catInstall",
5134
- "catUpdate": "_3j77BW_catUpdate",
5135
- "event": "_3j77BW_event",
5136
- "footCount": "_3j77BW_footCount",
5137
- "catDiagnostics": "_3j77BW_catDiagnostics",
5138
- "message": "_3j77BW_message",
5139
- "linkBtn": "_3j77BW_linkBtn",
5140
- "badgeSuccess": "_3j77BW_badgeSuccess",
5141
- "badgeInfo": "_3j77BW_badgeInfo",
5142
- "pathText": "_3j77BW_pathText",
5143
5133
  "footFail": "_3j77BW_footFail",
5144
- "filterChip": "_3j77BW_filterChip",
5145
- "head": "_3j77BW_head",
5146
- "empty": "_3j77BW_empty",
5147
- "search": "_3j77BW_search",
5148
- "pathDialog": "_3j77BW_pathDialog",
5149
- "badgeDebug": "_3j77BW_badgeDebug",
5150
- "pathRow": "_3j77BW_pathRow",
5151
- "badgeError": "_3j77BW_badgeError",
5152
- "headHint": "_3j77BW_headHint",
5153
- "clearBtn": "_3j77BW_clearBtn",
5134
+ "filterChipActive": "_3j77BW_filterChipActive",
5154
5135
  "pathLabel": "_3j77BW_pathLabel",
5155
- "headActions": "_3j77BW_headActions",
5136
+ "catInstall": "_3j77BW_catInstall",
5137
+ "catSettings": "_3j77BW_catSettings",
5138
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
5139
+ "pathDraft": "_3j77BW_pathDraft",
5156
5140
  "moreEnd": "_3j77BW_moreEnd",
5141
+ "pathText": "_3j77BW_pathText",
5157
5142
  "badgeWarn": "_3j77BW_badgeWarn",
5158
- "pathDialogRow": "_3j77BW_pathDialogRow",
5159
- "badge": "_3j77BW_badge",
5160
- "more": "_3j77BW_more",
5161
- "footActions": "_3j77BW_footActions",
5162
- "pathDialogReset": "_3j77BW_pathDialogReset",
5163
- "catBadge": "_3j77BW_catBadge",
5164
- "logList": "_3j77BW_logList",
5165
- "pathDialogFoot": "_3j77BW_pathDialogFoot",
5166
- "catUninstall": "_3j77BW_catUninstall",
5167
- "catSettings": "_3j77BW_catSettings",
5168
5143
  "catSystem": "_3j77BW_catSystem",
5169
- "filterChipActive": "_3j77BW_filterChipActive",
5170
- "actions": "_3j77BW_actions",
5171
- "time": "_3j77BW_time",
5144
+ "empty": "_3j77BW_empty",
5145
+ "message": "_3j77BW_message",
5146
+ "event": "_3j77BW_event",
5147
+ "head": "_3j77BW_head",
5148
+ "logList": "_3j77BW_logList",
5149
+ "filterChip": "_3j77BW_filterChip",
5172
5150
  "previewRow": "_3j77BW_previewRow",
5151
+ "actions": "_3j77BW_actions",
5152
+ "headActions": "_3j77BW_headActions",
5153
+ "pathRow": "_3j77BW_pathRow",
5154
+ "searchInput": "_3j77BW_searchInput",
5155
+ "headHint": "_3j77BW_headHint",
5156
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5173
5157
  "footPath": "_3j77BW_footPath",
5174
- "pathDialogDesc": "_3j77BW_pathDialogDesc",
5175
5158
  "pathDialogHint": "_3j77BW_pathDialogHint",
5176
- "filterBar": "_3j77BW_filterBar",
5159
+ "footCount": "_3j77BW_footCount",
5160
+ "badgeSuccess": "_3j77BW_badgeSuccess",
5161
+ "badgeDebug": "_3j77BW_badgeDebug",
5162
+ "linkBtn": "_3j77BW_linkBtn",
5163
+ "footActions": "_3j77BW_footActions",
5177
5164
  "btn": "_3j77BW_btn",
5178
- "entry": "_3j77BW_entry"
5165
+ "foot": "_3j77BW_foot",
5166
+ "entry": "_3j77BW_entry",
5167
+ "badgeError": "_3j77BW_badgeError",
5168
+ "badgeInfo": "_3j77BW_badgeInfo",
5169
+ "search": "_3j77BW_search",
5170
+ "catUninstall": "_3j77BW_catUninstall",
5171
+ "catUpdate": "_3j77BW_catUpdate",
5172
+ "catDiagnostics": "_3j77BW_catDiagnostics",
5173
+ "clearBtn": "_3j77BW_clearBtn",
5174
+ "pathDialog": "_3j77BW_pathDialog",
5175
+ "badge": "_3j77BW_badge",
5176
+ "list": "_3j77BW_list",
5177
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5178
+ "time": "_3j77BW_time"
5179
5179
  };
5180
5180
  //#endregion
5181
5181
  //#region src/client/components/modals/LogsModal.tsx
@@ -6353,7 +6353,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6353
6353
  });
6354
6354
  }
6355
6355
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
6356
- info: catalog.hubUpdateInfo ?? { version: "1.3.3" },
6356
+ info: catalog.hubUpdateInfo ?? { version: "1.3.4" },
6357
6357
  lang,
6358
6358
  t,
6359
6359
  hasUpdate: catalog.hubHasUpdate,
@@ -20,6 +20,61 @@ import { preflightTarget } from '../services/install/preflight.js';
20
20
  import { isDshPlugin, isEntryLoaded } from '../services/loader.js';
21
21
  import { loadSettings, saveSettings, resetSettings } from '../services/settings.js';
22
22
  import { appendLog, clearLog, readLog, logFilePath, defaultLogFilePath, customLogFile } from '../services/log.js';
23
+ /**
24
+ * 跨平台宿主重启脚本(以 `node -e` 运行,独立于宿主进程)。
25
+ * 取代原先的 `/bin/sh -c`:Windows 无 /bin/sh,且 lsof/nohup 仅 POSIX 存在。
26
+ * 由 `spawn(process.execPath, ['-e', SCRIPT, port], { detached, stdio:'ignore' })` 孵化,
27
+ * 宿主进程被 kill 后仍能完成「停旧 → 等端口释放 → 拉起新 dsh web」。
28
+ */
29
+ const HOST_RESTART_SCRIPT = String.raw `const C = require('node:child_process')
30
+ const F = require('node:fs')
31
+ const P = require('node:path')
32
+ const O = require('node:os')
33
+ const win = process.platform === 'win32'
34
+ const port = Number(process.argv[1])
35
+
36
+ function findPids() {
37
+ if (win) {
38
+ const out = C.spawnSync('netstat', ['-ano', '-p', 'tcp'], { encoding: 'utf8' })
39
+ const found = []
40
+ for (const line of String(out.stdout || '').split(/\r?\n/)) {
41
+ if (!/LISTENING/i.test(line)) continue
42
+ const parts = line.trim().split(/\s+/)
43
+ const addr = parts[1] || ''
44
+ if (!addr.endsWith(':' + port)) continue
45
+ const pid = parts[parts.length - 1]
46
+ if (pid && /\d+/.test(pid)) found.push(pid)
47
+ }
48
+ return found
49
+ }
50
+ const out = C.spawnSync('lsof', ['-ti', 'tcp:' + port, '-sTCP:LISTEN'], { encoding: 'utf8' })
51
+ return String(out.stdout || '').split(/\s+/).filter(Boolean)
52
+ }
53
+
54
+ for (const pid of findPids()) {
55
+ try {
56
+ if (win) C.spawnSync('taskkill', ['/pid', pid, '/t', '/f'])
57
+ else process.kill(Number(pid), 'SIGTERM')
58
+ } catch {}
59
+ }
60
+
61
+ let tries = 0
62
+ ;(function waitForStop() {
63
+ if (findPids().length === 0 || ++tries > 20) return startHost()
64
+ setTimeout(waitForStop, 250)
65
+ })()
66
+
67
+ function startHost() {
68
+ const dir = P.join(O.homedir(), '.dsh', 'logs')
69
+ F.mkdirSync(dir, { recursive: true })
70
+ const fd = F.openSync(P.join(dir, 'dsh-web-' + port + '.log'), 'a')
71
+ const child = C.spawn('dsh', ['web', '--port', String(port)], {
72
+ detached: true,
73
+ shell: win,
74
+ stdio: ['ignore', fd, fd],
75
+ })
76
+ child.unref()
77
+ }`;
23
78
  const PROFILE_RE = /^[A-Za-z0-9_-]+$/;
24
79
  const BODY_LIMIT_BYTES = 4 * 1024;
25
80
  const COMMAND_TIMEOUT_MS = 5 * 60 * 1000;
@@ -804,16 +859,12 @@ export function mountPluginHubRoutes(webServer, profile, loader) {
804
859
  const host = request.headers.host ?? '';
805
860
  const portMatch = host.match(/:(\d+)$/);
806
861
  const port = portMatch ? Number(portMatch[1]) : 7923;
807
- // detached 子 shell 完成「停旧进程 → 等端口释放 → 后台拉起 dsh web」,
808
- // 即使当前宿主(即本插件所在进程)被 kill,重启仍会继续执行
809
- const script = [
810
- `pids=$(lsof -ti tcp:${port} -sTCP:LISTEN 2>/dev/null)`,
811
- '[ -n "$pids" ] && kill -TERM $pids 2>/dev/null || true',
812
- `i=0; while [ -n "$(lsof -ti tcp:${port} -sTCP:LISTEN 2>/dev/null)" ] && [ $i -lt 20 ]; do sleep 0.25; i=$((i + 1)); done`,
813
- 'mkdir -p "$HOME/.dsh/logs"',
814
- `nohup dsh web --port ${port} >>"$HOME/.dsh/logs/dsh-web-${port}.log" 2>&1 &`,
815
- ].join('\n');
816
- spawn('/bin/sh', ['-c', script], { detached: true, stdio: 'ignore' }).unref();
862
+ // detached 子进程完成「停旧进程 → 等端口释放 → 后台拉起 dsh web」,
863
+ // 即使当前宿主(即本插件所在进程)被 kill,重启仍会继续执行。
864
+ // 不用 /bin/sh:Windows 无此路径,且 lsof/nohup 等仅 POSIX 存在,
865
+ // 故孵化 node(process.execPath) 跑跨平台脚本 —— Windows 用
866
+ // netstat + taskkill + shell:true 解析 dsh.cmd,POSIX 用 lsof + SIGTERM。
867
+ spawn(process.execPath, ['-e', HOST_RESTART_SCRIPT, String(port)], { detached: true, stdio: 'ignore' }).unref();
817
868
  sendJson(response, 200, { ok: true, port });
818
869
  },
819
870
  }),
@@ -21,7 +21,8 @@ export const NPM_MIN_VERSION = [11, 6, 0];
21
21
  /** 读本机 npm 版本(major.minor.patch);npm 不在 PATH 或执行失败/超时时返回 null(不妄下结论)。 */
22
22
  export function npmVersionOf(env) {
23
23
  try {
24
- const res = spawnSync('npm', ['-v'], { env, encoding: 'utf8', timeout: 10_000, stdio: ['ignore', 'pipe', 'pipe'] });
24
+ // Windows 下 npm 是 npm.cmd:spawn 直接 exec 会拒绝,须 shell:true 解析(与 task-queue 的 useShell 一致)
25
+ const res = spawnSync('npm', ['-v'], { env, encoding: 'utf8', timeout: 10_000, stdio: ['ignore', 'pipe', 'pipe'], shell: process.platform === 'win32' });
25
26
  if (res.error !== undefined || res.status !== 0)
26
27
  return null;
27
28
  const m = /(\d+)\.(\d+)\.(\d+)/.exec(res.stdout ?? '');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin",
3
- "version": "1.3.3",
3
+ "version": "1.3.4",
4
4
  "description": "A community plugin marketplace for DeepSeek Harness, built to the official plugin spec — browse, search and install 4000+ human-curated community plugins without leaving the app. · DeepSeek Harness 社区插件市场(遵循官方开发规范):4000+ 人工精选社区插件,每日更新。",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -22,6 +22,62 @@ import { isDshPlugin, isEntryLoaded } from '../services/loader.ts'
22
22
  import { loadSettings, saveSettings, resetSettings, type HubSettings } from '../services/settings.ts'
23
23
  import { appendLog, clearLog, readLog, logFilePath, defaultLogFilePath, customLogFile } from '../services/log.ts'
24
24
 
25
+ /**
26
+ * 跨平台宿主重启脚本(以 `node -e` 运行,独立于宿主进程)。
27
+ * 取代原先的 `/bin/sh -c`:Windows 无 /bin/sh,且 lsof/nohup 仅 POSIX 存在。
28
+ * 由 `spawn(process.execPath, ['-e', SCRIPT, port], { detached, stdio:'ignore' })` 孵化,
29
+ * 宿主进程被 kill 后仍能完成「停旧 → 等端口释放 → 拉起新 dsh web」。
30
+ */
31
+ const HOST_RESTART_SCRIPT = String.raw`const C = require('node:child_process')
32
+ const F = require('node:fs')
33
+ const P = require('node:path')
34
+ const O = require('node:os')
35
+ const win = process.platform === 'win32'
36
+ const port = Number(process.argv[1])
37
+
38
+ function findPids() {
39
+ if (win) {
40
+ const out = C.spawnSync('netstat', ['-ano', '-p', 'tcp'], { encoding: 'utf8' })
41
+ const found = []
42
+ for (const line of String(out.stdout || '').split(/\r?\n/)) {
43
+ if (!/LISTENING/i.test(line)) continue
44
+ const parts = line.trim().split(/\s+/)
45
+ const addr = parts[1] || ''
46
+ if (!addr.endsWith(':' + port)) continue
47
+ const pid = parts[parts.length - 1]
48
+ if (pid && /\d+/.test(pid)) found.push(pid)
49
+ }
50
+ return found
51
+ }
52
+ const out = C.spawnSync('lsof', ['-ti', 'tcp:' + port, '-sTCP:LISTEN'], { encoding: 'utf8' })
53
+ return String(out.stdout || '').split(/\s+/).filter(Boolean)
54
+ }
55
+
56
+ for (const pid of findPids()) {
57
+ try {
58
+ if (win) C.spawnSync('taskkill', ['/pid', pid, '/t', '/f'])
59
+ else process.kill(Number(pid), 'SIGTERM')
60
+ } catch {}
61
+ }
62
+
63
+ let tries = 0
64
+ ;(function waitForStop() {
65
+ if (findPids().length === 0 || ++tries > 20) return startHost()
66
+ setTimeout(waitForStop, 250)
67
+ })()
68
+
69
+ function startHost() {
70
+ const dir = P.join(O.homedir(), '.dsh', 'logs')
71
+ F.mkdirSync(dir, { recursive: true })
72
+ const fd = F.openSync(P.join(dir, 'dsh-web-' + port + '.log'), 'a')
73
+ const child = C.spawn('dsh', ['web', '--port', String(port)], {
74
+ detached: true,
75
+ shell: win,
76
+ stdio: ['ignore', fd, fd],
77
+ })
78
+ child.unref()
79
+ }`
80
+
25
81
  export interface WebRoute {
26
82
  kind: 'exact'
27
83
  path: string
@@ -792,16 +848,12 @@ export function mountPluginHubRoutes(webServer: WebServerService, profile: strin
792
848
  const host = request.headers.host ?? ''
793
849
  const portMatch = host.match(/:(\d+)$/)
794
850
  const port = portMatch ? Number(portMatch[1]) : 7923
795
- // detached 子 shell 完成「停旧进程 → 等端口释放 → 后台拉起 dsh web」,
796
- // 即使当前宿主(即本插件所在进程)被 kill,重启仍会继续执行
797
- const script = [
798
- `pids=$(lsof -ti tcp:${port} -sTCP:LISTEN 2>/dev/null)`,
799
- '[ -n "$pids" ] && kill -TERM $pids 2>/dev/null || true',
800
- `i=0; while [ -n "$(lsof -ti tcp:${port} -sTCP:LISTEN 2>/dev/null)" ] && [ $i -lt 20 ]; do sleep 0.25; i=$((i + 1)); done`,
801
- 'mkdir -p "$HOME/.dsh/logs"',
802
- `nohup dsh web --port ${port} >>"$HOME/.dsh/logs/dsh-web-${port}.log" 2>&1 &`,
803
- ].join('\n')
804
- spawn('/bin/sh', ['-c', script], { detached: true, stdio: 'ignore' }).unref()
851
+ // detached 子进程完成「停旧进程 → 等端口释放 → 后台拉起 dsh web」,
852
+ // 即使当前宿主(即本插件所在进程)被 kill,重启仍会继续执行。
853
+ // 不用 /bin/sh:Windows 无此路径,且 lsof/nohup 等仅 POSIX 存在,
854
+ // 故孵化 node(process.execPath) 跑跨平台脚本 —— Windows 用
855
+ // netstat + taskkill + shell:true 解析 dsh.cmd,POSIX 用 lsof + SIGTERM。
856
+ spawn(process.execPath, ['-e', HOST_RESTART_SCRIPT, String(port)], { detached: true, stdio: 'ignore' }).unref()
805
857
  sendJson(response, 200, { ok: true, port })
806
858
  },
807
859
  }),
@@ -23,7 +23,8 @@ export const NPM_MIN_VERSION = [11, 6, 0]
23
23
  /** 读本机 npm 版本(major.minor.patch);npm 不在 PATH 或执行失败/超时时返回 null(不妄下结论)。 */
24
24
  export function npmVersionOf(env: NodeJS.ProcessEnv | undefined): [number, number, number] | null {
25
25
  try {
26
- const res = spawnSync('npm', ['-v'], { env, encoding: 'utf8', timeout: 10_000, stdio: ['ignore', 'pipe', 'pipe'] })
26
+ // Windows 下 npm 是 npm.cmd:spawn 直接 exec 会拒绝,须 shell:true 解析(与 task-queue 的 useShell 一致)
27
+ const res = spawnSync('npm', ['-v'], { env, encoding: 'utf8', timeout: 10_000, stdio: ['ignore', 'pipe', 'pipe'], shell: process.platform === 'win32' })
27
28
  if (res.error !== undefined || res.status !== 0) return null
28
29
  const m = /(\d+)\.(\d+)\.(\d+)/.exec(res.stdout ?? '')
29
30
  return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : null