dsh-plugin 2.2.4 → 2.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client/client.js CHANGED
@@ -433,6 +433,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
433
433
  update: "可更新",
434
434
  updateAvailable: "有更新",
435
435
  updateAvailableHint: "检测到更新:有版本号的仓库比对版本号,无版本号的仓库比对仓库最近更新时间",
436
+ updatePending: "暂缓到 {time} 后可更新",
437
+ updatePendingHint: "新版本发布未满 24 小时,pnpm 供应链门禁会拦下;到时间后再更新即可",
436
438
  hubUpdateHint: "检测到 DSH Plugin Hub 新版本,点击查看更新内容并更新",
437
439
  hubUpdateTitle: "DSH Plugin Hub 有新版本",
438
440
  hubUpdateDesc: "v{version} 已发布,点击下方按钮即可更新,完成后需重启宿主生效。",
@@ -872,6 +874,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
872
874
  update: "Update",
873
875
  updateAvailable: "Update available",
874
876
  updateAvailableHint: "An update was detected: repos with a release are compared by tag, repos without one by last push time",
877
+ updatePending: "Update available after {time}",
878
+ updatePendingHint: "The new release is less than 24 hours old, so the pnpm supply-chain hold rejects it until then",
875
879
  hubUpdateHint: "A new DSH Plugin Hub version is available — click to view the changelog and update",
876
880
  hubUpdateTitle: "A new DSH Plugin Hub version is available",
877
881
  hubUpdateDesc: "v{version} has been released — click below to update, then restart the host to apply it.",
@@ -908,42 +912,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
908
912
  css: css$11
909
913
  });
910
914
  var Header_module_css_default = {
911
- "header": "qikqja_header",
912
- "resultCount": "qikqja_resultCount",
913
- "controls": "qikqja_controls",
914
- "aboutBtn": "qikqja_aboutBtn",
915
- "copyIcon": "qikqja_copyIcon",
916
- "segGroup": "qikqja_segGroup",
917
- "langBtn": "qikqja_langBtn",
915
+ "tabCount": "qikqja_tabCount",
916
+ "segBtnActive": "qikqja_segBtnActive",
917
+ "adText": "qikqja_adText",
918
918
  "searchRow": "qikqja_searchRow",
919
- "title": "qikqja_title",
920
- "adArrow": "qikqja_adArrow",
919
+ "tab": "qikqja_tab",
920
+ "headerRight": "qikqja_headerRight",
921
+ "header": "qikqja_header",
922
+ "brandTitle": "qikqja_brandTitle",
923
+ "logoIcon": "qikqja_logoIcon",
924
+ "search": "qikqja_search",
925
+ "version": "qikqja_version",
921
926
  "taglineLink": "qikqja_taglineLink",
922
- "sortGroup": "qikqja_sortGroup",
923
- "adText": "qikqja_adText",
924
- "resultSeg": "qikqja_resultSeg",
925
- "tabActive": "qikqja_tabActive",
926
- "githubIcon": "qikqja_githubIcon",
927
927
  "tabs": "qikqja_tabs",
928
- "headerTitleRow": "qikqja_headerTitleRow",
929
- "tabCount": "qikqja_tabCount",
930
- "headerRight": "qikqja_headerRight",
931
- "versionBtn": "qikqja_versionBtn",
928
+ "tabsRow": "qikqja_tabsRow",
932
929
  "hubUpdateBadge": "qikqja_hubUpdateBadge",
933
- "brandTitle": "qikqja_brandTitle",
930
+ "adBanner": "qikqja_adBanner",
931
+ "headerTitleRow": "qikqja_headerTitleRow",
932
+ "adArrow": "qikqja_adArrow",
934
933
  "tagline": "qikqja_tagline",
934
+ "versionBtn": "qikqja_versionBtn",
935
+ "githubIcon": "qikqja_githubIcon",
935
936
  "segLabel": "qikqja_segLabel",
936
- "segBtnActive": "qikqja_segBtnActive",
937
- "tabsRow": "qikqja_tabsRow",
938
- "githubLink": "qikqja_githubLink",
939
- "search": "qikqja_search",
940
- "tab": "qikqja_tab",
941
- "logoIcon": "qikqja_logoIcon",
942
937
  "root": "qikqja_root",
943
- "adBadge": "qikqja_adBadge",
938
+ "langBtn": "qikqja_langBtn",
939
+ "aboutBtn": "qikqja_aboutBtn",
940
+ "title": "qikqja_title",
941
+ "resultCount": "qikqja_resultCount",
944
942
  "segBtn": "qikqja_segBtn",
945
- "version": "qikqja_version",
946
- "adBanner": "qikqja_adBanner"
943
+ "tabActive": "qikqja_tabActive",
944
+ "sortGroup": "qikqja_sortGroup",
945
+ "githubLink": "qikqja_githubLink",
946
+ "controls": "qikqja_controls",
947
+ "segGroup": "qikqja_segGroup",
948
+ "adBadge": "qikqja_adBadge",
949
+ "resultSeg": "qikqja_resultSeg",
950
+ "copyIcon": "qikqja_copyIcon"
947
951
  };
948
952
  //#endregion
949
953
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
@@ -962,142 +966,142 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
962
966
  css: css$10
963
967
  });
964
968
  var Modal_module_css_default = {
965
- "noticeTextOk": "BiQ1zG_noticeTextOk",
966
- "stripCancel": "BiQ1zG_stripCancel",
967
- "restartLater": "BiQ1zG_restartLater",
968
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
969
- "noticeTextFail": "BiQ1zG_noticeTextFail",
970
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
971
- "failClear": "BiQ1zG_failClear",
972
- "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
969
+ "errorModal": "BiQ1zG_errorModal",
970
+ "failHead": "BiQ1zG_failHead",
971
+ "failRepoLabel": "BiQ1zG_failRepoLabel",
972
+ "detailLabel": "BiQ1zG_detailLabel",
973
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
974
+ "confirmPrimary": "BiQ1zG_confirmPrimary",
973
975
  "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
974
- "linkIcon": "BiQ1zG_linkIcon",
975
- "aboutModal": "BiQ1zG_aboutModal",
976
- "failList": "BiQ1zG_failList",
977
- "queueRowBody": "BiQ1zG_queueRowBody",
976
+ "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
977
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
978
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
979
+ "overlay": "BiQ1zG_overlay",
980
+ "resultTitle": "BiQ1zG_resultTitle",
981
+ "progressFillFail": "BiQ1zG_progressFillFail",
982
+ "result": "BiQ1zG_result",
983
+ "detailArrow": "BiQ1zG_detailArrow",
984
+ "queueRowDesc": "BiQ1zG_queueRowDesc",
985
+ "modalBody": "BiQ1zG_modalBody",
986
+ "resultRestarting": "BiQ1zG_resultRestarting",
987
+ "progressFill": "BiQ1zG_progressFill",
988
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
978
989
  "noticeRowMain": "BiQ1zG_noticeRowMain",
990
+ "modalLink": "BiQ1zG_modalLink",
991
+ "restartNowWarning": "BiQ1zG_restartNowWarning",
992
+ "noticeHead": "BiQ1zG_noticeHead",
993
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
994
+ "toastFail": "BiQ1zG_toastFail",
995
+ "detailRow": "BiQ1zG_detailRow",
996
+ "trustHint": "BiQ1zG_trustHint",
997
+ "failList": "BiQ1zG_failList",
998
+ "failKindTitle": "BiQ1zG_failKindTitle",
999
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
979
1000
  "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
1001
+ "aboutMeta": "BiQ1zG_aboutMeta",
980
1002
  "dangerConfirm": "BiQ1zG_dangerConfirm",
981
- "progressTrack": "BiQ1zG_progressTrack",
982
- "noticeRemove": "BiQ1zG_noticeRemove",
983
- "modalCmd": "BiQ1zG_modalCmd",
984
- "noticeVersion": "BiQ1zG_noticeVersion",
985
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
1003
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
1004
+ "helpModal": "BiQ1zG_helpModal",
1005
+ "failBigIssue": "BiQ1zG_failBigIssue",
1006
+ "linkIcon": "BiQ1zG_linkIcon",
1007
+ "progressHead": "BiQ1zG_progressHead",
1008
+ "failRepoUrl": "BiQ1zG_failRepoUrl",
1009
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
1010
+ "failCopy": "BiQ1zG_failCopy",
1011
+ "queueRowTrack": "BiQ1zG_queueRowTrack",
1012
+ "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
1013
+ "modalActions": "BiQ1zG_modalActions",
986
1014
  "detailPath": "BiQ1zG_detailPath",
987
- "uninstallConfirm": "BiQ1zG_uninstallConfirm",
988
- "detailGrid": "BiQ1zG_detailGrid",
989
- "detailModal": "BiQ1zG_detailModal",
1015
+ "modalCmd": "BiQ1zG_modalCmd",
1016
+ "noticeTime": "BiQ1zG_noticeTime",
1017
+ "noticeTextFail": "BiQ1zG_noticeTextFail",
1018
+ "restartNow": "BiQ1zG_restartNow",
990
1019
  "detailStars": "BiQ1zG_detailStars",
991
1020
  "logModal": "BiQ1zG_logModal",
992
- "overlayIn": "BiQ1zG_overlayIn",
993
- "progressText": "BiQ1zG_progressText",
994
- "queueRowHead": "BiQ1zG_queueRowHead",
995
- "detailPathBtn": "BiQ1zG_detailPathBtn",
996
- "modalLabel": "BiQ1zG_modalLabel",
1021
+ "resultDesc": "BiQ1zG_resultDesc",
1022
+ "failEmpty": "BiQ1zG_failEmpty",
1023
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
1024
+ "detailValue": "BiQ1zG_detailValue",
1025
+ "failReason": "BiQ1zG_failReason",
1026
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
1027
+ "queueRowPct": "BiQ1zG_queueRowPct",
1028
+ "modalTitle": "BiQ1zG_modalTitle",
1029
+ "failKindInstall": "BiQ1zG_failKindInstall",
1030
+ "detailDim": "BiQ1zG_detailDim",
1031
+ "noticeRemove": "BiQ1zG_noticeRemove",
997
1032
  "noticeMain": "BiQ1zG_noticeMain",
998
- "pendingRowActions": "BiQ1zG_pendingRowActions",
999
- "modalBody": "BiQ1zG_modalBody",
1000
- "failRow": "BiQ1zG_failRow",
1001
- "noticeList": "BiQ1zG_noticeList",
1033
+ "progress": "BiQ1zG_progress",
1034
+ "detailStatusText": "BiQ1zG_detailStatusText",
1035
+ "restartLater": "BiQ1zG_restartLater",
1036
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
1037
+ "noticeFoot": "BiQ1zG_noticeFoot",
1038
+ "resultCheck": "BiQ1zG_resultCheck",
1039
+ "modalValue": "BiQ1zG_modalValue",
1040
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
1041
+ "modalInstall": "BiQ1zG_modalInstall",
1002
1042
  "noticeRowOk": "BiQ1zG_noticeRowOk",
1003
- "failBigIssue": "BiQ1zG_failBigIssue",
1004
- "modalLink": "BiQ1zG_modalLink",
1005
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
1006
- "detailLabel": "BiQ1zG_detailLabel",
1043
+ "confirmIcon": "BiQ1zG_confirmIcon",
1044
+ "modalDesc": "BiQ1zG_modalDesc",
1045
+ "modalCopy": "BiQ1zG_modalCopy",
1007
1046
  "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
1008
- "overlay": "BiQ1zG_overlay",
1009
- "modalHead": "BiQ1zG_modalHead",
1010
- "modalValue": "BiQ1zG_modalValue",
1011
- "result": "BiQ1zG_result",
1012
- "failPrepareHint": "BiQ1zG_failPrepareHint",
1047
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
1013
1048
  "detailUpdateHint": "BiQ1zG_detailUpdateHint",
1014
- "bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
1049
+ "detailPathText": "BiQ1zG_detailPathText",
1050
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
1051
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
1052
+ "errorBox": "BiQ1zG_errorBox",
1053
+ "failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
1054
+ "errorHint": "BiQ1zG_errorHint",
1055
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
1015
1056
  "detailStatusPending": "BiQ1zG_detailStatusPending",
1016
- "restartNow": "BiQ1zG_restartNow",
1017
- "trustHint": "BiQ1zG_trustHint",
1018
- "modalActions": "BiQ1zG_modalActions",
1019
- "queueRow": "BiQ1zG_queueRow",
1020
- "resultCheck": "BiQ1zG_resultCheck",
1021
- "detailPathActions": "BiQ1zG_detailPathActions",
1057
+ "queueRowHead": "BiQ1zG_queueRowHead",
1058
+ "modalHead": "BiQ1zG_modalHead",
1059
+ "modalIn": "BiQ1zG_modalIn",
1022
1060
  "modalCancel": "BiQ1zG_modalCancel",
1023
- "failRepoLabel": "BiQ1zG_failRepoLabel",
1061
+ "queueSection": "BiQ1zG_queueSection",
1062
+ "noticeRow": "BiQ1zG_noticeRow",
1063
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
1024
1064
  "modalRow": "BiQ1zG_modalRow",
1025
- "modalCmdText": "BiQ1zG_modalCmdText",
1026
- "queueRowDesc": "BiQ1zG_queueRowDesc",
1027
- "restartNowWarning": "BiQ1zG_restartNowWarning",
1028
- "errorModal": "BiQ1zG_errorModal",
1029
- "progressFillFail": "BiQ1zG_progressFillFail",
1030
- "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
1031
- "queuedHint": "BiQ1zG_queuedHint",
1032
- "modalDesc": "BiQ1zG_modalDesc",
1033
- "failedCopyHint": "BiQ1zG_failedCopyHint",
1034
1065
  "toastIn": "BiQ1zG_toastIn",
1035
- "detailPathText": "BiQ1zG_detailPathText",
1036
- "confirmPrimary": "BiQ1zG_confirmPrimary",
1037
- "failEmpty": "BiQ1zG_failEmpty",
1038
- "aboutMeta": "BiQ1zG_aboutMeta",
1066
+ "noticeList": "BiQ1zG_noticeList",
1039
1067
  "modalClose": "BiQ1zG_modalClose",
1040
- "queueRowTrack": "BiQ1zG_queueRowTrack",
1041
- "failReason": "BiQ1zG_failReason",
1042
- "errorHint": "BiQ1zG_errorHint",
1043
- "progressHead": "BiQ1zG_progressHead",
1044
- "failKindTitle": "BiQ1zG_failKindTitle",
1045
- "queueSection": "BiQ1zG_queueSection",
1046
- "detailMono": "BiQ1zG_detailMono",
1047
- "resultTitle": "BiQ1zG_resultTitle",
1048
- "failHead": "BiQ1zG_failHead",
1049
- "noticeHead": "BiQ1zG_noticeHead",
1068
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
1069
+ "progressTrack": "BiQ1zG_progressTrack",
1070
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
1071
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
1072
+ "failClear": "BiQ1zG_failClear",
1073
+ "modalCmdText": "BiQ1zG_modalCmdText",
1074
+ "failKind": "BiQ1zG_failKind",
1075
+ "noticeVersion": "BiQ1zG_noticeVersion",
1076
+ "queueRowBody": "BiQ1zG_queueRowBody",
1077
+ "failDiagBtn": "BiQ1zG_failDiagBtn",
1050
1078
  "failKindUninstall": "BiQ1zG_failKindUninstall",
1079
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
1080
+ "aboutModal": "BiQ1zG_aboutModal",
1081
+ "detailGrid": "BiQ1zG_detailGrid",
1082
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
1051
1083
  "failNetworkTarget": "BiQ1zG_failNetworkTarget",
1052
- "failDiagBtn": "BiQ1zG_failDiagBtn",
1053
- "detailRow": "BiQ1zG_detailRow",
1054
- "detailDim": "BiQ1zG_detailDim",
1055
- "noticeTime": "BiQ1zG_noticeTime",
1056
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
1057
- "detailValue": "BiQ1zG_detailValue",
1058
- "modalTitle": "BiQ1zG_modalTitle",
1059
- "queueRowTarget": "BiQ1zG_queueRowTarget",
1060
- "progressFill": "BiQ1zG_progressFill",
1061
- "noticeIgnore": "BiQ1zG_noticeIgnore",
1062
- "failRepoUrl": "BiQ1zG_failRepoUrl",
1063
- "errorBox": "BiQ1zG_errorBox",
1064
- "detailStatusText": "BiQ1zG_detailStatusText",
1065
- "modalCloseIcon": "BiQ1zG_modalCloseIcon",
1066
- "toastFail": "BiQ1zG_toastFail",
1067
- "helpModal": "BiQ1zG_helpModal",
1068
- "failCopy": "BiQ1zG_failCopy",
1069
- "errorTitle": "BiQ1zG_errorTitle",
1070
- "modal": "BiQ1zG_modal",
1071
- "modalIn": "BiQ1zG_modalIn",
1072
- "noticeFoot": "BiQ1zG_noticeFoot",
1073
- "failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
1074
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
1075
- "queueRowStatus": "BiQ1zG_queueRowStatus",
1076
- "resultRestarting": "BiQ1zG_resultRestarting",
1077
- "queueRowPct": "BiQ1zG_queueRowPct",
1078
- "modalCopy": "BiQ1zG_modalCopy",
1079
- "detailArrow": "BiQ1zG_detailArrow",
1080
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
1081
- "errorCopySoft": "BiQ1zG_errorCopySoft",
1082
- "resultDesc": "BiQ1zG_resultDesc",
1083
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
1084
- "toast": "BiQ1zG_toast",
1085
- "noticeRow": "BiQ1zG_noticeRow",
1084
+ "bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
1086
1085
  "modalWide": "BiQ1zG_modalWide",
1087
- "confirmIcon": "BiQ1zG_confirmIcon",
1086
+ "failRow": "BiQ1zG_failRow",
1087
+ "failRepo": "BiQ1zG_failRepo",
1088
+ "modalLabel": "BiQ1zG_modalLabel",
1089
+ "queuedHint": "BiQ1zG_queuedHint",
1090
+ "detailMono": "BiQ1zG_detailMono",
1091
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
1092
+ "queueRow": "BiQ1zG_queueRow",
1093
+ "modal": "BiQ1zG_modal",
1094
+ "errorTitle": "BiQ1zG_errorTitle",
1088
1095
  "confirmIconDanger": "BiQ1zG_confirmIconDanger",
1089
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
1090
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
1091
1096
  "detailLink": "BiQ1zG_detailLink",
1092
- "aboutContent": "BiQ1zG_aboutContent",
1093
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
1094
- "progress": "BiQ1zG_progress",
1095
- "failKind": "BiQ1zG_failKind",
1096
- "failRepo": "BiQ1zG_failRepo",
1097
- "modalInstall": "BiQ1zG_modalInstall",
1098
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
1099
- "confirmIconWrap": "BiQ1zG_confirmIconWrap",
1100
- "failKindInstall": "BiQ1zG_failKindInstall"
1097
+ "stripCancel": "BiQ1zG_stripCancel",
1098
+ "overlayIn": "BiQ1zG_overlayIn",
1099
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
1100
+ "progressText": "BiQ1zG_progressText",
1101
+ "toast": "BiQ1zG_toast",
1102
+ "detailModal": "BiQ1zG_detailModal",
1103
+ "detailPathActions": "BiQ1zG_detailPathActions",
1104
+ "aboutContent": "BiQ1zG_aboutContent"
1101
1105
  };
1102
1106
  //#endregion
1103
1107
  //#region src/server/services/install/release-target.ts
@@ -1187,7 +1191,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1187
1191
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
1188
1192
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
1189
1193
  */
1190
- const PLUGIN_VERSION = "2.2.4";
1194
+ const PLUGIN_VERSION = "2.2.6";
1191
1195
  const CATEGORY_ORDER = [
1192
1196
  "interface",
1193
1197
  "session",
@@ -1585,14 +1589,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1585
1589
  *
1586
1590
  * 更新命令执行的是 `pkg@latest`,所以「目录里标的版本」不是最终能装上的版本:
1587
1591
  * 作者可能只打了 GitHub release 没发 npm —— 此时提示会变成永远点不掉的循环。
1588
- * 任一信息缺失(查不到发布信息 / 没有已装版本记录)返回 true,交回调用方原有判定:
1592
+ * 任一信息缺失(查不到发布信息 / 没有已装版本记录)返回 offered,交回调用方原有判定:
1589
1593
  * 宁可提示,也不因为一次查询失败把真实更新吃掉。
1590
1594
  */
1591
- function isUpdateOffered(release, installedVersion, now) {
1592
- if (release === null) return true;
1593
- if (isReleaseTooFresh(release.publishedAt, now)) return false;
1594
- if (installedVersion !== null && compareVersions(release.version, installedVersion) <= 0) return false;
1595
- return true;
1595
+ function updateDecision(release, installedVersion, now) {
1596
+ if (release === null) return {
1597
+ offered: true,
1598
+ pendingUntil: null
1599
+ };
1600
+ if (isReleaseTooFresh(release.publishedAt, now)) {
1601
+ const ms = Date.parse(release.publishedAt);
1602
+ return {
1603
+ offered: false,
1604
+ pendingUntil: Number.isNaN(ms) ? null : ms + MIN_RELEASE_AGE_MS
1605
+ };
1606
+ }
1607
+ if (installedVersion !== null && compareVersions(release.version, installedVersion) <= 0) return {
1608
+ offered: false,
1609
+ pendingUntil: null
1610
+ };
1611
+ return {
1612
+ offered: true,
1613
+ pendingUntil: null
1614
+ };
1596
1615
  }
1597
1616
  /**
1598
1617
  * 选出本次真正该提示的更新版本。
@@ -1767,6 +1786,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1767
1786
  installedAt: rec?.installedAt ?? null,
1768
1787
  catalogVersion: p.version ?? null,
1769
1788
  hasUpdate: hasUpdateOf(p, installed, versions),
1789
+ pendingUntil: null,
1770
1790
  loaded: loadedNames?.includes(name) ?? false,
1771
1791
  dshCapable: dshCapableNames?.includes(name) ?? false
1772
1792
  });
@@ -1787,6 +1807,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1787
1807
  installedAt: rec?.installedAt ?? null,
1788
1808
  catalogVersion: null,
1789
1809
  hasUpdate: false,
1810
+ pendingUntil: null,
1790
1811
  loaded: loadedNames?.includes(name) ?? false,
1791
1812
  dshCapable: dshCapableNames?.includes(name) ?? false
1792
1813
  });
@@ -2020,18 +2041,23 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2020
2041
  * - npm 上最新版并不高于已装版本 —— 更新走的是 `pkg@latest`,此时无论目录标到哪个 tag,
2021
2042
  * 都不可能装上(作者可能只打了 GitHub release 没发 npm),提示只会变成永远点不掉的循环。
2022
2043
  */
2023
- const updateBlocked = (0, react.useMemo)(() => {
2024
- const blocked = /* @__PURE__ */ new Set();
2025
- if (!releaseAgeReady) return blocked;
2044
+ const updateDecisions = (0, react.useMemo)(() => {
2045
+ const map = /* @__PURE__ */ new Map();
2046
+ if (!releaseAgeReady) return map;
2026
2047
  const now = Date.now();
2027
- for (const pkg of releaseAgeCandidates) if (!isUpdateOffered(releaseAge.releases[pkg] ?? null, installedByPackage.get(pkg) ?? null, now)) blocked.add(pkg);
2028
- return blocked;
2048
+ for (const pkg of releaseAgeCandidates) map.set(pkg, updateDecision(releaseAge.releases[pkg] ?? null, installedByPackage.get(pkg) ?? null, now));
2049
+ return map;
2029
2050
  }, [
2030
2051
  releaseAgeReady,
2031
2052
  releaseAgeCandidates,
2032
2053
  releaseAge.releases,
2033
2054
  installedByPackage
2034
2055
  ]);
2056
+ const updateBlocked = (0, react.useMemo)(() => {
2057
+ const blocked = /* @__PURE__ */ new Set();
2058
+ for (const [pkg, decision] of updateDecisions) if (!decision.offered) blocked.add(pkg);
2059
+ return blocked;
2060
+ }, [updateDecisions]);
2035
2061
  /**
2036
2062
  * 是否有更新:仅对已安装插件有意义。
2037
2063
  * 双信号判定——有 release 版本的比版本;无版本(repo 不打 tag)的比仓库最近更新时间
@@ -2041,22 +2067,38 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2041
2067
  const hasUpdate = (p) => {
2042
2068
  if (!hasUpdateOf(p, installed, versions)) return false;
2043
2069
  const pkg = npmPackageOf(p, versions);
2044
- return pkg === null || !updateBlocked.has(pkg);
2070
+ if (pkg === null) return true;
2071
+ return releaseAgeReady && !updateBlocked.has(pkg);
2045
2072
  };
2046
- /** 已安装项统一列表(目录元数据 + 运行时信息合并):被拦下的去掉更新标记,驱动「已安装」tab。 */
2073
+ /** 更新被门禁暂缓时的可重试时刻(毫秒);未安装/无更新/非门禁原因 → null。 */
2074
+ const updatePendingUntil = (p) => {
2075
+ if (!hasUpdateOf(p, installed, versions)) return null;
2076
+ const pkg = npmPackageOf(p, versions);
2077
+ if (pkg === null) return null;
2078
+ return updateDecisions.get(pkg)?.pendingUntil ?? null;
2079
+ };
2080
+ /** 已安装项统一列表(目录元数据 + 运行时信息合并):校验未就绪/被拦下的去掉更新标记、
2081
+ * 门禁暂缓的带上可重试时刻,驱动「已安装」tab。 */
2047
2082
  const installedItems = (0, react.useMemo)(() => {
2048
- if (updateBlocked.size === 0) return rawInstalledItems;
2049
2083
  return rawInstalledItems.map((item) => {
2050
2084
  if (!item.hasUpdate || !item.plugin) return item;
2051
2085
  const pkg = npmPackageOf(item.plugin, versions);
2052
- return pkg !== null && updateBlocked.has(pkg) ? {
2086
+ if (pkg === null) return item;
2087
+ if (!releaseAgeReady) return {
2053
2088
  ...item,
2054
2089
  hasUpdate: false
2055
- } : item;
2090
+ };
2091
+ const decision = updateDecisions.get(pkg);
2092
+ return decision === void 0 || decision.offered ? item : {
2093
+ ...item,
2094
+ hasUpdate: false,
2095
+ pendingUntil: decision.pendingUntil
2096
+ };
2056
2097
  });
2057
2098
  }, [
2058
2099
  rawInstalledItems,
2059
- updateBlocked,
2100
+ releaseAgeReady,
2101
+ updateDecisions,
2060
2102
  versions
2061
2103
  ]);
2062
2104
  /**
@@ -2070,7 +2112,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2070
2112
  * registry 真实发布时间下发(同源),据此判断最准。门槛命中要单列成 `pending` 而不是
2071
2113
  * 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
2072
2114
  */
2073
- const hubCurrentVersion = "2.2.4";
2115
+ const hubCurrentVersion = "2.2.6";
2074
2116
  const hubUpdateResult = hubUpdateInfo === null ? {
2075
2117
  state: "none",
2076
2118
  target: null
@@ -2133,6 +2175,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2133
2175
  installedName,
2134
2176
  installedVersion,
2135
2177
  hasUpdate,
2178
+ updatePendingUntil,
2136
2179
  hubHasUpdate,
2137
2180
  hubUpdateState,
2138
2181
  hubUpdateTarget,
@@ -4485,6 +4528,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4485
4528
  if (days < 365) return t("monthsAgo", { months: Math.floor(days / 30) });
4486
4529
  return t("yearsAgo", { years: Math.floor(days / 365) });
4487
4530
  }
4531
+ /** 具体时刻:当天只给「时:分」,跨天再补「月/日」,用于「暂缓到何时可更新」。 */
4532
+ function clockTime(ms) {
4533
+ const at = new Date(ms);
4534
+ const now = /* @__PURE__ */ new Date();
4535
+ const hh = String(at.getHours()).padStart(2, "0");
4536
+ const mm = String(at.getMinutes()).padStart(2, "0");
4537
+ return at.getFullYear() === now.getFullYear() && at.getMonth() === now.getMonth() && at.getDate() === now.getDate() ? `${hh}:${mm}` : `${at.getMonth() + 1}/${at.getDate()} ${hh}:${mm}`;
4538
+ }
4488
4539
  //#endregion
4489
4540
  //#region src/client/components/modals/InstalledDetailModal.tsx
4490
4541
  /**
@@ -4524,7 +4575,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4524
4575
  }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, p?.description ? (0, react.createElement)("div", { className: Modal_module_css_default.modalDesc }, p.description) : null, hasUpdate ? (0, react.createElement)("div", { className: Modal_module_css_default.detailUpdateHint }, item.installedVersion && item.catalogVersion ? t("versionUpHint", {
4525
4576
  from: item.installedVersion,
4526
4577
  to: item.catalogVersion
4527
- }) : t("updateAvailableHint")) : null, (0, react.createElement)("div", { className: Modal_module_css_default.detailGrid }, p?.category ? (0, react.createElement)("div", { className: Modal_module_css_default.detailRow }, (0, react.createElement)("span", { className: Modal_module_css_default.detailLabel }, t("detailCategory")), (0, react.createElement)("span", { className: Modal_module_css_default.detailValue }, categoryLabel(CATEGORY_LABELS, p.category, lang))) : null, (0, react.createElement)("div", { className: Modal_module_css_default.detailRow }, (0, react.createElement)("span", { className: Modal_module_css_default.detailLabel }, t("statusLabel")), (0, react.createElement)("span", { className: Modal_module_css_default.detailValue }, (0, react.createElement)("span", {
4578
+ }) : t("updateAvailableHint")) : item.pendingUntil != null ? (0, react.createElement)("div", { className: Modal_module_css_default.detailUpdateHint }, t("updatePending", { time: clockTime(item.pendingUntil) })) : null, (0, react.createElement)("div", { className: Modal_module_css_default.detailGrid }, p?.category ? (0, react.createElement)("div", { className: Modal_module_css_default.detailRow }, (0, react.createElement)("span", { className: Modal_module_css_default.detailLabel }, t("detailCategory")), (0, react.createElement)("span", { className: Modal_module_css_default.detailValue }, categoryLabel(CATEGORY_LABELS, p.category, lang))) : null, (0, react.createElement)("div", { className: Modal_module_css_default.detailRow }, (0, react.createElement)("span", { className: Modal_module_css_default.detailLabel }, t("statusLabel")), (0, react.createElement)("span", { className: Modal_module_css_default.detailValue }, (0, react.createElement)("span", {
4528
4579
  className: item.loaded ? Modal_module_css_default.detailStatusRunning : Modal_module_css_default.detailStatusPending,
4529
4580
  "aria-hidden": "true"
4530
4581
  }), (0, react.createElement)("span", { className: Modal_module_css_default.detailStatusText }, item.loaded ? t("statusRunning") : t("statusPending")))), item.installedVersion ? (0, react.createElement)("div", { className: Modal_module_css_default.detailRow }, (0, react.createElement)("span", { className: Modal_module_css_default.detailLabel }, t("installedVersionLabel")), (0, react.createElement)("span", { className: Modal_module_css_default.detailValue }, (0, react.createElement)("span", { className: Modal_module_css_default.detailMono }, item.installedVersion), item.catalogVersion && item.catalogVersion !== item.installedVersion ? (0, react.createElement)("span", { className: Modal_module_css_default.detailArrow }, "→", (0, react.createElement)("span", { className: Modal_module_css_default.detailMono }, item.catalogVersion), (0, react.createElement)("span", { className: Modal_module_css_default.detailDim }, t("catalogLatest"))) : null)) : null, item.repo ? (0, react.createElement)("div", { className: Modal_module_css_default.detailRow }, (0, react.createElement)("span", { className: Modal_module_css_default.detailLabel }, t("detailCatalog")), (0, react.createElement)("a", {
@@ -5103,40 +5154,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5103
5154
  css: css$9
5104
5155
  });
5105
5156
  var List_module_css_default = {
5106
- "topic": "_3XaZHa_topic",
5107
- "installBtnUpdate": "_3XaZHa_installBtnUpdate",
5108
- "footer": "_3XaZHa_footer",
5157
+ "topics": "_3XaZHa_topics",
5109
5158
  "stats": "_3XaZHa_stats",
5110
- "cardHead": "_3XaZHa_cardHead",
5111
- "desc": "_3XaZHa_desc",
5112
- "versionBadge": "_3XaZHa_versionBadge",
5113
- "uninstallBtn": "_3XaZHa_uninstallBtn",
5114
- "list": "_3XaZHa_list",
5115
- "cardSide": "_3XaZHa_cardSide",
5116
- "categoryBadge": "_3XaZHa_categoryBadge",
5159
+ "star": "_3XaZHa_star",
5160
+ "cardTitle": "_3XaZHa_cardTitle",
5161
+ "card": "_3XaZHa_card",
5162
+ "state": "_3XaZHa_state",
5163
+ "stateTitle": "_3XaZHa_stateTitle",
5164
+ "retryBtn": "_3XaZHa_retryBtn",
5165
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
5117
5166
  "cardMain": "_3XaZHa_cardMain",
5118
- "date": "_3XaZHa_date",
5119
- "topics": "_3XaZHa_topics",
5120
- "installBtnCopied": "_3XaZHa_installBtnCopied",
5121
- "updateBadge": "_3XaZHa_updateBadge",
5122
- "installBtn": "_3XaZHa_installBtn",
5167
+ "footer": "_3XaZHa_footer",
5123
5168
  "body": "_3XaZHa_body",
5124
- "verified": "_3XaZHa_verified",
5125
- "stateDesc": "_3XaZHa_stateDesc",
5169
+ "updateBadge": "_3XaZHa_updateBadge",
5170
+ "detailBtn": "_3XaZHa_detailBtn",
5126
5171
  "stateActions": "_3XaZHa_stateActions",
5127
- "card": "_3XaZHa_card",
5128
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
5129
- "state": "_3XaZHa_state",
5130
- "stateTitle": "_3XaZHa_stateTitle",
5131
- "retryBtn": "_3XaZHa_retryBtn",
5172
+ "cardHead": "_3XaZHa_cardHead",
5173
+ "stateDesc": "_3XaZHa_stateDesc",
5174
+ "moreSentinel": "_3XaZHa_moreSentinel",
5175
+ "fork": "_3XaZHa_fork",
5176
+ "verified": "_3XaZHa_verified",
5177
+ "diagBtn": "_3XaZHa_diagBtn",
5178
+ "date": "_3XaZHa_date",
5179
+ "list": "_3XaZHa_list",
5132
5180
  "footLink": "_3XaZHa_footLink",
5133
- "detailBtn": "_3XaZHa_detailBtn",
5134
5181
  "actions": "_3XaZHa_actions",
5135
- "diagBtn": "_3XaZHa_diagBtn",
5136
- "fork": "_3XaZHa_fork",
5137
- "cardTitle": "_3XaZHa_cardTitle",
5138
- "moreSentinel": "_3XaZHa_moreSentinel",
5139
- "star": "_3XaZHa_star"
5182
+ "topic": "_3XaZHa_topic",
5183
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
5184
+ "cardSide": "_3XaZHa_cardSide",
5185
+ "uninstallBtn": "_3XaZHa_uninstallBtn",
5186
+ "installBtn": "_3XaZHa_installBtn",
5187
+ "desc": "_3XaZHa_desc",
5188
+ "versionBadge": "_3XaZHa_versionBadge",
5189
+ "categoryBadge": "_3XaZHa_categoryBadge",
5190
+ "installBtnUpdate": "_3XaZHa_installBtnUpdate"
5140
5191
  };
5141
5192
  //#endregion
5142
5193
  //#region src/client/hooks/useIncrementalList.ts
@@ -5184,11 +5235,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5184
5235
  * 目录列表里的单张插件卡片:名称/分类/verified 徽标、描述 + 标签、Star/Fork/日期
5185
5236
  * 统计,以及详情/安装/卸载动作。
5186
5237
  */
5187
- function PluginCard({ plugin: p, copied, installedName, installedVersion, hasUpdate, t, langKey, langPath, onInstall, onUninstall }) {
5238
+ function PluginCard({ plugin: p, copied, installedName, installedVersion, hasUpdate, updatePendingUntil, t, langKey, langPath, onInstall, onUninstall }) {
5188
5239
  const repo = p.source?.repo ?? "";
5189
5240
  const isCopied = copied === repo;
5190
5241
  const isInstalled = installedName(p) !== null;
5191
5242
  const update = hasUpdate(p);
5243
+ const pendingUntil = isInstalled && !update ? updatePendingUntil(p) : null;
5192
5244
  const versionShown = isInstalled ? installedVersion(p) : p.version;
5193
5245
  return (0, react.createElement)("div", { className: List_module_css_default.card }, (0, react.createElement)("div", { className: List_module_css_default.cardMain }, (0, react.createElement)("div", { className: List_module_css_default.cardHead }, (0, react.createElement)("div", {
5194
5246
  className: List_module_css_default.cardTitle,
@@ -5199,7 +5251,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5199
5251
  }, versionShown) : null, update ? (0, react.createElement)("span", {
5200
5252
  className: List_module_css_default.updateBadge,
5201
5253
  title: t("updateAvailableHint")
5202
- }, t("updateAvailable")) : null, p.category ? (0, react.createElement)("span", { className: List_module_css_default.categoryBadge }, categoryLabel(CATEGORY_LABELS, p.category, langKey)) : null, p.compatibility?.status === "verified" ? (0, react.createElement)("span", { className: List_module_css_default.verified }, t("verified")) : null), p.description ? (0, react.createElement)("p", { className: List_module_css_default.desc }, p.description) : null, (p.topics?.length ?? 0) > 0 ? (0, react.createElement)("div", { className: List_module_css_default.topics }, p.topics.slice(0, 3).map((topic) => (0, react.createElement)("span", {
5254
+ }, t("updateAvailable")) : null, pendingUntil !== null ? (0, react.createElement)("span", {
5255
+ className: List_module_css_default.updateBadge,
5256
+ title: t("updatePendingHint")
5257
+ }, t("updatePending", { time: clockTime(pendingUntil) })) : null, p.category ? (0, react.createElement)("span", { className: List_module_css_default.categoryBadge }, categoryLabel(CATEGORY_LABELS, p.category, langKey)) : null, p.compatibility?.status === "verified" ? (0, react.createElement)("span", { className: List_module_css_default.verified }, t("verified")) : null), p.description ? (0, react.createElement)("p", { className: List_module_css_default.desc }, p.description) : null, (p.topics?.length ?? 0) > 0 ? (0, react.createElement)("div", { className: List_module_css_default.topics }, p.topics.slice(0, 3).map((topic) => (0, react.createElement)("span", {
5203
5258
  key: topic,
5204
5259
  className: List_module_css_default.topic
5205
5260
  }, topic))) : null), (0, react.createElement)("div", { className: List_module_css_default.cardSide }, (0, react.createElement)("div", { className: List_module_css_default.stats }, (0, react.createElement)("span", { className: List_module_css_default.star }, "★ ", fmtStars(p.stats?.stargazers_count)), (0, react.createElement)("span", { className: List_module_css_default.fork }, t("fork"), " ", fmtStars(p.stats?.forks_count)), (0, react.createElement)("span", { className: List_module_css_default.date }, relTime(p.dates?.repoUpdatedAt, t))), repo ? (0, react.createElement)("div", { className: List_module_css_default.actions }, (0, react.createElement)("a", {
@@ -5234,7 +5289,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5234
5289
  * 目录列表:承载加载/失败/空三态、插件卡片与计数页脚的滚动容器。分类或安装状态
5235
5290
  * 筛选变化时重置滚动位置,避免替换后的内容被误当成「没变化」。
5236
5291
  */
5237
- function CatalogList({ plugins, failed, visible, total, t, langPath, reload, forceReload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
5292
+ function CatalogList({ plugins, failed, visible, total, t, langPath, reload, forceReload, category, copied, installedName, installedVersion, hasUpdate, updatePendingUntil, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
5238
5293
  /** 列表滚动容器:分类/搜索切换后列表内容替换但 scrollTop 保留,会让用户误以为列表没更新,需重置回顶部 */
5239
5294
  const listRef = (0, react.useRef)(null);
5240
5295
  /** 增量渲染:全量目录太大(4400+),只渲染首批,滚动接近底部时自动追加下一批 */
@@ -5262,6 +5317,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5262
5317
  installedName,
5263
5318
  installedVersion,
5264
5319
  hasUpdate,
5320
+ updatePendingUntil,
5265
5321
  t,
5266
5322
  langKey,
5267
5323
  langPath,
@@ -5317,6 +5373,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5317
5373
  installedName: catalog.installedName,
5318
5374
  installedVersion: catalog.installedVersion,
5319
5375
  hasUpdate: catalog.hasUpdate,
5376
+ updatePendingUntil: catalog.updatePendingUntil,
5320
5377
  langKey,
5321
5378
  onInstall,
5322
5379
  onUninstall,
@@ -5342,15 +5399,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5342
5399
  });
5343
5400
  var SectionTabs_module_css_default = {
5344
5401
  "tabIcon": "_7tvizq_tabIcon",
5345
- "tabActive": "_7tvizq_tabActive",
5346
- "noticeCount": "_7tvizq_noticeCount",
5347
- "tabLabel": "_7tvizq_tabLabel",
5348
5402
  "tabCount": "_7tvizq_tabCount",
5349
- "root": "_7tvizq_root",
5350
- "noticeBtn": "_7tvizq_noticeBtn",
5351
- "tab": "_7tvizq_tab",
5352
5403
  "tabCountActive": "_7tvizq_tabCountActive",
5353
- "noticeIcon": "_7tvizq_noticeIcon"
5404
+ "tab": "_7tvizq_tab",
5405
+ "noticeBtn": "_7tvizq_noticeBtn",
5406
+ "tabActive": "_7tvizq_tabActive",
5407
+ "tabLabel": "_7tvizq_tabLabel",
5408
+ "noticeIcon": "_7tvizq_noticeIcon",
5409
+ "noticeCount": "_7tvizq_noticeCount",
5410
+ "root": "_7tvizq_root"
5354
5411
  };
5355
5412
  //#endregion
5356
5413
  //#region src/client/components/layout/SectionTabs.tsx
@@ -5426,42 +5483,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5426
5483
  css: css$7
5427
5484
  });
5428
5485
  var InstalledView_module_css_default = {
5486
+ "rowMeta": "_1nXeGW_rowMeta",
5487
+ "rowUninstall": "_1nXeGW_rowUninstall",
5429
5488
  "emptyDesc": "_1nXeGW_emptyDesc",
5430
- "statusPending": "_1nXeGW_statusPending",
5431
- "statusDot": "_1nXeGW_statusDot",
5432
- "list": "_1nXeGW_list",
5433
- "rowRestart": "_1nXeGW_rowRestart",
5434
- "exampleRow": "_1nXeGW_exampleRow",
5435
- "toolbar": "_1nXeGW_toolbar",
5436
5489
  "empty": "_1nXeGW_empty",
5437
- "segLabel": "_1nXeGW_segLabel",
5438
- "rowDetail": "_1nXeGW_rowDetail",
5490
+ "statusInactive": "_1nXeGW_statusInactive",
5491
+ "rowRestart": "_1nXeGW_rowRestart",
5492
+ "rowCategory": "_1nXeGW_rowCategory",
5493
+ "searchWrap": "_1nXeGW_searchWrap",
5439
5494
  "searchInput": "_1nXeGW_searchInput",
5440
- "updateBadge": "_1nXeGW_updateBadge",
5441
- "rowActions": "_1nXeGW_rowActions",
5442
- "emptyTitle": "_1nXeGW_emptyTitle",
5495
+ "list": "_1nXeGW_list",
5496
+ "rowRepo": "_1nXeGW_rowRepo",
5497
+ "root": "_1nXeGW_root",
5443
5498
  "rowTitleLine": "_1nXeGW_rowTitleLine",
5444
- "rowMeta": "_1nXeGW_rowMeta",
5445
- "rowUninstall": "_1nXeGW_rowUninstall",
5499
+ "segRow": "_1nXeGW_segRow",
5500
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
5446
5501
  "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
5447
- "row": "_1nXeGW_row",
5502
+ "emptyTitle": "_1nXeGW_emptyTitle",
5503
+ "statusDot": "_1nXeGW_statusDot",
5504
+ "rowActions": "_1nXeGW_rowActions",
5448
5505
  "segBtn": "_1nXeGW_segBtn",
5506
+ "row": "_1nXeGW_row",
5507
+ "updateBadge": "_1nXeGW_updateBadge",
5508
+ "rowDetail": "_1nXeGW_rowDetail",
5509
+ "rowTitle": "_1nXeGW_rowTitle",
5510
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
5449
5511
  "rowMain": "_1nXeGW_rowMain",
5512
+ "rowDesc": "_1nXeGW_rowDesc",
5513
+ "statusPending": "_1nXeGW_statusPending",
5514
+ "exampleBadge": "_1nXeGW_exampleBadge",
5515
+ "segLabel": "_1nXeGW_segLabel",
5450
5516
  "versionBadge": "_1nXeGW_versionBadge",
5451
- "rowCategory": "_1nXeGW_rowCategory",
5517
+ "exampleRow": "_1nXeGW_exampleRow",
5452
5518
  "segGroup": "_1nXeGW_segGroup",
5519
+ "segBtnActive": "_1nXeGW_segBtnActive",
5453
5520
  "rowUpdate": "_1nXeGW_rowUpdate",
5454
- "root": "_1nXeGW_root",
5455
- "rowDesc": "_1nXeGW_rowDesc",
5456
- "rowSourceTag": "_1nXeGW_rowSourceTag",
5457
- "exampleBadge": "_1nXeGW_exampleBadge",
5458
- "searchWrap": "_1nXeGW_searchWrap",
5459
- "statusInactive": "_1nXeGW_statusInactive",
5460
- "segRow": "_1nXeGW_segRow",
5461
- "rowTitle": "_1nXeGW_rowTitle",
5462
- "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
5463
- "rowRepo": "_1nXeGW_rowRepo",
5464
- "segBtnActive": "_1nXeGW_segBtnActive"
5521
+ "toolbar": "_1nXeGW_toolbar"
5465
5522
  };
5466
5523
  //#endregion
5467
5524
  //#region src/client/components/views/InstalledView.tsx
@@ -5529,7 +5586,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5529
5586
  }, item.installedVersion) : null, item.hasUpdate ? (0, react.createElement)("span", {
5530
5587
  className: InstalledView_module_css_default.updateBadge,
5531
5588
  title: t("updateAvailableHint")
5532
- }, t("updateAvailable")) : null), (0, react.createElement)("span", {
5589
+ }, t("updateAvailable")) : item.pendingUntil != null ? (0, react.createElement)("span", {
5590
+ className: InstalledView_module_css_default.updateBadge,
5591
+ title: t("updatePendingHint")
5592
+ }, t("updatePending", { time: clockTime(item.pendingUntil) })) : null), (0, react.createElement)("span", {
5533
5593
  className: isCustom ? `${InstalledView_module_css_default.rowSourceTag} ${InstalledView_module_css_default.rowSourceTagManual}` : `${InstalledView_module_css_default.rowSourceTag} ${InstalledView_module_css_default.rowSourceTagHub}`,
5534
5594
  title: isCustom ? t("manualInstallHint") : t("hubInstallHint")
5535
5595
  }, isCustom ? t("manualInstall") : t("hubInstall")), (0, react.createElement)("div", { className: InstalledView_module_css_default.rowActions }, !item.loaded && item.dshCapable && pendingRestart ? (0, react.createElement)("button", {
@@ -5705,27 +5765,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5705
5765
  css: css$6
5706
5766
  });
5707
5767
  var CustomInstallView_module_css_default = {
5708
- "root": "zISxCG_root",
5709
- "installError": "zISxCG_installError",
5710
- "installExample": "zISxCG_installExample",
5711
- "installCardDisabled": "zISxCG_installCardDisabled",
5712
- "installBtn": "zISxCG_installBtn",
5713
- "desc": "zISxCG_desc",
5714
5768
  "channelOff": "zISxCG_channelOff",
5769
+ "desc": "zISxCG_desc",
5770
+ "installExample": "zISxCG_installExample",
5715
5771
  "installRow": "zISxCG_installRow",
5716
- "installCards": "zISxCG_installCards",
5717
- "installCardHead": "zISxCG_installCardHead",
5718
- "installInputError": "zISxCG_installInputError",
5719
- "helpLine": "zISxCG_helpLine",
5720
- "installLabel": "zISxCG_installLabel",
5721
- "helpCmd": "zISxCG_helpCmd",
5772
+ "installError": "zISxCG_installError",
5722
5773
  "installCard": "zISxCG_installCard",
5774
+ "installCardDisabled": "zISxCG_installCardDisabled",
5775
+ "installHelpBtn": "zISxCG_installHelpBtn",
5776
+ "installBtn": "zISxCG_installBtn",
5723
5777
  "channelOffText": "zISxCG_channelOffText",
5724
5778
  "channelOffBtn": "zISxCG_channelOffBtn",
5779
+ "installCardHead": "zISxCG_installCardHead",
5780
+ "helpBody": "zISxCG_helpBody",
5781
+ "helpCmd": "zISxCG_helpCmd",
5725
5782
  "helpNote": "zISxCG_helpNote",
5726
- "installHelpBtn": "zISxCG_installHelpBtn",
5727
5783
  "installInput": "zISxCG_installInput",
5728
- "helpBody": "zISxCG_helpBody"
5784
+ "root": "zISxCG_root",
5785
+ "installCards": "zISxCG_installCards",
5786
+ "installLabel": "zISxCG_installLabel",
5787
+ "installInputError": "zISxCG_installInputError",
5788
+ "helpLine": "zISxCG_helpLine"
5729
5789
  };
5730
5790
  //#endregion
5731
5791
  //#region src/client/components/views/CustomInstallView.tsx
@@ -5881,30 +5941,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5881
5941
  css: css$5
5882
5942
  });
5883
5943
  var SettingsView_module_css_default = {
5884
- "root": "_506LLG_root",
5944
+ "textInput": "_506LLG_textInput",
5945
+ "proxyControl": "_506LLG_proxyControl",
5946
+ "navItemActive": "_506LLG_navItemActive",
5947
+ "card": "_506LLG_card",
5885
5948
  "content": "_506LLG_content",
5886
- "settingControl": "_506LLG_settingControl",
5887
- "controlDropdown": "_506LLG_controlDropdown",
5888
- "sidebar": "_506LLG_sidebar",
5949
+ "root": "_506LLG_root",
5950
+ "pageTitle": "_506LLG_pageTitle",
5889
5951
  "proxyHint": "_506LLG_proxyHint",
5890
- "settingRow": "_506LLG_settingRow",
5891
- "settingRowStack": "_506LLG_settingRowStack",
5892
- "textInput": "_506LLG_textInput",
5893
- "proxyHintOk": "_506LLG_proxyHintOk",
5894
- "settingDesc": "_506LLG_settingDesc",
5952
+ "resetBtn": "_506LLG_resetBtn",
5895
5953
  "navIcon": "_506LLG_navIcon",
5896
- "proxyControl": "_506LLG_proxyControl",
5897
5954
  "settingLabel": "_506LLG_settingLabel",
5955
+ "proxyHintFail": "_506LLG_proxyHintFail",
5898
5956
  "navItem": "_506LLG_navItem",
5899
- "pageTitle": "_506LLG_pageTitle",
5900
- "navItemActive": "_506LLG_navItemActive",
5901
- "resetBtn": "_506LLG_resetBtn",
5902
- "card": "_506LLG_card",
5903
- "settingControlStack": "_506LLG_settingControlStack",
5904
- "pageDesc": "_506LLG_pageDesc",
5905
5957
  "settingTitle": "_506LLG_settingTitle",
5958
+ "settingRowStack": "_506LLG_settingRowStack",
5959
+ "proxyHintOk": "_506LLG_proxyHintOk",
5906
5960
  "pageHeader": "_506LLG_pageHeader",
5907
- "proxyHintFail": "_506LLG_proxyHintFail"
5961
+ "settingControl": "_506LLG_settingControl",
5962
+ "settingRow": "_506LLG_settingRow",
5963
+ "controlDropdown": "_506LLG_controlDropdown",
5964
+ "sidebar": "_506LLG_sidebar",
5965
+ "settingControlStack": "_506LLG_settingControlStack",
5966
+ "settingDesc": "_506LLG_settingDesc",
5967
+ "pageDesc": "_506LLG_pageDesc"
5908
5968
  };
5909
5969
  //#endregion
5910
5970
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -5923,18 +5983,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5923
5983
  css: css$4
5924
5984
  });
5925
5985
  var Dropdown_module_css_default = {
5926
- "dropdownLabel": "B_Gxsq_dropdownLabel",
5986
+ "dropdownFill": "B_Gxsq_dropdownFill",
5987
+ "dropdownBtn": "B_Gxsq_dropdownBtn",
5988
+ "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
5927
5989
  "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
5928
- "dropdownPanel": "B_Gxsq_dropdownPanel",
5929
- "dropdownCountActive": "B_Gxsq_dropdownCountActive",
5930
- "dropdownCount": "B_Gxsq_dropdownCount",
5931
5990
  "dropdownArrow": "B_Gxsq_dropdownArrow",
5991
+ "dropdownItem": "B_Gxsq_dropdownItem",
5932
5992
  "dropdown": "B_Gxsq_dropdown",
5933
- "dropdownBtn": "B_Gxsq_dropdownBtn",
5993
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
5934
5994
  "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5935
- "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
5936
- "dropdownFill": "B_Gxsq_dropdownFill",
5937
- "dropdownItem": "B_Gxsq_dropdownItem"
5995
+ "dropdownCount": "B_Gxsq_dropdownCount",
5996
+ "dropdownPanel": "B_Gxsq_dropdownPanel",
5997
+ "dropdownCountActive": "B_Gxsq_dropdownCountActive"
5938
5998
  };
5939
5999
  //#endregion
5940
6000
  //#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
@@ -5954,8 +6014,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5954
6014
  });
5955
6015
  var Toggle_module_css_default = {
5956
6016
  "toggle": "k-cD4G_toggle",
5957
- "toggleOn": "k-cD4G_toggleOn",
5958
- "knob": "k-cD4G_knob"
6017
+ "knob": "k-cD4G_knob",
6018
+ "toggleOn": "k-cD4G_toggleOn"
5959
6019
  };
5960
6020
  //#endregion
5961
6021
  //#region src/client/components/ui/Toggle.tsx
@@ -6052,29 +6112,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6052
6112
  css: css$2
6053
6113
  });
6054
6114
  var DiagnosticsView_module_css_default = {
6055
- "envCopyBtn": "k9eRya_envCopyBtn",
6056
- "envTitle": "k9eRya_envTitle",
6057
- "head": "k9eRya_head",
6115
+ "badge": "k9eRya_badge",
6058
6116
  "summaryOk": "k9eRya_summaryOk",
6117
+ "envTitle": "k9eRya_envTitle",
6118
+ "badgeFail": "k9eRya_badgeFail",
6119
+ "diagPulse": "k9eRya_diagPulse",
6059
6120
  "display": "k9eRya_display",
6060
- "envRow": "k9eRya_envRow",
6061
6121
  "envLabel": "k9eRya_envLabel",
6062
- "summaryFail": "k9eRya_summaryFail",
6063
- "row": "k9eRya_row",
6064
6122
  "name": "k9eRya_name",
6065
- "badge": "k9eRya_badge",
6066
- "meta": "k9eRya_meta",
6067
- "runBtn": "k9eRya_runBtn",
6068
- "diagPulse": "k9eRya_diagPulse",
6069
- "envDesc": "k9eRya_envDesc",
6123
+ "summary": "k9eRya_summary",
6070
6124
  "panel": "k9eRya_panel",
6071
- "badgeRunning": "k9eRya_badgeRunning",
6072
6125
  "summaryRunning": "k9eRya_summaryRunning",
6073
- "badgeOk": "k9eRya_badgeOk",
6074
- "badgeFail": "k9eRya_badgeFail",
6075
- "summary": "k9eRya_summary",
6126
+ "envDesc": "k9eRya_envDesc",
6076
6127
  "badgeIdle": "k9eRya_badgeIdle",
6077
- "headHint": "k9eRya_headHint"
6128
+ "row": "k9eRya_row",
6129
+ "head": "k9eRya_head",
6130
+ "headHint": "k9eRya_headHint",
6131
+ "envRow": "k9eRya_envRow",
6132
+ "envCopyBtn": "k9eRya_envCopyBtn",
6133
+ "meta": "k9eRya_meta",
6134
+ "badgeOk": "k9eRya_badgeOk",
6135
+ "runBtn": "k9eRya_runBtn",
6136
+ "badgeRunning": "k9eRya_badgeRunning",
6137
+ "summaryFail": "k9eRya_summaryFail"
6078
6138
  };
6079
6139
  //#endregion
6080
6140
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -6249,57 +6309,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6249
6309
  css: css$1
6250
6310
  });
6251
6311
  var LogsView_module_css_default = {
6252
- "pathDialogReset": "_3j77BW_pathDialogReset",
6253
- "event": "_3j77BW_event",
6254
- "panel": "_3j77BW_panel",
6255
6312
  "list": "_3j77BW_list",
6256
- "entry": "_3j77BW_entry",
6257
- "footPath": "_3j77BW_footPath",
6258
- "footActions": "_3j77BW_footActions",
6259
- "catUninstall": "_3j77BW_catUninstall",
6313
+ "badgeError": "_3j77BW_badgeError",
6314
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
6315
+ "footCount": "_3j77BW_footCount",
6316
+ "catInstall": "_3j77BW_catInstall",
6317
+ "more": "_3j77BW_more",
6318
+ "actions": "_3j77BW_actions",
6319
+ "badge": "_3j77BW_badge",
6260
6320
  "head": "_3j77BW_head",
6261
- "badgeSuccess": "_3j77BW_badgeSuccess",
6262
- "headHint": "_3j77BW_headHint",
6263
- "badgeWarn": "_3j77BW_badgeWarn",
6264
- "filterBar": "_3j77BW_filterBar",
6265
- "logList": "_3j77BW_logList",
6321
+ "filterChip": "_3j77BW_filterChip",
6322
+ "searchInput": "_3j77BW_searchInput",
6266
6323
  "catSystem": "_3j77BW_catSystem",
6267
- "pathDialogRow": "_3j77BW_pathDialogRow",
6268
- "headActions": "_3j77BW_headActions",
6269
- "pathDraft": "_3j77BW_pathDraft",
6270
- "pathDialog": "_3j77BW_pathDialog",
6324
+ "pathLabel": "_3j77BW_pathLabel",
6271
6325
  "linkBtn": "_3j77BW_linkBtn",
6272
- "catUpdate": "_3j77BW_catUpdate",
6273
- "actions": "_3j77BW_actions",
6326
+ "footActions": "_3j77BW_footActions",
6327
+ "entry": "_3j77BW_entry",
6328
+ "catDiagnostics": "_3j77BW_catDiagnostics",
6329
+ "headHint": "_3j77BW_headHint",
6330
+ "catUninstall": "_3j77BW_catUninstall",
6331
+ "pathDraft": "_3j77BW_pathDraft",
6274
6332
  "message": "_3j77BW_message",
6275
- "previewRow": "_3j77BW_previewRow",
6276
- "catSettings": "_3j77BW_catSettings",
6277
- "searchInput": "_3j77BW_searchInput",
6278
- "pathLabel": "_3j77BW_pathLabel",
6279
- "filterChip": "_3j77BW_filterChip",
6280
- "badgeInfo": "_3j77BW_badgeInfo",
6333
+ "catUpdate": "_3j77BW_catUpdate",
6281
6334
  "time": "_3j77BW_time",
6282
- "filterChipActive": "_3j77BW_filterChipActive",
6283
- "footFail": "_3j77BW_footFail",
6284
- "badgeDebug": "_3j77BW_badgeDebug",
6285
- "badgeError": "_3j77BW_badgeError",
6286
- "search": "_3j77BW_search",
6287
- "badge": "_3j77BW_badge",
6335
+ "pathDialogRow": "_3j77BW_pathDialogRow",
6288
6336
  "pathDialogFoot": "_3j77BW_pathDialogFoot",
6289
- "moreEnd": "_3j77BW_moreEnd",
6290
- "catDiagnostics": "_3j77BW_catDiagnostics",
6291
- "pathDialogHint": "_3j77BW_pathDialogHint",
6292
- "footCount": "_3j77BW_footCount",
6293
- "btn": "_3j77BW_btn",
6294
- "foot": "_3j77BW_foot",
6337
+ "search": "_3j77BW_search",
6338
+ "badgeDebug": "_3j77BW_badgeDebug",
6295
6339
  "pathRow": "_3j77BW_pathRow",
6296
- "catBadge": "_3j77BW_catBadge",
6340
+ "logList": "_3j77BW_logList",
6297
6341
  "pathText": "_3j77BW_pathText",
6298
- "catInstall": "_3j77BW_catInstall",
6342
+ "headActions": "_3j77BW_headActions",
6343
+ "previewRow": "_3j77BW_previewRow",
6299
6344
  "empty": "_3j77BW_empty",
6300
- "pathDialogDesc": "_3j77BW_pathDialogDesc",
6345
+ "footFail": "_3j77BW_footFail",
6346
+ "badgeWarn": "_3j77BW_badgeWarn",
6347
+ "badgeInfo": "_3j77BW_badgeInfo",
6301
6348
  "clearBtn": "_3j77BW_clearBtn",
6302
- "more": "_3j77BW_more"
6349
+ "filterChipActive": "_3j77BW_filterChipActive",
6350
+ "pathDialogReset": "_3j77BW_pathDialogReset",
6351
+ "event": "_3j77BW_event",
6352
+ "filterBar": "_3j77BW_filterBar",
6353
+ "moreEnd": "_3j77BW_moreEnd",
6354
+ "catSettings": "_3j77BW_catSettings",
6355
+ "catBadge": "_3j77BW_catBadge",
6356
+ "panel": "_3j77BW_panel",
6357
+ "pathDialog": "_3j77BW_pathDialog",
6358
+ "pathDialogHint": "_3j77BW_pathDialogHint",
6359
+ "foot": "_3j77BW_foot",
6360
+ "footPath": "_3j77BW_footPath",
6361
+ "btn": "_3j77BW_btn",
6362
+ "badgeSuccess": "_3j77BW_badgeSuccess"
6303
6363
  };
6304
6364
  //#endregion
6305
6365
  //#region src/client/components/modals/LogsModal.tsx
@@ -7573,7 +7633,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
7573
7633
  openSection: settingsSection,
7574
7634
  onConsumedOpenSection: () => setSettingsSection(null)
7575
7635
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
7576
- info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.2.4" },
7636
+ info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.2.6" },
7577
7637
  state: catalog.hubUpdateState,
7578
7638
  currentVersion: catalog.hubCurrentVersion,
7579
7639
  lang,