dsh-plugin 2.3.2 → 2.3.3
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/README.en.md +3 -9
- package/README.md +3 -9
- package/client/client.js +367 -362
- package/client/client.js.map +1 -1
- package/lib/http/catalog.js +4 -4
- package/lib/http/diagnostics.js +4 -4
- package/lib/http/install.js +13 -13
- package/lib/http/npm-release-age.js +3 -3
- package/lib/http/shared.js +1 -1
- package/lib/services/host-version.js +2 -2
- package/lib/services/install/dsh-compat.js +1 -1
- package/lib/services/install/npm-resolve.js +1 -1
- package/lib/services/install/operation-log.js +3 -3
- package/lib/services/install/preflight.js +1 -1
- package/lib/services/install/registry-fallback.js +3 -3
- package/lib/services/install/release-target.js +2 -2
- package/lib/services/install/task-queue.js +35 -20
- package/lib/services/loader.js +8 -8
- package/lib/services/npm-release-age.js +8 -8
- package/lib/services/probe.js +12 -12
- package/lib/services/profile/installed-versions.js +2 -2
- package/lib/services/profile/profile.js +2 -2
- package/lib/types/services/host-version.d.ts +1 -1
- package/lib/types/services/install/install-types.d.ts +5 -5
- package/lib/types/services/install/operation-log.d.ts +1 -1
- package/lib/types/services/install/preflight.d.ts +1 -1
- package/lib/types/services/install/registry-fallback.d.ts +1 -1
- package/lib/types/services/install/release-target.d.ts +1 -1
- package/lib/types/services/install/task-queue.d.ts +10 -7
- package/lib/types/services/loader.d.ts +5 -5
- package/lib/types/services/npm-release-age.d.ts +5 -5
- package/lib/types/services/probe.d.ts +4 -4
- package/package.json +1 -1
- package/src/client/components/PluginHubSection.tsx +29 -29
- package/src/client/components/catalog/CatalogList.tsx +1 -1
- package/src/client/components/catalog/PluginCard.tsx +3 -3
- package/src/client/components/modals/AboutModal.tsx +2 -2
- package/src/client/components/modals/ConfirmDialog.tsx +2 -2
- package/src/client/components/modals/HubUpdateModal.tsx +3 -3
- package/src/client/components/modals/InstalledDetailModal.tsx +1 -1
- package/src/client/components/modals/LogsPathModal.tsx +1 -1
- package/src/client/components/modals/NotificationsModal.tsx +2 -2
- package/src/client/components/modals/modals.tsx +10 -10
- package/src/client/components/views/CustomInstallView.tsx +2 -2
- package/src/client/components/views/InstalledView.tsx +2 -2
- package/src/client/components/views/SettingsView.tsx +3 -3
- package/src/client/data/catalog.ts +1 -1
- package/src/client/data/host.ts +2 -2
- package/src/client/data/hub.ts +3 -3
- package/src/client/hooks/useCatalog.ts +14 -14
- package/src/client/hooks/useSettings.ts +2 -2
- package/src/client/hooks/useTaskQueue.ts +30 -23
- package/src/client/locales.ts +15 -15
- package/src/client/logic/constants.ts +1 -1
- package/src/client/logic/ensure-plugin-css.ts +2 -2
- package/src/client/logic/failures.ts +9 -9
- package/src/client/logic/install-command.ts +1 -2
- package/src/client/logic/installed.ts +1 -1
- package/src/client/logic/release-age.ts +10 -10
- package/src/client/logic/urls.ts +3 -3
- package/src/client/styles/Header.module.css +1 -1
- package/src/client/styles/Modal.module.css +2 -2
- package/src/client/styles/SectionTabs.module.css +1 -1
- package/src/client/styles/tokens.module.css +1 -1
- package/src/client/types.ts +4 -4
- package/src/server/http/catalog.ts +4 -4
- package/src/server/http/diagnostics.ts +4 -4
- package/src/server/http/install.ts +13 -13
- package/src/server/http/npm-release-age.ts +3 -3
- package/src/server/http/shared.ts +1 -1
- package/src/server/services/host-version.ts +2 -2
- package/src/server/services/install/dsh-compat.ts +1 -1
- package/src/server/services/install/install-types.ts +5 -5
- package/src/server/services/install/npm-resolve.ts +1 -1
- package/src/server/services/install/operation-log.ts +3 -3
- package/src/server/services/install/preflight.ts +1 -1
- package/src/server/services/install/registry-fallback.ts +3 -3
- package/src/server/services/install/release-target.ts +2 -2
- package/src/server/services/install/task-queue.ts +40 -26
- package/src/server/services/loader.ts +10 -10
- package/src/server/services/npm-release-age.ts +10 -10
- package/src/server/services/probe.ts +12 -12
- package/src/server/services/profile/installed-versions.ts +2 -2
- package/src/server/services/profile/profile.ts +2 -2
package/client/client.js
CHANGED
|
@@ -57,7 +57,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
57
57
|
npmInstallPlaceholder: "npm install <包名> 或直接输包名",
|
|
58
58
|
npmInstallExample: "支持原生命令:npm install lodash、npm i lodash、pnpm add @scope/pkg",
|
|
59
59
|
npmInstallExample2: "全局安装 CLI:npm install -g @scope/cli;或直接输入包名 lodash",
|
|
60
|
-
npmInstallInvalid: "请输入 npm 包名(如 lodash、@scope/pkg),或原生安装命令(如 npm install lodash、npm i lodash、pnpm add @scope/pkg、npm install -g @scope/cli
|
|
60
|
+
npmInstallInvalid: "请输入 npm 包名(如 lodash、@scope/pkg),或原生安装命令(如 npm install lodash、npm i lodash、pnpm add @scope/pkg、npm install -g @scope/cli);不支持 GitHub 源码地址,请改用该插件的 npm 包名",
|
|
61
61
|
installHelp: "帮助",
|
|
62
62
|
helpModalTitle: "支持的命令格式",
|
|
63
63
|
npmInstallHelp: "lodash、@scope/pkg 直接输入包名\nnpm install lodash\nnpm i lodash\npnpm add @scope/pkg\npnpm i @scope/pkg\nnpm install -g @scope/cli 全局安装 CLI 工具,不进「已安装」列表",
|
|
@@ -442,7 +442,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
442
442
|
updateAvailable: "有更新",
|
|
443
443
|
updateAvailableHint: "检测到更新:有版本号的仓库比对版本号,无版本号的仓库比对仓库最近更新时间",
|
|
444
444
|
updatePending: "暂缓到 {time} 后可更新",
|
|
445
|
-
updatePendingHint: "
|
|
445
|
+
updatePendingHint: "新版本发布还不满 24 小时,pnpm 暂时不让安装;到时间后再更新即可",
|
|
446
446
|
hubUpdateHint: "检测到 DSH Plugin Hub 新版本,点击查看更新内容并更新",
|
|
447
447
|
hubUpdateTitle: "DSH Plugin Hub 有新版本",
|
|
448
448
|
hubUpdateDesc: "点击下方按钮即可更新,完成后需重启宿主生效。",
|
|
@@ -455,7 +455,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
455
455
|
hubVersionStateAvailable: "可更新",
|
|
456
456
|
hubVersionStatePending: "暂缓提示",
|
|
457
457
|
close: "关闭",
|
|
458
|
-
hubPendingDesc: "最新版已发布,但发布尚未满 24 小时:此时更新会被 pnpm
|
|
458
|
+
hubPendingDesc: "最新版已发布,但发布尚未满 24 小时:此时更新会被 pnpm 不提示地回退到旧版本,因此暂不提示。稍后这里会自动出现更新入口。",
|
|
459
459
|
followUs: "关注我们",
|
|
460
460
|
aboutTitle: "关注我们",
|
|
461
461
|
aboutDesc: "了解 DSH Plugin Hub 是做什么的,访问主站浏览插件,或到 GitHub 提交 Issue。",
|
|
@@ -508,7 +508,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
508
508
|
npmInstallPlaceholder: "npm install <pkg> or a bare package name",
|
|
509
509
|
npmInstallExample: "Native commands: npm install lodash, npm i lodash, pnpm add @scope/pkg",
|
|
510
510
|
npmInstallExample2: "Global CLI: npm install -g @scope/cli; or just type a package name like lodash",
|
|
511
|
-
npmInstallInvalid: "Enter an npm package name (e.g. lodash, @scope/pkg), or a native install command (e.g. npm install lodash, npm i lodash, pnpm add @scope/pkg, npm install -g @scope/cli)",
|
|
511
|
+
npmInstallInvalid: "Enter an npm package name (e.g. lodash, @scope/pkg), or a native install command (e.g. npm install lodash, npm i lodash, pnpm add @scope/pkg, npm install -g @scope/cli); GitHub source URLs are not supported — use the plugin's npm package name instead",
|
|
512
512
|
installHelp: "Help",
|
|
513
513
|
helpModalTitle: "Supported command formats",
|
|
514
514
|
npmInstallHelp: "lodash or @scope/pkg just type the package name\nnpm install lodash\nnpm i lodash\npnpm add @scope/pkg\npnpm i @scope/pkg\nnpm install -g @scope/cli installs the CLI globally, not shown in Installed",
|
|
@@ -932,42 +932,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
932
932
|
css: css$11
|
|
933
933
|
});
|
|
934
934
|
var Header_module_css_default = {
|
|
935
|
+
"taglineLink": "qikqja_taglineLink",
|
|
935
936
|
"adBadge": "qikqja_adBadge",
|
|
936
|
-
"
|
|
937
|
-
"
|
|
938
|
-
"
|
|
939
|
-
"
|
|
940
|
-
"header": "qikqja_header",
|
|
941
|
-
"versionBtn": "qikqja_versionBtn",
|
|
937
|
+
"tabs": "qikqja_tabs",
|
|
938
|
+
"tab": "qikqja_tab",
|
|
939
|
+
"headerTitleRow": "qikqja_headerTitleRow",
|
|
940
|
+
"headerRight": "qikqja_headerRight",
|
|
942
941
|
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
942
|
+
"githubLink": "qikqja_githubLink",
|
|
943
|
+
"title": "qikqja_title",
|
|
943
944
|
"langBtn": "qikqja_langBtn",
|
|
944
|
-
"
|
|
945
|
-
"resultCount": "qikqja_resultCount",
|
|
946
|
-
"search": "qikqja_search",
|
|
947
|
-
"controls": "qikqja_controls",
|
|
948
|
-
"tabs": "qikqja_tabs",
|
|
949
|
-
"segGroup": "qikqja_segGroup",
|
|
950
|
-
"segBtn": "qikqja_segBtn",
|
|
945
|
+
"brandTitle": "qikqja_brandTitle",
|
|
951
946
|
"resultSeg": "qikqja_resultSeg",
|
|
947
|
+
"copyIcon": "qikqja_copyIcon",
|
|
948
|
+
"segBtnActive": "qikqja_segBtnActive",
|
|
949
|
+
"adBanner": "qikqja_adBanner",
|
|
950
|
+
"tabsRow": "qikqja_tabsRow",
|
|
951
|
+
"controls": "qikqja_controls",
|
|
952
|
+
"tabActive": "qikqja_tabActive",
|
|
953
|
+
"sortGroup": "qikqja_sortGroup",
|
|
954
|
+
"githubIcon": "qikqja_githubIcon",
|
|
952
955
|
"segLabel": "qikqja_segLabel",
|
|
953
|
-
"
|
|
954
|
-
"
|
|
956
|
+
"versionBtn": "qikqja_versionBtn",
|
|
957
|
+
"root": "qikqja_root",
|
|
955
958
|
"searchRow": "qikqja_searchRow",
|
|
956
|
-
"
|
|
957
|
-
"
|
|
958
|
-
"
|
|
959
|
-
"tabCount": "qikqja_tabCount",
|
|
959
|
+
"header": "qikqja_header",
|
|
960
|
+
"version": "qikqja_version",
|
|
961
|
+
"adArrow": "qikqja_adArrow",
|
|
960
962
|
"aboutBtn": "qikqja_aboutBtn",
|
|
961
|
-
"
|
|
962
|
-
"
|
|
963
|
-
"adBanner": "qikqja_adBanner",
|
|
964
|
-
"taglineLink": "qikqja_taglineLink",
|
|
965
|
-
"githubLink": "qikqja_githubLink",
|
|
966
|
-
"headerRight": "qikqja_headerRight",
|
|
967
|
-
"tabsRow": "qikqja_tabsRow",
|
|
968
|
-
"headerTitleRow": "qikqja_headerTitleRow",
|
|
963
|
+
"resultCount": "qikqja_resultCount",
|
|
964
|
+
"segGroup": "qikqja_segGroup",
|
|
969
965
|
"logoIcon": "qikqja_logoIcon",
|
|
970
|
-
"
|
|
966
|
+
"segBtn": "qikqja_segBtn",
|
|
967
|
+
"adText": "qikqja_adText",
|
|
968
|
+
"tagline": "qikqja_tagline",
|
|
969
|
+
"search": "qikqja_search",
|
|
970
|
+
"tabCount": "qikqja_tabCount"
|
|
971
971
|
};
|
|
972
972
|
//#endregion
|
|
973
973
|
//#region \0dsh-css:src/client/styles/Modal.module.css.mjs
|
|
@@ -986,151 +986,151 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
986
986
|
css: css$10
|
|
987
987
|
});
|
|
988
988
|
var Modal_module_css_default = {
|
|
989
|
-
"
|
|
989
|
+
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
990
990
|
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
991
|
-
"
|
|
992
|
-
"
|
|
991
|
+
"hubStatePending": "BiQ1zG_hubStatePending",
|
|
992
|
+
"toastFail": "BiQ1zG_toastFail",
|
|
993
|
+
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
994
|
+
"resultTitle": "BiQ1zG_resultTitle",
|
|
995
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
996
|
+
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
997
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
998
|
+
"failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
|
|
999
|
+
"progress": "BiQ1zG_progress",
|
|
993
1000
|
"detailArrow": "BiQ1zG_detailArrow",
|
|
994
|
-
"
|
|
995
|
-
"
|
|
1001
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
1002
|
+
"modalLabel": "BiQ1zG_modalLabel",
|
|
1003
|
+
"trustHint": "BiQ1zG_trustHint",
|
|
1004
|
+
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
1005
|
+
"failReason": "BiQ1zG_failReason",
|
|
996
1006
|
"failCopy": "BiQ1zG_failCopy",
|
|
997
|
-
"
|
|
998
|
-
"
|
|
999
|
-
"
|
|
1000
|
-
"
|
|
1001
|
-
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
1002
|
-
"logModal": "BiQ1zG_logModal",
|
|
1003
|
-
"modalDesc": "BiQ1zG_modalDesc",
|
|
1004
|
-
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
1005
|
-
"detailDim": "BiQ1zG_detailDim",
|
|
1006
|
-
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
1007
|
-
"failKind": "BiQ1zG_failKind",
|
|
1008
|
-
"noticeRow": "BiQ1zG_noticeRow",
|
|
1009
|
-
"noticeTime": "BiQ1zG_noticeTime",
|
|
1010
|
-
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
1007
|
+
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
1008
|
+
"noticeMain": "BiQ1zG_noticeMain",
|
|
1009
|
+
"modalIn": "BiQ1zG_modalIn",
|
|
1010
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
1011
1011
|
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
1012
|
-
"
|
|
1012
|
+
"bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
|
|
1013
|
+
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
1014
|
+
"queueSection": "BiQ1zG_queueSection",
|
|
1015
|
+
"modalClose": "BiQ1zG_modalClose",
|
|
1016
|
+
"modalRow": "BiQ1zG_modalRow",
|
|
1017
|
+
"hubStateChip": "BiQ1zG_hubStateChip",
|
|
1018
|
+
"detailMono": "BiQ1zG_detailMono",
|
|
1019
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
1020
|
+
"errorModal": "BiQ1zG_errorModal",
|
|
1021
|
+
"modalWide": "BiQ1zG_modalWide",
|
|
1013
1022
|
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
1014
|
-
"
|
|
1015
|
-
"
|
|
1016
|
-
"
|
|
1017
|
-
"
|
|
1023
|
+
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
1024
|
+
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
1025
|
+
"errorTitle": "BiQ1zG_errorTitle",
|
|
1026
|
+
"logModal": "BiQ1zG_logModal",
|
|
1027
|
+
"resultCheck": "BiQ1zG_resultCheck",
|
|
1028
|
+
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
1029
|
+
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
1030
|
+
"failRepoUrl": "BiQ1zG_failRepoUrl",
|
|
1018
1031
|
"detailPathText": "BiQ1zG_detailPathText",
|
|
1019
|
-
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
1020
1032
|
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
1021
|
-
"
|
|
1022
|
-
"
|
|
1023
|
-
"
|
|
1024
|
-
"failList": "BiQ1zG_failList",
|
|
1025
|
-
"aboutModal": "BiQ1zG_aboutModal",
|
|
1026
|
-
"progress": "BiQ1zG_progress",
|
|
1027
|
-
"failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
|
|
1028
|
-
"failEmpty": "BiQ1zG_failEmpty",
|
|
1029
|
-
"detailGrid": "BiQ1zG_detailGrid",
|
|
1030
|
-
"trustHint": "BiQ1zG_trustHint",
|
|
1031
|
-
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
1032
|
-
"modalTitle": "BiQ1zG_modalTitle",
|
|
1033
|
-
"result": "BiQ1zG_result",
|
|
1033
|
+
"detailDim": "BiQ1zG_detailDim",
|
|
1034
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
1035
|
+
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
1034
1036
|
"modalBody": "BiQ1zG_modalBody",
|
|
1035
|
-
"
|
|
1036
|
-
"
|
|
1037
|
-
"
|
|
1038
|
-
"
|
|
1039
|
-
"
|
|
1040
|
-
"
|
|
1041
|
-
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
1042
|
-
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
1043
|
-
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
1044
|
-
"modalLabel": "BiQ1zG_modalLabel",
|
|
1037
|
+
"modalDesc": "BiQ1zG_modalDesc",
|
|
1038
|
+
"noticeRow": "BiQ1zG_noticeRow",
|
|
1039
|
+
"modalCancel": "BiQ1zG_modalCancel",
|
|
1040
|
+
"modalLink": "BiQ1zG_modalLink",
|
|
1041
|
+
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
1042
|
+
"progressText": "BiQ1zG_progressText",
|
|
1045
1043
|
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
1046
|
-
"
|
|
1044
|
+
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
1047
1045
|
"detailStars": "BiQ1zG_detailStars",
|
|
1048
|
-
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
1049
|
-
"noticeList": "BiQ1zG_noticeList",
|
|
1050
|
-
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
1051
|
-
"resultDesc": "BiQ1zG_resultDesc",
|
|
1052
1046
|
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
1053
|
-
"
|
|
1054
|
-
"
|
|
1055
|
-
"
|
|
1056
|
-
"
|
|
1057
|
-
"
|
|
1058
|
-
"
|
|
1059
|
-
"failReason": "BiQ1zG_failReason",
|
|
1047
|
+
"queueRow": "BiQ1zG_queueRow",
|
|
1048
|
+
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
1049
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
1050
|
+
"failKind": "BiQ1zG_failKind",
|
|
1051
|
+
"errorBox": "BiQ1zG_errorBox",
|
|
1052
|
+
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
1060
1053
|
"progressTrack": "BiQ1zG_progressTrack",
|
|
1061
|
-
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
1062
|
-
"toast": "BiQ1zG_toast",
|
|
1063
|
-
"modalCopy": "BiQ1zG_modalCopy",
|
|
1064
|
-
"progressText": "BiQ1zG_progressText",
|
|
1065
|
-
"failClear": "BiQ1zG_failClear",
|
|
1066
|
-
"hubVersionBar": "BiQ1zG_hubVersionBar",
|
|
1067
|
-
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
1068
1054
|
"hubVersionDate": "BiQ1zG_hubVersionDate",
|
|
1069
|
-
"
|
|
1070
|
-
"
|
|
1071
|
-
"
|
|
1072
|
-
"
|
|
1073
|
-
"errorTitle": "BiQ1zG_errorTitle",
|
|
1074
|
-
"overlay": "BiQ1zG_overlay",
|
|
1075
|
-
"helpModal": "BiQ1zG_helpModal",
|
|
1076
|
-
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
1077
|
-
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
1078
|
-
"modalLink": "BiQ1zG_modalLink",
|
|
1079
|
-
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
1080
|
-
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
1081
|
-
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
1082
|
-
"errorHint": "BiQ1zG_errorHint",
|
|
1083
|
-
"modalRow": "BiQ1zG_modalRow",
|
|
1084
|
-
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
1085
|
-
"failHead": "BiQ1zG_failHead",
|
|
1086
|
-
"failRepoUrl": "BiQ1zG_failRepoUrl",
|
|
1055
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
1056
|
+
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
1057
|
+
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
1058
|
+
"modalTitle": "BiQ1zG_modalTitle",
|
|
1087
1059
|
"detailLink": "BiQ1zG_detailLink",
|
|
1088
|
-
"
|
|
1089
|
-
"
|
|
1090
|
-
"
|
|
1091
|
-
"resultCheck": "BiQ1zG_resultCheck",
|
|
1092
|
-
"overlayIn": "BiQ1zG_overlayIn",
|
|
1093
|
-
"detailMono": "BiQ1zG_detailMono",
|
|
1094
|
-
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
1095
|
-
"failKindTitle": "BiQ1zG_failKindTitle",
|
|
1096
|
-
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
1097
|
-
"modalIn": "BiQ1zG_modalIn",
|
|
1098
|
-
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
1099
|
-
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
1100
|
-
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
1101
|
-
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
1102
|
-
"modalValue": "BiQ1zG_modalValue",
|
|
1103
|
-
"toastFail": "BiQ1zG_toastFail",
|
|
1104
|
-
"stripCancel": "BiQ1zG_stripCancel",
|
|
1105
|
-
"bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
|
|
1060
|
+
"noticeTime": "BiQ1zG_noticeTime",
|
|
1061
|
+
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
1062
|
+
"progressFill": "BiQ1zG_progressFill",
|
|
1106
1063
|
"failRepo": "BiQ1zG_failRepo",
|
|
1107
|
-
"
|
|
1064
|
+
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
1065
|
+
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
1108
1066
|
"failRepoLabel": "BiQ1zG_failRepoLabel",
|
|
1109
|
-
"
|
|
1110
|
-
"
|
|
1111
|
-
"
|
|
1112
|
-
"
|
|
1113
|
-
"
|
|
1114
|
-
"
|
|
1115
|
-
"
|
|
1116
|
-
"
|
|
1117
|
-
"
|
|
1118
|
-
"
|
|
1119
|
-
"
|
|
1067
|
+
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
1068
|
+
"restartLater": "BiQ1zG_restartLater",
|
|
1069
|
+
"modalCmd": "BiQ1zG_modalCmd",
|
|
1070
|
+
"failList": "BiQ1zG_failList",
|
|
1071
|
+
"modalCopy": "BiQ1zG_modalCopy",
|
|
1072
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
1073
|
+
"restartNow": "BiQ1zG_restartNow",
|
|
1074
|
+
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
1075
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
1076
|
+
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
1077
|
+
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
1078
|
+
"hubVersionNumber": "BiQ1zG_hubVersionNumber",
|
|
1079
|
+
"aboutModal": "BiQ1zG_aboutModal",
|
|
1080
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
1081
|
+
"detailLabel": "BiQ1zG_detailLabel",
|
|
1120
1082
|
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
1083
|
+
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
1084
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
1085
|
+
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
1086
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
1087
|
+
"failClear": "BiQ1zG_failClear",
|
|
1088
|
+
"failKindTitle": "BiQ1zG_failKindTitle",
|
|
1089
|
+
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
1090
|
+
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
1091
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
1121
1092
|
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
1122
|
-
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
1123
|
-
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
1124
1093
|
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
1125
|
-
"
|
|
1126
|
-
"
|
|
1094
|
+
"noticeHead": "BiQ1zG_noticeHead",
|
|
1095
|
+
"hubStateLatest": "BiQ1zG_hubStateLatest",
|
|
1096
|
+
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
1097
|
+
"modalActions": "BiQ1zG_modalActions",
|
|
1098
|
+
"modalHead": "BiQ1zG_modalHead",
|
|
1099
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
1100
|
+
"modal": "BiQ1zG_modal",
|
|
1101
|
+
"result": "BiQ1zG_result",
|
|
1102
|
+
"failHead": "BiQ1zG_failHead",
|
|
1103
|
+
"hubVersionBar": "BiQ1zG_hubVersionBar",
|
|
1104
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
1105
|
+
"detailModal": "BiQ1zG_detailModal",
|
|
1106
|
+
"linkIcon": "BiQ1zG_linkIcon",
|
|
1107
|
+
"hubStateAvailable": "BiQ1zG_hubStateAvailable",
|
|
1108
|
+
"stripCancel": "BiQ1zG_stripCancel",
|
|
1109
|
+
"progressHead": "BiQ1zG_progressHead",
|
|
1110
|
+
"aboutContent": "BiQ1zG_aboutContent",
|
|
1111
|
+
"modalInstall": "BiQ1zG_modalInstall",
|
|
1112
|
+
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
1113
|
+
"overlayIn": "BiQ1zG_overlayIn",
|
|
1127
1114
|
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
1128
1115
|
"failRow": "BiQ1zG_failRow",
|
|
1129
|
-
"
|
|
1116
|
+
"toast": "BiQ1zG_toast",
|
|
1117
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
1118
|
+
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
1119
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
1120
|
+
"modalValue": "BiQ1zG_modalValue",
|
|
1121
|
+
"resultDesc": "BiQ1zG_resultDesc",
|
|
1122
|
+
"queuedHint": "BiQ1zG_queuedHint",
|
|
1123
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
1124
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
1125
|
+
"overlay": "BiQ1zG_overlay",
|
|
1126
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
1127
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
1128
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
1129
|
+
"detailPathActions": "BiQ1zG_detailPathActions"
|
|
1130
1130
|
};
|
|
1131
1131
|
//#endregion
|
|
1132
1132
|
//#region src/server/services/install/release-target.ts
|
|
1133
|
-
/** 完整命令前缀:`dsh plugin --profile <p> add|update <target>`(与 profile.ts installTargetOf
|
|
1133
|
+
/** 完整命令前缀:`dsh plugin --profile <p> add|update <target>`(与 profile.ts installTargetOf 同一套规则)。 */
|
|
1134
1134
|
const DSH_PLUGIN_CMD_RE = /^dsh[ \t]+plugin[ \t]+--profile(?:[ \t]+|=)[A-Za-z0-9_-]+[ \t]+(?:add|update)[ \t]+(.+)$/i;
|
|
1135
1135
|
/** 固定形态的 release .tgz 直链:主机、路径段与扩展名全部锁死。 */
|
|
1136
1136
|
const RELEASE_URL_RE = /^https:\/\/github\.com\/([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)\/releases\/download\/([A-Za-z0-9._+-]+)\/([A-Za-z0-9._+-]+\.tgz)$/;
|
|
@@ -1172,8 +1172,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1172
1172
|
/** 展示用安装命令(复制/弹窗):目录下发的权威命令优先(CLI-only 插件如 dsh-tui
|
|
1173
1173
|
* 需专属 profile(--profile dsh-tui),无法从 npm 包名推断,必须用官方命令);
|
|
1174
1174
|
* 常规插件无目录命令时用 npm 包名回退生成。
|
|
1175
|
-
* version
|
|
1176
|
-
* 不会因 pnpm 门禁静默回退到很旧的版本。 */
|
|
1175
|
+
* version 为已过发布冷却期的版本:带上它,手抄命令与一键安装的执行结果一致。 */
|
|
1177
1176
|
function installCommandOf(p, withProfile = false, version) {
|
|
1178
1177
|
const cmd = p.install?.command;
|
|
1179
1178
|
if (cmd) return cmd;
|
|
@@ -1218,9 +1217,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1218
1217
|
/**
|
|
1219
1218
|
* 插件当前版本号,供头部标题展示「DSH Plugin Hub v0.1.1」。
|
|
1220
1219
|
* tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
|
|
1221
|
-
* node --test 直接 import 本模块时该标识符不存在,typeof
|
|
1220
|
+
* node --test 直接 import 本模块时该标识符不存在,typeof 守卫缺省为空串。
|
|
1222
1221
|
*/
|
|
1223
|
-
const PLUGIN_VERSION = "2.3.
|
|
1222
|
+
const PLUGIN_VERSION = "2.3.3";
|
|
1224
1223
|
const CATEGORY_ORDER = [
|
|
1225
1224
|
"interface",
|
|
1226
1225
|
"session",
|
|
@@ -1373,7 +1372,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1373
1372
|
return null;
|
|
1374
1373
|
}
|
|
1375
1374
|
}
|
|
1376
|
-
/** 批量查询已安装插件 npm
|
|
1375
|
+
/** 批量查询已安装插件 npm 包的最新版本发布时间(发布冷却期用);失败返回 null(调用方按原逻辑照常提示)。 */
|
|
1377
1376
|
async function fetchNpmReleaseAge(packages) {
|
|
1378
1377
|
if (packages.length === 0) return {};
|
|
1379
1378
|
try {
|
|
@@ -1514,7 +1513,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1514
1513
|
return `${url}${url.includes("?") ? "&" : "?"}_t=${Date.now()}`;
|
|
1515
1514
|
}
|
|
1516
1515
|
/** 归一化接口下发的 recentVersions:只保留带版本号的条目,其余字段按类型补。
|
|
1517
|
-
* 这条数据是「最新版还在 24.5h
|
|
1516
|
+
* 这条数据是「最新版还在 24.5h 冷却期内时回退到更早的已过冷却期版本」的唯一依据;
|
|
1518
1517
|
* 入口处漏传会让候选只剩最新版,整体变成 pending —— 用户就永远看不到更新入口。 */
|
|
1519
1518
|
function recentVersionsOf(value) {
|
|
1520
1519
|
if (!Array.isArray(value)) return [];
|
|
@@ -1531,7 +1530,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1531
1530
|
}
|
|
1532
1531
|
return list;
|
|
1533
1532
|
}
|
|
1534
|
-
/** 版本控制中心:最新版本 + Markdown 变更记录 +
|
|
1533
|
+
/** 版本控制中心:最新版本 + Markdown 变更记录 + 最近发版(冷却期回退用);不可用返回 null。 */
|
|
1535
1534
|
async function fetchHubUpdate() {
|
|
1536
1535
|
try {
|
|
1537
1536
|
const res = await fetch(busted(HUB_UPDATE_URL), { cache: "no-store" });
|
|
@@ -1569,9 +1568,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1569
1568
|
}
|
|
1570
1569
|
//#endregion
|
|
1571
1570
|
//#region src/client/logic/release-age.ts
|
|
1572
|
-
/** pnpm
|
|
1571
|
+
/** pnpm 发布冷却期:dsh profile 默认 minimumReleaseAge=1440(分钟);+30 分钟缓冲抵消网络/CDN 边缘时间偏差。 */
|
|
1573
1572
|
const MIN_RELEASE_AGE_MS = 882e5;
|
|
1574
|
-
/**
|
|
1573
|
+
/** 发布时间是否仍在冷却期内(太新 → 暂缓提示);无值/解析不出返回 false(不拦真实更新)。 */
|
|
1575
1574
|
function isReleaseTooFresh(publishedAt, now) {
|
|
1576
1575
|
if (typeof publishedAt !== "string" || publishedAt === "") return false;
|
|
1577
1576
|
const ms = Date.parse(publishedAt);
|
|
@@ -1614,12 +1613,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1614
1613
|
return 0;
|
|
1615
1614
|
}
|
|
1616
1615
|
/**
|
|
1617
|
-
* 是否值得提示「可更新」:npm
|
|
1616
|
+
* 是否值得提示「可更新」:npm 上最新可安装版本确实比已装版本新,且已过发布冷却期。
|
|
1618
1617
|
*
|
|
1619
1618
|
* 更新命令执行的是 `pkg@latest`,所以「目录里标的版本」不是最终能装上的版本:
|
|
1620
1619
|
* 作者可能只打了 GitHub release 没发 npm —— 此时提示会变成永远点不掉的循环。
|
|
1621
1620
|
* 任一信息缺失(查不到发布信息 / 没有已装版本记录)返回 offered,交回调用方原有判定:
|
|
1622
|
-
*
|
|
1621
|
+
* 宁可提示,也不因为一次查询失败漏掉真实更新。
|
|
1623
1622
|
*/
|
|
1624
1623
|
function updateDecision(release, installedVersion, now) {
|
|
1625
1624
|
if (release === null) return {
|
|
@@ -1645,8 +1644,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1645
1644
|
/**
|
|
1646
1645
|
* 选出本次真正该提示的更新版本。
|
|
1647
1646
|
*
|
|
1648
|
-
*
|
|
1649
|
-
* 提示被整体跳过。这里把最新版与 recentVersions
|
|
1647
|
+
* 只看最新版会漏更新:连续发版时间隔小于发布冷却期时,最新版永远「太新」,
|
|
1648
|
+
* 提示被整体跳过。这里把最新版与 recentVersions 一起当候选,取「高于当前版本且已过冷却期」
|
|
1650
1649
|
* 的最高版本;一个都没有但仍存在更高版本 → pending(暂缓,不谎称已是最新)。
|
|
1651
1650
|
*/
|
|
1652
1651
|
function pickHubUpdate(info, currentVersion, now) {
|
|
@@ -1885,7 +1884,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1885
1884
|
* 界面停在「正在加载插件数据…」假死 —— 超时自动重拉,最多自动重试 2 次后转失败态;
|
|
1886
1885
|
* 用户手动刷新(reload)时清零重新计数。 */
|
|
1887
1886
|
const loadRetriesRef = (0, react.useRef)(0);
|
|
1888
|
-
/** 目录加载超时阈值:超过即判定挂起,强制刷新一次(服务端代理 curl 上限 60s,客户端 30s
|
|
1887
|
+
/** 目录加载超时阈值:超过即判定挂起,强制刷新一次(服务端代理 curl 上限 60s,客户端 30s 先超时) */
|
|
1889
1888
|
const LOAD_TIMEOUT_MS = 3e4;
|
|
1890
1889
|
/** 挂起后最多自动重试次数:避免代理持续不通时无限循环刷新(每次重试仍 30s,2 次后转失败界面可手动重试) */
|
|
1891
1890
|
const MAX_LOAD_RETRIES = 2;
|
|
@@ -1903,7 +1902,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1903
1902
|
* 强制刷新 Hub 版本与「关注我们」信息:点击头部版本号/徽标时触发。
|
|
1904
1903
|
* 挂载期的 useEffect 只在进入/reload 时拉一次,发版后已打开的界面点版本号
|
|
1905
1904
|
* 仍显示旧数据;此处重新拉接口中心,最新版本与变更记录点击即见。
|
|
1906
|
-
*
|
|
1905
|
+
* 失败时返回 null(弹窗退回展示当前版本号),与挂载期拉取规则一致。
|
|
1907
1906
|
*/
|
|
1908
1907
|
const refreshHub = async () => {
|
|
1909
1908
|
const [info, about] = await Promise.all([fetchHubUpdate(), fetchHubAbout()]);
|
|
@@ -1967,7 +1966,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1967
1966
|
controller.abort();
|
|
1968
1967
|
};
|
|
1969
1968
|
}, [reloadKey, lang]);
|
|
1970
|
-
/** 刷新当前 profile
|
|
1969
|
+
/** 刷新当前 profile 已安装插件表;宿主未挂本地路由时降级为空表。 */
|
|
1971
1970
|
const refreshInstalled = async () => {
|
|
1972
1971
|
const data = await fetchInstalled();
|
|
1973
1972
|
if (data === null) return;
|
|
@@ -2066,7 +2065,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2066
2065
|
const releaseAgeReady = releaseAgeKey === releaseAge.key;
|
|
2067
2066
|
/**
|
|
2068
2067
|
* 不能提示更新的包:
|
|
2069
|
-
* - npm
|
|
2068
|
+
* - npm 上最新版还没过发布冷却期(发布不满 24h,pnpm 会不提示地回退,点了也装不上);
|
|
2070
2069
|
* - npm 上最新版并不高于已装版本 —— 更新走的是 `pkg@latest`,此时无论目录标到哪个 tag,
|
|
2071
2070
|
* 都不可能装上(作者可能只打了 GitHub release 没发 npm),提示只会变成永远点不掉的循环。
|
|
2072
2071
|
*/
|
|
@@ -2099,7 +2098,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2099
2098
|
if (pkg === null) return true;
|
|
2100
2099
|
return releaseAgeReady && !updateBlocked.has(pkg);
|
|
2101
2100
|
};
|
|
2102
|
-
/**
|
|
2101
|
+
/** 更新被冷却期未到时的可重试时刻(毫秒);未安装/无更新/非冷却期原因 → null。 */
|
|
2103
2102
|
const updatePendingUntil = (p) => {
|
|
2104
2103
|
if (!hasUpdateOf(p, installed, versions)) return null;
|
|
2105
2104
|
const pkg = npmPackageOf(p, versions);
|
|
@@ -2107,7 +2106,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2107
2106
|
return updateDecisions.get(pkg)?.pendingUntil ?? null;
|
|
2108
2107
|
};
|
|
2109
2108
|
/** 已安装项统一列表(目录元数据 + 运行时信息合并):校验未就绪/被拦下的去掉更新标记、
|
|
2110
|
-
*
|
|
2109
|
+
* 冷却期未到的带上可重试时刻,驱动「已安装」tab。 */
|
|
2111
2110
|
const installedItems = (0, react.useMemo)(() => {
|
|
2112
2111
|
return rawInstalledItems.map((item) => {
|
|
2113
2112
|
if (!item.hasUpdate || !item.plugin) return item;
|
|
@@ -2136,12 +2135,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2136
2135
|
* 构建时注入的 PLUGIN_VERSION 是运行 bundle 的真实版本;测试/异常场景缺失时
|
|
2137
2136
|
* 回退到安装时记录的版本。版本号不等即新版(版本号只在发版时变更,绝无降级场景)。
|
|
2138
2137
|
*
|
|
2139
|
-
* 另加 pnpm
|
|
2138
|
+
* 另加 pnpm 发布冷却期:新版本发布还不满 24 小时(+30 分钟缓冲)时,pnpm 会不提示地
|
|
2140
2139
|
* 回退到旧版本,此时若提示「可更新」用户点了也更新不到。publishedAt 由接口中心按 npm
|
|
2141
|
-
* registry
|
|
2140
|
+
* registry 真实发布时间下发(同源),据此判断最准。冷却期命中要单列成 `pending` 而不是
|
|
2142
2141
|
* 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
|
|
2143
2142
|
*/
|
|
2144
|
-
const hubCurrentVersion = "2.3.
|
|
2143
|
+
const hubCurrentVersion = "2.3.3";
|
|
2145
2144
|
const hubUpdateResult = hubUpdateInfo === null ? {
|
|
2146
2145
|
state: "none",
|
|
2147
2146
|
target: null
|
|
@@ -2345,7 +2344,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2345
2344
|
function actionWordZh(action) {
|
|
2346
2345
|
return action === "uninstall" ? "卸载" : action === "update" ? "更新" : "安装";
|
|
2347
2346
|
}
|
|
2348
|
-
/** 记录的动作:老记录只有 kind,按 kind
|
|
2347
|
+
/** 记录的动作:老记录只有 kind,按 kind 归类。 */
|
|
2349
2348
|
function actionOfRecord(rec) {
|
|
2350
2349
|
if (rec.action !== void 0) return rec.action;
|
|
2351
2350
|
return rec.kind === "uninstall" ? "uninstall" : rec.kind === "update" ? "update" : "install";
|
|
@@ -2443,7 +2442,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2443
2442
|
if (LOCAL_ENV_RE.test(message)) return "localEnv";
|
|
2444
2443
|
return "hub";
|
|
2445
2444
|
}
|
|
2446
|
-
/**
|
|
2445
|
+
/** 「特征指向本机环境但说不清具体哪一类」的最后的判断规则:系统调用错误码(权限/路径过长/设备异常)、
|
|
2447
2446
|
* 证书与代理校验失败、本地配置文件(~/.npmrc、profile 的 package.json)损坏。
|
|
2448
2447
|
* 只做排除用:命中它表示「不是插件侧问题」,不代表我们已经定位到原因。 */
|
|
2449
2448
|
const LOCAL_ENV_RE = /os error \d{1,3}\b|ERROR_[A-Z_]{4,}|\bE(?:ACCES|PERM|NOENT|NAMETOOLONG|INVAL|PROTO|ISDIR|NOTDIR|EXIST|BADF|NOTEMPTY|JSONPARSE|NOMEM)\b|JavaScript heap out of memory|Unexpected token .{0,60}in JSON|SELF_SIGNED_CERT_IN_CHAIN|UNABLE_TO_VERIFY_LEAF_SIGNATURE|ERR_TLS_CERT_ALTNAME_INVALID|unable to verify the first certificate|self[- ]signed certificate|ERR_INVALID_URL|invalid registry|proxy authentication|407 Proxy/i;
|
|
@@ -2472,7 +2471,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2472
2471
|
/** 摘要里单行上限:允许构建 key 等长行也被截短。 */
|
|
2473
2472
|
const MAX_LINE_CHARS = 400;
|
|
2474
2473
|
/**
|
|
2475
|
-
*
|
|
2474
|
+
* 展示用格式化:宿主兼容性提示里的 peerDependencies 是压缩成一行的 JSON,
|
|
2476
2475
|
* 直接展示像一团乱码;展开成缩进格式,解析失败则原样返回。
|
|
2477
2476
|
*/
|
|
2478
2477
|
function formatFailureMessage(message) {
|
|
@@ -2975,7 +2974,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2975
2974
|
/** 待重启列表(服务端内存态 + 本地展示信息补齐);与 queue 一样以 ref 为唯一事实来源。 */
|
|
2976
2975
|
const [pendingRestarts, setPendingRestarts] = (0, react.useState)([]);
|
|
2977
2976
|
const pendingRef = (0, react.useRef)([]);
|
|
2978
|
-
/** 本次会话内安装成功插件的展示信息(目标 → 简介/版本):轮询合并待重启列表时补齐,刷新后由 resolvePending
|
|
2977
|
+
/** 本次会话内安装成功插件的展示信息(目标 → 简介/版本):轮询合并待重启列表时补齐,刷新后由 resolvePending 补上。 */
|
|
2979
2978
|
const pendingInfoRef = (0, react.useRef)(/* @__PURE__ */ new Map());
|
|
2980
2979
|
/** 保持最新的 resolvePending:轮询闭包捕获的是调用那一刻的目录状态,目录晚加载时也能补齐。 */
|
|
2981
2980
|
const resolvePendingRef = (0, react.useRef)(resolvePending);
|
|
@@ -2986,12 +2985,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2986
2985
|
const settlingRef = (0, react.useRef)(/* @__PURE__ */ new Set());
|
|
2987
2986
|
/** 轮询定时器句柄(队列清空/组件卸载时清理) */
|
|
2988
2987
|
const pollRef = (0, react.useRef)(null);
|
|
2989
|
-
/**
|
|
2988
|
+
/** 请求还没返回的目标集合(同步防重):双击安装/卸载时第二击直接忽略。
|
|
2990
2989
|
* 本地队列任务要等 fetch 返回后才入队,仅靠 queueRef 检查拦不住请求窗口内的重复点击。 */
|
|
2991
2990
|
const submittingRef = (0, react.useRef)(/* @__PURE__ */ new Set());
|
|
2992
2991
|
/** 乐观入队临时 id 计数器:递减产生唯一负数,与服务端自增正数 id 永不冲突。 */
|
|
2993
2992
|
const tempIdRef = (0, react.useRef)(0);
|
|
2994
|
-
/**
|
|
2993
|
+
/** 请求进行中标记:弹窗据此禁用确认按钮,避免等待响应期间被再次点击。 */
|
|
2995
2994
|
const [submitting, setSubmitting] = (0, react.useState)(false);
|
|
2996
2995
|
/** 停止后台任务轮询(任务结束或组件卸载时清理)。 */
|
|
2997
2996
|
const stopPoll = () => {
|
|
@@ -3131,7 +3130,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3131
3130
|
}
|
|
3132
3131
|
}, stepMs);
|
|
3133
3132
|
};
|
|
3134
|
-
/** 任务在 /active 中消失 = 已结束:查 /status 拿终态并收尾(cancelled
|
|
3133
|
+
/** 任务在 /active 中消失 = 已结束:查 /status 拿终态并收尾(cancelled 直接移除)。 */
|
|
3135
3134
|
const settleTask = async (q) => {
|
|
3136
3135
|
let status = "failed";
|
|
3137
3136
|
let lines = [];
|
|
@@ -3369,8 +3368,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3369
3368
|
/** 命令行安装:用户手输 npm 包名,走 custom 源(受安全开关控制)。
|
|
3370
3369
|
* update=true 时对已安装目标放行覆盖重装(与目录插件「更新」同一语义)。
|
|
3371
3370
|
* channel=入口渠道(NPM 包卡片):上报服务端落日志,失败弹窗/通知据此精准溯源。
|
|
3372
|
-
* 队列展示/防重一律用归一化身份:与服务端 /active
|
|
3373
|
-
* npm
|
|
3371
|
+
* 队列展示/防重一律用归一化身份:与服务端 /active 合并、弹窗目标匹配同一套规则,
|
|
3372
|
+
* npm 包名原样传递不受影响。 */
|
|
3374
3373
|
const installCustom = async (raw, opts) => {
|
|
3375
3374
|
const target = raw.trim();
|
|
3376
3375
|
if (!target) return;
|
|
@@ -3385,7 +3384,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3385
3384
|
});
|
|
3386
3385
|
};
|
|
3387
3386
|
/** 全局 npm 安装(官方 README 的 `npm install -g <pkgs>`):不进任何 profile、无需宿主重启。
|
|
3388
|
-
* 队列展示/防重用包列表空格拼接的身份(与服务端 target
|
|
3387
|
+
* 队列展示/防重用包列表空格拼接的身份(与服务端 target 同一套规则);入口渠道固定为 npm(NPM 包卡片)。 */
|
|
3389
3388
|
const installGlobalNpm = async (pkgs, opts) => {
|
|
3390
3389
|
const list = (pkgs ?? []).map((p) => p.trim()).filter((p) => p !== "");
|
|
3391
3390
|
if (list.length === 0) return;
|
|
@@ -3421,6 +3420,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3421
3420
|
});
|
|
3422
3421
|
const data = await res.json();
|
|
3423
3422
|
if (!data.ok || typeof data.task !== "number") {
|
|
3423
|
+
if (res.status === 400 && data.error === "plugin is not installed") {
|
|
3424
|
+
refreshInstalled();
|
|
3425
|
+
clearInstalledVersion(repo);
|
|
3426
|
+
onUninstallDone(false, repo, false, false);
|
|
3427
|
+
return;
|
|
3428
|
+
}
|
|
3424
3429
|
onError(data.error || `HTTP ${res.status}`, repo, "uninstall");
|
|
3425
3430
|
return;
|
|
3426
3431
|
}
|
|
@@ -4014,9 +4019,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4014
4019
|
*/
|
|
4015
4020
|
/** 完成结果视图:绿色对勾 + 标题/描述;
|
|
4016
4021
|
* 终态只有两种:
|
|
4017
|
-
* - needsRestart=true
|
|
4022
|
+
* - needsRestart=true(刷新解决不了:热加载失败 / 非 dsh 插件 / 更新)→ 仅一个「立即重启」
|
|
4018
4023
|
* 按钮(重启会中断进行中的任务,故仍需用户确认),关闭即放弃;
|
|
4019
|
-
* - 其余(含 needsReload=true
|
|
4024
|
+
* - 其余(含 needsReload=true 的「已热加载、仅剩客户端 UI」)→ 仅「完成」按钮:关闭结果弹窗时
|
|
4020
4025
|
* 上层自动刷新页面让插件生效,不再给「稍后/立即刷新」手动选择。 */
|
|
4021
4026
|
function ResultView({ title, desc, t, restarting, needsRestart, needsReload, bundleDeselected, onRestart, onClose }) {
|
|
4022
4027
|
return (0, react.createElement)("div", { className: Modal_module_css_default.result }, (0, react.createElement)("div", { className: Modal_module_css_default.resultCheck }, (0, react.createElement)("svg", {
|
|
@@ -4510,8 +4515,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4510
4515
|
* - 有更新(state='available'):标题「有新版本」,展示新版本号、发布时间与 Worker 下发的
|
|
4511
4516
|
* Markdown 变更记录(renderMarkdown 渲染,双语言按界面语言取 {zh,en} 对象),
|
|
4512
4517
|
* 按钮「稍后再说 / 直接更新」,确认后进入安装弹窗执行覆盖重装。
|
|
4513
|
-
* - 暂缓提示(state='pending'
|
|
4514
|
-
*
|
|
4518
|
+
* - 暂缓提示(state='pending'):远端确有新版本,但发布还不满冷却期,pnpm 此时会
|
|
4519
|
+
* 不提示地回退到旧版本 —— 仍按「有新版本」展示,只给「稍后再说」,并说明稍后会自动提示。
|
|
4515
4520
|
* - 无更新 / 信息缺失(state='latest' / 'none'):标题「当前版本」,版本号与本机版本取自
|
|
4516
4521
|
* currentVersion(构建注入的 PLUGIN_VERSION),**不得**用远端最新版号冒充本机版本。
|
|
4517
4522
|
* 点击头部版本号(或「可更新」徽标)打开 —— 无论有无更新都能看到更新内容。
|
|
@@ -5213,42 +5218,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5213
5218
|
css: css$9
|
|
5214
5219
|
});
|
|
5215
5220
|
var List_module_css_default = {
|
|
5221
|
+
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
5216
5222
|
"cardBadgeRow": "_3XaZHa_cardBadgeRow",
|
|
5217
5223
|
"fork": "_3XaZHa_fork",
|
|
5218
|
-
"
|
|
5219
|
-
"
|
|
5220
|
-
"diagBtn": "_3XaZHa_diagBtn",
|
|
5221
|
-
"footLink": "_3XaZHa_footLink",
|
|
5222
|
-
"verified": "_3XaZHa_verified",
|
|
5223
|
-
"desc": "_3XaZHa_desc",
|
|
5224
|
-
"cardTitle": "_3XaZHa_cardTitle",
|
|
5225
|
-
"cardMain": "_3XaZHa_cardMain",
|
|
5226
|
-
"versionBadge": "_3XaZHa_versionBadge",
|
|
5227
|
-
"card": "_3XaZHa_card",
|
|
5224
|
+
"stats": "_3XaZHa_stats",
|
|
5225
|
+
"authorBadge": "_3XaZHa_authorBadge",
|
|
5228
5226
|
"body": "_3XaZHa_body",
|
|
5229
|
-
"installBtn": "_3XaZHa_installBtn",
|
|
5230
5227
|
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
5231
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
5232
|
-
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
5233
|
-
"footer": "_3XaZHa_footer",
|
|
5234
|
-
"topic": "_3XaZHa_topic",
|
|
5235
|
-
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
5236
|
-
"topics": "_3XaZHa_topics",
|
|
5237
|
-
"state": "_3XaZHa_state",
|
|
5238
|
-
"cardTitleRow": "_3XaZHa_cardTitleRow",
|
|
5239
|
-
"authorBadge": "_3XaZHa_authorBadge",
|
|
5240
|
-
"stateActions": "_3XaZHa_stateActions",
|
|
5241
5228
|
"cardSide": "_3XaZHa_cardSide",
|
|
5229
|
+
"footLink": "_3XaZHa_footLink",
|
|
5230
|
+
"detailBtn": "_3XaZHa_detailBtn",
|
|
5231
|
+
"star": "_3XaZHa_star",
|
|
5232
|
+
"card": "_3XaZHa_card",
|
|
5233
|
+
"updateBadge": "_3XaZHa_updateBadge",
|
|
5234
|
+
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
5235
|
+
"topic": "_3XaZHa_topic",
|
|
5242
5236
|
"date": "_3XaZHa_date",
|
|
5243
|
-
"
|
|
5244
|
-
"
|
|
5245
|
-
"
|
|
5237
|
+
"footer": "_3XaZHa_footer",
|
|
5238
|
+
"topics": "_3XaZHa_topics",
|
|
5239
|
+
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
5240
|
+
"actions": "_3XaZHa_actions",
|
|
5241
|
+
"versionBadge": "_3XaZHa_versionBadge",
|
|
5242
|
+
"verified": "_3XaZHa_verified",
|
|
5246
5243
|
"stateDesc": "_3XaZHa_stateDesc",
|
|
5247
|
-
"
|
|
5244
|
+
"diagBtn": "_3XaZHa_diagBtn",
|
|
5245
|
+
"stateTitle": "_3XaZHa_stateTitle",
|
|
5246
|
+
"cardMain": "_3XaZHa_cardMain",
|
|
5247
|
+
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
5248
|
+
"list": "_3XaZHa_list",
|
|
5248
5249
|
"retryBtn": "_3XaZHa_retryBtn",
|
|
5249
|
-
"
|
|
5250
|
-
"
|
|
5251
|
-
"
|
|
5250
|
+
"installBtn": "_3XaZHa_installBtn",
|
|
5251
|
+
"state": "_3XaZHa_state",
|
|
5252
|
+
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
5253
|
+
"desc": "_3XaZHa_desc",
|
|
5254
|
+
"stateActions": "_3XaZHa_stateActions",
|
|
5255
|
+
"cardTitleRow": "_3XaZHa_cardTitleRow",
|
|
5256
|
+
"cardTitle": "_3XaZHa_cardTitle"
|
|
5252
5257
|
};
|
|
5253
5258
|
//#endregion
|
|
5254
5259
|
//#region src/client/hooks/useIncrementalList.ts
|
|
@@ -5469,15 +5474,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5469
5474
|
css: css$8
|
|
5470
5475
|
});
|
|
5471
5476
|
var SectionTabs_module_css_default = {
|
|
5472
|
-
"tabLabel": "_7tvizq_tabLabel",
|
|
5473
5477
|
"tab": "_7tvizq_tab",
|
|
5474
|
-
"root": "_7tvizq_root",
|
|
5475
|
-
"tabIcon": "_7tvizq_tabIcon",
|
|
5476
5478
|
"tabCount": "_7tvizq_tabCount",
|
|
5477
|
-
"tabActive": "_7tvizq_tabActive",
|
|
5478
5479
|
"noticeBtn": "_7tvizq_noticeBtn",
|
|
5479
|
-
"
|
|
5480
|
+
"tabActive": "_7tvizq_tabActive",
|
|
5481
|
+
"tabLabel": "_7tvizq_tabLabel",
|
|
5480
5482
|
"noticeCount": "_7tvizq_noticeCount",
|
|
5483
|
+
"root": "_7tvizq_root",
|
|
5484
|
+
"tabIcon": "_7tvizq_tabIcon",
|
|
5485
|
+
"noticeIcon": "_7tvizq_noticeIcon",
|
|
5481
5486
|
"tabCountActive": "_7tvizq_tabCountActive"
|
|
5482
5487
|
};
|
|
5483
5488
|
//#endregion
|
|
@@ -5554,46 +5559,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5554
5559
|
css: css$7
|
|
5555
5560
|
});
|
|
5556
5561
|
var InstalledView_module_css_default = {
|
|
5557
|
-
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
5558
|
-
"statusInactive": "_1nXeGW_statusInactive",
|
|
5559
5562
|
"rowDesc": "_1nXeGW_rowDesc",
|
|
5560
|
-
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
5561
|
-
"statusDot": "_1nXeGW_statusDot",
|
|
5562
|
-
"segRow": "_1nXeGW_segRow",
|
|
5563
5563
|
"rowMain": "_1nXeGW_rowMain",
|
|
5564
|
-
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
5565
|
-
"rowStats": "_1nXeGW_rowStats",
|
|
5566
5564
|
"list": "_1nXeGW_list",
|
|
5565
|
+
"rowStar": "_1nXeGW_rowStar",
|
|
5566
|
+
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
5567
|
+
"statusPending": "_1nXeGW_statusPending",
|
|
5568
|
+
"exampleRow": "_1nXeGW_exampleRow",
|
|
5569
|
+
"searchInput": "_1nXeGW_searchInput",
|
|
5570
|
+
"segLabel": "_1nXeGW_segLabel",
|
|
5567
5571
|
"rowFork": "_1nXeGW_rowFork",
|
|
5572
|
+
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
5573
|
+
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
5574
|
+
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
5575
|
+
"rowTitle": "_1nXeGW_rowTitle",
|
|
5568
5576
|
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
5577
|
+
"rowActions": "_1nXeGW_rowActions",
|
|
5569
5578
|
"rowCategory": "_1nXeGW_rowCategory",
|
|
5570
|
-
"
|
|
5571
|
-
"
|
|
5572
|
-
"row": "_1nXeGW_row",
|
|
5573
|
-
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
5579
|
+
"segRow": "_1nXeGW_segRow",
|
|
5580
|
+
"rowRepo": "_1nXeGW_rowRepo",
|
|
5574
5581
|
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
5575
|
-
"
|
|
5576
|
-
"rowActions": "_1nXeGW_rowActions",
|
|
5577
|
-
"rowRestart": "_1nXeGW_rowRestart",
|
|
5578
|
-
"statusPending": "_1nXeGW_statusPending",
|
|
5582
|
+
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
5579
5583
|
"searchWrap": "_1nXeGW_searchWrap",
|
|
5584
|
+
"statusDot": "_1nXeGW_statusDot",
|
|
5585
|
+
"rowMeta": "_1nXeGW_rowMeta",
|
|
5586
|
+
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
5587
|
+
"rowDetail": "_1nXeGW_rowDetail",
|
|
5580
5588
|
"root": "_1nXeGW_root",
|
|
5581
|
-
"
|
|
5582
|
-
"rowTitle": "_1nXeGW_rowTitle",
|
|
5589
|
+
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
5583
5590
|
"rowActionLine": "_1nXeGW_rowActionLine",
|
|
5584
|
-
"segBtn": "_1nXeGW_segBtn",
|
|
5585
|
-
"rowRepo": "_1nXeGW_rowRepo",
|
|
5586
|
-
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
5587
5591
|
"versionBadge": "_1nXeGW_versionBadge",
|
|
5588
|
-
"
|
|
5589
|
-
"
|
|
5590
|
-
"rowStar": "_1nXeGW_rowStar",
|
|
5591
|
-
"segLabel": "_1nXeGW_segLabel",
|
|
5592
|
+
"row": "_1nXeGW_row",
|
|
5593
|
+
"rowStats": "_1nXeGW_rowStats",
|
|
5592
5594
|
"segGroup": "_1nXeGW_segGroup",
|
|
5593
|
-
"
|
|
5594
|
-
"
|
|
5595
|
+
"rowRestart": "_1nXeGW_rowRestart",
|
|
5596
|
+
"toolbar": "_1nXeGW_toolbar",
|
|
5597
|
+
"segBtn": "_1nXeGW_segBtn",
|
|
5598
|
+
"empty": "_1nXeGW_empty",
|
|
5599
|
+
"updateBadge": "_1nXeGW_updateBadge",
|
|
5595
5600
|
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
5596
|
-
"
|
|
5601
|
+
"statusInactive": "_1nXeGW_statusInactive"
|
|
5597
5602
|
};
|
|
5598
5603
|
//#endregion
|
|
5599
5604
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -5862,27 +5867,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5862
5867
|
css: css$6
|
|
5863
5868
|
});
|
|
5864
5869
|
var CustomInstallView_module_css_default = {
|
|
5865
|
-
"
|
|
5866
|
-
"installBtn": "zISxCG_installBtn",
|
|
5867
|
-
"installCards": "zISxCG_installCards",
|
|
5870
|
+
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
5868
5871
|
"installInputError": "zISxCG_installInputError",
|
|
5869
|
-
"installCard": "zISxCG_installCard",
|
|
5870
|
-
"installInput": "zISxCG_installInput",
|
|
5871
5872
|
"installError": "zISxCG_installError",
|
|
5872
|
-
"
|
|
5873
|
-
"channelOff": "zISxCG_channelOff",
|
|
5874
|
-
"channelOffText": "zISxCG_channelOffText",
|
|
5875
|
-
"root": "zISxCG_root",
|
|
5876
|
-
"installCardHead": "zISxCG_installCardHead",
|
|
5877
|
-
"installLabel": "zISxCG_installLabel",
|
|
5878
|
-
"helpBody": "zISxCG_helpBody",
|
|
5873
|
+
"installExample": "zISxCG_installExample",
|
|
5879
5874
|
"helpLine": "zISxCG_helpLine",
|
|
5880
|
-
"
|
|
5875
|
+
"installInput": "zISxCG_installInput",
|
|
5876
|
+
"installLabel": "zISxCG_installLabel",
|
|
5881
5877
|
"helpNote": "zISxCG_helpNote",
|
|
5878
|
+
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
5879
|
+
"installCards": "zISxCG_installCards",
|
|
5880
|
+
"installCardHead": "zISxCG_installCardHead",
|
|
5881
|
+
"channelOff": "zISxCG_channelOff",
|
|
5882
|
+
"installCard": "zISxCG_installCard",
|
|
5883
|
+
"helpBody": "zISxCG_helpBody",
|
|
5884
|
+
"desc": "zISxCG_desc",
|
|
5885
|
+
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
5882
5886
|
"installRow": "zISxCG_installRow",
|
|
5883
|
-
"
|
|
5887
|
+
"installBtn": "zISxCG_installBtn",
|
|
5888
|
+
"channelOffText": "zISxCG_channelOffText",
|
|
5884
5889
|
"helpCmd": "zISxCG_helpCmd",
|
|
5885
|
-
"
|
|
5890
|
+
"root": "zISxCG_root"
|
|
5886
5891
|
};
|
|
5887
5892
|
//#endregion
|
|
5888
5893
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -5901,13 +5906,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5901
5906
|
/** npm 包名(含 @scope/pkg) */
|
|
5902
5907
|
const NPM_PACKAGE_RE = /^(?:@[a-z0-9._-]+\/)?[a-z0-9._-]+$/;
|
|
5903
5908
|
/** npm 全局安装命令(官方 README 格式,如 `npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui`)——
|
|
5904
|
-
* 提取 -g 之后的包列表;任一包名非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf
|
|
5909
|
+
* 提取 -g 之后的包列表;任一包名非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf 规则一致。 */
|
|
5905
5910
|
const NPM_GLOBAL_CMD_RE = /^npm\s+(?:install|i)\s+(?:-g|--global)\s+(.+)$/i;
|
|
5906
5911
|
/** 常规 npm/pnpm 安装命令(装进当前 profile,如 `npm install lodash`、`pnpm add @scope/pkg`)——
|
|
5907
5912
|
* 提取命令后的包列表;包列表在 splitPackages 里逐个校验。 */
|
|
5908
5913
|
const NPM_INSTALL_CMD_RE = /^(?:npm\s+(?:install|i)|pnpm\s+(?:add|i|install))\s+(.+)$/i;
|
|
5909
5914
|
/** 空格分隔的包列表:逐个按 npm 包名语法校验 + 拒绝以 - 开头的 token(npm 会把 --xxx 当参数而非包名),
|
|
5910
|
-
* 任一非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf
|
|
5915
|
+
* 任一非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf 同一套规则。 */
|
|
5911
5916
|
function splitPackages(raw) {
|
|
5912
5917
|
const packages = raw.trim().split(/\s+/).filter((p) => p !== "");
|
|
5913
5918
|
if (packages.length === 0 || packages.some((p) => !NPM_PACKAGE_RE.test(p) || p.startsWith("-"))) return null;
|
|
@@ -6038,30 +6043,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6038
6043
|
css: css$5
|
|
6039
6044
|
});
|
|
6040
6045
|
var SettingsView_module_css_default = {
|
|
6041
|
-
"
|
|
6046
|
+
"navIcon": "_506LLG_navIcon",
|
|
6042
6047
|
"proxyHint": "_506LLG_proxyHint",
|
|
6043
|
-
"
|
|
6048
|
+
"navItem": "_506LLG_navItem",
|
|
6049
|
+
"pageTitle": "_506LLG_pageTitle",
|
|
6050
|
+
"content": "_506LLG_content",
|
|
6051
|
+
"pageDesc": "_506LLG_pageDesc",
|
|
6052
|
+
"textInput": "_506LLG_textInput",
|
|
6044
6053
|
"card": "_506LLG_card",
|
|
6054
|
+
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
6055
|
+
"proxyControl": "_506LLG_proxyControl",
|
|
6056
|
+
"settingDesc": "_506LLG_settingDesc",
|
|
6045
6057
|
"pageHeader": "_506LLG_pageHeader",
|
|
6058
|
+
"controlDropdown": "_506LLG_controlDropdown",
|
|
6046
6059
|
"settingControlStack": "_506LLG_settingControlStack",
|
|
6047
|
-
"
|
|
6048
|
-
"proxyControl": "_506LLG_proxyControl",
|
|
6049
|
-
"sidebar": "_506LLG_sidebar",
|
|
6050
|
-
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
6051
|
-
"settingRowStack": "_506LLG_settingRowStack",
|
|
6060
|
+
"root": "_506LLG_root",
|
|
6052
6061
|
"settingTitle": "_506LLG_settingTitle",
|
|
6062
|
+
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
6053
6063
|
"settingControl": "_506LLG_settingControl",
|
|
6054
6064
|
"resetBtn": "_506LLG_resetBtn",
|
|
6055
|
-
"content": "_506LLG_content",
|
|
6056
|
-
"controlDropdown": "_506LLG_controlDropdown",
|
|
6057
|
-
"navIcon": "_506LLG_navIcon",
|
|
6058
6065
|
"navItemActive": "_506LLG_navItemActive",
|
|
6059
|
-
"navItem": "_506LLG_navItem",
|
|
6060
|
-
"pageDesc": "_506LLG_pageDesc",
|
|
6061
6066
|
"settingRow": "_506LLG_settingRow",
|
|
6062
|
-
"
|
|
6067
|
+
"settingRowStack": "_506LLG_settingRowStack",
|
|
6063
6068
|
"settingLabel": "_506LLG_settingLabel",
|
|
6064
|
-
"
|
|
6069
|
+
"sidebar": "_506LLG_sidebar"
|
|
6065
6070
|
};
|
|
6066
6071
|
//#endregion
|
|
6067
6072
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
@@ -6080,18 +6085,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6080
6085
|
css: css$4
|
|
6081
6086
|
});
|
|
6082
6087
|
var Dropdown_module_css_default = {
|
|
6088
|
+
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
6089
|
+
"dropdown": "B_Gxsq_dropdown",
|
|
6090
|
+
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
6091
|
+
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
6092
|
+
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
6083
6093
|
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
6084
6094
|
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
6085
6095
|
"dropdownPanel": "B_Gxsq_dropdownPanel",
|
|
6086
|
-
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
6087
|
-
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
6088
|
-
"dropdown": "B_Gxsq_dropdown",
|
|
6089
|
-
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
6090
|
-
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
6091
6096
|
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
6092
|
-
"
|
|
6093
|
-
"
|
|
6094
|
-
"
|
|
6097
|
+
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
6098
|
+
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
6099
|
+
"dropdownItem": "B_Gxsq_dropdownItem"
|
|
6095
6100
|
};
|
|
6096
6101
|
//#endregion
|
|
6097
6102
|
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
@@ -6110,8 +6115,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6110
6115
|
css: css$3
|
|
6111
6116
|
});
|
|
6112
6117
|
var Toggle_module_css_default = {
|
|
6113
|
-
"toggleOn": "k-cD4G_toggleOn",
|
|
6114
6118
|
"knob": "k-cD4G_knob",
|
|
6119
|
+
"toggleOn": "k-cD4G_toggleOn",
|
|
6115
6120
|
"toggle": "k-cD4G_toggle"
|
|
6116
6121
|
};
|
|
6117
6122
|
//#endregion
|
|
@@ -6209,29 +6214,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6209
6214
|
css: css$2
|
|
6210
6215
|
});
|
|
6211
6216
|
var DiagnosticsView_module_css_default = {
|
|
6212
|
-
"
|
|
6213
|
-
"
|
|
6214
|
-
"summary": "k9eRya_summary",
|
|
6215
|
-
"runBtn": "k9eRya_runBtn",
|
|
6216
|
-
"envRow": "k9eRya_envRow",
|
|
6217
|
-
"display": "k9eRya_display",
|
|
6218
|
-
"envDesc": "k9eRya_envDesc",
|
|
6219
|
-
"summaryRunning": "k9eRya_summaryRunning",
|
|
6220
|
-
"meta": "k9eRya_meta",
|
|
6221
|
-
"badge": "k9eRya_badge",
|
|
6222
|
-
"row": "k9eRya_row",
|
|
6217
|
+
"envLabel": "k9eRya_envLabel",
|
|
6218
|
+
"envTitle": "k9eRya_envTitle",
|
|
6223
6219
|
"name": "k9eRya_name",
|
|
6224
|
-
"badgeFail": "k9eRya_badgeFail",
|
|
6225
6220
|
"diagPulse": "k9eRya_diagPulse",
|
|
6226
|
-
"
|
|
6221
|
+
"envRow": "k9eRya_envRow",
|
|
6222
|
+
"meta": "k9eRya_meta",
|
|
6227
6223
|
"summaryFail": "k9eRya_summaryFail",
|
|
6228
|
-
"
|
|
6224
|
+
"runBtn": "k9eRya_runBtn",
|
|
6225
|
+
"row": "k9eRya_row",
|
|
6226
|
+
"badgeRunning": "k9eRya_badgeRunning",
|
|
6227
|
+
"summary": "k9eRya_summary",
|
|
6228
|
+
"summaryRunning": "k9eRya_summaryRunning",
|
|
6229
6229
|
"headHint": "k9eRya_headHint",
|
|
6230
|
-
"
|
|
6231
|
-
"
|
|
6232
|
-
"
|
|
6230
|
+
"envDesc": "k9eRya_envDesc",
|
|
6231
|
+
"badgeIdle": "k9eRya_badgeIdle",
|
|
6232
|
+
"head": "k9eRya_head",
|
|
6233
|
+
"badge": "k9eRya_badge",
|
|
6234
|
+
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
6235
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
6233
6236
|
"badgeOk": "k9eRya_badgeOk",
|
|
6234
|
-
"
|
|
6237
|
+
"display": "k9eRya_display",
|
|
6238
|
+
"summaryOk": "k9eRya_summaryOk",
|
|
6239
|
+
"panel": "k9eRya_panel"
|
|
6235
6240
|
};
|
|
6236
6241
|
//#endregion
|
|
6237
6242
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -6406,57 +6411,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6406
6411
|
css: css$1
|
|
6407
6412
|
});
|
|
6408
6413
|
var LogsView_module_css_default = {
|
|
6409
|
-
"
|
|
6410
|
-
"
|
|
6411
|
-
"
|
|
6414
|
+
"footPath": "_3j77BW_footPath",
|
|
6415
|
+
"more": "_3j77BW_more",
|
|
6416
|
+
"event": "_3j77BW_event",
|
|
6417
|
+
"badgeInfo": "_3j77BW_badgeInfo",
|
|
6412
6418
|
"actions": "_3j77BW_actions",
|
|
6419
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
6420
|
+
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
6421
|
+
"time": "_3j77BW_time",
|
|
6422
|
+
"search": "_3j77BW_search",
|
|
6423
|
+
"catBadge": "_3j77BW_catBadge",
|
|
6424
|
+
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
6425
|
+
"filterChipActive": "_3j77BW_filterChipActive",
|
|
6426
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
6413
6427
|
"pathDraft": "_3j77BW_pathDraft",
|
|
6414
|
-
"
|
|
6415
|
-
"
|
|
6428
|
+
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
6429
|
+
"catSettings": "_3j77BW_catSettings",
|
|
6430
|
+
"panel": "_3j77BW_panel",
|
|
6416
6431
|
"entry": "_3j77BW_entry",
|
|
6417
|
-
"
|
|
6418
|
-
"
|
|
6419
|
-
"
|
|
6420
|
-
"
|
|
6421
|
-
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
6432
|
+
"headActions": "_3j77BW_headActions",
|
|
6433
|
+
"catSystem": "_3j77BW_catSystem",
|
|
6434
|
+
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
6435
|
+
"pathRow": "_3j77BW_pathRow",
|
|
6422
6436
|
"footCount": "_3j77BW_footCount",
|
|
6423
|
-
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
6424
|
-
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
6425
|
-
"badgeError": "_3j77BW_badgeError",
|
|
6426
6437
|
"badgeWarn": "_3j77BW_badgeWarn",
|
|
6427
|
-
"head": "_3j77BW_head",
|
|
6428
|
-
"logList": "_3j77BW_logList",
|
|
6429
|
-
"badgeDebug": "_3j77BW_badgeDebug",
|
|
6430
|
-
"catSettings": "_3j77BW_catSettings",
|
|
6431
|
-
"badge": "_3j77BW_badge",
|
|
6432
6438
|
"empty": "_3j77BW_empty",
|
|
6433
|
-
"
|
|
6434
|
-
"
|
|
6439
|
+
"list": "_3j77BW_list",
|
|
6440
|
+
"head": "_3j77BW_head",
|
|
6441
|
+
"footFail": "_3j77BW_footFail",
|
|
6442
|
+
"filterBar": "_3j77BW_filterBar",
|
|
6435
6443
|
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
6436
|
-
"
|
|
6437
|
-
"
|
|
6438
|
-
"
|
|
6439
|
-
"
|
|
6440
|
-
"badgeInfo": "_3j77BW_badgeInfo",
|
|
6441
|
-
"panel": "_3j77BW_panel",
|
|
6444
|
+
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
6445
|
+
"clearBtn": "_3j77BW_clearBtn",
|
|
6446
|
+
"headHint": "_3j77BW_headHint",
|
|
6447
|
+
"pathText": "_3j77BW_pathText",
|
|
6442
6448
|
"catInstall": "_3j77BW_catInstall",
|
|
6443
|
-
"catSystem": "_3j77BW_catSystem",
|
|
6444
|
-
"catUpdate": "_3j77BW_catUpdate",
|
|
6445
|
-
"linkBtn": "_3j77BW_linkBtn",
|
|
6446
|
-
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
6447
6449
|
"message": "_3j77BW_message",
|
|
6448
|
-
"filterBar": "_3j77BW_filterBar",
|
|
6449
|
-
"footActions": "_3j77BW_footActions",
|
|
6450
|
-
"search": "_3j77BW_search",
|
|
6451
|
-
"previewRow": "_3j77BW_previewRow",
|
|
6452
|
-
"catBadge": "_3j77BW_catBadge",
|
|
6453
|
-
"clearBtn": "_3j77BW_clearBtn",
|
|
6454
|
-
"catUninstall": "_3j77BW_catUninstall",
|
|
6455
6450
|
"foot": "_3j77BW_foot",
|
|
6456
|
-
"searchInput": "_3j77BW_searchInput",
|
|
6457
|
-
"pathText": "_3j77BW_pathText",
|
|
6458
6451
|
"pathDialog": "_3j77BW_pathDialog",
|
|
6459
|
-
"
|
|
6452
|
+
"filterChip": "_3j77BW_filterChip",
|
|
6453
|
+
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
6454
|
+
"btn": "_3j77BW_btn",
|
|
6455
|
+
"searchInput": "_3j77BW_searchInput",
|
|
6456
|
+
"logList": "_3j77BW_logList",
|
|
6457
|
+
"footActions": "_3j77BW_footActions",
|
|
6458
|
+
"badgeDebug": "_3j77BW_badgeDebug",
|
|
6459
|
+
"moreEnd": "_3j77BW_moreEnd",
|
|
6460
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
6461
|
+
"linkBtn": "_3j77BW_linkBtn",
|
|
6462
|
+
"badge": "_3j77BW_badge",
|
|
6463
|
+
"previewRow": "_3j77BW_previewRow",
|
|
6464
|
+
"badgeError": "_3j77BW_badgeError"
|
|
6460
6465
|
};
|
|
6461
6466
|
//#endregion
|
|
6462
6467
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -6817,7 +6822,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6817
6822
|
setSaving(false);
|
|
6818
6823
|
}
|
|
6819
6824
|
};
|
|
6820
|
-
/**
|
|
6825
|
+
/** 选择目录:系统对话框从默认位置打开,选中路径填入输入框(仍可手改)。 */
|
|
6821
6826
|
const browse = async () => {
|
|
6822
6827
|
if (browsing) return;
|
|
6823
6828
|
setBrowsing(true);
|
|
@@ -7015,7 +7020,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7015
7020
|
*
|
|
7016
7021
|
* 各分组对应本地服务端实际强制的行为:
|
|
7017
7022
|
* 更新与源 —— 启动检查更新 / npm 镜像 / HTTP 代理(都接进安装命令链路)
|
|
7018
|
-
* 安全与信任 —— 受限的自定义安装(服务端 403
|
|
7023
|
+
* 安全与信任 —— 受限的自定义安装(服务端 403 拦截)
|
|
7019
7024
|
* 诊断 —— 实时连通性探测 + 环境快照
|
|
7020
7025
|
* 日志 —— 系统日志查看器 + 存放位置
|
|
7021
7026
|
*/
|
|
@@ -7295,10 +7300,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7295
7300
|
const [confirmPlugin, setConfirmPlugin] = (0, react.useState)(null);
|
|
7296
7301
|
/** 弹窗动作是否为「更新」:已安装插件点「更新」→ 走同一条 add 命令原位覆盖重装,文案区分安装/更新 */
|
|
7297
7302
|
const [confirmIsUpdate, setConfirmIsUpdate] = (0, react.useState)(false);
|
|
7298
|
-
/**
|
|
7299
|
-
*
|
|
7303
|
+
/** 安装要锁定的精确版本:自我更新提示的版本、新安装的已过冷却期版本都要锁定,
|
|
7304
|
+
* 否则 @latest 会被 pnpm 带回冷却期内的旧版。 */
|
|
7300
7305
|
const [confirmPinVersion, setConfirmPinVersion] = (0, react.useState)(null);
|
|
7301
|
-
/**
|
|
7306
|
+
/** 冷却期查询的进行中序号:只采用最后一次弹窗的查询结果,避免切换插件后旧结果覆盖 */
|
|
7302
7307
|
const installPinSeq = (0, react.useRef)(0);
|
|
7303
7308
|
/** 命令行安装确认弹窗:记录待安装的裸目标(npm 包名)——
|
|
7304
7309
|
* 与应用商店同一套确认/进度/结果弹窗,提供时 plugin 传 null 走 customTarget 模式 */
|
|
@@ -7325,12 +7330,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7325
7330
|
/** 安装/卸载完成后的结果视图:停留弹窗内,点「完成」关闭 */
|
|
7326
7331
|
const [installDone, setInstallDone] = (0, react.useState)(false);
|
|
7327
7332
|
const [uninstallDone, setUninstallDone] = (0, react.useState)(false);
|
|
7328
|
-
/**
|
|
7329
|
-
*
|
|
7333
|
+
/** 结果视图是否给「立即重启」:服务端任务终态带出。仅刷新解决不了的例外场景
|
|
7334
|
+
* (热加载失败 / 非 dsh 插件 / 更新)为 true;其余(热加载成功、卸载已即时停用)为 false,
|
|
7330
7335
|
* 结果视图只给「完成」,关闭时自动刷新页面生效 */
|
|
7331
7336
|
const [installNeedsRestart, setInstallNeedsRestart] = (0, react.useState)(false);
|
|
7332
7337
|
const [uninstallNeedsRestart, setUninstallNeedsRestart] = (0, react.useState)(false);
|
|
7333
|
-
/**
|
|
7338
|
+
/** 结果视图是否显示「关闭后自动刷新」说明:插件已热加载进运行中 loader(安装)、或卸载后
|
|
7334
7339
|
* 插件面板仍残留在当前页面(卸载)。关闭弹窗即整页刷新,不给手动刷新按钮。 */
|
|
7335
7340
|
const [installNeedsReload, setInstallNeedsReload] = (0, react.useState)(false);
|
|
7336
7341
|
/** 市场自更新成功、但 profile 的 bundle 列表里已不含 dsh-plugin:结果页提示重新勾选 */
|
|
@@ -7420,7 +7425,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7420
7425
|
});
|
|
7421
7426
|
setNotifications(addFailure({
|
|
7422
7427
|
kind,
|
|
7423
|
-
action: update ? "update" : "install",
|
|
7428
|
+
action: update ? "update" : kind === "uninstall" ? "uninstall" : "install",
|
|
7424
7429
|
repo: repo ?? "",
|
|
7425
7430
|
message,
|
|
7426
7431
|
command,
|
|
@@ -7512,7 +7517,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7512
7517
|
const timer = window.setTimeout(() => setToast(null), 2400);
|
|
7513
7518
|
return () => window.clearTimeout(timer);
|
|
7514
7519
|
}, [toast]);
|
|
7515
|
-
/** 复制文本到剪贴板,返回是否成功(Clipboard API + 隐藏 textarea
|
|
7520
|
+
/** 复制文本到剪贴板,返回是否成功(Clipboard API + 隐藏 textarea 作为后备)。 */
|
|
7516
7521
|
const doCopy = async (text) => {
|
|
7517
7522
|
try {
|
|
7518
7523
|
await navigator.clipboard.writeText(text);
|
|
@@ -7534,7 +7539,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7534
7539
|
return ok;
|
|
7535
7540
|
}
|
|
7536
7541
|
};
|
|
7537
|
-
/** 命令行安装目标是否已安装(与服务端 already
|
|
7542
|
+
/** 命令行安装目标是否已安装(与服务端 already 判定同一套规则):GitHub 地址按仓库身份匹配
|
|
7538
7543
|
* (归一化后比对已装项的 repo/spec),npm 包名按依赖 key 直查。命中 → 弹窗转「更新」语义
|
|
7539
7544
|
* (mode=update 放行覆盖重装),避免重复点击撞 409 报错。 */
|
|
7540
7545
|
const customTargetInstalled = (raw) => {
|
|
@@ -7561,8 +7566,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7561
7566
|
}
|
|
7562
7567
|
setConfirmPlugin(null);
|
|
7563
7568
|
};
|
|
7564
|
-
/** 新安装先查「已过 pnpm
|
|
7565
|
-
* 否则 pnpm 会把发布未满 24h
|
|
7569
|
+
/** 新安装先查「已过 pnpm 发布冷却期」的版本:命令条与执行都锁定它,
|
|
7570
|
+
* 否则 pnpm 会把发布未满 24h 的最新版不提示地回退成很旧的版本。查不到则不锁定,由服务端再解析一次。 */
|
|
7566
7571
|
const resolveInstallPin = (p) => {
|
|
7567
7572
|
if (p.install?.command !== void 0 && p.install.command !== "") return;
|
|
7568
7573
|
const pkg = installTargetOf(p);
|
|
@@ -7592,7 +7597,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7592
7597
|
});
|
|
7593
7598
|
};
|
|
7594
7599
|
/** 「立即重启」:POST 同源 /restart,宿主进程自杀重启;随后轮询服务恢复后整页刷新。
|
|
7595
|
-
*
|
|
7600
|
+
* 只在刷新解决不了的例外场景(热加载失败 / 非 dsh 插件 / 更新)出现。
|
|
7596
7601
|
* 桌面端宿主归应用壳管(服务端回 `desktop: true` 且不重启):不轮询,改提示退出重开。 */
|
|
7597
7602
|
const requestRestart = async () => {
|
|
7598
7603
|
if (restarting) return;
|
|
@@ -7749,7 +7754,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7749
7754
|
openSection: settingsSection,
|
|
7750
7755
|
onConsumedOpenSection: () => setSettingsSection(null)
|
|
7751
7756
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
7752
|
-
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.3.
|
|
7757
|
+
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.3.3" },
|
|
7753
7758
|
state: catalog.hubUpdateState,
|
|
7754
7759
|
currentVersion: catalog.hubCurrentVersion,
|
|
7755
7760
|
lang,
|