dsh-plugin 2.3.2 → 2.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +3 -9
- package/README.md +3 -9
- package/client/client.js +371 -364
- 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 +6 -4
- 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
|
-
"
|
|
936
|
-
"adText": "qikqja_adText",
|
|
937
|
-
"adArrow": "qikqja_adArrow",
|
|
935
|
+
"githubIcon": "qikqja_githubIcon",
|
|
938
936
|
"root": "qikqja_root",
|
|
939
|
-
"segBtnActive": "qikqja_segBtnActive",
|
|
940
|
-
"header": "qikqja_header",
|
|
941
|
-
"versionBtn": "qikqja_versionBtn",
|
|
942
937
|
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
943
|
-
"
|
|
944
|
-
"githubIcon": "qikqja_githubIcon",
|
|
945
|
-
"resultCount": "qikqja_resultCount",
|
|
946
|
-
"search": "qikqja_search",
|
|
947
|
-
"controls": "qikqja_controls",
|
|
948
|
-
"tabs": "qikqja_tabs",
|
|
938
|
+
"adText": "qikqja_adText",
|
|
949
939
|
"segGroup": "qikqja_segGroup",
|
|
940
|
+
"adBadge": "qikqja_adBadge",
|
|
941
|
+
"versionBtn": "qikqja_versionBtn",
|
|
942
|
+
"headerRight": "qikqja_headerRight",
|
|
950
943
|
"segBtn": "qikqja_segBtn",
|
|
944
|
+
"tabCount": "qikqja_tabCount",
|
|
951
945
|
"resultSeg": "qikqja_resultSeg",
|
|
952
|
-
"
|
|
946
|
+
"brandTitle": "qikqja_brandTitle",
|
|
947
|
+
"resultCount": "qikqja_resultCount",
|
|
953
948
|
"version": "qikqja_version",
|
|
954
|
-
"tagline": "qikqja_tagline",
|
|
955
949
|
"searchRow": "qikqja_searchRow",
|
|
956
|
-
"
|
|
957
|
-
"
|
|
958
|
-
"
|
|
959
|
-
"
|
|
960
|
-
"
|
|
961
|
-
"
|
|
950
|
+
"langBtn": "qikqja_langBtn",
|
|
951
|
+
"controls": "qikqja_controls",
|
|
952
|
+
"githubLink": "qikqja_githubLink",
|
|
953
|
+
"tagline": "qikqja_tagline",
|
|
954
|
+
"segLabel": "qikqja_segLabel",
|
|
955
|
+
"segBtnActive": "qikqja_segBtnActive",
|
|
962
956
|
"sortGroup": "qikqja_sortGroup",
|
|
957
|
+
"adArrow": "qikqja_adArrow",
|
|
958
|
+
"search": "qikqja_search",
|
|
959
|
+
"logoIcon": "qikqja_logoIcon",
|
|
960
|
+
"copyIcon": "qikqja_copyIcon",
|
|
963
961
|
"adBanner": "qikqja_adBanner",
|
|
964
|
-
"taglineLink": "qikqja_taglineLink",
|
|
965
|
-
"githubLink": "qikqja_githubLink",
|
|
966
|
-
"headerRight": "qikqja_headerRight",
|
|
967
962
|
"tabsRow": "qikqja_tabsRow",
|
|
963
|
+
"tabs": "qikqja_tabs",
|
|
964
|
+
"title": "qikqja_title",
|
|
965
|
+
"tabActive": "qikqja_tabActive",
|
|
966
|
+
"tab": "qikqja_tab",
|
|
967
|
+
"header": "qikqja_header",
|
|
968
968
|
"headerTitleRow": "qikqja_headerTitleRow",
|
|
969
|
-
"
|
|
970
|
-
"
|
|
969
|
+
"aboutBtn": "qikqja_aboutBtn",
|
|
970
|
+
"taglineLink": "qikqja_taglineLink"
|
|
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
|
+
"progressText": "BiQ1zG_progressText",
|
|
990
|
+
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
991
|
+
"linkIcon": "BiQ1zG_linkIcon",
|
|
992
|
+
"noticeRow": "BiQ1zG_noticeRow",
|
|
993
|
+
"modalHead": "BiQ1zG_modalHead",
|
|
989
994
|
"resultTitle": "BiQ1zG_resultTitle",
|
|
990
995
|
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
991
|
-
"
|
|
992
|
-
"
|
|
993
|
-
"
|
|
994
|
-
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
995
|
-
"progressHead": "BiQ1zG_progressHead",
|
|
996
|
-
"failCopy": "BiQ1zG_failCopy",
|
|
997
|
-
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
998
|
-
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
999
|
-
"hubStateLatest": "BiQ1zG_hubStateLatest",
|
|
996
|
+
"toast": "BiQ1zG_toast",
|
|
997
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
998
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
1000
999
|
"restartNow": "BiQ1zG_restartNow",
|
|
1001
|
-
"
|
|
1000
|
+
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
1001
|
+
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
1002
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
1003
|
+
"detailArrow": "BiQ1zG_detailArrow",
|
|
1004
|
+
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
1005
|
+
"modalValue": "BiQ1zG_modalValue",
|
|
1002
1006
|
"logModal": "BiQ1zG_logModal",
|
|
1003
1007
|
"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",
|
|
1011
|
-
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
1012
|
-
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
1013
1008
|
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
1009
|
+
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
1010
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
1011
|
+
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
1012
|
+
"errorTitle": "BiQ1zG_errorTitle",
|
|
1013
|
+
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
1014
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
1015
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
1016
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
1017
|
+
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
1018
|
+
"progressFill": "BiQ1zG_progressFill",
|
|
1014
1019
|
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
1015
|
-
"
|
|
1016
|
-
"
|
|
1017
|
-
"
|
|
1018
|
-
"
|
|
1019
|
-
"
|
|
1020
|
-
"
|
|
1021
|
-
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
1022
|
-
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
1023
|
-
"errorModal": "BiQ1zG_errorModal",
|
|
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",
|
|
1034
|
-
"modalBody": "BiQ1zG_modalBody",
|
|
1035
|
-
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
1036
|
-
"modalCmd": "BiQ1zG_modalCmd",
|
|
1020
|
+
"overlayIn": "BiQ1zG_overlayIn",
|
|
1021
|
+
"resultDesc": "BiQ1zG_resultDesc",
|
|
1022
|
+
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
1023
|
+
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
1024
|
+
"failClear": "BiQ1zG_failClear",
|
|
1025
|
+
"progressHead": "BiQ1zG_progressHead",
|
|
1037
1026
|
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
1038
|
-
"
|
|
1039
|
-
"
|
|
1027
|
+
"bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
|
|
1028
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
1029
|
+
"noticeMain": "BiQ1zG_noticeMain",
|
|
1030
|
+
"hubVersionBar": "BiQ1zG_hubVersionBar",
|
|
1031
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
1040
1032
|
"modalActions": "BiQ1zG_modalActions",
|
|
1033
|
+
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
1034
|
+
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
1035
|
+
"hubVersionNumber": "BiQ1zG_hubVersionNumber",
|
|
1036
|
+
"aboutContent": "BiQ1zG_aboutContent",
|
|
1037
|
+
"detailMono": "BiQ1zG_detailMono",
|
|
1038
|
+
"failRow": "BiQ1zG_failRow",
|
|
1041
1039
|
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
1042
|
-
"
|
|
1043
|
-
"
|
|
1044
|
-
"
|
|
1045
|
-
"
|
|
1046
|
-
"
|
|
1040
|
+
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
1041
|
+
"failRepoLabel": "BiQ1zG_failRepoLabel",
|
|
1042
|
+
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
1043
|
+
"queueRow": "BiQ1zG_queueRow",
|
|
1044
|
+
"result": "BiQ1zG_result",
|
|
1045
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
1046
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
1047
|
+
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
1048
|
+
"hubStateLatest": "BiQ1zG_hubStateLatest",
|
|
1049
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
1047
1050
|
"detailStars": "BiQ1zG_detailStars",
|
|
1051
|
+
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
1052
|
+
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
1053
|
+
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
1054
|
+
"modalLink": "BiQ1zG_modalLink",
|
|
1055
|
+
"hubStateAvailable": "BiQ1zG_hubStateAvailable",
|
|
1056
|
+
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
1057
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
1058
|
+
"trustHint": "BiQ1zG_trustHint",
|
|
1059
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
1060
|
+
"queuedHint": "BiQ1zG_queuedHint",
|
|
1048
1061
|
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
1049
|
-
"
|
|
1062
|
+
"errorBox": "BiQ1zG_errorBox",
|
|
1063
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
1064
|
+
"failCopy": "BiQ1zG_failCopy",
|
|
1065
|
+
"failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
|
|
1066
|
+
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
1050
1067
|
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
1051
|
-
"
|
|
1052
|
-
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
1053
|
-
"queuedHint": "BiQ1zG_queuedHint",
|
|
1054
|
-
"restartLater": "BiQ1zG_restartLater",
|
|
1055
|
-
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
1056
|
-
"toastIn": "BiQ1zG_toastIn",
|
|
1057
|
-
"modalHead": "BiQ1zG_modalHead",
|
|
1068
|
+
"progress": "BiQ1zG_progress",
|
|
1058
1069
|
"hubStateChip": "BiQ1zG_hubStateChip",
|
|
1059
|
-
"
|
|
1060
|
-
"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",
|
|
1070
|
+
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
1068
1071
|
"hubVersionDate": "BiQ1zG_hubVersionDate",
|
|
1069
|
-
"
|
|
1070
|
-
"
|
|
1071
|
-
"
|
|
1072
|
-
"
|
|
1073
|
-
"errorTitle": "BiQ1zG_errorTitle",
|
|
1072
|
+
"noticeHead": "BiQ1zG_noticeHead",
|
|
1073
|
+
"modalClose": "BiQ1zG_modalClose",
|
|
1074
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
1075
|
+
"failRepoUrl": "BiQ1zG_failRepoUrl",
|
|
1074
1076
|
"overlay": "BiQ1zG_overlay",
|
|
1075
|
-
"
|
|
1076
|
-
"
|
|
1077
|
-
"
|
|
1078
|
-
"
|
|
1079
|
-
"
|
|
1080
|
-
"
|
|
1081
|
-
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
1082
|
-
"errorHint": "BiQ1zG_errorHint",
|
|
1083
|
-
"modalRow": "BiQ1zG_modalRow",
|
|
1077
|
+
"hubStatePending": "BiQ1zG_hubStatePending",
|
|
1078
|
+
"detailModal": "BiQ1zG_detailModal",
|
|
1079
|
+
"failRepo": "BiQ1zG_failRepo",
|
|
1080
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
1081
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
1082
|
+
"modalBody": "BiQ1zG_modalBody",
|
|
1084
1083
|
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
1085
|
-
"failHead": "BiQ1zG_failHead",
|
|
1086
|
-
"failRepoUrl": "BiQ1zG_failRepoUrl",
|
|
1087
|
-
"detailLink": "BiQ1zG_detailLink",
|
|
1088
|
-
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
1089
1084
|
"queueSection": "BiQ1zG_queueSection",
|
|
1090
|
-
"modalCancel": "BiQ1zG_modalCancel",
|
|
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",
|
|
1106
|
-
"failRepo": "BiQ1zG_failRepo",
|
|
1107
|
-
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
1108
|
-
"failRepoLabel": "BiQ1zG_failRepoLabel",
|
|
1109
|
-
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
1110
|
-
"detailValue": "BiQ1zG_detailValue",
|
|
1111
|
-
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
1112
|
-
"errorBox": "BiQ1zG_errorBox",
|
|
1113
|
-
"modalInstall": "BiQ1zG_modalInstall",
|
|
1114
1085
|
"modalWide": "BiQ1zG_modalWide",
|
|
1086
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
1087
|
+
"noticeTime": "BiQ1zG_noticeTime",
|
|
1088
|
+
"detailPathText": "BiQ1zG_detailPathText",
|
|
1089
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
1090
|
+
"failList": "BiQ1zG_failList",
|
|
1115
1091
|
"modal": "BiQ1zG_modal",
|
|
1116
|
-
"
|
|
1117
|
-
"
|
|
1118
|
-
"
|
|
1119
|
-
"
|
|
1092
|
+
"errorModal": "BiQ1zG_errorModal",
|
|
1093
|
+
"modalRow": "BiQ1zG_modalRow",
|
|
1094
|
+
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
1095
|
+
"detailDim": "BiQ1zG_detailDim",
|
|
1096
|
+
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
1097
|
+
"modalCmd": "BiQ1zG_modalCmd",
|
|
1098
|
+
"stripCancel": "BiQ1zG_stripCancel",
|
|
1099
|
+
"modalCopy": "BiQ1zG_modalCopy",
|
|
1100
|
+
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
1101
|
+
"detailLink": "BiQ1zG_detailLink",
|
|
1120
1102
|
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
1121
|
-
"
|
|
1122
|
-
"
|
|
1123
|
-
"
|
|
1124
|
-
"
|
|
1125
|
-
"
|
|
1126
|
-
"
|
|
1127
|
-
"
|
|
1128
|
-
"
|
|
1129
|
-
"
|
|
1103
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
1104
|
+
"progressTrack": "BiQ1zG_progressTrack",
|
|
1105
|
+
"resultCheck": "BiQ1zG_resultCheck",
|
|
1106
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
1107
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
1108
|
+
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
1109
|
+
"failHead": "BiQ1zG_failHead",
|
|
1110
|
+
"toastFail": "BiQ1zG_toastFail",
|
|
1111
|
+
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
1112
|
+
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
1113
|
+
"modalIn": "BiQ1zG_modalIn",
|
|
1114
|
+
"modalCancel": "BiQ1zG_modalCancel",
|
|
1115
|
+
"aboutModal": "BiQ1zG_aboutModal",
|
|
1116
|
+
"modalTitle": "BiQ1zG_modalTitle",
|
|
1117
|
+
"failReason": "BiQ1zG_failReason",
|
|
1118
|
+
"modalLabel": "BiQ1zG_modalLabel",
|
|
1119
|
+
"restartLater": "BiQ1zG_restartLater",
|
|
1120
|
+
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
1121
|
+
"failKind": "BiQ1zG_failKind",
|
|
1122
|
+
"failKindTitle": "BiQ1zG_failKindTitle",
|
|
1123
|
+
"modalInstall": "BiQ1zG_modalInstall",
|
|
1124
|
+
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
1125
|
+
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
1126
|
+
"detailLabel": "BiQ1zG_detailLabel",
|
|
1127
|
+
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
1128
|
+
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
1129
|
+
"failNetworkTarget": "BiQ1zG_failNetworkTarget"
|
|
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.4";
|
|
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.4";
|
|
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) {
|
|
@@ -2655,9 +2654,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2655
2654
|
/**
|
|
2656
2655
|
* 失败弹窗里仓库地址的跳转目标:官网详情页(含插件收录信息),
|
|
2657
2656
|
* 与 issue 正文的 Catalog 链接同一形式(单级 /plugins/{repo})。
|
|
2657
|
+
* 官网静态导出只生成全小写路径,GitHub 仓库名大小写不敏感,这里统一转小写,
|
|
2658
|
+
* 否则 HuaGuoXingKong/dsh-prompt-rewriter 这类仓库的链接会落到 404。
|
|
2658
2659
|
*/
|
|
2659
2660
|
function pluginSiteUrl(repo) {
|
|
2660
|
-
return siteUrl(`plugins/${repo}`);
|
|
2661
|
+
return siteUrl(`plugins/${repo.toLowerCase()}`);
|
|
2661
2662
|
}
|
|
2662
2663
|
/** 错误原因标题(对外英文):点明问题出在哪一侧,便于 issue 列表分流;
|
|
2663
2664
|
* 动作级原因(未分类/超时…)带动作词,卸载失败不写成 install failed。 */
|
|
@@ -2975,7 +2976,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2975
2976
|
/** 待重启列表(服务端内存态 + 本地展示信息补齐);与 queue 一样以 ref 为唯一事实来源。 */
|
|
2976
2977
|
const [pendingRestarts, setPendingRestarts] = (0, react.useState)([]);
|
|
2977
2978
|
const pendingRef = (0, react.useRef)([]);
|
|
2978
|
-
/** 本次会话内安装成功插件的展示信息(目标 → 简介/版本):轮询合并待重启列表时补齐,刷新后由 resolvePending
|
|
2979
|
+
/** 本次会话内安装成功插件的展示信息(目标 → 简介/版本):轮询合并待重启列表时补齐,刷新后由 resolvePending 补上。 */
|
|
2979
2980
|
const pendingInfoRef = (0, react.useRef)(/* @__PURE__ */ new Map());
|
|
2980
2981
|
/** 保持最新的 resolvePending:轮询闭包捕获的是调用那一刻的目录状态,目录晚加载时也能补齐。 */
|
|
2981
2982
|
const resolvePendingRef = (0, react.useRef)(resolvePending);
|
|
@@ -2986,12 +2987,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2986
2987
|
const settlingRef = (0, react.useRef)(/* @__PURE__ */ new Set());
|
|
2987
2988
|
/** 轮询定时器句柄(队列清空/组件卸载时清理) */
|
|
2988
2989
|
const pollRef = (0, react.useRef)(null);
|
|
2989
|
-
/**
|
|
2990
|
+
/** 请求还没返回的目标集合(同步防重):双击安装/卸载时第二击直接忽略。
|
|
2990
2991
|
* 本地队列任务要等 fetch 返回后才入队,仅靠 queueRef 检查拦不住请求窗口内的重复点击。 */
|
|
2991
2992
|
const submittingRef = (0, react.useRef)(/* @__PURE__ */ new Set());
|
|
2992
2993
|
/** 乐观入队临时 id 计数器:递减产生唯一负数,与服务端自增正数 id 永不冲突。 */
|
|
2993
2994
|
const tempIdRef = (0, react.useRef)(0);
|
|
2994
|
-
/**
|
|
2995
|
+
/** 请求进行中标记:弹窗据此禁用确认按钮,避免等待响应期间被再次点击。 */
|
|
2995
2996
|
const [submitting, setSubmitting] = (0, react.useState)(false);
|
|
2996
2997
|
/** 停止后台任务轮询(任务结束或组件卸载时清理)。 */
|
|
2997
2998
|
const stopPoll = () => {
|
|
@@ -3131,7 +3132,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3131
3132
|
}
|
|
3132
3133
|
}, stepMs);
|
|
3133
3134
|
};
|
|
3134
|
-
/** 任务在 /active 中消失 = 已结束:查 /status 拿终态并收尾(cancelled
|
|
3135
|
+
/** 任务在 /active 中消失 = 已结束:查 /status 拿终态并收尾(cancelled 直接移除)。 */
|
|
3135
3136
|
const settleTask = async (q) => {
|
|
3136
3137
|
let status = "failed";
|
|
3137
3138
|
let lines = [];
|
|
@@ -3369,8 +3370,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3369
3370
|
/** 命令行安装:用户手输 npm 包名,走 custom 源(受安全开关控制)。
|
|
3370
3371
|
* update=true 时对已安装目标放行覆盖重装(与目录插件「更新」同一语义)。
|
|
3371
3372
|
* channel=入口渠道(NPM 包卡片):上报服务端落日志,失败弹窗/通知据此精准溯源。
|
|
3372
|
-
* 队列展示/防重一律用归一化身份:与服务端 /active
|
|
3373
|
-
* npm
|
|
3373
|
+
* 队列展示/防重一律用归一化身份:与服务端 /active 合并、弹窗目标匹配同一套规则,
|
|
3374
|
+
* npm 包名原样传递不受影响。 */
|
|
3374
3375
|
const installCustom = async (raw, opts) => {
|
|
3375
3376
|
const target = raw.trim();
|
|
3376
3377
|
if (!target) return;
|
|
@@ -3385,7 +3386,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3385
3386
|
});
|
|
3386
3387
|
};
|
|
3387
3388
|
/** 全局 npm 安装(官方 README 的 `npm install -g <pkgs>`):不进任何 profile、无需宿主重启。
|
|
3388
|
-
* 队列展示/防重用包列表空格拼接的身份(与服务端 target
|
|
3389
|
+
* 队列展示/防重用包列表空格拼接的身份(与服务端 target 同一套规则);入口渠道固定为 npm(NPM 包卡片)。 */
|
|
3389
3390
|
const installGlobalNpm = async (pkgs, opts) => {
|
|
3390
3391
|
const list = (pkgs ?? []).map((p) => p.trim()).filter((p) => p !== "");
|
|
3391
3392
|
if (list.length === 0) return;
|
|
@@ -3421,6 +3422,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3421
3422
|
});
|
|
3422
3423
|
const data = await res.json();
|
|
3423
3424
|
if (!data.ok || typeof data.task !== "number") {
|
|
3425
|
+
if (res.status === 400 && data.error === "plugin is not installed") {
|
|
3426
|
+
refreshInstalled();
|
|
3427
|
+
clearInstalledVersion(repo);
|
|
3428
|
+
onUninstallDone(false, repo, false, false);
|
|
3429
|
+
return;
|
|
3430
|
+
}
|
|
3424
3431
|
onError(data.error || `HTTP ${res.status}`, repo, "uninstall");
|
|
3425
3432
|
return;
|
|
3426
3433
|
}
|
|
@@ -4014,9 +4021,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4014
4021
|
*/
|
|
4015
4022
|
/** 完成结果视图:绿色对勾 + 标题/描述;
|
|
4016
4023
|
* 终态只有两种:
|
|
4017
|
-
* - needsRestart=true
|
|
4024
|
+
* - needsRestart=true(刷新解决不了:热加载失败 / 非 dsh 插件 / 更新)→ 仅一个「立即重启」
|
|
4018
4025
|
* 按钮(重启会中断进行中的任务,故仍需用户确认),关闭即放弃;
|
|
4019
|
-
* - 其余(含 needsReload=true
|
|
4026
|
+
* - 其余(含 needsReload=true 的「已热加载、仅剩客户端 UI」)→ 仅「完成」按钮:关闭结果弹窗时
|
|
4020
4027
|
* 上层自动刷新页面让插件生效,不再给「稍后/立即刷新」手动选择。 */
|
|
4021
4028
|
function ResultView({ title, desc, t, restarting, needsRestart, needsReload, bundleDeselected, onRestart, onClose }) {
|
|
4022
4029
|
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 +4517,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4510
4517
|
* - 有更新(state='available'):标题「有新版本」,展示新版本号、发布时间与 Worker 下发的
|
|
4511
4518
|
* Markdown 变更记录(renderMarkdown 渲染,双语言按界面语言取 {zh,en} 对象),
|
|
4512
4519
|
* 按钮「稍后再说 / 直接更新」,确认后进入安装弹窗执行覆盖重装。
|
|
4513
|
-
* - 暂缓提示(state='pending'
|
|
4514
|
-
*
|
|
4520
|
+
* - 暂缓提示(state='pending'):远端确有新版本,但发布还不满冷却期,pnpm 此时会
|
|
4521
|
+
* 不提示地回退到旧版本 —— 仍按「有新版本」展示,只给「稍后再说」,并说明稍后会自动提示。
|
|
4515
4522
|
* - 无更新 / 信息缺失(state='latest' / 'none'):标题「当前版本」,版本号与本机版本取自
|
|
4516
4523
|
* currentVersion(构建注入的 PLUGIN_VERSION),**不得**用远端最新版号冒充本机版本。
|
|
4517
4524
|
* 点击头部版本号(或「可更新」徽标)打开 —— 无论有无更新都能看到更新内容。
|
|
@@ -5213,42 +5220,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5213
5220
|
css: css$9
|
|
5214
5221
|
});
|
|
5215
5222
|
var List_module_css_default = {
|
|
5223
|
+
"topics": "_3XaZHa_topics",
|
|
5224
|
+
"card": "_3XaZHa_card",
|
|
5225
|
+
"cardMain": "_3XaZHa_cardMain",
|
|
5226
|
+
"body": "_3XaZHa_body",
|
|
5216
5227
|
"cardBadgeRow": "_3XaZHa_cardBadgeRow",
|
|
5217
|
-
"fork": "_3XaZHa_fork",
|
|
5218
5228
|
"detailBtn": "_3XaZHa_detailBtn",
|
|
5219
|
-
"
|
|
5220
|
-
"
|
|
5229
|
+
"stateTitle": "_3XaZHa_stateTitle",
|
|
5230
|
+
"retryBtn": "_3XaZHa_retryBtn",
|
|
5231
|
+
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
5232
|
+
"cardSide": "_3XaZHa_cardSide",
|
|
5221
5233
|
"footLink": "_3XaZHa_footLink",
|
|
5234
|
+
"star": "_3XaZHa_star",
|
|
5235
|
+
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
5236
|
+
"state": "_3XaZHa_state",
|
|
5237
|
+
"cardTitle": "_3XaZHa_cardTitle",
|
|
5222
5238
|
"verified": "_3XaZHa_verified",
|
|
5239
|
+
"diagBtn": "_3XaZHa_diagBtn",
|
|
5240
|
+
"actions": "_3XaZHa_actions",
|
|
5241
|
+
"updateBadge": "_3XaZHa_updateBadge",
|
|
5223
5242
|
"desc": "_3XaZHa_desc",
|
|
5224
|
-
"
|
|
5225
|
-
"
|
|
5243
|
+
"authorBadge": "_3XaZHa_authorBadge",
|
|
5244
|
+
"topic": "_3XaZHa_topic",
|
|
5245
|
+
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
5226
5246
|
"versionBadge": "_3XaZHa_versionBadge",
|
|
5227
|
-
"
|
|
5228
|
-
"
|
|
5229
|
-
"installBtn": "_3XaZHa_installBtn",
|
|
5230
|
-
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
5231
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
5232
|
-
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
5247
|
+
"list": "_3XaZHa_list",
|
|
5248
|
+
"cardTitleRow": "_3XaZHa_cardTitleRow",
|
|
5233
5249
|
"footer": "_3XaZHa_footer",
|
|
5234
|
-
"topic": "_3XaZHa_topic",
|
|
5235
5250
|
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
5236
|
-
"
|
|
5237
|
-
"state": "_3XaZHa_state",
|
|
5238
|
-
"cardTitleRow": "_3XaZHa_cardTitleRow",
|
|
5239
|
-
"authorBadge": "_3XaZHa_authorBadge",
|
|
5251
|
+
"installBtn": "_3XaZHa_installBtn",
|
|
5240
5252
|
"stateActions": "_3XaZHa_stateActions",
|
|
5241
|
-
"
|
|
5253
|
+
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
5254
|
+
"stateDesc": "_3XaZHa_stateDesc",
|
|
5242
5255
|
"date": "_3XaZHa_date",
|
|
5243
|
-
"
|
|
5256
|
+
"fork": "_3XaZHa_fork",
|
|
5244
5257
|
"stats": "_3XaZHa_stats",
|
|
5245
|
-
"
|
|
5246
|
-
"stateDesc": "_3XaZHa_stateDesc",
|
|
5247
|
-
"star": "_3XaZHa_star",
|
|
5248
|
-
"retryBtn": "_3XaZHa_retryBtn",
|
|
5249
|
-
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
5250
|
-
"actions": "_3XaZHa_actions",
|
|
5251
|
-
"list": "_3XaZHa_list"
|
|
5258
|
+
"uninstallBtn": "_3XaZHa_uninstallBtn"
|
|
5252
5259
|
};
|
|
5253
5260
|
//#endregion
|
|
5254
5261
|
//#region src/client/hooks/useIncrementalList.ts
|
|
@@ -5469,16 +5476,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5469
5476
|
css: css$8
|
|
5470
5477
|
});
|
|
5471
5478
|
var SectionTabs_module_css_default = {
|
|
5479
|
+
"noticeIcon": "_7tvizq_noticeIcon",
|
|
5480
|
+
"noticeCount": "_7tvizq_noticeCount",
|
|
5481
|
+
"noticeBtn": "_7tvizq_noticeBtn",
|
|
5482
|
+
"tabCountActive": "_7tvizq_tabCountActive",
|
|
5472
5483
|
"tabLabel": "_7tvizq_tabLabel",
|
|
5473
5484
|
"tab": "_7tvizq_tab",
|
|
5485
|
+
"tabActive": "_7tvizq_tabActive",
|
|
5474
5486
|
"root": "_7tvizq_root",
|
|
5475
5487
|
"tabIcon": "_7tvizq_tabIcon",
|
|
5476
|
-
"tabCount": "_7tvizq_tabCount"
|
|
5477
|
-
"tabActive": "_7tvizq_tabActive",
|
|
5478
|
-
"noticeBtn": "_7tvizq_noticeBtn",
|
|
5479
|
-
"noticeIcon": "_7tvizq_noticeIcon",
|
|
5480
|
-
"noticeCount": "_7tvizq_noticeCount",
|
|
5481
|
-
"tabCountActive": "_7tvizq_tabCountActive"
|
|
5488
|
+
"tabCount": "_7tvizq_tabCount"
|
|
5482
5489
|
};
|
|
5483
5490
|
//#endregion
|
|
5484
5491
|
//#region src/client/components/layout/SectionTabs.tsx
|
|
@@ -5554,46 +5561,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5554
5561
|
css: css$7
|
|
5555
5562
|
});
|
|
5556
5563
|
var InstalledView_module_css_default = {
|
|
5564
|
+
"searchWrap": "_1nXeGW_searchWrap",
|
|
5565
|
+
"rowRepo": "_1nXeGW_rowRepo",
|
|
5566
|
+
"list": "_1nXeGW_list",
|
|
5567
|
+
"row": "_1nXeGW_row",
|
|
5557
5568
|
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
5558
|
-
"
|
|
5569
|
+
"segGroup": "_1nXeGW_segGroup",
|
|
5559
5570
|
"rowDesc": "_1nXeGW_rowDesc",
|
|
5560
|
-
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
5561
|
-
"statusDot": "_1nXeGW_statusDot",
|
|
5562
|
-
"segRow": "_1nXeGW_segRow",
|
|
5563
5571
|
"rowMain": "_1nXeGW_rowMain",
|
|
5564
|
-
"
|
|
5565
|
-
"
|
|
5566
|
-
"
|
|
5567
|
-
"
|
|
5572
|
+
"versionBadge": "_1nXeGW_versionBadge",
|
|
5573
|
+
"statusInactive": "_1nXeGW_statusInactive",
|
|
5574
|
+
"rowDetail": "_1nXeGW_rowDetail",
|
|
5575
|
+
"exampleRow": "_1nXeGW_exampleRow",
|
|
5576
|
+
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
5577
|
+
"statusDot": "_1nXeGW_statusDot",
|
|
5578
|
+
"rowTitle": "_1nXeGW_rowTitle",
|
|
5579
|
+
"rowMeta": "_1nXeGW_rowMeta",
|
|
5568
5580
|
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
5569
|
-
"rowCategory": "_1nXeGW_rowCategory",
|
|
5570
|
-
"toolbar": "_1nXeGW_toolbar",
|
|
5571
|
-
"searchInput": "_1nXeGW_searchInput",
|
|
5572
|
-
"row": "_1nXeGW_row",
|
|
5573
|
-
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
5574
5581
|
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
5575
|
-
"updateBadge": "_1nXeGW_updateBadge",
|
|
5576
|
-
"rowActions": "_1nXeGW_rowActions",
|
|
5577
5582
|
"rowRestart": "_1nXeGW_rowRestart",
|
|
5578
|
-
"
|
|
5579
|
-
"
|
|
5580
|
-
"
|
|
5581
|
-
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
5582
|
-
"rowTitle": "_1nXeGW_rowTitle",
|
|
5583
|
-
"rowActionLine": "_1nXeGW_rowActionLine",
|
|
5583
|
+
"segLabel": "_1nXeGW_segLabel",
|
|
5584
|
+
"rowStats": "_1nXeGW_rowStats",
|
|
5585
|
+
"rowActions": "_1nXeGW_rowActions",
|
|
5584
5586
|
"segBtn": "_1nXeGW_segBtn",
|
|
5585
|
-
"
|
|
5586
|
-
"
|
|
5587
|
-
"versionBadge": "_1nXeGW_versionBadge",
|
|
5588
|
-
"empty": "_1nXeGW_empty",
|
|
5589
|
-
"rowMeta": "_1nXeGW_rowMeta",
|
|
5587
|
+
"toolbar": "_1nXeGW_toolbar",
|
|
5588
|
+
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
5590
5589
|
"rowStar": "_1nXeGW_rowStar",
|
|
5591
|
-
"
|
|
5592
|
-
"
|
|
5593
|
-
"
|
|
5590
|
+
"root": "_1nXeGW_root",
|
|
5591
|
+
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
5592
|
+
"updateBadge": "_1nXeGW_updateBadge",
|
|
5593
|
+
"statusPending": "_1nXeGW_statusPending",
|
|
5594
|
+
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
5595
|
+
"segRow": "_1nXeGW_segRow",
|
|
5596
|
+
"rowActionLine": "_1nXeGW_rowActionLine",
|
|
5597
|
+
"rowCategory": "_1nXeGW_rowCategory",
|
|
5594
5598
|
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
5599
|
+
"rowFork": "_1nXeGW_rowFork",
|
|
5600
|
+
"searchInput": "_1nXeGW_searchInput",
|
|
5601
|
+
"empty": "_1nXeGW_empty",
|
|
5595
5602
|
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
5596
|
-
"
|
|
5603
|
+
"rowTitleLine": "_1nXeGW_rowTitleLine"
|
|
5597
5604
|
};
|
|
5598
5605
|
//#endregion
|
|
5599
5606
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -5862,27 +5869,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5862
5869
|
css: css$6
|
|
5863
5870
|
});
|
|
5864
5871
|
var CustomInstallView_module_css_default = {
|
|
5872
|
+
"helpLine": "zISxCG_helpLine",
|
|
5873
|
+
"installInput": "zISxCG_installInput",
|
|
5874
|
+
"installCard": "zISxCG_installCard",
|
|
5875
|
+
"installInputError": "zISxCG_installInputError",
|
|
5876
|
+
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
5877
|
+
"installRow": "zISxCG_installRow",
|
|
5878
|
+
"channelOffText": "zISxCG_channelOffText",
|
|
5879
|
+
"helpCmd": "zISxCG_helpCmd",
|
|
5880
|
+
"root": "zISxCG_root",
|
|
5865
5881
|
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
5866
5882
|
"installBtn": "zISxCG_installBtn",
|
|
5883
|
+
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
5884
|
+
"helpBody": "zISxCG_helpBody",
|
|
5867
5885
|
"installCards": "zISxCG_installCards",
|
|
5868
|
-
"installInputError": "zISxCG_installInputError",
|
|
5869
|
-
"installCard": "zISxCG_installCard",
|
|
5870
|
-
"installInput": "zISxCG_installInput",
|
|
5871
|
-
"installError": "zISxCG_installError",
|
|
5872
5886
|
"desc": "zISxCG_desc",
|
|
5887
|
+
"installError": "zISxCG_installError",
|
|
5888
|
+
"helpNote": "zISxCG_helpNote",
|
|
5873
5889
|
"channelOff": "zISxCG_channelOff",
|
|
5874
|
-
"channelOffText": "zISxCG_channelOffText",
|
|
5875
|
-
"root": "zISxCG_root",
|
|
5876
|
-
"installCardHead": "zISxCG_installCardHead",
|
|
5877
5890
|
"installLabel": "zISxCG_installLabel",
|
|
5878
|
-
"
|
|
5879
|
-
"
|
|
5880
|
-
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
5881
|
-
"helpNote": "zISxCG_helpNote",
|
|
5882
|
-
"installRow": "zISxCG_installRow",
|
|
5883
|
-
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
5884
|
-
"helpCmd": "zISxCG_helpCmd",
|
|
5885
|
-
"installExample": "zISxCG_installExample"
|
|
5891
|
+
"installExample": "zISxCG_installExample",
|
|
5892
|
+
"installCardHead": "zISxCG_installCardHead"
|
|
5886
5893
|
};
|
|
5887
5894
|
//#endregion
|
|
5888
5895
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -5901,13 +5908,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5901
5908
|
/** npm 包名(含 @scope/pkg) */
|
|
5902
5909
|
const NPM_PACKAGE_RE = /^(?:@[a-z0-9._-]+\/)?[a-z0-9._-]+$/;
|
|
5903
5910
|
/** npm 全局安装命令(官方 README 格式,如 `npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui`)——
|
|
5904
|
-
* 提取 -g 之后的包列表;任一包名非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf
|
|
5911
|
+
* 提取 -g 之后的包列表;任一包名非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf 规则一致。 */
|
|
5905
5912
|
const NPM_GLOBAL_CMD_RE = /^npm\s+(?:install|i)\s+(?:-g|--global)\s+(.+)$/i;
|
|
5906
5913
|
/** 常规 npm/pnpm 安装命令(装进当前 profile,如 `npm install lodash`、`pnpm add @scope/pkg`)——
|
|
5907
5914
|
* 提取命令后的包列表;包列表在 splitPackages 里逐个校验。 */
|
|
5908
5915
|
const NPM_INSTALL_CMD_RE = /^(?:npm\s+(?:install|i)|pnpm\s+(?:add|i|install))\s+(.+)$/i;
|
|
5909
5916
|
/** 空格分隔的包列表:逐个按 npm 包名语法校验 + 拒绝以 - 开头的 token(npm 会把 --xxx 当参数而非包名),
|
|
5910
|
-
* 任一非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf
|
|
5917
|
+
* 任一非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf 同一套规则。 */
|
|
5911
5918
|
function splitPackages(raw) {
|
|
5912
5919
|
const packages = raw.trim().split(/\s+/).filter((p) => p !== "");
|
|
5913
5920
|
if (packages.length === 0 || packages.some((p) => !NPM_PACKAGE_RE.test(p) || p.startsWith("-"))) return null;
|
|
@@ -6038,30 +6045,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6038
6045
|
css: css$5
|
|
6039
6046
|
});
|
|
6040
6047
|
var SettingsView_module_css_default = {
|
|
6041
|
-
"
|
|
6042
|
-
"
|
|
6043
|
-
"
|
|
6044
|
-
"
|
|
6048
|
+
"content": "_506LLG_content",
|
|
6049
|
+
"settingControl": "_506LLG_settingControl",
|
|
6050
|
+
"pageDesc": "_506LLG_pageDesc",
|
|
6051
|
+
"sidebar": "_506LLG_sidebar",
|
|
6045
6052
|
"pageHeader": "_506LLG_pageHeader",
|
|
6053
|
+
"navIcon": "_506LLG_navIcon",
|
|
6054
|
+
"settingLabel": "_506LLG_settingLabel",
|
|
6046
6055
|
"settingControlStack": "_506LLG_settingControlStack",
|
|
6056
|
+
"settingRow": "_506LLG_settingRow",
|
|
6057
|
+
"pageTitle": "_506LLG_pageTitle",
|
|
6058
|
+
"navItemActive": "_506LLG_navItemActive",
|
|
6059
|
+
"root": "_506LLG_root",
|
|
6047
6060
|
"textInput": "_506LLG_textInput",
|
|
6061
|
+
"navItem": "_506LLG_navItem",
|
|
6048
6062
|
"proxyControl": "_506LLG_proxyControl",
|
|
6049
|
-
"sidebar": "_506LLG_sidebar",
|
|
6050
6063
|
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
6051
|
-
"settingRowStack": "_506LLG_settingRowStack",
|
|
6052
|
-
"settingTitle": "_506LLG_settingTitle",
|
|
6053
|
-
"settingControl": "_506LLG_settingControl",
|
|
6054
|
-
"resetBtn": "_506LLG_resetBtn",
|
|
6055
|
-
"content": "_506LLG_content",
|
|
6056
6064
|
"controlDropdown": "_506LLG_controlDropdown",
|
|
6057
|
-
"
|
|
6058
|
-
"
|
|
6059
|
-
"
|
|
6060
|
-
"
|
|
6061
|
-
"
|
|
6062
|
-
"
|
|
6063
|
-
"
|
|
6064
|
-
"proxyHintOk": "_506LLG_proxyHintOk"
|
|
6065
|
+
"resetBtn": "_506LLG_resetBtn",
|
|
6066
|
+
"settingTitle": "_506LLG_settingTitle",
|
|
6067
|
+
"card": "_506LLG_card",
|
|
6068
|
+
"settingRowStack": "_506LLG_settingRowStack",
|
|
6069
|
+
"proxyHint": "_506LLG_proxyHint",
|
|
6070
|
+
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
6071
|
+
"settingDesc": "_506LLG_settingDesc"
|
|
6065
6072
|
};
|
|
6066
6073
|
//#endregion
|
|
6067
6074
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
@@ -6080,18 +6087,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6080
6087
|
css: css$4
|
|
6081
6088
|
});
|
|
6082
6089
|
var Dropdown_module_css_default = {
|
|
6090
|
+
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
6091
|
+
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
6083
6092
|
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
6084
|
-
"
|
|
6085
|
-
"
|
|
6093
|
+
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
6094
|
+
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
6086
6095
|
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
6087
|
-
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
6088
6096
|
"dropdown": "B_Gxsq_dropdown",
|
|
6097
|
+
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
6098
|
+
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
6089
6099
|
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
6090
|
-
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
6091
6100
|
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
6092
|
-
"
|
|
6093
|
-
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
6094
|
-
"dropdownBtn": "B_Gxsq_dropdownBtn"
|
|
6101
|
+
"dropdownPanel": "B_Gxsq_dropdownPanel"
|
|
6095
6102
|
};
|
|
6096
6103
|
//#endregion
|
|
6097
6104
|
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
@@ -6110,9 +6117,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6110
6117
|
css: css$3
|
|
6111
6118
|
});
|
|
6112
6119
|
var Toggle_module_css_default = {
|
|
6120
|
+
"toggle": "k-cD4G_toggle",
|
|
6113
6121
|
"toggleOn": "k-cD4G_toggleOn",
|
|
6114
|
-
"knob": "k-cD4G_knob"
|
|
6115
|
-
"toggle": "k-cD4G_toggle"
|
|
6122
|
+
"knob": "k-cD4G_knob"
|
|
6116
6123
|
};
|
|
6117
6124
|
//#endregion
|
|
6118
6125
|
//#region src/client/components/ui/Toggle.tsx
|
|
@@ -6209,29 +6216,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6209
6216
|
css: css$2
|
|
6210
6217
|
});
|
|
6211
6218
|
var DiagnosticsView_module_css_default = {
|
|
6212
|
-
"
|
|
6213
|
-
"
|
|
6214
|
-
"
|
|
6219
|
+
"envLabel": "k9eRya_envLabel",
|
|
6220
|
+
"headHint": "k9eRya_headHint",
|
|
6221
|
+
"badgeRunning": "k9eRya_badgeRunning",
|
|
6222
|
+
"summaryRunning": "k9eRya_summaryRunning",
|
|
6223
|
+
"display": "k9eRya_display",
|
|
6224
|
+
"badge": "k9eRya_badge",
|
|
6225
|
+
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
6226
|
+
"envTitle": "k9eRya_envTitle",
|
|
6215
6227
|
"runBtn": "k9eRya_runBtn",
|
|
6216
6228
|
"envRow": "k9eRya_envRow",
|
|
6217
|
-
"display": "k9eRya_display",
|
|
6218
6229
|
"envDesc": "k9eRya_envDesc",
|
|
6219
|
-
"summaryRunning": "k9eRya_summaryRunning",
|
|
6220
|
-
"meta": "k9eRya_meta",
|
|
6221
|
-
"badge": "k9eRya_badge",
|
|
6222
|
-
"row": "k9eRya_row",
|
|
6223
6230
|
"name": "k9eRya_name",
|
|
6224
|
-
"
|
|
6231
|
+
"badgeOk": "k9eRya_badgeOk",
|
|
6225
6232
|
"diagPulse": "k9eRya_diagPulse",
|
|
6226
|
-
"
|
|
6227
|
-
"summaryFail": "k9eRya_summaryFail",
|
|
6228
|
-
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
6229
|
-
"headHint": "k9eRya_headHint",
|
|
6230
|
-
"envLabel": "k9eRya_envLabel",
|
|
6233
|
+
"meta": "k9eRya_meta",
|
|
6231
6234
|
"panel": "k9eRya_panel",
|
|
6232
|
-
"
|
|
6233
|
-
"
|
|
6234
|
-
"
|
|
6235
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
6236
|
+
"head": "k9eRya_head",
|
|
6237
|
+
"summary": "k9eRya_summary",
|
|
6238
|
+
"badgeIdle": "k9eRya_badgeIdle",
|
|
6239
|
+
"row": "k9eRya_row",
|
|
6240
|
+
"summaryFail": "k9eRya_summaryFail",
|
|
6241
|
+
"summaryOk": "k9eRya_summaryOk"
|
|
6235
6242
|
};
|
|
6236
6243
|
//#endregion
|
|
6237
6244
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -6406,57 +6413,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6406
6413
|
css: css$1
|
|
6407
6414
|
});
|
|
6408
6415
|
var LogsView_module_css_default = {
|
|
6416
|
+
"btn": "_3j77BW_btn",
|
|
6417
|
+
"head": "_3j77BW_head",
|
|
6418
|
+
"foot": "_3j77BW_foot",
|
|
6419
|
+
"previewRow": "_3j77BW_previewRow",
|
|
6420
|
+
"catBadge": "_3j77BW_catBadge",
|
|
6421
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
6422
|
+
"message": "_3j77BW_message",
|
|
6423
|
+
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
6424
|
+
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
6425
|
+
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
6409
6426
|
"filterChipActive": "_3j77BW_filterChipActive",
|
|
6410
|
-
"
|
|
6411
|
-
"
|
|
6412
|
-
"actions": "_3j77BW_actions",
|
|
6427
|
+
"footCount": "_3j77BW_footCount",
|
|
6428
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
6413
6429
|
"pathDraft": "_3j77BW_pathDraft",
|
|
6414
|
-
"
|
|
6430
|
+
"filterBar": "_3j77BW_filterBar",
|
|
6431
|
+
"headHint": "_3j77BW_headHint",
|
|
6432
|
+
"badge": "_3j77BW_badge",
|
|
6433
|
+
"footActions": "_3j77BW_footActions",
|
|
6434
|
+
"pathRow": "_3j77BW_pathRow",
|
|
6435
|
+
"catInstall": "_3j77BW_catInstall",
|
|
6436
|
+
"panel": "_3j77BW_panel",
|
|
6437
|
+
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
6438
|
+
"search": "_3j77BW_search",
|
|
6439
|
+
"searchInput": "_3j77BW_searchInput",
|
|
6440
|
+
"pathDialog": "_3j77BW_pathDialog",
|
|
6441
|
+
"badgeInfo": "_3j77BW_badgeInfo",
|
|
6442
|
+
"catSystem": "_3j77BW_catSystem",
|
|
6443
|
+
"empty": "_3j77BW_empty",
|
|
6415
6444
|
"list": "_3j77BW_list",
|
|
6416
|
-
"entry": "_3j77BW_entry",
|
|
6417
6445
|
"footFail": "_3j77BW_footFail",
|
|
6446
|
+
"badgeWarn": "_3j77BW_badgeWarn",
|
|
6418
6447
|
"filterChip": "_3j77BW_filterChip",
|
|
6448
|
+
"clearBtn": "_3j77BW_clearBtn",
|
|
6449
|
+
"actions": "_3j77BW_actions",
|
|
6450
|
+
"time": "_3j77BW_time",
|
|
6451
|
+
"event": "_3j77BW_event",
|
|
6452
|
+
"footPath": "_3j77BW_footPath",
|
|
6453
|
+
"logList": "_3j77BW_logList",
|
|
6454
|
+
"pathText": "_3j77BW_pathText",
|
|
6419
6455
|
"more": "_3j77BW_more",
|
|
6420
|
-
"moreEnd": "_3j77BW_moreEnd",
|
|
6421
|
-
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
6422
|
-
"footCount": "_3j77BW_footCount",
|
|
6423
6456
|
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
6424
|
-
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
6425
6457
|
"badgeError": "_3j77BW_badgeError",
|
|
6426
|
-
"
|
|
6427
|
-
"head": "_3j77BW_head",
|
|
6428
|
-
"logList": "_3j77BW_logList",
|
|
6429
|
-
"badgeDebug": "_3j77BW_badgeDebug",
|
|
6430
|
-
"catSettings": "_3j77BW_catSettings",
|
|
6431
|
-
"badge": "_3j77BW_badge",
|
|
6432
|
-
"empty": "_3j77BW_empty",
|
|
6433
|
-
"headHint": "_3j77BW_headHint",
|
|
6434
|
-
"pathRow": "_3j77BW_pathRow",
|
|
6458
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
6435
6459
|
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
6436
|
-
"time": "_3j77BW_time",
|
|
6437
|
-
"event": "_3j77BW_event",
|
|
6438
|
-
"footPath": "_3j77BW_footPath",
|
|
6439
6460
|
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
6440
|
-
"
|
|
6441
|
-
"
|
|
6442
|
-
"
|
|
6443
|
-
"catSystem": "_3j77BW_catSystem",
|
|
6444
|
-
"catUpdate": "_3j77BW_catUpdate",
|
|
6461
|
+
"moreEnd": "_3j77BW_moreEnd",
|
|
6462
|
+
"badgeDebug": "_3j77BW_badgeDebug",
|
|
6463
|
+
"entry": "_3j77BW_entry",
|
|
6445
6464
|
"linkBtn": "_3j77BW_linkBtn",
|
|
6446
|
-
"
|
|
6447
|
-
"
|
|
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
|
-
"foot": "_3j77BW_foot",
|
|
6456
|
-
"searchInput": "_3j77BW_searchInput",
|
|
6457
|
-
"pathText": "_3j77BW_pathText",
|
|
6458
|
-
"pathDialog": "_3j77BW_pathDialog",
|
|
6459
|
-
"pathDialogHint": "_3j77BW_pathDialogHint"
|
|
6465
|
+
"catSettings": "_3j77BW_catSettings",
|
|
6466
|
+
"headActions": "_3j77BW_headActions"
|
|
6460
6467
|
};
|
|
6461
6468
|
//#endregion
|
|
6462
6469
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -6817,7 +6824,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6817
6824
|
setSaving(false);
|
|
6818
6825
|
}
|
|
6819
6826
|
};
|
|
6820
|
-
/**
|
|
6827
|
+
/** 选择目录:系统对话框从默认位置打开,选中路径填入输入框(仍可手改)。 */
|
|
6821
6828
|
const browse = async () => {
|
|
6822
6829
|
if (browsing) return;
|
|
6823
6830
|
setBrowsing(true);
|
|
@@ -7015,7 +7022,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7015
7022
|
*
|
|
7016
7023
|
* 各分组对应本地服务端实际强制的行为:
|
|
7017
7024
|
* 更新与源 —— 启动检查更新 / npm 镜像 / HTTP 代理(都接进安装命令链路)
|
|
7018
|
-
* 安全与信任 —— 受限的自定义安装(服务端 403
|
|
7025
|
+
* 安全与信任 —— 受限的自定义安装(服务端 403 拦截)
|
|
7019
7026
|
* 诊断 —— 实时连通性探测 + 环境快照
|
|
7020
7027
|
* 日志 —— 系统日志查看器 + 存放位置
|
|
7021
7028
|
*/
|
|
@@ -7295,10 +7302,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7295
7302
|
const [confirmPlugin, setConfirmPlugin] = (0, react.useState)(null);
|
|
7296
7303
|
/** 弹窗动作是否为「更新」:已安装插件点「更新」→ 走同一条 add 命令原位覆盖重装,文案区分安装/更新 */
|
|
7297
7304
|
const [confirmIsUpdate, setConfirmIsUpdate] = (0, react.useState)(false);
|
|
7298
|
-
/**
|
|
7299
|
-
*
|
|
7305
|
+
/** 安装要锁定的精确版本:自我更新提示的版本、新安装的已过冷却期版本都要锁定,
|
|
7306
|
+
* 否则 @latest 会被 pnpm 带回冷却期内的旧版。 */
|
|
7300
7307
|
const [confirmPinVersion, setConfirmPinVersion] = (0, react.useState)(null);
|
|
7301
|
-
/**
|
|
7308
|
+
/** 冷却期查询的进行中序号:只采用最后一次弹窗的查询结果,避免切换插件后旧结果覆盖 */
|
|
7302
7309
|
const installPinSeq = (0, react.useRef)(0);
|
|
7303
7310
|
/** 命令行安装确认弹窗:记录待安装的裸目标(npm 包名)——
|
|
7304
7311
|
* 与应用商店同一套确认/进度/结果弹窗,提供时 plugin 传 null 走 customTarget 模式 */
|
|
@@ -7325,12 +7332,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7325
7332
|
/** 安装/卸载完成后的结果视图:停留弹窗内,点「完成」关闭 */
|
|
7326
7333
|
const [installDone, setInstallDone] = (0, react.useState)(false);
|
|
7327
7334
|
const [uninstallDone, setUninstallDone] = (0, react.useState)(false);
|
|
7328
|
-
/**
|
|
7329
|
-
*
|
|
7335
|
+
/** 结果视图是否给「立即重启」:服务端任务终态带出。仅刷新解决不了的例外场景
|
|
7336
|
+
* (热加载失败 / 非 dsh 插件 / 更新)为 true;其余(热加载成功、卸载已即时停用)为 false,
|
|
7330
7337
|
* 结果视图只给「完成」,关闭时自动刷新页面生效 */
|
|
7331
7338
|
const [installNeedsRestart, setInstallNeedsRestart] = (0, react.useState)(false);
|
|
7332
7339
|
const [uninstallNeedsRestart, setUninstallNeedsRestart] = (0, react.useState)(false);
|
|
7333
|
-
/**
|
|
7340
|
+
/** 结果视图是否显示「关闭后自动刷新」说明:插件已热加载进运行中 loader(安装)、或卸载后
|
|
7334
7341
|
* 插件面板仍残留在当前页面(卸载)。关闭弹窗即整页刷新,不给手动刷新按钮。 */
|
|
7335
7342
|
const [installNeedsReload, setInstallNeedsReload] = (0, react.useState)(false);
|
|
7336
7343
|
/** 市场自更新成功、但 profile 的 bundle 列表里已不含 dsh-plugin:结果页提示重新勾选 */
|
|
@@ -7420,7 +7427,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7420
7427
|
});
|
|
7421
7428
|
setNotifications(addFailure({
|
|
7422
7429
|
kind,
|
|
7423
|
-
action: update ? "update" : "install",
|
|
7430
|
+
action: update ? "update" : kind === "uninstall" ? "uninstall" : "install",
|
|
7424
7431
|
repo: repo ?? "",
|
|
7425
7432
|
message,
|
|
7426
7433
|
command,
|
|
@@ -7512,7 +7519,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7512
7519
|
const timer = window.setTimeout(() => setToast(null), 2400);
|
|
7513
7520
|
return () => window.clearTimeout(timer);
|
|
7514
7521
|
}, [toast]);
|
|
7515
|
-
/** 复制文本到剪贴板,返回是否成功(Clipboard API + 隐藏 textarea
|
|
7522
|
+
/** 复制文本到剪贴板,返回是否成功(Clipboard API + 隐藏 textarea 作为后备)。 */
|
|
7516
7523
|
const doCopy = async (text) => {
|
|
7517
7524
|
try {
|
|
7518
7525
|
await navigator.clipboard.writeText(text);
|
|
@@ -7534,7 +7541,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7534
7541
|
return ok;
|
|
7535
7542
|
}
|
|
7536
7543
|
};
|
|
7537
|
-
/** 命令行安装目标是否已安装(与服务端 already
|
|
7544
|
+
/** 命令行安装目标是否已安装(与服务端 already 判定同一套规则):GitHub 地址按仓库身份匹配
|
|
7538
7545
|
* (归一化后比对已装项的 repo/spec),npm 包名按依赖 key 直查。命中 → 弹窗转「更新」语义
|
|
7539
7546
|
* (mode=update 放行覆盖重装),避免重复点击撞 409 报错。 */
|
|
7540
7547
|
const customTargetInstalled = (raw) => {
|
|
@@ -7561,8 +7568,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7561
7568
|
}
|
|
7562
7569
|
setConfirmPlugin(null);
|
|
7563
7570
|
};
|
|
7564
|
-
/** 新安装先查「已过 pnpm
|
|
7565
|
-
* 否则 pnpm 会把发布未满 24h
|
|
7571
|
+
/** 新安装先查「已过 pnpm 发布冷却期」的版本:命令条与执行都锁定它,
|
|
7572
|
+
* 否则 pnpm 会把发布未满 24h 的最新版不提示地回退成很旧的版本。查不到则不锁定,由服务端再解析一次。 */
|
|
7566
7573
|
const resolveInstallPin = (p) => {
|
|
7567
7574
|
if (p.install?.command !== void 0 && p.install.command !== "") return;
|
|
7568
7575
|
const pkg = installTargetOf(p);
|
|
@@ -7592,7 +7599,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7592
7599
|
});
|
|
7593
7600
|
};
|
|
7594
7601
|
/** 「立即重启」:POST 同源 /restart,宿主进程自杀重启;随后轮询服务恢复后整页刷新。
|
|
7595
|
-
*
|
|
7602
|
+
* 只在刷新解决不了的例外场景(热加载失败 / 非 dsh 插件 / 更新)出现。
|
|
7596
7603
|
* 桌面端宿主归应用壳管(服务端回 `desktop: true` 且不重启):不轮询,改提示退出重开。 */
|
|
7597
7604
|
const requestRestart = async () => {
|
|
7598
7605
|
if (restarting) return;
|
|
@@ -7749,7 +7756,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7749
7756
|
openSection: settingsSection,
|
|
7750
7757
|
onConsumedOpenSection: () => setSettingsSection(null)
|
|
7751
7758
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
7752
|
-
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.3.
|
|
7759
|
+
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.3.4" },
|
|
7753
7760
|
state: catalog.hubUpdateState,
|
|
7754
7761
|
currentVersion: catalog.hubCurrentVersion,
|
|
7755
7762
|
lang,
|