dsh-plugin 1.3.7 → 1.3.9

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
@@ -31,7 +31,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
31
31
  fork: "Fork",
32
32
  loading: "正在加载插件数据…",
33
33
  failed: "插件数据加载失败",
34
- failedDesc: "请稍后重试,或点击右上角按钮在浏览器中打开插件中心。",
34
+ failedDescNoProxy: "你的网络似乎不通,无法获取插件目录数据。请检查网络连接后重试;或点击右上角按钮在浏览器中打开插件中心。",
35
+ failedDescProxy: "你的网络似乎不通,或设置里的 HTTP 代理地址不可达,无法获取插件目录数据。请检查代理设置与网络连接后重试;或点击右上角按钮在浏览器中打开插件中心。",
35
36
  retry: "重试",
36
37
  install: "安装",
37
38
  cliOnlyHint: "此插件可能需命令行辅助,失败时复制上方命令到 dsh 终端",
@@ -289,6 +290,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
289
290
  failNetworkHint: "安装前检测到网络不通:无法连接到安装源(可能是断网、DNS 解析失败、被防火墙拦截,或代理配置有问题)。这不是插件本身的问题 —— 请检查网络连接,或到「设置」里确认 HTTP 代理配置,再到「系统诊断」运行一次连通性检测,然后重试。",
290
291
  failNetworkTarget: "无法访问 {url} —— 你的网络连接不通",
291
292
  failNetworkRunDiag: "去系统诊断检测网络",
293
+ failDshMissingHint: "系统找不到 dsh 命令(dsh 未加入系统 PATH),无法调用安装器执行安装。请确认 DeepSeek Harness 已正确安装、dsh 已加入 PATH(或重新安装),然后重试。这不是插件本身的问题。",
294
+ failPnpmMissingHint: "安装器找到了 dsh,但系统里没有 pnpm 命令(dsh 用它来管理 profile 插件)。请先安装 pnpm(如 npm install -g pnpm),确认 pnpm 已加入 PATH 后重试。这不是插件本身的问题。",
295
+ installChannelNpm: "NPM 包",
296
+ installChannelGit: "GitHub 源码",
297
+ installChannelDsh: "DSH 命令",
298
+ installEntryLine: "安装入口:{c}。",
292
299
  reportIssue: "去插件仓库提交 Issue",
293
300
  detail: "打开详情",
294
301
  noResult: "没有找到匹配的插件",
@@ -343,7 +350,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
343
350
  fork: "Fork",
344
351
  loading: "Loading plugin data…",
345
352
  failed: "Failed to load plugin data",
346
- failedDesc: "Please retry, or open the hub in your browser with the button above.",
353
+ failedDescNoProxy: "Your network seems unreachable, so the plugin catalog could not be loaded. Please check your connection and retry; or open the hub in your browser with the button above.",
354
+ failedDescProxy: "Your network seems unreachable, or the HTTP proxy in Settings is unreachable, so the plugin catalog could not be loaded. Please check the proxy address and your connection, then retry; or open the hub in your browser with the button above.",
347
355
  retry: "Retry",
348
356
  install: "Install",
349
357
  cliOnlyHint: "This plugin may need command-line help; if it fails, copy the command above and run it in your dsh terminal",
@@ -604,6 +612,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
604
612
  failNetworkHint: "The network could not be reached before install: the install source is unreachable (offline, DNS failure, firewall block, or a misconfigured proxy). This is not a problem with the plugin itself — please check your connection, confirm the HTTP proxy in Settings, run a connectivity check under System Diagnostics, then retry.",
605
613
  failNetworkTarget: "Cannot reach {url} — your network connection is down",
606
614
  failNetworkRunDiag: "Run a network diagnostic",
615
+ failDshMissingHint: "The dsh command could not be found (it is not on the system PATH), so the installer could not run. Please make sure DeepSeek Harness is installed correctly and dsh is on your PATH (or reinstall it), then retry. This is not a problem with the plugin itself.",
616
+ failPnpmMissingHint: "The installer found dsh, but pnpm is missing on this machine (dsh uses it to manage profile plugins). Please install pnpm first (e.g. npm install -g pnpm), make sure it is on your PATH, then retry. This is not a problem with the plugin itself.",
617
+ installChannelNpm: "NPM package",
618
+ installChannelGit: "GitHub source",
619
+ installChannelDsh: "DSH command",
620
+ installEntryLine: "Install entry: {c}.",
607
621
  reportIssue: "Report an Issue to the plugin repo",
608
622
  detail: "Open details",
609
623
  noResult: "No plugins match your search",
@@ -656,42 +670,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
656
670
  css: css$11
657
671
  });
658
672
  var Header_module_css_default = {
659
- "copyIcon": "qikqja_copyIcon",
660
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
661
- "resultCount": "qikqja_resultCount",
662
- "taglineLink": "qikqja_taglineLink",
663
- "sortGroup": "qikqja_sortGroup",
664
- "header": "qikqja_header",
673
+ "tagline": "qikqja_tagline",
665
674
  "tab": "qikqja_tab",
666
- "segGroup": "qikqja_segGroup",
667
- "versionBtn": "qikqja_versionBtn",
668
- "tabCount": "qikqja_tabCount",
675
+ "adBanner": "qikqja_adBanner",
676
+ "adBadge": "qikqja_adBadge",
677
+ "sortGroup": "qikqja_sortGroup",
678
+ "search": "qikqja_search",
669
679
  "tabsRow": "qikqja_tabsRow",
670
- "brandTitle": "qikqja_brandTitle",
671
- "tabs": "qikqja_tabs",
672
- "title": "qikqja_title",
680
+ "adText": "qikqja_adText",
673
681
  "logoIcon": "qikqja_logoIcon",
682
+ "tabActive": "qikqja_tabActive",
683
+ "header": "qikqja_header",
684
+ "versionBtn": "qikqja_versionBtn",
685
+ "segBtnActive": "qikqja_segBtnActive",
686
+ "aboutBtn": "qikqja_aboutBtn",
674
687
  "githubIcon": "qikqja_githubIcon",
675
- "tagline": "qikqja_tagline",
676
- "adText": "qikqja_adText",
677
- "segLabel": "qikqja_segLabel",
688
+ "segGroup": "qikqja_segGroup",
689
+ "segBtn": "qikqja_segBtn",
678
690
  "headerRight": "qikqja_headerRight",
679
- "githubLink": "qikqja_githubLink",
691
+ "langBtn": "qikqja_langBtn",
680
692
  "resultSeg": "qikqja_resultSeg",
693
+ "githubLink": "qikqja_githubLink",
694
+ "version": "qikqja_version",
695
+ "copyIcon": "qikqja_copyIcon",
681
696
  "headerTitleRow": "qikqja_headerTitleRow",
697
+ "resultCount": "qikqja_resultCount",
698
+ "adArrow": "qikqja_adArrow",
699
+ "brandTitle": "qikqja_brandTitle",
682
700
  "controls": "qikqja_controls",
683
- "adBadge": "qikqja_adBadge",
684
- "root": "qikqja_root",
685
- "aboutBtn": "qikqja_aboutBtn",
686
- "version": "qikqja_version",
701
+ "segLabel": "qikqja_segLabel",
687
702
  "searchRow": "qikqja_searchRow",
688
- "search": "qikqja_search",
689
- "segBtnActive": "qikqja_segBtnActive",
690
- "adBanner": "qikqja_adBanner",
691
- "langBtn": "qikqja_langBtn",
692
- "adArrow": "qikqja_adArrow",
693
- "segBtn": "qikqja_segBtn",
694
- "tabActive": "qikqja_tabActive"
703
+ "taglineLink": "qikqja_taglineLink",
704
+ "tabs": "qikqja_tabs",
705
+ "title": "qikqja_title",
706
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
707
+ "tabCount": "qikqja_tabCount",
708
+ "root": "qikqja_root"
695
709
  };
696
710
  //#endregion
697
711
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
@@ -710,136 +724,136 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
710
724
  css: css$10
711
725
  });
712
726
  var Modal_module_css_default = {
713
- "aboutMeta": "BiQ1zG_aboutMeta",
714
- "resultDesc": "BiQ1zG_resultDesc",
715
- "noticeTextOk": "BiQ1zG_noticeTextOk",
716
- "progressTrack": "BiQ1zG_progressTrack",
717
- "errorTitle": "BiQ1zG_errorTitle",
718
- "modal": "BiQ1zG_modal",
719
- "restartNow": "BiQ1zG_restartNow",
720
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
721
- "restartLater": "BiQ1zG_restartLater",
722
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
723
- "modalHead": "BiQ1zG_modalHead",
727
+ "modalCmdText": "BiQ1zG_modalCmdText",
728
+ "result": "BiQ1zG_result",
729
+ "failKind": "BiQ1zG_failKind",
724
730
  "progressText": "BiQ1zG_progressText",
725
- "resultTitle": "BiQ1zG_resultTitle",
726
- "noticeIgnore": "BiQ1zG_noticeIgnore",
727
- "failRepo": "BiQ1zG_failRepo",
728
- "failCopy": "BiQ1zG_failCopy",
729
- "queueRowHead": "BiQ1zG_queueRowHead",
730
- "modalLink": "BiQ1zG_modalLink",
731
- "queueRowPct": "BiQ1zG_queueRowPct",
732
- "detailValue": "BiQ1zG_detailValue",
733
- "confirmPrimary": "BiQ1zG_confirmPrimary",
734
- "failKindInstall": "BiQ1zG_failKindInstall",
735
- "detailModal": "BiQ1zG_detailModal",
736
- "detailGrid": "BiQ1zG_detailGrid",
731
+ "progressFill": "BiQ1zG_progressFill",
732
+ "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
733
+ "aboutModal": "BiQ1zG_aboutModal",
734
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
735
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
736
+ "confirmIcon": "BiQ1zG_confirmIcon",
737
737
  "modalIn": "BiQ1zG_modalIn",
738
- "modalLabel": "BiQ1zG_modalLabel",
739
- "failBigIssue": "BiQ1zG_failBigIssue",
740
- "toastIn": "BiQ1zG_toastIn",
741
- "errorCopySoft": "BiQ1zG_errorCopySoft",
742
- "noticeMain": "BiQ1zG_noticeMain",
743
- "aboutContent": "BiQ1zG_aboutContent",
744
- "errorHint": "BiQ1zG_errorHint",
745
- "noticeTime": "BiQ1zG_noticeTime",
738
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
739
+ "failClear": "BiQ1zG_failClear",
740
+ "modalCopy": "BiQ1zG_modalCopy",
741
+ "failKindInstall": "BiQ1zG_failKindInstall",
746
742
  "modalCmdCopy": "BiQ1zG_modalCmdCopy",
747
- "result": "BiQ1zG_result",
748
- "noticeRowOk": "BiQ1zG_noticeRowOk",
749
- "errorBox": "BiQ1zG_errorBox",
750
- "detailStars": "BiQ1zG_detailStars",
751
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
752
- "logModal": "BiQ1zG_logModal",
753
- "detailStatusText": "BiQ1zG_detailStatusText",
754
- "failedCopyHint": "BiQ1zG_failedCopyHint",
755
- "linkIcon": "BiQ1zG_linkIcon",
743
+ "progressFillFail": "BiQ1zG_progressFillFail",
756
744
  "detailUpdateHint": "BiQ1zG_detailUpdateHint",
745
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
757
746
  "toastFail": "BiQ1zG_toastFail",
758
- "dangerConfirm": "BiQ1zG_dangerConfirm",
759
- "confirmIconDanger": "BiQ1zG_confirmIconDanger",
760
- "progressFillFail": "BiQ1zG_progressFillFail",
761
- "pendingRowActions": "BiQ1zG_pendingRowActions",
762
- "modalWide": "BiQ1zG_modalWide",
763
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
747
+ "modalValue": "BiQ1zG_modalValue",
748
+ "noticeRowOk": "BiQ1zG_noticeRowOk",
749
+ "noticeFoot": "BiQ1zG_noticeFoot",
750
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
751
+ "modalCancel": "BiQ1zG_modalCancel",
752
+ "queueRowTrack": "BiQ1zG_queueRowTrack",
753
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
754
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
755
+ "queueRowBody": "BiQ1zG_queueRowBody",
764
756
  "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
765
- "detailDim": "BiQ1zG_detailDim",
766
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
757
+ "failHead": "BiQ1zG_failHead",
758
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
759
+ "detailRow": "BiQ1zG_detailRow",
760
+ "errorModal": "BiQ1zG_errorModal",
761
+ "progress": "BiQ1zG_progress",
762
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
763
+ "detailPathText": "BiQ1zG_detailPathText",
764
+ "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
765
+ "toast": "BiQ1zG_toast",
766
+ "noticeMain": "BiQ1zG_noticeMain",
767
+ "modalDesc": "BiQ1zG_modalDesc",
768
+ "queueRow": "BiQ1zG_queueRow",
769
+ "resultCheck": "BiQ1zG_resultCheck",
770
+ "modalClose": "BiQ1zG_modalClose",
771
+ "progressHead": "BiQ1zG_progressHead",
767
772
  "detailLabel": "BiQ1zG_detailLabel",
768
- "modalTitle": "BiQ1zG_modalTitle",
769
- "modalCancel": "BiQ1zG_modalCancel",
770
- "detailStatusPending": "BiQ1zG_detailStatusPending",
771
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
773
+ "failRow": "BiQ1zG_failRow",
772
774
  "noticeList": "BiQ1zG_noticeList",
773
- "modalInstall": "BiQ1zG_modalInstall",
774
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
775
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
775
+ "linkIcon": "BiQ1zG_linkIcon",
776
+ "queueRowHead": "BiQ1zG_queueRowHead",
777
+ "restartLater": "BiQ1zG_restartLater",
778
+ "modalRow": "BiQ1zG_modalRow",
779
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
780
+ "resultDesc": "BiQ1zG_resultDesc",
781
+ "detailPath": "BiQ1zG_detailPath",
782
+ "modal": "BiQ1zG_modal",
776
783
  "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
777
- "queueRowTarget": "BiQ1zG_queueRowTarget",
778
- "modalCmdText": "BiQ1zG_modalCmdText",
779
- "resultCheck": "BiQ1zG_resultCheck",
780
- "failKind": "BiQ1zG_failKind",
781
- "aboutModal": "BiQ1zG_aboutModal",
784
+ "progressTrack": "BiQ1zG_progressTrack",
785
+ "detailPathActions": "BiQ1zG_detailPathActions",
786
+ "aboutMeta": "BiQ1zG_aboutMeta",
787
+ "stripCancel": "BiQ1zG_stripCancel",
788
+ "overlayIn": "BiQ1zG_overlayIn",
782
789
  "detailLink": "BiQ1zG_detailLink",
783
- "modalDesc": "BiQ1zG_modalDesc",
784
- "confirmIcon": "BiQ1zG_confirmIcon",
785
- "modalCloseIcon": "BiQ1zG_modalCloseIcon",
786
- "restartNowWarning": "BiQ1zG_restartNowWarning",
787
- "detailPathText": "BiQ1zG_detailPathText",
788
- "overlay": "BiQ1zG_overlay",
790
+ "modalWide": "BiQ1zG_modalWide",
791
+ "modalActions": "BiQ1zG_modalActions",
792
+ "noticeTextFail": "BiQ1zG_noticeTextFail",
793
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
794
+ "failBigIssue": "BiQ1zG_failBigIssue",
795
+ "errorTitle": "BiQ1zG_errorTitle",
796
+ "noticeTime": "BiQ1zG_noticeTime",
797
+ "queueSection": "BiQ1zG_queueSection",
798
+ "failRepo": "BiQ1zG_failRepo",
799
+ "helpModal": "BiQ1zG_helpModal",
789
800
  "noticeRow": "BiQ1zG_noticeRow",
790
- "failNetworkTarget": "BiQ1zG_failNetworkTarget",
791
- "modalValue": "BiQ1zG_modalValue",
792
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
793
- "noticeRemove": "BiQ1zG_noticeRemove",
801
+ "modalHead": "BiQ1zG_modalHead",
802
+ "errorBox": "BiQ1zG_errorBox",
794
803
  "confirmIconWrap": "BiQ1zG_confirmIconWrap",
795
- "modalCopy": "BiQ1zG_modalCopy",
796
- "stripCancel": "BiQ1zG_stripCancel",
797
- "detailPathActions": "BiQ1zG_detailPathActions",
798
- "errorModal": "BiQ1zG_errorModal",
804
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
805
+ "noticeRemove": "BiQ1zG_noticeRemove",
806
+ "restartNow": "BiQ1zG_restartNow",
807
+ "modalTitle": "BiQ1zG_modalTitle",
808
+ "modalBody": "BiQ1zG_modalBody",
809
+ "toastIn": "BiQ1zG_toastIn",
810
+ "failList": "BiQ1zG_failList",
799
811
  "failKindUninstall": "BiQ1zG_failKindUninstall",
800
- "helpModal": "BiQ1zG_helpModal",
801
- "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
802
- "detailPathBtn": "BiQ1zG_detailPathBtn",
803
812
  "detailMono": "BiQ1zG_detailMono",
804
- "noticeRowMain": "BiQ1zG_noticeRowMain",
805
- "modalClose": "BiQ1zG_modalClose",
813
+ "aboutContent": "BiQ1zG_aboutContent",
814
+ "overlay": "BiQ1zG_overlay",
815
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
816
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
817
+ "modalCmd": "BiQ1zG_modalCmd",
818
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
819
+ "noticeHead": "BiQ1zG_noticeHead",
820
+ "queuedHint": "BiQ1zG_queuedHint",
806
821
  "queueSectionTitle": "BiQ1zG_queueSectionTitle",
807
822
  "queueRowDesc": "BiQ1zG_queueRowDesc",
808
- "queueRowTrack": "BiQ1zG_queueRowTrack",
823
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
809
824
  "resultRestarting": "BiQ1zG_resultRestarting",
810
- "progressFill": "BiQ1zG_progressFill",
811
- "noticeTextFail": "BiQ1zG_noticeTextFail",
812
- "queuedHint": "BiQ1zG_queuedHint",
813
- "modalCmd": "BiQ1zG_modalCmd",
814
- "failDiagBtn": "BiQ1zG_failDiagBtn",
815
- "queueRowBody": "BiQ1zG_queueRowBody",
816
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
817
- "uninstallConfirm": "BiQ1zG_uninstallConfirm",
818
- "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
819
- "trustHint": "BiQ1zG_trustHint",
820
- "failPrepareHint": "BiQ1zG_failPrepareHint",
821
- "modalActions": "BiQ1zG_modalActions",
822
- "toast": "BiQ1zG_toast",
823
- "progressHead": "BiQ1zG_progressHead",
824
- "noticeVersion": "BiQ1zG_noticeVersion",
825
- "overlayIn": "BiQ1zG_overlayIn",
826
- "modalRow": "BiQ1zG_modalRow",
827
- "detailRow": "BiQ1zG_detailRow",
825
+ "detailValue": "BiQ1zG_detailValue",
826
+ "errorHint": "BiQ1zG_errorHint",
827
+ "dangerConfirm": "BiQ1zG_dangerConfirm",
828
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
829
+ "confirmPrimary": "BiQ1zG_confirmPrimary",
830
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
831
+ "detailModal": "BiQ1zG_detailModal",
828
832
  "failEmpty": "BiQ1zG_failEmpty",
829
- "queueRow": "BiQ1zG_queueRow",
830
- "noticeHead": "BiQ1zG_noticeHead",
831
- "failRow": "BiQ1zG_failRow",
832
- "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
833
- "queueSection": "BiQ1zG_queueSection",
834
- "modalBody": "BiQ1zG_modalBody",
835
- "failClear": "BiQ1zG_failClear",
833
+ "failDiagBtn": "BiQ1zG_failDiagBtn",
836
834
  "detailArrow": "BiQ1zG_detailArrow",
837
- "progress": "BiQ1zG_progress",
835
+ "detailStatusText": "BiQ1zG_detailStatusText",
836
+ "logModal": "BiQ1zG_logModal",
837
+ "modalLabel": "BiQ1zG_modalLabel",
838
+ "queueRowPct": "BiQ1zG_queueRowPct",
838
839
  "queueRowStatus": "BiQ1zG_queueRowStatus",
839
- "detailPath": "BiQ1zG_detailPath",
840
- "noticeFoot": "BiQ1zG_noticeFoot",
841
- "failList": "BiQ1zG_failList",
842
- "failHead": "BiQ1zG_failHead"
840
+ "detailDim": "BiQ1zG_detailDim",
841
+ "modalInstall": "BiQ1zG_modalInstall",
842
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
843
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
844
+ "resultTitle": "BiQ1zG_resultTitle",
845
+ "noticeVersion": "BiQ1zG_noticeVersion",
846
+ "failNetworkTarget": "BiQ1zG_failNetworkTarget",
847
+ "detailStars": "BiQ1zG_detailStars",
848
+ "detailGrid": "BiQ1zG_detailGrid",
849
+ "modalLink": "BiQ1zG_modalLink",
850
+ "failCopy": "BiQ1zG_failCopy",
851
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
852
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
853
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
854
+ "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
855
+ "restartNowWarning": "BiQ1zG_restartNowWarning",
856
+ "trustHint": "BiQ1zG_trustHint"
843
857
  };
844
858
  //#endregion
845
859
  //#region src/client/logic/install-command.ts
@@ -909,7 +923,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
909
923
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
910
924
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
911
925
  */
912
- const PLUGIN_VERSION = "1.3.7";
926
+ const PLUGIN_VERSION = "1.3.9";
913
927
  const CATEGORY_ORDER = [
914
928
  "interface",
915
929
  "session",
@@ -1542,7 +1556,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1542
1556
  */
1543
1557
  const hubHasUpdate = (() => {
1544
1558
  if (!hubUpdateInfo) return false;
1545
- return hubUpdateInfo.version !== "1.3.7";
1559
+ return hubUpdateInfo.version !== "1.3.9";
1546
1560
  })();
1547
1561
  (0, react.useMemo)(() => {
1548
1562
  if (!plugins) return [];
@@ -1721,12 +1735,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1721
1735
  return next;
1722
1736
  }
1723
1737
  /**
1724
- * 失败归类,五态。无论底层机制如何(pnpm 白名单拦截 / 构建脚本被忽略 / prepare 失败),
1738
+ * 失败归类,七态。无论底层机制如何(pnpm 白名单拦截 / 构建脚本被忽略 / prepare 失败),
1725
1739
  * 对用户而言结果都一样 —— 当前安装通道(npm 或 git)装不上,就是插件分发/依赖的问题,
1726
- * 一律引导提 Issue;唯一的两个例外是本机环境问题(npm 版本过低 / 网络不通):
1740
+ * 一律引导提 Issue;唯一的例外是本机环境问题(npm 版本过低 / 找不到 dsh / 找不到 pnpm / 网络不通):
1727
1741
  * - npmTooOld:失败输出含 npm arborist 的 `edgesOut` 崩溃特征(build-ideal-tree.js 解 peer 依赖时
1728
1742
  * 内部抛错,npm 11.6.0 前必现的已知缺陷,npm/cli#8261、#9787),或服务端已核实本机版本低于
1729
1743
  * 阈值并打了 `[npm-too-low]` 标记 —— 是本机 npm 版本过低/自身缺陷,不是插件问题 → 引导升级 npm
1744
+ * - dshMissing:安装器 spawn 的 `dsh` 命令找不到(Windows cmd「不是内部或外部命令」/ POSIX
1745
+ * 「command not found」/ spawn ENOENT)—— 是本机 DSH 未正确安装或不在 PATH,不是插件问题
1746
+ * → 提示检查 PATH/重装 DSH,不引导提 Issue
1747
+ * - pnpmMissing:dsh 存在但调用的 `pnpm` 找不到(dsh 报 `pnpm not found on PATH`/POSIX
1748
+ * 「pnpm: command not found」/ spawn ENOENT)—— 本机缺 pnpm(dsh 用 pnpm 管理 profile 插件),
1749
+ * 不是插件问题(dsh-plugin-hub#13:Linux 下 `dsh: pnpm not found on PATH` 被误归插件侧失败)
1750
+ * → 提示安装/开启 pnpm,不引导提 Issue
1730
1751
  * - network:安装前连通性预检拦截(服务端 `[network]` 标记)或底层连接失败
1731
1752
  * (ERR_PNPM_GIT_FETCH_FAILED / ETIMEDOUT / DNS 解析 / TLS 握手 / 代理拒绝)——
1732
1753
  * 是本机网络不通/被墙/代理有问题,不是插件问题 → 提示检查网络,不引导提 Issue
@@ -1740,6 +1761,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1740
1761
  */
1741
1762
  function classifyFailure(message) {
1742
1763
  if (/\[npm-too-low\]|edgesOut/i.test(message)) return "npmTooOld";
1764
+ if (/\[pnpm-missing\]|pnpm not found|pnpm: command not found|spawn pnpm ENOENT|'pnpm' 不是内部或外部命令|"pnpm" 不是内部或外部命令|pnpm['"]?\s*is not recognized/i.test(message)) return "pnpmMissing";
1765
+ if (/\[dsh-missing\]|不是内部或外部命令|is not recognized as an internal or external command|command not found|spawn dsh ENOENT/i.test(message)) return "dshMissing";
1743
1766
  if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:|ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED/i.test(message)) return "pnpmIgnoredBuild";
1744
1767
  if (/\[network\]|ERR_PNPM_GIT_FETCH_FAILED|ETIMEDOUT|ECONNREFUSED|ECONNRESET|ENOTFOUND|EAI_AGAIN|EPIPE|EHOSTUNREACH|ENETUNREACH|getaddrinfo|Could not connect|Could not resolve host|Network unreachable|Failed to connect|socket hang up|CERT_HAS_EXPIRED|SSL certificate problem|\bTLS\b|\bSSL\b/i.test(message)) return "network";
1745
1768
  if (/\[packaging\]|entry file missing/i.test(message)) return "pluginPrepare";
@@ -1832,6 +1855,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1832
1855
  function reasonTitleOf(kind) {
1833
1856
  switch (kind) {
1834
1857
  case "npmTooOld": return "npm too old to install";
1858
+ case "dshMissing": return "dsh command not found on the user machine";
1859
+ case "pnpmMissing": return "pnpm command not found on the user machine";
1835
1860
  case "pnpmIgnoredBuild": return "build scripts blocked by pnpm allowlist";
1836
1861
  case "pluginPrepare": return "plugin distribution incomplete";
1837
1862
  case "network": return "network failure on the user side";
@@ -2033,6 +2058,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2033
2058
  /** 安装/卸载请求超时(ms):服务端 preflight + npm 反查可能耗时(各自都有超时,合计约 20~30s),
2034
2059
  * 给足余量;超时主动中止,避免服务端 preflight 网络挂起时前端永久卡「安装中 0%」。 */
2035
2060
  const REQUEST_TIMEOUT_MS = 6e4;
2061
+ /** 入口渠道的 i18n key:NPM 包 / GitHub 源码 / DSH 命令。 */
2062
+ const channelKeyOf = (channel) => channel === "git" ? "installChannelGit" : channel === "dsh" ? "installChannelDsh" : "installChannelNpm";
2063
+ /** 失败消息的入口溯源前缀:自定义安装(带渠道)在错误正文顶部精准指出从哪张卡片发起;
2064
+ * 目录插件安装(无渠道)返回 null,错误正文保持原样。 */
2065
+ const entryLineOf = (t, channel) => channel ? t("installEntryLine", { c: t(channelKeyOf(channel)) }) : null;
2036
2066
  function useTaskQueue(opts) {
2037
2067
  const { t, langKey, refreshInstalled, onInstallDone, onUninstallDone, onError, installPlugin, installCustomTarget, installGlobalTarget, uninstallPlugin, uninstallName, installedName, resolvePending } = opts;
2038
2068
  const [queue, setQueue] = (0, react.useState)([]);
@@ -2146,8 +2176,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2146
2176
  onInstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart, q.action === "update");
2147
2177
  }
2148
2178
  } else {
2149
- const detail = lines.length > 0 ? [...lines].reverse().join("\n") : q.kind === "uninstall" ? t("uninstallFail") : t("installFail");
2150
- onError(detail, q.repo, q.kind, q.command, q.attempts, q.action === "update");
2179
+ const rawDetail = lines.length > 0 ? [...lines].reverse().join("\n") : q.kind === "uninstall" ? t("uninstallFail") : t("installFail");
2180
+ const entry = entryLineOf(t, q.channel);
2181
+ onError(entry ? `${entry}\n${rawDetail}` : rawDetail, q.repo, q.kind, q.command, q.attempts, q.action === "update");
2151
2182
  }
2152
2183
  maybeStopPoll();
2153
2184
  };
@@ -2245,7 +2276,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2245
2276
  progress: typeof a.progress === "number" ? a.progress : prevTask?.progress ?? 0,
2246
2277
  lines: Array.isArray(a.lines) ? a.lines : prevTask?.lines ?? [],
2247
2278
  attempts: Array.isArray(a.attempts) ? a.attempts : prevTask?.attempts ?? [],
2248
- needsRestart: typeof a.needsRestart === "boolean" ? a.needsRestart : prevTask?.needsRestart ?? true
2279
+ needsRestart: typeof a.needsRestart === "boolean" ? a.needsRestart : prevTask?.needsRestart ?? true,
2280
+ channel: a.installChannel === "npm" || a.installChannel === "git" || a.installChannel === "dsh" ? a.installChannel : prevTask?.channel
2249
2281
  });
2250
2282
  }
2251
2283
  const keepOpt = prev.filter((q) => q.optimistic && !next.some((x) => x.id === q.id));
@@ -2290,7 +2322,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2290
2322
  progress: typeof a.progress === "number" ? a.progress : 0,
2291
2323
  lines: Array.isArray(a.lines) ? a.lines : [],
2292
2324
  attempts: Array.isArray(a.attempts) ? a.attempts : [],
2293
- needsRestart: typeof a.needsRestart === "boolean" ? a.needsRestart : true
2325
+ needsRestart: typeof a.needsRestart === "boolean" ? a.needsRestart : true,
2326
+ channel: a.installChannel === "npm" || a.installChannel === "git" || a.installChannel === "dsh" ? a.installChannel : void 0
2294
2327
  };
2295
2328
  });
2296
2329
  if (items.length > 0 || pendingRef.current.length > 0) {
@@ -2328,6 +2361,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2328
2361
  lines: [],
2329
2362
  optimistic: true,
2330
2363
  command: input.command,
2364
+ channel: input.channel,
2331
2365
  action: input.update ? "update" : "add",
2332
2366
  attempts: [],
2333
2367
  needsRestart: true
@@ -2345,6 +2379,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2345
2379
  source: input.source,
2346
2380
  mode: input.update ? "update" : void 0,
2347
2381
  ...langKey ? { lang: langKey } : {},
2382
+ ...input.channel ? { installChannel: input.channel } : {},
2348
2383
  ...input.globalNpm && input.globalNpm.length > 0 ? { globalNpm: input.globalNpm } : {}
2349
2384
  }),
2350
2385
  signal: controller.signal
@@ -2352,7 +2387,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2352
2387
  const data = await res.json();
2353
2388
  if (!data.ok || typeof data.task !== "number") {
2354
2389
  applyQueue((prev) => prev.filter((x) => x.id !== tempId));
2355
- onError(data.error || `HTTP ${res.status}`, input.repo, "install", input.command, data.attempts);
2390
+ const entry = entryLineOf(t, input.channel);
2391
+ const msg = data.error || `HTTP ${res.status}`;
2392
+ onError(entry ? `${entry}\n${msg}` : msg, input.repo, "install", input.command, data.attempts);
2356
2393
  return;
2357
2394
  }
2358
2395
  const taskId = data.task;
@@ -2370,7 +2407,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2370
2407
  } catch (err) {
2371
2408
  applyQueue((prev) => prev.filter((x) => x.id !== tempId));
2372
2409
  const reason = err?.name === "AbortError" ? t("requestTimeout") : err instanceof Error && err.message ? err.message : String(err ?? "");
2373
- onError(reason ? `${t("installFail")} — ${reason}` : t("installFail"), input.repo, "install", input.command);
2410
+ const entry = entryLineOf(t, input.channel);
2411
+ const msg = reason ? `${t("installFail")} — ${reason}` : t("installFail");
2412
+ onError(entry ? `${entry}\n${msg}` : msg, input.repo, "install", input.command);
2374
2413
  } finally {
2375
2414
  window.clearTimeout(timeout);
2376
2415
  submittingRef.current.delete(input.repo);
@@ -2396,6 +2435,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2396
2435
  };
2397
2436
  /** 命令行安装:用户手输 npm 包名或 GitHub 地址,走 custom 源(受安全开关控制)。
2398
2437
  * update=true 时对已安装目标放行覆盖重装(与目录插件「更新」同一语义)。
2438
+ * channel=入口渠道(NPM 包 / GitHub 源码 / DSH 命令卡片):上报服务端落日志,
2439
+ * 失败弹窗/通知据此精准溯源。
2399
2440
  * 队列展示/防重一律用归一化身份(owner/repo 或 npm 包名):与服务端 /active 合并、
2400
2441
  * 弹窗目标匹配同口径,npm 包名透传不受影响。 */
2401
2442
  const installCustom = async (raw, opts) => {
@@ -2407,11 +2448,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2407
2448
  repo,
2408
2449
  command: `pnpm add ${target}`,
2409
2450
  source: "custom",
2410
- update: opts?.update
2451
+ update: opts?.update,
2452
+ channel: opts?.channel
2411
2453
  });
2412
2454
  };
2413
2455
  /** 全局 npm 安装(官方 README 的 `npm install -g <pkgs>`):不进任何 profile、无需宿主重启。
2414
- * 队列展示/防重用包列表空格拼接的身份(与服务端 target 同口径)。 */
2456
+ * 队列展示/防重用包列表空格拼接的身份(与服务端 target 同口径);入口渠道固定为 npm(NPM 包卡片)。 */
2415
2457
  const installGlobalNpm = async (pkgs, opts) => {
2416
2458
  const list = (pkgs ?? []).map((p) => p.trim()).filter((p) => p !== "");
2417
2459
  if (list.length === 0) return;
@@ -2422,7 +2464,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2422
2464
  command: `npm install -g ${identity}`,
2423
2465
  source: "custom",
2424
2466
  globalNpm: list,
2425
- update: opts?.update
2467
+ update: opts?.update,
2468
+ channel: opts?.channel ?? "npm"
2426
2469
  });
2427
2470
  };
2428
2471
  /** 卸载入队核心:按 npm 包名直卸(目录插件与自定义安装共用,弹窗进度匹配同源)。 */
@@ -3210,7 +3253,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3210
3253
  }, repo) : null, (0, react.createElement)("button", {
3211
3254
  className: Modal_module_css_default.errorCopySoft,
3212
3255
  onClick: () => onCopy(copyText)
3213
- }, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, message), failureKind === "npmTooOld" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(npmVersion ? "failNpmTooLowV" : "failNpmTooLow", npmVersion ? { v: npmVersion } : void 0)) : failureKind === "network" ? (0, react.createElement)("div", null, [
3256
+ }, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, message), failureKind === "npmTooOld" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(npmVersion ? "failNpmTooLowV" : "failNpmTooLow", npmVersion ? { v: npmVersion } : void 0)) : failureKind === "dshMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshMissingHint")) : failureKind === "pnpmMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint")) : failureKind === "network" ? (0, react.createElement)("div", null, [
3214
3257
  (() => {
3215
3258
  const target = unreachableTargetOf(message);
3216
3259
  return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
@@ -3761,6 +3804,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3761
3804
  const v = npmTooLowVersion(r.message);
3762
3805
  return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(v ? "failNpmTooLowV" : "failNpmTooLow", v ? { v } : void 0));
3763
3806
  }
3807
+ if (kind === "dshMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshMissingHint"));
3808
+ if (kind === "pnpmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint"));
3764
3809
  if (kind === "network") return (0, react.createElement)("div", null, [
3765
3810
  (() => {
3766
3811
  const target = unreachableTargetOf(r.message);
@@ -3951,7 +3996,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3951
3996
  }
3952
3997
  //#endregion
3953
3998
  //#region \0dsh-css:src/client/styles/List.module.css.mjs
3954
- const css$9 = "._3XaZHa_body{flex-direction:column;flex:1;min-height:0;display:flex}._3XaZHa_list{flex-direction:column;flex:1;gap:6px;min-height:0;padding:2px 4px 4px 2px;display:flex;overflow-y:auto}._3XaZHa_moreSentinel{flex-shrink:0;height:1px}._3XaZHa_card{border:1px solid var(--hub-border-2);background:var(--hub-bg-1);border-radius:8px;justify-content:space-between;align-items:stretch;gap:12px;padding:9px 12px;transition:border-color .12s,background .12s;display:flex}._3XaZHa_card:hover{border-color:var(--hub-brand);background:var(--hub-bg-2)}._3XaZHa_cardMain{flex-direction:column;gap:4px;min-width:0;display:flex}._3XaZHa_cardHead{align-items:center;gap:6px;min-width:0;display:flex}._3XaZHa_cardTitle{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}._3XaZHa_categoryBadge,._3XaZHa_verified,._3XaZHa_versionBadge,._3XaZHa_updateBadge{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_categoryBadge{color:var(--hub-brand);border-color:var(--hub-border-ghost)}._3XaZHa_verified{color:var(--hub-success);border-color:var(--hub-success-border)}._3XaZHa_versionBadge{color:var(--hub-text-secondary);border-color:var(--hub-border-input)}._3XaZHa_updateBadge{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}._3XaZHa_desc{color:var(--hub-text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}._3XaZHa_topics{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:flex}._3XaZHa_topic{color:var(--hub-text-tertiary);background:var(--hub-bg-3);white-space:nowrap;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_cardSide{flex-direction:column;flex-shrink:0;justify-content:space-between;align-items:flex-end;gap:6px;display:flex}._3XaZHa_stats{flex-direction:column;align-items:flex-end;gap:1px;display:flex}._3XaZHa_star{color:var(--hub-warn);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_fork{color:var(--hub-text-tertiary);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_date{color:var(--hub-text-tertiary);white-space:nowrap;font-size:10px;line-height:14px}._3XaZHa_installBtn,._3XaZHa_installBtnCopied,._3XaZHa_installBtnInstalled,._3XaZHa_installBtnUpdate,._3XaZHa_uninstallBtn,._3XaZHa_detailBtn{cursor:pointer;border-radius:6px;padding:2px 10px;font-size:11px;line-height:18px;transition:color .12s,border-color .12s,background .12s}._3XaZHa_installBtnInstalled{color:var(--hub-success);background:var(--hub-success-tint);cursor:default;-webkit-user-select:none;user-select:none;border:none}._3XaZHa_installBtnUpdate{color:#fff;background:var(--hub-warn);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtnUpdate:hover{background:var(--hub-warn-strong)}._3XaZHa_uninstallBtn{color:var(--hub-danger);background:var(--hub-danger-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_uninstallBtn:hover{color:#fff;background:var(--hub-danger-hover)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn{color:#fff;background:var(--hub-danger)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn:hover{background:var(--hub-danger-hover)}._3XaZHa_installBtn{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtn:hover{background:var(--hub-btn-hover)}._3XaZHa_detailBtn{color:var(--hub-text-secondary);-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;text-decoration:none;display:inline-flex}._3XaZHa_detailBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_actions{align-items:center;gap:6px;display:flex}._3XaZHa_installBtnCopied{color:var(--hub-success);background:var(--hub-success-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_state{text-align:center;min-height:160px;color:var(--hub-text-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:12px;line-height:18px;display:flex}._3XaZHa_stateTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600}._3XaZHa_stateDesc{max-width:420px}._3XaZHa_retryBtn{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;margin-top:4px;padding:4px 12px;font-size:12px;line-height:18px}._3XaZHa_retryBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_footer{border-top:1px solid var(--hub-border-1);flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;padding:6px 4px 0;display:flex}._3XaZHa_footLink{color:var(--hub-brand);white-space:nowrap;-webkit-user-select:none;user-select:none;font-size:11px;line-height:16px;text-decoration:none}._3XaZHa_footLink:hover{text-decoration:underline}";
3999
+ const css$9 = "._3XaZHa_body{flex-direction:column;flex:1;min-height:0;display:flex}._3XaZHa_list{flex-direction:column;flex:1;gap:6px;min-height:0;padding:2px 4px 4px 2px;display:flex;overflow-y:auto}._3XaZHa_moreSentinel{flex-shrink:0;height:1px}._3XaZHa_card{border:1px solid var(--hub-border-2);background:var(--hub-bg-1);border-radius:8px;justify-content:space-between;align-items:stretch;gap:12px;padding:9px 12px;transition:border-color .12s,background .12s;display:flex}._3XaZHa_card:hover{border-color:var(--hub-brand);background:var(--hub-bg-2)}._3XaZHa_cardMain{flex-direction:column;gap:4px;min-width:0;display:flex}._3XaZHa_cardHead{align-items:center;gap:6px;min-width:0;display:flex}._3XaZHa_cardTitle{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}._3XaZHa_categoryBadge,._3XaZHa_verified,._3XaZHa_versionBadge,._3XaZHa_updateBadge{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_categoryBadge{color:var(--hub-brand);border-color:var(--hub-border-ghost)}._3XaZHa_verified{color:var(--hub-success);border-color:var(--hub-success-border)}._3XaZHa_versionBadge{color:var(--hub-text-secondary);border-color:var(--hub-border-input)}._3XaZHa_updateBadge{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}._3XaZHa_desc{color:var(--hub-text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}._3XaZHa_topics{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:flex}._3XaZHa_topic{color:var(--hub-text-tertiary);background:var(--hub-bg-3);white-space:nowrap;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_cardSide{flex-direction:column;flex-shrink:0;justify-content:space-between;align-items:flex-end;gap:6px;display:flex}._3XaZHa_stats{flex-direction:column;align-items:flex-end;gap:1px;display:flex}._3XaZHa_star{color:var(--hub-warn);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_fork{color:var(--hub-text-tertiary);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_date{color:var(--hub-text-tertiary);white-space:nowrap;font-size:10px;line-height:14px}._3XaZHa_installBtn,._3XaZHa_installBtnCopied,._3XaZHa_installBtnInstalled,._3XaZHa_installBtnUpdate,._3XaZHa_uninstallBtn,._3XaZHa_detailBtn{cursor:pointer;border-radius:6px;padding:2px 10px;font-size:11px;line-height:18px;transition:color .12s,border-color .12s,background .12s}._3XaZHa_installBtnInstalled{color:var(--hub-success);background:var(--hub-success-tint);cursor:default;-webkit-user-select:none;user-select:none;border:none}._3XaZHa_installBtnUpdate{color:#fff;background:var(--hub-warn);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtnUpdate:hover{background:var(--hub-warn-strong)}._3XaZHa_uninstallBtn{color:var(--hub-danger);background:var(--hub-danger-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_uninstallBtn:hover{color:#fff;background:var(--hub-danger-hover)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn{color:#fff;background:var(--hub-danger)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn:hover{background:var(--hub-danger-hover)}._3XaZHa_installBtn{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtn:hover{background:var(--hub-btn-hover)}._3XaZHa_detailBtn{color:var(--hub-text-secondary);-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;text-decoration:none;display:inline-flex}._3XaZHa_detailBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_actions{align-items:center;gap:6px;display:flex}._3XaZHa_installBtnCopied{color:var(--hub-success);background:var(--hub-success-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_state{text-align:center;min-height:160px;color:var(--hub-text-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:12px;line-height:18px;display:flex}._3XaZHa_stateTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600}._3XaZHa_stateDesc{max-width:420px}._3XaZHa_retryBtn{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:4px 12px;font-size:12px;line-height:18px}._3XaZHa_retryBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_stateActions{align-items:center;gap:8px;margin-top:4px;display:flex}._3XaZHa_diagBtn{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:4px 12px;font-size:12px;line-height:18px}._3XaZHa_diagBtn:hover{background:var(--hub-brand-hover)}._3XaZHa_footer{border-top:1px solid var(--hub-border-1);flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;padding:6px 4px 0;display:flex}._3XaZHa_footLink{color:var(--hub-brand);white-space:nowrap;-webkit-user-select:none;user-select:none;font-size:11px;line-height:16px;text-decoration:none}._3XaZHa_footLink:hover{text-decoration:underline}";
3955
4000
  const tagId$9 = "dsh-plugin/List.module.css";
3956
4001
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) {
3957
4002
  const tag = document.createElement("style");
@@ -3966,38 +4011,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3966
4011
  css: css$9
3967
4012
  });
3968
4013
  var List_module_css_default = {
4014
+ "list": "_3XaZHa_list",
4015
+ "cardSide": "_3XaZHa_cardSide",
4016
+ "state": "_3XaZHa_state",
4017
+ "star": "_3XaZHa_star",
4018
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4019
+ "verified": "_3XaZHa_verified",
3969
4020
  "stats": "_3XaZHa_stats",
3970
- "detailBtn": "_3XaZHa_detailBtn",
4021
+ "diagBtn": "_3XaZHa_diagBtn",
4022
+ "updateBadge": "_3XaZHa_updateBadge",
3971
4023
  "date": "_3XaZHa_date",
3972
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
3973
- "uninstallBtn": "_3XaZHa_uninstallBtn",
4024
+ "actions": "_3XaZHa_actions",
3974
4025
  "footer": "_3XaZHa_footer",
3975
- "desc": "_3XaZHa_desc",
4026
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
4027
+ "stateActions": "_3XaZHa_stateActions",
4028
+ "stateTitle": "_3XaZHa_stateTitle",
4029
+ "uninstallBtn": "_3XaZHa_uninstallBtn",
4030
+ "topic": "_3XaZHa_topic",
4031
+ "versionBadge": "_3XaZHa_versionBadge",
4032
+ "installBtnUpdate": "_3XaZHa_installBtnUpdate",
3976
4033
  "card": "_3XaZHa_card",
4034
+ "stateDesc": "_3XaZHa_stateDesc",
4035
+ "desc": "_3XaZHa_desc",
4036
+ "cardMain": "_3XaZHa_cardMain",
4037
+ "fork": "_3XaZHa_fork",
4038
+ "cardHead": "_3XaZHa_cardHead",
4039
+ "body": "_3XaZHa_body",
3977
4040
  "footLink": "_3XaZHa_footLink",
3978
- "installBtn": "_3XaZHa_installBtn",
3979
4041
  "cardTitle": "_3XaZHa_cardTitle",
3980
- "stateDesc": "_3XaZHa_stateDesc",
3981
- "installBtnCopied": "_3XaZHa_installBtnCopied",
3982
- "list": "_3XaZHa_list",
3983
- "state": "_3XaZHa_state",
3984
- "stateTitle": "_3XaZHa_stateTitle",
3985
- "cardSide": "_3XaZHa_cardSide",
4042
+ "topics": "_3XaZHa_topics",
4043
+ "retryBtn": "_3XaZHa_retryBtn",
3986
4044
  "moreSentinel": "_3XaZHa_moreSentinel",
3987
- "star": "_3XaZHa_star",
3988
- "cardHead": "_3XaZHa_cardHead",
3989
- "updateBadge": "_3XaZHa_updateBadge",
3990
- "installBtnUpdate": "_3XaZHa_installBtnUpdate",
4045
+ "detailBtn": "_3XaZHa_detailBtn",
3991
4046
  "categoryBadge": "_3XaZHa_categoryBadge",
3992
- "body": "_3XaZHa_body",
3993
- "actions": "_3XaZHa_actions",
3994
- "cardMain": "_3XaZHa_cardMain",
3995
- "verified": "_3XaZHa_verified",
3996
- "versionBadge": "_3XaZHa_versionBadge",
3997
- "retryBtn": "_3XaZHa_retryBtn",
3998
- "topic": "_3XaZHa_topic",
3999
- "topics": "_3XaZHa_topics",
4000
- "fork": "_3XaZHa_fork"
4047
+ "installBtn": "_3XaZHa_installBtn"
4001
4048
  };
4002
4049
  //#endregion
4003
4050
  //#region src/client/hooks/useIncrementalList.ts
@@ -4100,7 +4147,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4100
4147
  * the category or install-status filter changes so the replaced content is
4101
4148
  * not mistaken for a no-op update.
4102
4149
  */
4103
- function CatalogList({ plugins, failed, visible, total, t, langPath, reload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall }) {
4150
+ function CatalogList({ plugins, failed, visible, total, t, langPath, reload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
4104
4151
  /** 列表滚动容器:分类/搜索切换后列表内容替换但 scrollTop 保留,会让用户误以为列表没更新,需重置回顶部 */
4105
4152
  const listRef = (0, react.useRef)(null);
4106
4153
  /** 增量渲染:全量目录太大(4400+),只渲染首批,滚动接近底部时自动追加下一批 */
@@ -4111,10 +4158,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4111
4158
  return (0, react.createElement)("div", { className: List_module_css_default.body }, (0, react.createElement)("div", {
4112
4159
  ref: listRef,
4113
4160
  className: List_module_css_default.list
4114
- }, plugins === null && !failed && (0, react.createElement)("div", { className: List_module_css_default.state }, t("loading")), failed && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("failed")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t("failedDesc")), (0, react.createElement)("button", {
4161
+ }, plugins === null && !failed && (0, react.createElement)("div", { className: List_module_css_default.state }, t("loading")), failed && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("failed")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t(hasProxy ? "failedDescProxy" : "failedDescNoProxy")), (0, react.createElement)("div", { className: List_module_css_default.stateActions }, (0, react.createElement)("button", {
4115
4162
  className: List_module_css_default.retryBtn,
4116
4163
  onClick: () => reload()
4117
- }, t("retry"))), plugins !== null && !failed && visible.length === 0 && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("noResult")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t("noResultDesc"))), plugins !== null && !failed && shown.map((p) => (0, react.createElement)(PluginCard, {
4164
+ }, t("retry")), (0, react.createElement)("button", {
4165
+ className: List_module_css_default.diagBtn,
4166
+ onClick: onOpenDiagnostics
4167
+ }, t("failNetworkRunDiag")))), plugins !== null && !failed && visible.length === 0 && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("noResult")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t("noResultDesc"))), plugins !== null && !failed && shown.map((p) => (0, react.createElement)(PluginCard, {
4118
4168
  key: p.ownerSlug ? `${p.ownerSlug}/${p.slug}` : p.slug,
4119
4169
  plugin: p,
4120
4170
  copied,
@@ -4149,7 +4199,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4149
4199
  * it wires catalog state (query/sort/filter/category) to the small
4150
4200
  * presentational components so PluginHubSection stays free of view internals.
4151
4201
  */
4152
- function MarketView({ catalog, t, langPath, langKey, copied, resultText, onInstall, onUninstall }) {
4202
+ function MarketView({ catalog, t, langPath, langKey, copied, resultText, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
4153
4203
  return (0, react.createElement)(react.Fragment, null, (0, react.createElement)(CategoryTabs, {
4154
4204
  category: catalog.category,
4155
4205
  setCategory: catalog.setCategory,
@@ -4179,7 +4229,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4179
4229
  hasUpdate: catalog.hasUpdate,
4180
4230
  langKey,
4181
4231
  onInstall,
4182
- onUninstall
4232
+ onUninstall,
4233
+ hasProxy,
4234
+ onOpenDiagnostics
4183
4235
  }));
4184
4236
  }
4185
4237
  //#endregion
@@ -4199,15 +4251,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4199
4251
  css: css$8
4200
4252
  });
4201
4253
  var SectionTabs_module_css_default = {
4254
+ "tabCount": "_7tvizq_tabCount",
4255
+ "noticeCount": "_7tvizq_noticeCount",
4256
+ "noticeIcon": "_7tvizq_noticeIcon",
4257
+ "root": "_7tvizq_root",
4202
4258
  "tab": "_7tvizq_tab",
4203
4259
  "noticeBtn": "_7tvizq_noticeBtn",
4204
- "root": "_7tvizq_root",
4205
- "noticeIcon": "_7tvizq_noticeIcon",
4206
- "noticeCount": "_7tvizq_noticeCount",
4207
4260
  "tabCountActive": "_7tvizq_tabCountActive",
4208
4261
  "tabActive": "_7tvizq_tabActive",
4209
- "tabIcon": "_7tvizq_tabIcon",
4210
- "tabCount": "_7tvizq_tabCount"
4262
+ "tabIcon": "_7tvizq_tabIcon"
4211
4263
  };
4212
4264
  //#endregion
4213
4265
  //#region src/client/components/layout/SectionTabs.tsx
@@ -4284,42 +4336,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4284
4336
  css: css$7
4285
4337
  });
4286
4338
  var InstalledView_module_css_default = {
4287
- "rowRestart": "_1nXeGW_rowRestart",
4288
- "statusDot": "_1nXeGW_statusDot",
4289
- "rowActions": "_1nXeGW_rowActions",
4290
- "rowTitleLine": "_1nXeGW_rowTitleLine",
4291
- "rowUpdate": "_1nXeGW_rowUpdate",
4292
- "emptyTitle": "_1nXeGW_emptyTitle",
4293
4339
  "toolbar": "_1nXeGW_toolbar",
4294
- "root": "_1nXeGW_root",
4295
- "rowTitle": "_1nXeGW_rowTitle",
4296
- "segBtnActive": "_1nXeGW_segBtnActive",
4297
- "exampleRow": "_1nXeGW_exampleRow",
4298
- "statusInactive": "_1nXeGW_statusInactive",
4299
- "rowMain": "_1nXeGW_rowMain",
4300
- "rowCategory": "_1nXeGW_rowCategory",
4301
- "segLabel": "_1nXeGW_segLabel",
4302
- "list": "_1nXeGW_list",
4340
+ "statusPending": "_1nXeGW_statusPending",
4341
+ "rowUninstall": "_1nXeGW_rowUninstall",
4303
4342
  "rowDetail": "_1nXeGW_rowDetail",
4304
- "exampleBadge": "_1nXeGW_exampleBadge",
4305
- "versionBadge": "_1nXeGW_versionBadge",
4343
+ "segLabel": "_1nXeGW_segLabel",
4344
+ "searchWrap": "_1nXeGW_searchWrap",
4345
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
4346
+ "emptyTitle": "_1nXeGW_emptyTitle",
4306
4347
  "segBtn": "_1nXeGW_segBtn",
4348
+ "exampleBadge": "_1nXeGW_exampleBadge",
4307
4349
  "emptyDesc": "_1nXeGW_emptyDesc",
4308
- "statusPending": "_1nXeGW_statusPending",
4309
- "searchInput": "_1nXeGW_searchInput",
4310
- "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4311
- "rowDesc": "_1nXeGW_rowDesc",
4312
- "rowRepo": "_1nXeGW_rowRepo",
4313
- "rowUninstall": "_1nXeGW_rowUninstall",
4350
+ "statusDot": "_1nXeGW_statusDot",
4314
4351
  "empty": "_1nXeGW_empty",
4315
4352
  "row": "_1nXeGW_row",
4353
+ "statusInactive": "_1nXeGW_statusInactive",
4354
+ "rowRepo": "_1nXeGW_rowRepo",
4355
+ "rowMain": "_1nXeGW_rowMain",
4356
+ "exampleRow": "_1nXeGW_exampleRow",
4357
+ "searchInput": "_1nXeGW_searchInput",
4316
4358
  "rowMeta": "_1nXeGW_rowMeta",
4317
- "searchWrap": "_1nXeGW_searchWrap",
4318
- "segRow": "_1nXeGW_segRow",
4319
- "rowSourceTag": "_1nXeGW_rowSourceTag",
4359
+ "versionBadge": "_1nXeGW_versionBadge",
4320
4360
  "updateBadge": "_1nXeGW_updateBadge",
4361
+ "root": "_1nXeGW_root",
4321
4362
  "segGroup": "_1nXeGW_segGroup",
4322
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub"
4363
+ "list": "_1nXeGW_list",
4364
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4365
+ "rowTitleLine": "_1nXeGW_rowTitleLine",
4366
+ "rowDesc": "_1nXeGW_rowDesc",
4367
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4368
+ "rowUpdate": "_1nXeGW_rowUpdate",
4369
+ "rowCategory": "_1nXeGW_rowCategory",
4370
+ "segRow": "_1nXeGW_segRow",
4371
+ "rowActions": "_1nXeGW_rowActions",
4372
+ "segBtnActive": "_1nXeGW_segBtnActive",
4373
+ "rowTitle": "_1nXeGW_rowTitle",
4374
+ "rowRestart": "_1nXeGW_rowRestart"
4323
4375
  };
4324
4376
  //#endregion
4325
4377
  //#region src/client/components/views/InstalledView.tsx
@@ -4565,28 +4617,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4565
4617
  css: css$6
4566
4618
  });
4567
4619
  var CustomInstallView_module_css_default = {
4568
- "installLabel": "zISxCG_installLabel",
4569
- "installHelpBtn": "zISxCG_installHelpBtn",
4570
- "installRow": "zISxCG_installRow",
4571
- "installInput": "zISxCG_installInput",
4620
+ "desc": "zISxCG_desc",
4621
+ "root": "zISxCG_root",
4622
+ "installInputError": "zISxCG_installInputError",
4623
+ "helpBody": "zISxCG_helpBody",
4624
+ "helpCmd": "zISxCG_helpCmd",
4625
+ "helpNote": "zISxCG_helpNote",
4572
4626
  "installCardDisabled": "zISxCG_installCardDisabled",
4627
+ "channelOff": "zISxCG_channelOff",
4628
+ "channelOffBtn": "zISxCG_channelOffBtn",
4629
+ "installExample": "zISxCG_installExample",
4573
4630
  "installError": "zISxCG_installError",
4574
- "installCardHead": "zISxCG_installCardHead",
4575
4631
  "helpLine": "zISxCG_helpLine",
4576
- "helpNote": "zISxCG_helpNote",
4577
- "desc": "zISxCG_desc",
4578
4632
  "channelOffText": "zISxCG_channelOffText",
4579
- "installInsertBtn": "zISxCG_installInsertBtn",
4580
- "installExample": "zISxCG_installExample",
4581
- "helpBody": "zISxCG_helpBody",
4582
- "channelOffBtn": "zISxCG_channelOffBtn",
4583
- "installInputError": "zISxCG_installInputError",
4584
- "helpCmd": "zISxCG_helpCmd",
4633
+ "installCard": "zISxCG_installCard",
4585
4634
  "installBtn": "zISxCG_installBtn",
4635
+ "installInput": "zISxCG_installInput",
4586
4636
  "installCards": "zISxCG_installCards",
4587
- "root": "zISxCG_root",
4588
- "installCard": "zISxCG_installCard",
4589
- "channelOff": "zISxCG_channelOff"
4637
+ "installRow": "zISxCG_installRow",
4638
+ "installCardHead": "zISxCG_installCardHead",
4639
+ "installHelpBtn": "zISxCG_installHelpBtn",
4640
+ "installLabel": "zISxCG_installLabel",
4641
+ "installInsertBtn": "zISxCG_installInsertBtn"
4590
4642
  };
4591
4643
  //#endregion
4592
4644
  //#region src/client/components/views/CustomInstallView.tsx
@@ -4714,8 +4766,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4714
4766
  setNpmError(t("npmInstallInvalid"));
4715
4767
  return;
4716
4768
  }
4717
- if (parsed.kind === "global") onInstallCustom(raw, { globalNpm: parsed.pkgs });
4718
- else onInstallCustom(parsed.target);
4769
+ if (parsed.kind === "global") onInstallCustom(raw, {
4770
+ installChannel: "npm",
4771
+ globalNpm: parsed.pkgs
4772
+ });
4773
+ else onInstallCustom(parsed.target, { installChannel: "npm" });
4719
4774
  setNpmQuery("");
4720
4775
  setNpmError("");
4721
4776
  };
@@ -4726,7 +4781,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4726
4781
  setGitError(t("gitInstallInvalid"));
4727
4782
  return;
4728
4783
  }
4729
- onInstallCustom(target);
4784
+ onInstallCustom(target, { installChannel: "git" });
4730
4785
  setGitQuery("");
4731
4786
  setGitError("");
4732
4787
  };
@@ -4738,7 +4793,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4738
4793
  setCmdError(t("dshCmdInvalid"));
4739
4794
  return;
4740
4795
  }
4741
- onInstallCustom(parsed.target);
4796
+ onInstallCustom(parsed.target, { installChannel: "dsh" });
4742
4797
  setCmdQuery("");
4743
4798
  setCmdError("");
4744
4799
  };
@@ -4873,30 +4928,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4873
4928
  css: css$5
4874
4929
  });
4875
4930
  var SettingsView_module_css_default = {
4876
- "settingRowStack": "_506LLG_settingRowStack",
4877
- "proxyHint": "_506LLG_proxyHint",
4878
- "pageHeader": "_506LLG_pageHeader",
4879
- "controlDropdown": "_506LLG_controlDropdown",
4880
- "settingControlStack": "_506LLG_settingControlStack",
4881
- "proxyHintOk": "_506LLG_proxyHintOk",
4882
- "navItemActive": "_506LLG_navItemActive",
4931
+ "pageDesc": "_506LLG_pageDesc",
4883
4932
  "settingDesc": "_506LLG_settingDesc",
4884
4933
  "textInput": "_506LLG_textInput",
4885
- "settingTitle": "_506LLG_settingTitle",
4886
4934
  "proxyControl": "_506LLG_proxyControl",
4887
- "navItem": "_506LLG_navItem",
4888
- "content": "_506LLG_content",
4935
+ "proxyHint": "_506LLG_proxyHint",
4936
+ "settingControlStack": "_506LLG_settingControlStack",
4937
+ "resetBtn": "_506LLG_resetBtn",
4938
+ "settingLabel": "_506LLG_settingLabel",
4939
+ "navIcon": "_506LLG_navIcon",
4940
+ "pageHeader": "_506LLG_pageHeader",
4941
+ "settingTitle": "_506LLG_settingTitle",
4942
+ "proxyHintFail": "_506LLG_proxyHintFail",
4943
+ "root": "_506LLG_root",
4944
+ "card": "_506LLG_card",
4889
4945
  "sidebar": "_506LLG_sidebar",
4946
+ "navItemActive": "_506LLG_navItemActive",
4947
+ "content": "_506LLG_content",
4890
4948
  "settingControl": "_506LLG_settingControl",
4891
- "root": "_506LLG_root",
4892
- "proxyHintFail": "_506LLG_proxyHintFail",
4893
- "resetBtn": "_506LLG_resetBtn",
4949
+ "proxyHintOk": "_506LLG_proxyHintOk",
4950
+ "navItem": "_506LLG_navItem",
4894
4951
  "settingRow": "_506LLG_settingRow",
4895
- "card": "_506LLG_card",
4896
- "pageDesc": "_506LLG_pageDesc",
4897
- "settingLabel": "_506LLG_settingLabel",
4898
- "pageTitle": "_506LLG_pageTitle",
4899
- "navIcon": "_506LLG_navIcon"
4952
+ "controlDropdown": "_506LLG_controlDropdown",
4953
+ "settingRowStack": "_506LLG_settingRowStack",
4954
+ "pageTitle": "_506LLG_pageTitle"
4900
4955
  };
4901
4956
  //#endregion
4902
4957
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -4915,18 +4970,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4915
4970
  css: css$4
4916
4971
  });
4917
4972
  var Dropdown_module_css_default = {
4973
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
4918
4974
  "dropdownArrow": "B_Gxsq_dropdownArrow",
4919
- "dropdownBtn": "B_Gxsq_dropdownBtn",
4920
- "dropdownItemActive": "B_Gxsq_dropdownItemActive",
4921
- "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4975
+ "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
4976
+ "dropdownPanel": "B_Gxsq_dropdownPanel",
4977
+ "dropdownItem": "B_Gxsq_dropdownItem",
4922
4978
  "dropdownCount": "B_Gxsq_dropdownCount",
4923
- "dropdownLabel": "B_Gxsq_dropdownLabel",
4924
4979
  "dropdown": "B_Gxsq_dropdown",
4980
+ "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
4925
4981
  "dropdownFill": "B_Gxsq_dropdownFill",
4926
- "dropdownItem": "B_Gxsq_dropdownItem",
4927
- "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
4928
- "dropdownPanel": "B_Gxsq_dropdownPanel",
4929
- "dropdownItemLabel": "B_Gxsq_dropdownItemLabel"
4982
+ "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4983
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
4984
+ "dropdownBtn": "B_Gxsq_dropdownBtn"
4930
4985
  };
4931
4986
  //#endregion
4932
4987
  //#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
@@ -4945,9 +5000,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4945
5000
  css: css$3
4946
5001
  });
4947
5002
  var Toggle_module_css_default = {
4948
- "toggle": "k-cD4G_toggle",
4949
5003
  "toggleOn": "k-cD4G_toggleOn",
4950
- "knob": "k-cD4G_knob"
5004
+ "knob": "k-cD4G_knob",
5005
+ "toggle": "k-cD4G_toggle"
4951
5006
  };
4952
5007
  //#endregion
4953
5008
  //#region src/client/components/ui/Toggle.tsx
@@ -5047,29 +5102,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5047
5102
  css: css$2
5048
5103
  });
5049
5104
  var DiagnosticsView_module_css_default = {
5050
- "head": "k9eRya_head",
5051
- "panel": "k9eRya_panel",
5052
- "summary": "k9eRya_summary",
5053
- "name": "k9eRya_name",
5054
- "badgeOk": "k9eRya_badgeOk",
5055
- "badge": "k9eRya_badge",
5105
+ "envLabel": "k9eRya_envLabel",
5106
+ "meta": "k9eRya_meta",
5107
+ "badgeIdle": "k9eRya_badgeIdle",
5056
5108
  "summaryFail": "k9eRya_summaryFail",
5109
+ "head": "k9eRya_head",
5110
+ "display": "k9eRya_display",
5057
5111
  "runBtn": "k9eRya_runBtn",
5058
- "meta": "k9eRya_meta",
5112
+ "summaryRunning": "k9eRya_summaryRunning",
5113
+ "badgeFail": "k9eRya_badgeFail",
5114
+ "envDesc": "k9eRya_envDesc",
5115
+ "envCopyBtn": "k9eRya_envCopyBtn",
5116
+ "badge": "k9eRya_badge",
5117
+ "badgeOk": "k9eRya_badgeOk",
5059
5118
  "summaryOk": "k9eRya_summaryOk",
5060
- "envLabel": "k9eRya_envLabel",
5061
- "envRow": "k9eRya_envRow",
5062
- "row": "k9eRya_row",
5063
5119
  "badgeRunning": "k9eRya_badgeRunning",
5064
- "summaryRunning": "k9eRya_summaryRunning",
5120
+ "row": "k9eRya_row",
5121
+ "summary": "k9eRya_summary",
5065
5122
  "diagPulse": "k9eRya_diagPulse",
5066
- "envCopyBtn": "k9eRya_envCopyBtn",
5067
- "badgeFail": "k9eRya_badgeFail",
5068
- "badgeIdle": "k9eRya_badgeIdle",
5069
- "display": "k9eRya_display",
5070
- "headHint": "k9eRya_headHint",
5123
+ "panel": "k9eRya_panel",
5071
5124
  "envTitle": "k9eRya_envTitle",
5072
- "envDesc": "k9eRya_envDesc"
5125
+ "headHint": "k9eRya_headHint",
5126
+ "name": "k9eRya_name",
5127
+ "envRow": "k9eRya_envRow"
5073
5128
  };
5074
5129
  //#endregion
5075
5130
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5244,57 +5299,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5244
5299
  css: css$1
5245
5300
  });
5246
5301
  var LogsView_module_css_default = {
5247
- "catUpdate": "_3j77BW_catUpdate",
5248
- "catDiagnostics": "_3j77BW_catDiagnostics",
5249
- "badgeError": "_3j77BW_badgeError",
5250
- "pathDialog": "_3j77BW_pathDialog",
5251
- "empty": "_3j77BW_empty",
5252
- "message": "_3j77BW_message",
5253
- "list": "_3j77BW_list",
5254
5302
  "head": "_3j77BW_head",
5303
+ "searchInput": "_3j77BW_searchInput",
5304
+ "badgeSuccess": "_3j77BW_badgeSuccess",
5305
+ "badgeInfo": "_3j77BW_badgeInfo",
5306
+ "catBadge": "_3j77BW_catBadge",
5307
+ "catInstall": "_3j77BW_catInstall",
5308
+ "empty": "_3j77BW_empty",
5309
+ "search": "_3j77BW_search",
5310
+ "clearBtn": "_3j77BW_clearBtn",
5255
5311
  "pathDialogDesc": "_3j77BW_pathDialogDesc",
5256
- "previewRow": "_3j77BW_previewRow",
5312
+ "filterBar": "_3j77BW_filterBar",
5313
+ "linkBtn": "_3j77BW_linkBtn",
5314
+ "moreEnd": "_3j77BW_moreEnd",
5315
+ "catUninstall": "_3j77BW_catUninstall",
5316
+ "btn": "_3j77BW_btn",
5317
+ "panel": "_3j77BW_panel",
5318
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5319
+ "logList": "_3j77BW_logList",
5257
5320
  "more": "_3j77BW_more",
5258
5321
  "footPath": "_3j77BW_footPath",
5259
- "logList": "_3j77BW_logList",
5260
- "filterChip": "_3j77BW_filterChip",
5261
- "badgeInfo": "_3j77BW_badgeInfo",
5262
- "pathRow": "_3j77BW_pathRow",
5322
+ "list": "_3j77BW_list",
5263
5323
  "footActions": "_3j77BW_footActions",
5264
- "catSystem": "_3j77BW_catSystem",
5265
- "btn": "_3j77BW_btn",
5266
- "event": "_3j77BW_event",
5324
+ "filterChipActive": "_3j77BW_filterChipActive",
5325
+ "previewRow": "_3j77BW_previewRow",
5267
5326
  "badgeWarn": "_3j77BW_badgeWarn",
5268
- "pathDialogRow": "_3j77BW_pathDialogRow",
5269
- "footFail": "_3j77BW_footFail",
5270
- "pathDialogFoot": "_3j77BW_pathDialogFoot",
5271
- "moreEnd": "_3j77BW_moreEnd",
5272
- "filterBar": "_3j77BW_filterBar",
5327
+ "pathDialog": "_3j77BW_pathDialog",
5273
5328
  "pathDraft": "_3j77BW_pathDraft",
5274
- "catBadge": "_3j77BW_catBadge",
5275
- "pathDialogReset": "_3j77BW_pathDialogReset",
5276
- "filterChipActive": "_3j77BW_filterChipActive",
5277
5329
  "pathDialogHint": "_3j77BW_pathDialogHint",
5330
+ "badge": "_3j77BW_badge",
5331
+ "headHint": "_3j77BW_headHint",
5332
+ "pathText": "_3j77BW_pathText",
5278
5333
  "badgeDebug": "_3j77BW_badgeDebug",
5279
5334
  "catSettings": "_3j77BW_catSettings",
5280
- "catInstall": "_3j77BW_catInstall",
5281
5335
  "actions": "_3j77BW_actions",
5282
- "clearBtn": "_3j77BW_clearBtn",
5283
- "pathText": "_3j77BW_pathText",
5284
- "search": "_3j77BW_search",
5285
- "foot": "_3j77BW_foot",
5286
- "panel": "_3j77BW_panel",
5287
5336
  "headActions": "_3j77BW_headActions",
5288
- "time": "_3j77BW_time",
5289
- "linkBtn": "_3j77BW_linkBtn",
5290
- "searchInput": "_3j77BW_searchInput",
5291
- "footCount": "_3j77BW_footCount",
5337
+ "badgeError": "_3j77BW_badgeError",
5338
+ "event": "_3j77BW_event",
5339
+ "foot": "_3j77BW_foot",
5340
+ "catSystem": "_3j77BW_catSystem",
5292
5341
  "pathLabel": "_3j77BW_pathLabel",
5293
- "badge": "_3j77BW_badge",
5342
+ "pathDialogRow": "_3j77BW_pathDialogRow",
5343
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5344
+ "footCount": "_3j77BW_footCount",
5345
+ "catUpdate": "_3j77BW_catUpdate",
5346
+ "catDiagnostics": "_3j77BW_catDiagnostics",
5294
5347
  "entry": "_3j77BW_entry",
5295
- "headHint": "_3j77BW_headHint",
5296
- "catUninstall": "_3j77BW_catUninstall",
5297
- "badgeSuccess": "_3j77BW_badgeSuccess"
5348
+ "filterChip": "_3j77BW_filterChip",
5349
+ "time": "_3j77BW_time",
5350
+ "message": "_3j77BW_message",
5351
+ "pathRow": "_3j77BW_pathRow",
5352
+ "footFail": "_3j77BW_footFail"
5298
5353
  };
5299
5354
  //#endregion
5300
5355
  //#region src/client/components/modals/LogsModal.tsx
@@ -6145,6 +6200,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6145
6200
  /** 命令行安装确认弹窗:记录待安装的裸目标(npm 包名 / GitHub 地址,DSH 命令已剥成裸目标)——
6146
6201
  * 与应用商店同一套确认/进度/结果弹窗,提供时 plugin 传 null 走 customTarget 模式 */
6147
6202
  const [confirmCustomTarget, setConfirmCustomTarget] = (0, react.useState)(null);
6203
+ /** 自定义安装入口渠道(三张卡片之一):随确认弹窗记录,提交时上报服务端,
6204
+ * 报错/日志据此精准溯源「从哪个入口发起」(npm 全局安装固定为 'npm') */
6205
+ const [confirmCustomChannel, setConfirmCustomChannel] = (0, react.useState)(null);
6148
6206
  /** 全局 npm 安装确认弹窗(官方 `npm install -g <pkgs>`):记录原始命令 + 解析出的包列表,
6149
6207
  * 走与应用商店同一套确认/进度/结果弹窗(plugin 传 null,InstallModal 走 globalNpm 模式) */
6150
6208
  const [confirmGlobalNpm, setConfirmGlobalNpm] = (0, react.useState)(null);
@@ -6297,6 +6355,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6297
6355
  if (e.key === "Escape") {
6298
6356
  setConfirmPlugin(null);
6299
6357
  setConfirmCustomTarget(null);
6358
+ setConfirmCustomChannel(null);
6300
6359
  setConfirmGlobalNpm(null);
6301
6360
  setUninstallPlugin(null);
6302
6361
  setUninstallItem(null);
@@ -6465,7 +6524,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6465
6524
  setUninstallDone(false);
6466
6525
  queue.clearModalTask();
6467
6526
  setUninstallPlugin(p);
6468
- }
6527
+ },
6528
+ hasProxy: (hubSettings.proxy ?? "").trim() !== "",
6529
+ onOpenDiagnostics: openDiagnostics
6469
6530
  }) : view === "installed" ? (0, react.createElement)(InstalledView, {
6470
6531
  items: catalog.installedItems,
6471
6532
  langKey,
@@ -6504,6 +6565,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6504
6565
  queue.clearModalTask();
6505
6566
  if (opts?.globalNpm && opts.globalNpm.length > 0) {
6506
6567
  setConfirmCustomTarget(null);
6568
+ setConfirmCustomChannel(null);
6507
6569
  setConfirmIsUpdate(false);
6508
6570
  setConfirmGlobalNpm({
6509
6571
  raw,
@@ -6512,6 +6574,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6512
6574
  return;
6513
6575
  }
6514
6576
  setConfirmGlobalNpm(null);
6577
+ setConfirmCustomChannel(opts.installChannel);
6515
6578
  setConfirmIsUpdate(customTargetInstalled(target));
6516
6579
  setConfirmCustomTarget(target);
6517
6580
  }
@@ -6531,7 +6594,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6531
6594
  openSection: settingsSection,
6532
6595
  onConsumedOpenSection: () => setSettingsSection(null)
6533
6596
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
6534
- info: catalog.hubUpdateInfo ?? { version: "1.3.7" },
6597
+ info: catalog.hubUpdateInfo ?? { version: "1.3.9" },
6535
6598
  lang,
6536
6599
  t,
6537
6600
  hasUpdate: catalog.hubHasUpdate,
@@ -6640,6 +6703,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6640
6703
  onClose: () => {
6641
6704
  setInstallDone(false);
6642
6705
  setConfirmCustomTarget(null);
6706
+ setConfirmCustomChannel(null);
6643
6707
  },
6644
6708
  onCopy: () => {
6645
6709
  doCopy(`pnpm add ${confirmCustomTarget}`);
@@ -6648,7 +6712,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6648
6712
  kind: "copied"
6649
6713
  });
6650
6714
  },
6651
- onInstall: () => void queue.installCustom(confirmCustomTarget, confirmIsUpdate ? { update: true } : void 0),
6715
+ onInstall: () => void queue.installCustom(confirmCustomTarget, {
6716
+ update: confirmIsUpdate,
6717
+ channel: confirmCustomChannel ?? "npm"
6718
+ }),
6652
6719
  onRestart: () => setShowRestartConfirm(true)
6653
6720
  }), confirmGlobalNpm && (0, react.createElement)(InstallModal, {
6654
6721
  plugin: null,
@@ -6665,6 +6732,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6665
6732
  onClose: () => {
6666
6733
  setInstallDone(false);
6667
6734
  setConfirmGlobalNpm(null);
6735
+ setConfirmCustomChannel(null);
6668
6736
  },
6669
6737
  onCopy: () => {
6670
6738
  doCopy(`npm install -g ${confirmGlobalNpm.pkgs.join(" ")}`);
@@ -6673,7 +6741,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6673
6741
  kind: "copied"
6674
6742
  });
6675
6743
  },
6676
- onInstall: () => void queue.installGlobalNpm(confirmGlobalNpm.pkgs),
6744
+ onInstall: () => void queue.installGlobalNpm(confirmGlobalNpm.pkgs, { channel: "npm" }),
6677
6745
  onRestart: () => setShowRestartConfirm(true)
6678
6746
  }), (uninstallPlugin || uninstallItem) && (0, react.createElement)(UninstallModal, {
6679
6747
  plugin: uninstallPlugin ?? pluginOfItem(uninstallItem),