dsh-plugin 1.3.2 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client/client.js CHANGED
@@ -140,6 +140,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
140
140
  logOpenFile: "打开文件",
141
141
  logOpenFileTip: "在系统文件管理器中定位日志文件",
142
142
  logOpenFileFail: "打开失败,请在文件管理器中手动定位",
143
+ logClearAll: "清空所有日志",
144
+ logClearConfirmTitle: "清空所有日志?",
145
+ logClearConfirmDesc: "将删除全部日志记录,且不可恢复。",
146
+ logClearing: "正在清空…",
147
+ logClearAllTip: "清空全部日志记录",
148
+ logClearFailed: "清空失败,请重试",
143
149
  logPathSettingTitle: "日志存放位置",
144
150
  logPathSettingDesc: "默认存于宿主配置目录,可填目录或 .log 文件路径改存别处",
145
151
  logPathPlaceholder: "留空恢复默认",
@@ -235,7 +241,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
235
241
  restartNow: "立即重启",
236
242
  restartLater: "稍后重启",
237
243
  restarting: "正在重启…",
238
- restartHint: "部分插件(如插件市场、顶层 bundle)需重启后才会生效。",
244
+ restartHint: "重启会中断正在进行的安装/卸载任务,其进度将丢失。部分插件(如插件市场、顶层 bundle)需重启后才会生效。",
239
245
  done: "完成",
240
246
  restartPendingHint: "安装成功,重启后生效",
241
247
  restartPendingHintUninstall: "卸载成功,重启后移除",
@@ -246,7 +252,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
246
252
  notificationsDesc: "安装、卸载任务与更新提醒都会记录在这里,即使错过提示也能随时回来查看。",
247
253
  notificationsEmpty: "暂无通知记录",
248
254
  notificationsClear: "清空通知",
255
+ notificationsClearConfirmTitle: "清空所有通知?",
256
+ notificationsClearConfirmDesc: "将删除全部通知记录,且不可恢复。",
249
257
  removeNotification: "删除这条通知",
258
+ removeNotificationConfirmTitle: "删除这条通知?",
259
+ removeNotificationConfirmDesc: "该通知将被移除,且不可恢复。",
250
260
  queuedTitle: "已加入安装排队",
251
261
  queuedUninstallTitle: "已加入卸载排队",
252
262
  queuedHint: "已加入排队,前序任务完成后将自动开始,可关闭本窗口继续浏览。",
@@ -432,6 +442,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
432
442
  logOpenFile: "Reveal",
433
443
  logOpenFileTip: "Reveal the log file in your system file manager",
434
444
  logOpenFileFail: "Could not open; locate the file manually",
445
+ logClearAll: "Clear all logs",
446
+ logClearConfirmTitle: "Clear all logs?",
447
+ logClearConfirmDesc: "All log entries will be deleted. This cannot be undone.",
448
+ logClearing: "Clearing…",
449
+ logClearAllTip: "Delete all log entries",
450
+ logClearFailed: "Failed to clear; try again",
435
451
  logPathSettingTitle: "Log Location",
436
452
  logPathSettingDesc: "Stored in the host config directory by default — set a directory or a .log file path to store elsewhere",
437
453
  logPathPlaceholder: "Leave empty for default",
@@ -527,7 +543,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
527
543
  restartNow: "Restart now",
528
544
  restartLater: "Later",
529
545
  restarting: "Restarting…",
530
- restartHint: "Some plugins (such as plugin markets / top-level bundles) only take effect after a restart.",
546
+ restartHint: "Restarting interrupts any in-progress install / uninstall task — its progress will be lost. Some plugins (such as plugin markets / top-level bundles) only take effect after a restart.",
531
547
  done: "Done",
532
548
  restartPendingHint: "Installed — takes effect after restart",
533
549
  restartPendingHintUninstall: "Removed — cleaned up after restart",
@@ -538,7 +554,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
538
554
  notificationsDesc: "Every install, remove and update notice is logged here — even if you missed the prompt, you can always check back.",
539
555
  notificationsEmpty: "No notifications yet",
540
556
  notificationsClear: "Clear notifications",
557
+ notificationsClearConfirmTitle: "Clear all notifications?",
558
+ notificationsClearConfirmDesc: "All notification records will be deleted. This cannot be undone.",
541
559
  removeNotification: "Remove this notification",
560
+ removeNotificationConfirmTitle: "Remove this notification?",
561
+ removeNotificationConfirmDesc: "This notification will be removed. This cannot be undone.",
542
562
  queuedTitle: "Queued…",
543
563
  queuedUninstallTitle: "Queued for removal…",
544
564
  queuedHint: "Queued — starts automatically after earlier tasks finish. You may close this window.",
@@ -606,47 +626,52 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
606
626
  tag.textContent = css$11;
607
627
  document.head.appendChild(tag);
608
628
  }
629
+ const cssRegistry$11 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
630
+ if (!cssRegistry$11.some((e) => e.tagId === tagId$11)) cssRegistry$11.push({
631
+ tagId: tagId$11,
632
+ css: css$11
633
+ });
609
634
  var Header_module_css_default = {
610
- "brandTitle": "qikqja_brandTitle",
611
- "githubLink": "qikqja_githubLink",
612
635
  "headerTitleRow": "qikqja_headerTitleRow",
613
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
614
- "copyIcon": "qikqja_copyIcon",
615
- "logoIcon": "qikqja_logoIcon",
616
636
  "sortGroup": "qikqja_sortGroup",
617
637
  "segGroup": "qikqja_segGroup",
618
638
  "segBtn": "qikqja_segBtn",
619
- "tabActive": "qikqja_tabActive",
620
- "controls": "qikqja_controls",
621
- "tab": "qikqja_tab",
622
- "adBadge": "qikqja_adBadge",
623
- "segBtnActive": "qikqja_segBtnActive",
624
- "aboutBtn": "qikqja_aboutBtn",
639
+ "tabsRow": "qikqja_tabsRow",
640
+ "search": "qikqja_search",
625
641
  "header": "qikqja_header",
626
642
  "tabs": "qikqja_tabs",
627
- "version": "qikqja_version",
628
- "taglineLink": "qikqja_taglineLink",
643
+ "copyIcon": "qikqja_copyIcon",
644
+ "adBanner": "qikqja_adBanner",
645
+ "segBtnActive": "qikqja_segBtnActive",
646
+ "githubLink": "qikqja_githubLink",
647
+ "langBtn": "qikqja_langBtn",
629
648
  "headerRight": "qikqja_headerRight",
630
- "resultCount": "qikqja_resultCount",
631
- "adArrow": "qikqja_adArrow",
632
- "tabsRow": "qikqja_tabsRow",
649
+ "tabActive": "qikqja_tabActive",
650
+ "aboutBtn": "qikqja_aboutBtn",
651
+ "resultSeg": "qikqja_resultSeg",
652
+ "root": "qikqja_root",
653
+ "adBadge": "qikqja_adBadge",
633
654
  "tagline": "qikqja_tagline",
634
- "adText": "qikqja_adText",
635
- "tabCount": "qikqja_tabCount",
655
+ "version": "qikqja_version",
636
656
  "versionBtn": "qikqja_versionBtn",
657
+ "logoIcon": "qikqja_logoIcon",
658
+ "brandTitle": "qikqja_brandTitle",
637
659
  "searchRow": "qikqja_searchRow",
638
- "search": "qikqja_search",
639
- "adBanner": "qikqja_adBanner",
640
- "title": "qikqja_title",
641
- "resultSeg": "qikqja_resultSeg",
642
- "root": "qikqja_root",
643
660
  "githubIcon": "qikqja_githubIcon",
644
661
  "segLabel": "qikqja_segLabel",
645
- "langBtn": "qikqja_langBtn"
662
+ "tab": "qikqja_tab",
663
+ "tabCount": "qikqja_tabCount",
664
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
665
+ "resultCount": "qikqja_resultCount",
666
+ "title": "qikqja_title",
667
+ "taglineLink": "qikqja_taglineLink",
668
+ "adText": "qikqja_adText",
669
+ "controls": "qikqja_controls",
670
+ "adArrow": "qikqja_adArrow"
646
671
  };
647
672
  //#endregion
648
673
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
649
- const css$10 = ".BiQ1zG_overlay{z-index:998;-webkit-user-select:none;user-select:none;background:#00000061;justify-content:center;align-items:center;animation:.16s ease-out BiQ1zG_overlayIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.BiQ1zG_modal,.BiQ1zG_errorModal{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:10px;flex-direction:column;gap:10px;width:420px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:14px 16px;animation:.18s ease-out BiQ1zG_modalIn;display:flex;box-shadow:0 12px 40px #0000003d}.BiQ1zG_errorModal{width:640px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:560px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:780px;max-width:calc(100vw - 48px);height:min(540px,100vh - 64px)}.BiQ1zG_modalHead{flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;display:flex}.BiQ1zG_modalTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_modalTitleBusy{color:var(--hub-brand)}.BiQ1zG_modalTitleQueued{color:var(--hub-warning)}.BiQ1zG_modalClose{width:24px;height:24px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:inline-flex}.BiQ1zG_modalClose:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalCloseIcon{flex-shrink:0;width:14px;height:14px}.BiQ1zG_modalDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_trustHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_cliOnlyHint{color:var(--hub-text-secondary);background:var(--hub-bg-hover);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_failedCopyHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_modalRow{align-items:baseline;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.BiQ1zG_modalLabel{min-width:64px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_modalValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);font-weight:500;overflow:hidden}.BiQ1zG_modalLink{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex;overflow:hidden}.BiQ1zG_modalLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_linkIcon{flex-shrink:0}.BiQ1zG_modalCmd{color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 6px 6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_modalCmd:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_modalCmdText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.BiQ1zG_modalCmdCopy{color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-family:inherit;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_modalCmdCopy:hover{color:var(--hub-brand-hover);background:var(--hub-bg-2)}.BiQ1zG_modalActions{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.BiQ1zG_modalBody{flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex;overflow-y:auto}.BiQ1zG_toast{z-index:1000;background:var(--hub-btn-fill);color:var(--hub-text-on-fill);pointer-events:none;white-space:nowrap;border:none;border-radius:8px;padding:10px 16px;font-size:12px;font-weight:500;line-height:18px;animation:.22s ease-out BiQ1zG_toastIn;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 6px 24px #00000047}@keyframes BiQ1zG_toastIn{0%{opacity:0;transform:translate(-50%,-44%)}to{opacity:1;transform:translate(-50%,-50%)}}.BiQ1zG_toastFail{background:var(--hub-danger);color:#fff;border-color:#ffffff3d}.BiQ1zG_queueSection{flex-direction:column;gap:6px;display:flex}.BiQ1zG_queueSectionTitle{color:var(--hub-text-secondary);padding:4px 2px 0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_pendingRowStatus{color:var(--hub-warn);flex-shrink:0;font-weight:500}.BiQ1zG_pendingRowActions{flex-shrink:0;gap:8px;margin-left:auto;display:flex}.BiQ1zG_queueRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;flex-direction:column;gap:5px;padding:8px 10px;font-size:12px;line-height:18px;transition:background .12s;display:flex}.BiQ1zG_queueRow:hover{background:var(--hub-brand-tint)}.BiQ1zG_queueRowHead{align-items:center;gap:10px;display:flex}.BiQ1zG_queueRowTarget{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.BiQ1zG_queueRowDesc{color:var(--hub-text-tertiary);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.BiQ1zG_queueRowBody{align-items:center;gap:8px;display:flex}.BiQ1zG_queueRowStatus{color:var(--hub-brand);flex-shrink:0;font-weight:500}.BiQ1zG_queueRowTrack{flex:1;min-width:0}.BiQ1zG_queueRowPct{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0}.BiQ1zG_stripCancel{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:12px;line-height:18px;transition:background .12s,color .12s}.BiQ1zG_stripCancel:hover{background:var(--hub-danger-tint);color:var(--hub-danger-text)}.BiQ1zG_stripCancel:disabled{opacity:.45;cursor:default}.BiQ1zG_queuedHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:5px 10px;font-size:12px;line-height:18px}.BiQ1zG_errorTitle{color:var(--hub-danger-text);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_errorBox{border:1px solid var(--hub-danger-border);background:var(--hub-danger-tint-weak);max-height:240px;color:var(--hub-text-primary);white-space:pre-wrap;word-break:break-word;-webkit-user-select:none;user-select:none;border-radius:6px;margin:0;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:17px;overflow:auto}.BiQ1zG_errorCopySoft{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_errorCopySoft:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_errorHint{color:var(--hub-text-tertiary);font-size:12px;line-height:18px}.BiQ1zG_modalCancel,.BiQ1zG_modalCopy{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_modalCancel:hover,.BiQ1zG_modalCopy:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalInstall{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_modalInstall:hover{background:var(--hub-btn-hover)}.BiQ1zG_modalCopy:disabled,.BiQ1zG_modalInstall:disabled,.BiQ1zG_modalCancel:disabled,.BiQ1zG_modalClose:disabled,.BiQ1zG_uninstallConfirm:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_uninstallConfirm{color:#fff;background:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_uninstallConfirm:hover{background:var(--hub-danger-hover)}.BiQ1zG_result{text-align:center;flex-direction:column;align-items:center;gap:5px;padding:10px 0 2px;display:flex}.BiQ1zG_resultCheck{background:var(--hub-success-tint);width:40px;height:40px;color:var(--hub-success);border-radius:50%;justify-content:center;align-items:center;margin-bottom:3px;display:inline-flex}.BiQ1zG_resultCheckIcon{flex-shrink:0;width:20px;height:20px}.BiQ1zG_resultTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_resultDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_resultRestarting{color:var(--hub-text-tertiary);padding:12px 0 6px;font-size:12px;line-height:18px}.BiQ1zG_restartLater{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_restartLater:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_restartNow{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNow:hover{background:var(--hub-btn-hover)}.BiQ1zG_restartNow:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_restartNowWarning{color:#fff;background:var(--hub-warning);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNowWarning:hover{background:var(--hub-warning-hover)}.BiQ1zG_restartNowWarning:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_result .BiQ1zG_modalActions{justify-content:center;gap:10px;margin-top:0;padding:6px 0 2px}.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartLater,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNow,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNowWarning{min-width:100px}.BiQ1zG_progress{margin:10px 0 2px}.BiQ1zG_progressHead{justify-content:flex-end;align-items:center;margin-bottom:3px;display:flex}.BiQ1zG_progressText{color:var(--hub-text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:14px}.BiQ1zG_progressTrack{background:var(--hub-border-2);border-radius:2px;height:4px;overflow:hidden}.BiQ1zG_progressFill{background:var(--hub-brand);border-radius:2px;height:100%;transition:width .32s}.BiQ1zG_progressFillFail{background:var(--hub-danger)}@keyframes BiQ1zG_overlayIn{0%{opacity:0}to{opacity:1}}@keyframes BiQ1zG_modalIn{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.BiQ1zG_failList{flex-direction:column;gap:12px;padding-right:2px;display:flex}.BiQ1zG_failRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.BiQ1zG_failHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeList{flex-direction:column;gap:10px;padding-right:2px;display:flex}.BiQ1zG_noticeRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;align-items:stretch;gap:6px;padding:10px 12px;display:flex}.BiQ1zG_noticeRowMain{align-items:center;gap:10px;width:100%;min-width:0;display:flex}.BiQ1zG_noticeBadgeOk,.BiQ1zG_noticeBadgeFail{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;box-shadow:0 2px 6px #0000002e}.BiQ1zG_noticeBadgeOk{background:var(--hub-success)}.BiQ1zG_noticeBadgeFail{background:var(--hub-danger)}.BiQ1zG_noticeBadgeIcon{flex-shrink:0;width:12px;height:12px}.BiQ1zG_noticeMain{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeTextOk{color:var(--hub-success);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeTextFail{color:var(--hub-danger-text);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeFoot{justify-content:flex-end;align-items:center;display:flex}.BiQ1zG_noticeTime{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px;line-height:16px}.BiQ1zG_noticeRemove{width:22px;height:22px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_noticeRemove:hover{color:var(--hub-danger-text);background:var(--hub-danger-tint)}.BiQ1zG_noticeRowOk .BiQ1zG_noticeRemove{margin-left:0}.BiQ1zG_noticeRowOk .BiQ1zG_noticeTime{margin-left:auto}.BiQ1zG_noticeRowUpdate{cursor:pointer;transition:border-color .12s,background .12s}.BiQ1zG_noticeRowUpdate:hover{border-color:var(--hub-brand);background:var(--hub-brand-tint)}.BiQ1zG_noticeVersion{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border);font-variant-numeric:tabular-nums;border-radius:5px;flex-shrink:0;padding:0 6px;font-size:11px;font-weight:600;line-height:18px}.BiQ1zG_noticeUpdateGo{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:5px;flex-shrink:0;margin-left:2px;padding:2px 8px;font-size:11px;font-weight:600;line-height:16px;transition:background .12s}.BiQ1zG_noticeUpdateGo:hover{background:var(--hub-brand-hover)}.BiQ1zG_noticeIgnore{color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:5px;flex-shrink:0;margin-left:2px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px;transition:color .12s,border-color .12s,background .12s}.BiQ1zG_noticeIgnore:hover{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKind{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;font-weight:500;line-height:16px}.BiQ1zG_failKindInstall{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKindUninstall{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}.BiQ1zG_failRepo{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:18px;text-decoration:none;overflow:hidden}.BiQ1zG_failRepo:hover{text-decoration:underline}.BiQ1zG_failCopy{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_failCopy:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_failEmpty{text-align:center;color:var(--hub-text-tertiary);padding:24px 0;font-size:12px;line-height:18px}.BiQ1zG_failClear{color:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_failClear:hover{color:#fff;background:var(--hub-danger)}.BiQ1zG_failBigIssue{box-sizing:border-box;text-align:center;color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;width:100%;margin-top:4px;padding:3px 16px;font-size:13px;font-weight:600;line-height:18px;text-decoration:none;transition:background .12s,border-color .12s,box-shadow .12s;display:block}.BiQ1zG_failBigIssue:hover{background:var(--hub-danger-hover);border-color:var(--hub-danger-hover);box-shadow:0 3px 10px #d1242f59}.BiQ1zG_failPrepareHint{color:var(--hub-warning);background:var(--hub-warning-tint);border:1px solid var(--hub-warning-border);border-radius:6px;margin-top:6px;padding:8px 12px;font-size:12px;line-height:18px}.BiQ1zG_aboutModal{width:460px;max-width:calc(100vw - 48px)}.BiQ1zG_aboutContent{min-height:0;max-height:340px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_aboutContent>:first-child{margin-top:0}.BiQ1zG_aboutContent>:last-child{margin-bottom:0}.BiQ1zG_aboutContent h2,.BiQ1zG_aboutContent h3,.BiQ1zG_aboutContent h4,.BiQ1zG_aboutContent h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_aboutContent h2{font-size:14px}.BiQ1zG_aboutContent p{margin:4px 0}.BiQ1zG_aboutContent ul,.BiQ1zG_aboutContent ol{margin:4px 0;padding-left:18px}.BiQ1zG_aboutContent li{margin:2px 0}.BiQ1zG_aboutContent code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_aboutContent pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_aboutContent pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_aboutContent blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_aboutContent a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_aboutContent a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_aboutContent img{border-radius:8px;max-width:100%;max-height:220px;margin:8px auto;display:block;box-shadow:0 2px 8px #0000001f}.BiQ1zG_aboutMeta{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.BiQ1zG_hubUpdateModal{width:520px;max-width:calc(100vw - 48px)}.BiQ1zG_hubUpdateMeta{flex-wrap:wrap;align-items:center;gap:4px 14px;font-size:12px;line-height:18px;display:flex}.BiQ1zG_hubUpdateMetaItem{color:var(--hub-text-tertiary)}.BiQ1zG_hubUpdateNotes{min-height:0;max-height:300px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_hubUpdateNotes>:first-child{margin-top:0}.BiQ1zG_hubUpdateNotes>:last-child{margin-bottom:0}.BiQ1zG_hubUpdateNotes h2,.BiQ1zG_hubUpdateNotes h3,.BiQ1zG_hubUpdateNotes h4,.BiQ1zG_hubUpdateNotes h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_hubUpdateNotes h2{font-size:14px}.BiQ1zG_hubUpdateNotes p{margin:4px 0}.BiQ1zG_hubUpdateNotes ul,.BiQ1zG_hubUpdateNotes ol{margin:4px 0;padding-left:18px}.BiQ1zG_hubUpdateNotes li{margin:2px 0}.BiQ1zG_hubUpdateNotes code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_hubUpdateNotes pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_hubUpdateNotes pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_hubUpdateNotes blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_hubUpdateNotes a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_hubUpdateNotes a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailModal{width:480px;max-width:calc(100vw - 48px)}.BiQ1zG_detailUpdateHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_detailGrid{flex-direction:column;gap:6px;display:flex}.BiQ1zG_detailRow{align-items:baseline;gap:10px;min-width:0;font-size:12px;line-height:20px;display:flex}.BiQ1zG_detailLabel{text-align:right;width:76px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_detailValue{min-width:0;color:var(--hub-text-primary);flex-wrap:wrap;flex:auto;align-items:baseline;gap:4px 6px;font-weight:500;display:flex}.BiQ1zG_detailMono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500}.BiQ1zG_detailArrow{color:var(--hub-text-tertiary);align-items:baseline;gap:4px;display:inline-flex}.BiQ1zG_detailDim{color:var(--hub-text-tertiary);font-size:11px;font-weight:400}.BiQ1zG_detailLink{min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex}.BiQ1zG_detailLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailStars{color:#b45309;font-weight:600}.BiQ1zG_detailPath{min-width:0;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;flex:auto;justify-content:space-between;align-items:center;gap:6px;padding:3px 3px 3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_detailPath:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_detailPathText{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0;overflow:hidden}.BiQ1zG_detailPathActions{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.BiQ1zG_detailPathBtn{width:28px;height:28px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:center;align-items:center;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.BiQ1zG_detailPathBtn svg{width:15px;height:15px}.BiQ1zG_detailPathBtn:hover{color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}.BiQ1zG_detailStatusRunning,.BiQ1zG_detailStatusPending{border-radius:50%;flex-shrink:0;align-self:center;width:8px;height:8px}.BiQ1zG_detailStatusRunning{background:var(--hub-success)}.BiQ1zG_detailStatusPending{background:var(--hub-warning)}.BiQ1zG_detailStatusText{font-weight:500}";
674
+ const css$10 = ".BiQ1zG_overlay{z-index:998;-webkit-user-select:none;user-select:none;background:#00000061;justify-content:center;align-items:center;animation:.16s ease-out BiQ1zG_overlayIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.BiQ1zG_modal,.BiQ1zG_errorModal{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:10px;flex-direction:column;gap:10px;width:420px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:14px 16px;animation:.18s ease-out BiQ1zG_modalIn;display:flex;box-shadow:0 12px 40px #0000003d}.BiQ1zG_errorModal{width:640px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:560px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:780px;max-width:calc(100vw - 48px);height:min(540px,100vh - 64px)}.BiQ1zG_modalHead{flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;display:flex}.BiQ1zG_modalTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_modalTitleBusy{color:var(--hub-brand)}.BiQ1zG_modalTitleQueued{color:var(--hub-warning)}.BiQ1zG_modalClose{width:24px;height:24px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:inline-flex}.BiQ1zG_modalClose:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalCloseIcon{flex-shrink:0;width:14px;height:14px}.BiQ1zG_confirmIconWrap{justify-content:center;padding:2px 0 6px;display:flex}.BiQ1zG_confirmIcon{background:var(--hub-brand);border-radius:50%;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex;box-shadow:0 4px 12px #4f6ef747}.BiQ1zG_confirmIconDanger{background:var(--hub-danger);box-shadow:0 4px 12px #d1242f4d}.BiQ1zG_dangerConfirm{color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:background-color .12s,border-color .12s}.BiQ1zG_dangerConfirm:hover:not(:disabled){background:var(--hub-danger-hover);border-color:var(--hub-danger-hover)}.BiQ1zG_dangerConfirm:disabled{opacity:.55;cursor:default}.BiQ1zG_confirmPrimary{color:#fff;background:var(--hub-brand);border:1px solid var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:filter .12s}.BiQ1zG_confirmPrimary:hover:not(:disabled){filter:brightness(1.08)}.BiQ1zG_confirmPrimary:disabled{opacity:.55;cursor:default}.BiQ1zG_modalDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_trustHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_cliOnlyHint{color:var(--hub-text-secondary);background:var(--hub-bg-hover);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_failedCopyHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_modalRow{align-items:baseline;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.BiQ1zG_modalLabel{min-width:64px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_modalValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);font-weight:500;overflow:hidden}.BiQ1zG_modalLink{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex;overflow:hidden}.BiQ1zG_modalLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_linkIcon{flex-shrink:0}.BiQ1zG_modalCmd{color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 6px 6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_modalCmd:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_modalCmdText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.BiQ1zG_modalCmdCopy{color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-family:inherit;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_modalCmdCopy:hover{color:var(--hub-brand-hover);background:var(--hub-bg-2)}.BiQ1zG_modalActions{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.BiQ1zG_modalBody{flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex;overflow-y:auto}.BiQ1zG_toast{z-index:1000;background:var(--hub-btn-fill);color:var(--hub-text-on-fill);pointer-events:none;white-space:nowrap;border:none;border-radius:8px;padding:10px 16px;font-size:12px;font-weight:500;line-height:18px;animation:.22s ease-out BiQ1zG_toastIn;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 6px 24px #00000047}@keyframes BiQ1zG_toastIn{0%{opacity:0;transform:translate(-50%,-44%)}to{opacity:1;transform:translate(-50%,-50%)}}.BiQ1zG_toastFail{background:var(--hub-danger);color:#fff;border-color:#ffffff3d}.BiQ1zG_queueSection{flex-direction:column;gap:6px;display:flex}.BiQ1zG_queueSectionTitle{color:var(--hub-text-secondary);padding:4px 2px 0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_pendingRowStatus{color:var(--hub-warn);flex-shrink:0;font-weight:500}.BiQ1zG_pendingRowActions{flex-shrink:0;gap:8px;margin-left:auto;display:flex}.BiQ1zG_queueRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;flex-direction:column;gap:5px;padding:8px 10px;font-size:12px;line-height:18px;transition:background .12s;display:flex}.BiQ1zG_queueRow:hover{background:var(--hub-brand-tint)}.BiQ1zG_queueRowHead{align-items:center;gap:10px;display:flex}.BiQ1zG_queueRowTarget{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.BiQ1zG_queueRowDesc{color:var(--hub-text-tertiary);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.BiQ1zG_queueRowBody{align-items:center;gap:8px;display:flex}.BiQ1zG_queueRowStatus{color:var(--hub-brand);flex-shrink:0;font-weight:500}.BiQ1zG_queueRowTrack{flex:1;min-width:0}.BiQ1zG_queueRowPct{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0}.BiQ1zG_stripCancel{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:12px;line-height:18px;transition:background .12s,color .12s}.BiQ1zG_stripCancel:hover{background:var(--hub-danger-tint);color:var(--hub-danger-text)}.BiQ1zG_stripCancel:disabled{opacity:.45;cursor:default}.BiQ1zG_queuedHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:5px 10px;font-size:12px;line-height:18px}.BiQ1zG_errorTitle{color:var(--hub-danger-text);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_errorBox{border:1px solid var(--hub-danger-border);background:var(--hub-danger-tint-weak);max-height:240px;color:var(--hub-text-primary);white-space:pre-wrap;word-break:break-word;-webkit-user-select:none;user-select:none;border-radius:6px;margin:0;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:17px;overflow:auto}.BiQ1zG_errorCopySoft{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_errorCopySoft:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_errorHint{color:var(--hub-text-tertiary);font-size:12px;line-height:18px}.BiQ1zG_modalCancel,.BiQ1zG_modalCopy{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_modalCancel:hover,.BiQ1zG_modalCopy:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalInstall{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_modalInstall:hover{background:var(--hub-btn-hover)}.BiQ1zG_modalCopy:disabled,.BiQ1zG_modalInstall:disabled,.BiQ1zG_modalCancel:disabled,.BiQ1zG_modalClose:disabled,.BiQ1zG_uninstallConfirm:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_uninstallConfirm{color:#fff;background:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_uninstallConfirm:hover{background:var(--hub-danger-hover)}.BiQ1zG_result{text-align:center;flex-direction:column;align-items:center;gap:5px;padding:10px 0 2px;display:flex}.BiQ1zG_resultCheck{background:var(--hub-success-tint);width:40px;height:40px;color:var(--hub-success);border-radius:50%;justify-content:center;align-items:center;margin-bottom:3px;display:inline-flex}.BiQ1zG_resultCheckIcon{flex-shrink:0;width:20px;height:20px}.BiQ1zG_resultTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_resultDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_resultRestarting{color:var(--hub-text-tertiary);padding:12px 0 6px;font-size:12px;line-height:18px}.BiQ1zG_restartLater{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_restartLater:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_restartNow{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNow:hover{background:var(--hub-btn-hover)}.BiQ1zG_restartNow:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_restartNowWarning{color:#fff;background:var(--hub-warning);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNowWarning:hover{background:var(--hub-warning-hover)}.BiQ1zG_restartNowWarning:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_result .BiQ1zG_modalActions{justify-content:center;gap:10px;margin-top:0;padding:6px 0 2px}.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartLater,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNow,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNowWarning{min-width:100px}.BiQ1zG_progress{margin:10px 0 2px}.BiQ1zG_progressHead{justify-content:flex-end;align-items:center;margin-bottom:3px;display:flex}.BiQ1zG_progressText{color:var(--hub-text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:14px}.BiQ1zG_progressTrack{background:var(--hub-border-2);border-radius:2px;height:4px;overflow:hidden}.BiQ1zG_progressFill{background:var(--hub-brand);border-radius:2px;height:100%;transition:width .32s}.BiQ1zG_progressFillFail{background:var(--hub-danger)}@keyframes BiQ1zG_overlayIn{0%{opacity:0}to{opacity:1}}@keyframes BiQ1zG_modalIn{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.BiQ1zG_failList{flex-direction:column;gap:12px;padding-right:2px;display:flex}.BiQ1zG_failRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.BiQ1zG_failHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeList{flex-direction:column;gap:10px;padding-right:2px;display:flex}.BiQ1zG_noticeRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;align-items:stretch;gap:6px;padding:10px 12px;display:flex}.BiQ1zG_noticeRowMain{align-items:center;gap:10px;width:100%;min-width:0;display:flex}.BiQ1zG_noticeBadgeOk,.BiQ1zG_noticeBadgeFail{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;box-shadow:0 2px 6px #0000002e}.BiQ1zG_noticeBadgeOk{background:var(--hub-success)}.BiQ1zG_noticeBadgeFail{background:var(--hub-danger)}.BiQ1zG_noticeBadgeIcon{flex-shrink:0;width:12px;height:12px}.BiQ1zG_noticeMain{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeTextOk{color:var(--hub-success);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeTextFail{color:var(--hub-danger-text);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeFoot{justify-content:flex-end;align-items:center;display:flex}.BiQ1zG_noticeTime{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px;line-height:16px}.BiQ1zG_noticeRemove{width:22px;height:22px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_noticeRemove:hover{color:var(--hub-danger-text);background:var(--hub-danger-tint)}.BiQ1zG_noticeRowOk .BiQ1zG_noticeRemove{margin-left:0}.BiQ1zG_noticeRowOk .BiQ1zG_noticeTime{margin-left:auto}.BiQ1zG_noticeRowUpdate{cursor:pointer;transition:border-color .12s,background .12s}.BiQ1zG_noticeRowUpdate:hover{border-color:var(--hub-brand);background:var(--hub-brand-tint)}.BiQ1zG_noticeVersion{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border);font-variant-numeric:tabular-nums;border-radius:5px;flex-shrink:0;padding:0 6px;font-size:11px;font-weight:600;line-height:18px}.BiQ1zG_noticeUpdateGo{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:5px;flex-shrink:0;margin-left:2px;padding:2px 8px;font-size:11px;font-weight:600;line-height:16px;transition:background .12s}.BiQ1zG_noticeUpdateGo:hover{background:var(--hub-brand-hover)}.BiQ1zG_noticeIgnore{color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:5px;flex-shrink:0;margin-left:2px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px;transition:color .12s,border-color .12s,background .12s}.BiQ1zG_noticeIgnore:hover{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKind{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;font-weight:500;line-height:16px}.BiQ1zG_failKindInstall{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKindUninstall{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}.BiQ1zG_failRepo{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:18px;text-decoration:none;overflow:hidden}.BiQ1zG_failRepo:hover{text-decoration:underline}.BiQ1zG_failCopy{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_failCopy:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_failEmpty{text-align:center;color:var(--hub-text-tertiary);padding:24px 0;font-size:12px;line-height:18px}.BiQ1zG_failClear{color:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_failClear:hover{color:#fff;background:var(--hub-danger)}.BiQ1zG_failBigIssue{box-sizing:border-box;text-align:center;color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;width:100%;margin-top:4px;padding:3px 16px;font-size:13px;font-weight:600;line-height:18px;text-decoration:none;transition:background .12s,border-color .12s,box-shadow .12s;display:block}.BiQ1zG_failBigIssue:hover{background:var(--hub-danger-hover);border-color:var(--hub-danger-hover);box-shadow:0 3px 10px #d1242f59}.BiQ1zG_failPrepareHint{color:var(--hub-warning);background:var(--hub-warning-tint);border:1px solid var(--hub-warning-border);border-radius:6px;margin-top:6px;padding:8px 12px;font-size:12px;line-height:18px}.BiQ1zG_aboutModal{width:460px;max-width:calc(100vw - 48px)}.BiQ1zG_aboutContent{min-height:0;max-height:340px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_aboutContent>:first-child{margin-top:0}.BiQ1zG_aboutContent>:last-child{margin-bottom:0}.BiQ1zG_aboutContent h2,.BiQ1zG_aboutContent h3,.BiQ1zG_aboutContent h4,.BiQ1zG_aboutContent h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_aboutContent h2{font-size:14px}.BiQ1zG_aboutContent p{margin:4px 0}.BiQ1zG_aboutContent ul,.BiQ1zG_aboutContent ol{margin:4px 0;padding-left:18px}.BiQ1zG_aboutContent li{margin:2px 0}.BiQ1zG_aboutContent code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_aboutContent pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_aboutContent pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_aboutContent blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_aboutContent a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_aboutContent a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_aboutContent img{border-radius:8px;max-width:100%;max-height:220px;margin:8px auto;display:block;box-shadow:0 2px 8px #0000001f}.BiQ1zG_aboutMeta{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.BiQ1zG_hubUpdateModal{width:520px;max-width:calc(100vw - 48px)}.BiQ1zG_hubUpdateMeta{flex-wrap:wrap;align-items:center;gap:4px 14px;font-size:12px;line-height:18px;display:flex}.BiQ1zG_hubUpdateMetaItem{color:var(--hub-text-tertiary)}.BiQ1zG_hubUpdateNotes{min-height:0;max-height:300px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_hubUpdateNotes>:first-child{margin-top:0}.BiQ1zG_hubUpdateNotes>:last-child{margin-bottom:0}.BiQ1zG_hubUpdateNotes h2,.BiQ1zG_hubUpdateNotes h3,.BiQ1zG_hubUpdateNotes h4,.BiQ1zG_hubUpdateNotes h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_hubUpdateNotes h2{font-size:14px}.BiQ1zG_hubUpdateNotes p{margin:4px 0}.BiQ1zG_hubUpdateNotes ul,.BiQ1zG_hubUpdateNotes ol{margin:4px 0;padding-left:18px}.BiQ1zG_hubUpdateNotes li{margin:2px 0}.BiQ1zG_hubUpdateNotes code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_hubUpdateNotes pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_hubUpdateNotes pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_hubUpdateNotes blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_hubUpdateNotes a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_hubUpdateNotes a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailModal{width:480px;max-width:calc(100vw - 48px)}.BiQ1zG_detailUpdateHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_detailGrid{flex-direction:column;gap:6px;display:flex}.BiQ1zG_detailRow{align-items:baseline;gap:10px;min-width:0;font-size:12px;line-height:20px;display:flex}.BiQ1zG_detailLabel{text-align:right;width:76px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_detailValue{min-width:0;color:var(--hub-text-primary);flex-wrap:wrap;flex:auto;align-items:baseline;gap:4px 6px;font-weight:500;display:flex}.BiQ1zG_detailMono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500}.BiQ1zG_detailArrow{color:var(--hub-text-tertiary);align-items:baseline;gap:4px;display:inline-flex}.BiQ1zG_detailDim{color:var(--hub-text-tertiary);font-size:11px;font-weight:400}.BiQ1zG_detailLink{min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex}.BiQ1zG_detailLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailStars{color:#b45309;font-weight:600}.BiQ1zG_detailPath{min-width:0;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;flex:auto;justify-content:space-between;align-items:center;gap:6px;padding:3px 3px 3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_detailPath:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_detailPathText{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0;overflow:hidden}.BiQ1zG_detailPathActions{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.BiQ1zG_detailPathBtn{width:28px;height:28px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:center;align-items:center;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.BiQ1zG_detailPathBtn svg{width:15px;height:15px}.BiQ1zG_detailPathBtn:hover{color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}.BiQ1zG_detailStatusRunning,.BiQ1zG_detailStatusPending{border-radius:50%;flex-shrink:0;align-self:center;width:8px;height:8px}.BiQ1zG_detailStatusRunning{background:var(--hub-success)}.BiQ1zG_detailStatusPending{background:var(--hub-warning)}.BiQ1zG_detailStatusText{font-weight:500}";
650
675
  const tagId$10 = "dsh-plugin/Modal.module.css";
651
676
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
652
677
  const tag = document.createElement("style");
@@ -655,130 +680,140 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
655
680
  tag.textContent = css$10;
656
681
  document.head.appendChild(tag);
657
682
  }
683
+ const cssRegistry$10 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
684
+ if (!cssRegistry$10.some((e) => e.tagId === tagId$10)) cssRegistry$10.push({
685
+ tagId: tagId$10,
686
+ css: css$10
687
+ });
658
688
  var Modal_module_css_default = {
659
- "noticeRemove": "BiQ1zG_noticeRemove",
660
- "pendingRowActions": "BiQ1zG_pendingRowActions",
689
+ "resultCheck": "BiQ1zG_resultCheck",
690
+ "dangerConfirm": "BiQ1zG_dangerConfirm",
691
+ "detailModal": "BiQ1zG_detailModal",
692
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
693
+ "modalLabel": "BiQ1zG_modalLabel",
694
+ "toast": "BiQ1zG_toast",
661
695
  "queueRowHead": "BiQ1zG_queueRowHead",
662
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
663
- "noticeRowOk": "BiQ1zG_noticeRowOk",
664
- "modalLink": "BiQ1zG_modalLink",
696
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
697
+ "queueSection": "BiQ1zG_queueSection",
698
+ "errorTitle": "BiQ1zG_errorTitle",
699
+ "progressTrack": "BiQ1zG_progressTrack",
700
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
701
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
702
+ "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
703
+ "errorBox": "BiQ1zG_errorBox",
704
+ "detailStatusText": "BiQ1zG_detailStatusText",
705
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
706
+ "failHead": "BiQ1zG_failHead",
665
707
  "pendingRowStatus": "BiQ1zG_pendingRowStatus",
666
- "modalInstall": "BiQ1zG_modalInstall",
667
- "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
668
- "detailLabel": "BiQ1zG_detailLabel",
669
- "modalBody": "BiQ1zG_modalBody",
670
- "detailRow": "BiQ1zG_detailRow",
671
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
672
- "modalCloseIcon": "BiQ1zG_modalCloseIcon",
673
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
674
- "queueRowBody": "BiQ1zG_queueRowBody",
675
- "progressText": "BiQ1zG_progressText",
708
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
676
709
  "noticeTextOk": "BiQ1zG_noticeTextOk",
677
- "detailStatusPending": "BiQ1zG_detailStatusPending",
678
- "progressFillFail": "BiQ1zG_progressFillFail",
679
- "noticeFoot": "BiQ1zG_noticeFoot",
680
- "failPrepareHint": "BiQ1zG_failPrepareHint",
681
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
682
- "toastIn": "BiQ1zG_toastIn",
683
- "aboutModal": "BiQ1zG_aboutModal",
710
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
711
+ "progress": "BiQ1zG_progress",
712
+ "aboutContent": "BiQ1zG_aboutContent",
713
+ "overlayIn": "BiQ1zG_overlayIn",
714
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
715
+ "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
684
716
  "noticeList": "BiQ1zG_noticeList",
685
- "noticeMain": "BiQ1zG_noticeMain",
686
- "queuedHint": "BiQ1zG_queuedHint",
687
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
688
- "failKind": "BiQ1zG_failKind",
689
- "errorModal": "BiQ1zG_errorModal",
690
- "restartLater": "BiQ1zG_restartLater",
691
- "noticeVersion": "BiQ1zG_noticeVersion",
692
717
  "failKindInstall": "BiQ1zG_failKindInstall",
693
- "overlay": "BiQ1zG_overlay",
694
- "modalTitle": "BiQ1zG_modalTitle",
695
- "failList": "BiQ1zG_failList",
696
- "failRow": "BiQ1zG_failRow",
697
- "detailStatusText": "BiQ1zG_detailStatusText",
698
- "resultCheck": "BiQ1zG_resultCheck",
699
- "queueRow": "BiQ1zG_queueRow",
700
- "detailGrid": "BiQ1zG_detailGrid",
701
- "errorHint": "BiQ1zG_errorHint",
702
- "modalCancel": "BiQ1zG_modalCancel",
718
+ "modalDesc": "BiQ1zG_modalDesc",
719
+ "modalLink": "BiQ1zG_modalLink",
720
+ "restartNow": "BiQ1zG_restartNow",
721
+ "detailDim": "BiQ1zG_detailDim",
722
+ "detailMono": "BiQ1zG_detailMono",
703
723
  "modalWide": "BiQ1zG_modalWide",
704
- "uninstallConfirm": "BiQ1zG_uninstallConfirm",
705
- "progressFill": "BiQ1zG_progressFill",
724
+ "queuedHint": "BiQ1zG_queuedHint",
725
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
726
+ "overlay": "BiQ1zG_overlay",
727
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
728
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
706
729
  "cliOnlyHint": "BiQ1zG_cliOnlyHint",
707
- "modalLabel": "BiQ1zG_modalLabel",
708
- "queueRowDesc": "BiQ1zG_queueRowDesc",
709
- "detailMono": "BiQ1zG_detailMono",
710
- "queueRowTarget": "BiQ1zG_queueRowTarget",
711
- "resultRestarting": "BiQ1zG_resultRestarting",
712
- "noticeRow": "BiQ1zG_noticeRow",
713
- "modalCmdText": "BiQ1zG_modalCmdText",
714
- "logModal": "BiQ1zG_logModal",
715
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
716
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
730
+ "resultTitle": "BiQ1zG_resultTitle",
731
+ "detailArrow": "BiQ1zG_detailArrow",
732
+ "noticeHead": "BiQ1zG_noticeHead",
733
+ "noticeTextFail": "BiQ1zG_noticeTextFail",
734
+ "modalValue": "BiQ1zG_modalValue",
735
+ "noticeRowOk": "BiQ1zG_noticeRowOk",
736
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
737
+ "detailPathActions": "BiQ1zG_detailPathActions",
738
+ "trustHint": "BiQ1zG_trustHint",
739
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
740
+ "confirmPrimary": "BiQ1zG_confirmPrimary",
741
+ "progressText": "BiQ1zG_progressText",
742
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
717
743
  "failClear": "BiQ1zG_failClear",
718
- "overlayIn": "BiQ1zG_overlayIn",
719
- "progressHead": "BiQ1zG_progressHead",
744
+ "failBigIssue": "BiQ1zG_failBigIssue",
745
+ "failRepo": "BiQ1zG_failRepo",
746
+ "modalCmd": "BiQ1zG_modalCmd",
747
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
748
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
749
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
750
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
751
+ "errorHint": "BiQ1zG_errorHint",
752
+ "stripCancel": "BiQ1zG_stripCancel",
753
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
754
+ "queueRow": "BiQ1zG_queueRow",
720
755
  "noticeTime": "BiQ1zG_noticeTime",
721
- "trustHint": "BiQ1zG_trustHint",
722
- "detailArrow": "BiQ1zG_detailArrow",
723
- "detailModal": "BiQ1zG_detailModal",
756
+ "helpModal": "BiQ1zG_helpModal",
724
757
  "result": "BiQ1zG_result",
725
- "detailPath": "BiQ1zG_detailPath",
726
- "toast": "BiQ1zG_toast",
727
- "resultTitle": "BiQ1zG_resultTitle",
728
- "modalActions": "BiQ1zG_modalActions",
758
+ "failCopy": "BiQ1zG_failCopy",
759
+ "queueRowTrack": "BiQ1zG_queueRowTrack",
760
+ "resultRestarting": "BiQ1zG_resultRestarting",
761
+ "detailUpdateHint": "BiQ1zG_detailUpdateHint",
729
762
  "detailPathText": "BiQ1zG_detailPathText",
730
- "detailStars": "BiQ1zG_detailStars",
731
- "queueSection": "BiQ1zG_queueSection",
732
- "failKindUninstall": "BiQ1zG_failKindUninstall",
733
- "modalRow": "BiQ1zG_modalRow",
734
- "stripCancel": "BiQ1zG_stripCancel",
735
- "linkIcon": "BiQ1zG_linkIcon",
736
- "detailPathActions": "BiQ1zG_detailPathActions",
737
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
738
- "modalCopy": "BiQ1zG_modalCopy",
739
- "errorCopySoft": "BiQ1zG_errorCopySoft",
740
- "detailDim": "BiQ1zG_detailDim",
763
+ "resultDesc": "BiQ1zG_resultDesc",
764
+ "failList": "BiQ1zG_failList",
765
+ "aboutModal": "BiQ1zG_aboutModal",
741
766
  "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
742
- "detailUpdateHint": "BiQ1zG_detailUpdateHint",
767
+ "progressFill": "BiQ1zG_progressFill",
743
768
  "aboutMeta": "BiQ1zG_aboutMeta",
744
- "detailValue": "BiQ1zG_detailValue",
745
- "restartNowWarning": "BiQ1zG_restartNowWarning",
746
- "failHead": "BiQ1zG_failHead",
747
- "modalCmd": "BiQ1zG_modalCmd",
748
- "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
749
- "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
750
- "modalClose": "BiQ1zG_modalClose",
751
- "failRepo": "BiQ1zG_failRepo",
752
- "failBigIssue": "BiQ1zG_failBigIssue",
753
- "noticeRowMain": "BiQ1zG_noticeRowMain",
754
- "noticeIgnore": "BiQ1zG_noticeIgnore",
755
- "detailLink": "BiQ1zG_detailLink",
756
- "modalHead": "BiQ1zG_modalHead",
757
- "restartNow": "BiQ1zG_restartNow",
769
+ "modalRow": "BiQ1zG_modalRow",
770
+ "noticeRemove": "BiQ1zG_noticeRemove",
771
+ "queueRowBody": "BiQ1zG_queueRowBody",
758
772
  "queueRowPct": "BiQ1zG_queueRowPct",
759
- "detailPathBtn": "BiQ1zG_detailPathBtn",
760
- "helpModal": "BiQ1zG_helpModal",
761
- "progress": "BiQ1zG_progress",
762
- "progressTrack": "BiQ1zG_progressTrack",
763
- "errorTitle": "BiQ1zG_errorTitle",
764
- "resultDesc": "BiQ1zG_resultDesc",
765
- "failedCopyHint": "BiQ1zG_failedCopyHint",
773
+ "detailLink": "BiQ1zG_detailLink",
774
+ "modalClose": "BiQ1zG_modalClose",
775
+ "noticeRow": "BiQ1zG_noticeRow",
776
+ "modalBody": "BiQ1zG_modalBody",
766
777
  "toastFail": "BiQ1zG_toastFail",
767
- "queueRowStatus": "BiQ1zG_queueRowStatus",
768
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
769
- "errorBox": "BiQ1zG_errorBox",
770
- "noticeHead": "BiQ1zG_noticeHead",
771
- "noticeTextFail": "BiQ1zG_noticeTextFail",
772
- "modalDesc": "BiQ1zG_modalDesc",
778
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
779
+ "noticeFoot": "BiQ1zG_noticeFoot",
780
+ "detailGrid": "BiQ1zG_detailGrid",
781
+ "detailRow": "BiQ1zG_detailRow",
782
+ "modalCopy": "BiQ1zG_modalCopy",
783
+ "restartLater": "BiQ1zG_restartLater",
784
+ "progressHead": "BiQ1zG_progressHead",
785
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
786
+ "queueRowDesc": "BiQ1zG_queueRowDesc",
787
+ "progressFillFail": "BiQ1zG_progressFillFail",
788
+ "modalTitle": "BiQ1zG_modalTitle",
789
+ "modal": "BiQ1zG_modal",
790
+ "errorModal": "BiQ1zG_errorModal",
791
+ "modalHead": "BiQ1zG_modalHead",
792
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
793
+ "noticeMain": "BiQ1zG_noticeMain",
773
794
  "failEmpty": "BiQ1zG_failEmpty",
774
- "aboutContent": "BiQ1zG_aboutContent",
775
- "modalValue": "BiQ1zG_modalValue",
776
- "queueRowTrack": "BiQ1zG_queueRowTrack",
777
- "failCopy": "BiQ1zG_failCopy",
778
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
779
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
795
+ "confirmIcon": "BiQ1zG_confirmIcon",
796
+ "detailValue": "BiQ1zG_detailValue",
797
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
798
+ "detailLabel": "BiQ1zG_detailLabel",
799
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
800
+ "modalCmdText": "BiQ1zG_modalCmdText",
801
+ "logModal": "BiQ1zG_logModal",
802
+ "modalInstall": "BiQ1zG_modalInstall",
803
+ "restartNowWarning": "BiQ1zG_restartNowWarning",
804
+ "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
805
+ "failRow": "BiQ1zG_failRow",
806
+ "noticeVersion": "BiQ1zG_noticeVersion",
807
+ "modalCancel": "BiQ1zG_modalCancel",
808
+ "linkIcon": "BiQ1zG_linkIcon",
809
+ "failKind": "BiQ1zG_failKind",
780
810
  "modalIn": "BiQ1zG_modalIn",
781
- "modal": "BiQ1zG_modal"
811
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
812
+ "toastIn": "BiQ1zG_toastIn",
813
+ "detailPath": "BiQ1zG_detailPath",
814
+ "modalActions": "BiQ1zG_modalActions",
815
+ "detailStars": "BiQ1zG_detailStars",
816
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon"
782
817
  };
783
818
  //#endregion
784
819
  //#region src/client/logic/install-command.ts
@@ -848,7 +883,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
848
883
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
849
884
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
850
885
  */
851
- const PLUGIN_VERSION = "1.3.2";
886
+ const PLUGIN_VERSION = "1.3.4";
852
887
  const CATEGORY_ORDER = [
853
888
  "interface",
854
889
  "session",
@@ -966,6 +1001,23 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
966
1001
  "sortNewest"
967
1002
  ];
968
1003
  //#endregion
1004
+ //#region src/client/logic/ensure-plugin-css.ts
1005
+ /** Re-inject any registered stylesheet that is missing from the DOM. Idempotent. */
1006
+ function ensurePluginCss() {
1007
+ if (typeof document === "undefined") return;
1008
+ const registry = window.__DSH_PLUGIN_CSS__;
1009
+ if (!registry || registry.length === 0) return;
1010
+ for (const { tagId, css } of registry) {
1011
+ const selector = "style[data-plugin-css=" + JSON.stringify(tagId) + "]";
1012
+ if (document.querySelector(selector) !== null) continue;
1013
+ const tag = document.createElement("style");
1014
+ tag.dataset.plugin = "dsh-plugin";
1015
+ tag.dataset.pluginCss = tagId;
1016
+ tag.textContent = css;
1017
+ document.head.appendChild(tag);
1018
+ }
1019
+ }
1020
+ //#endregion
969
1021
  //#region src/client/data/host.ts
970
1022
  /** 当前 profile 已安装插件表(npm 包名 -> manifest spec)+ 安装时记录的目录信号 + 安装路径 + 运行状态。 */
971
1023
  async function fetchInstalled() {
@@ -1074,19 +1126,23 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1074
1126
  const PROXY_BASE = "/dsh-plugin-hub/catalog";
1075
1127
  const PLUGINS_URL = (lang) => `${PROXY_BASE}?lang=${lang}`;
1076
1128
  const STATS_URL = `${PROXY_BASE}?stats=1`;
1077
- async function fetchJson(url) {
1078
- const res = await fetch(url, { cache: "no-store" });
1129
+ async function fetchJson(url, signal) {
1130
+ const res = await fetch(url, {
1131
+ cache: "no-store",
1132
+ signal
1133
+ });
1079
1134
  if (!res.ok) throw new Error(String(res.status));
1080
1135
  return res.json();
1081
1136
  }
1082
- /** 目录插件列表(在线 API 已只返回 verified;过滤与排序由上层负责)。 */
1083
- async function fetchCatalog(lang) {
1084
- const data = await fetchJson(PLUGINS_URL(lang));
1137
+ /** 目录插件列表(在线 API 已只返回 verified;过滤与排序由上层负责)。
1138
+ * signal 可选:宿主重启/代理抖动导致请求挂起时,上层可中止旧请求释放连接。 */
1139
+ async function fetchCatalog(lang, signal) {
1140
+ const data = await fetchJson(PLUGINS_URL(lang), signal);
1085
1141
  return (Array.isArray(data) ? data : []).map((item) => normalize(item));
1086
1142
  }
1087
1143
  /** 收录/精选统计(/api/stats.json);字段不完整返回 null。 */
1088
- async function fetchStats() {
1089
- const s = await fetchJson(STATS_URL);
1144
+ async function fetchStats(signal) {
1145
+ const s = await fetchJson(STATS_URL, signal);
1090
1146
  if (s && typeof s.total === "number" && typeof s.verified === "number") return {
1091
1147
  total: s.total,
1092
1148
  verified: s.verified
@@ -1320,6 +1376,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1320
1376
  const [sort, setSort] = (0, react.useState)("sortStars");
1321
1377
  /** 当前排序方向:点同一个排序按钮切换 正序/倒序;点新排序用该排序的默认方向(与已安装视图一致) */
1322
1378
  const [sortDir, setSortDir] = (0, react.useState)("desc");
1379
+ /** 目录加载「超时自动强制刷新」重试计数:宿主重启/代理未就绪时请求可能长时间挂起,
1380
+ * 界面停在「正在加载插件数据…」假死 —— 超时自动重拉,最多自动重试 2 次后转失败态;
1381
+ * 用户手动刷新(reload)时清零重新计数。 */
1382
+ const loadRetriesRef = (0, react.useRef)(0);
1383
+ /** 目录加载超时阈值:超过即判定挂起,强制刷新一次(服务端代理 curl 上限 20s,客户端 12s 先兜底) */
1384
+ const LOAD_TIMEOUT_MS = 12e3;
1385
+ /** 挂起后最多自动重试次数:避免代理持续不通时无限循环刷新(每次重试仍 12s,2 次后转失败界面可手动重试) */
1386
+ const MAX_LOAD_RETRIES = 2;
1323
1387
  /** 点击排序按钮:同一按钮切换正/倒序,新按钮用默认方向 */
1324
1388
  function toggleSort(key) {
1325
1389
  if (key === sort) setSortDir((d) => d === "asc" ? "desc" : "asc");
@@ -1356,13 +1420,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1356
1420
  const [hubAboutInfo, setHubAboutInfo] = (0, react.useState)(null);
1357
1421
  (0, react.useEffect)(() => {
1358
1422
  let cancelled = false;
1423
+ let settled = false;
1424
+ const controller = new AbortController();
1359
1425
  setPlugins(null);
1360
1426
  setHubPlugin(null);
1361
1427
  setStats(null);
1362
1428
  setFailed(false);
1363
- const load = () => Promise.all([fetchCatalog(lang), fetchStats()]);
1429
+ const load = () => Promise.all([fetchCatalog(lang, controller.signal), fetchStats(controller.signal)]);
1364
1430
  load().then(([list, stats]) => {
1365
1431
  if (cancelled) return;
1432
+ settled = true;
1366
1433
  const hadSelf = list.some((p) => p.source?.repo === SELF_REPO);
1367
1434
  setHubPlugin(list.find((p) => p.source?.repo === SELF_REPO) ?? null);
1368
1435
  setPlugins(list.filter((p) => p.compatibility?.status === "verified" && p.source?.repo !== SELF_REPO));
@@ -1374,10 +1441,21 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1374
1441
  verified: stats.verified
1375
1442
  });
1376
1443
  }).catch(() => {
1377
- if (!cancelled) setFailed(true);
1444
+ if (cancelled) return;
1445
+ settled = true;
1446
+ setFailed(true);
1378
1447
  });
1448
+ const timer = window.setTimeout(() => {
1449
+ if (cancelled || settled) return;
1450
+ if (loadRetriesRef.current < MAX_LOAD_RETRIES) {
1451
+ loadRetriesRef.current += 1;
1452
+ setReloadKey((k) => k + 1);
1453
+ } else setFailed(true);
1454
+ }, LOAD_TIMEOUT_MS);
1379
1455
  return () => {
1380
1456
  cancelled = true;
1457
+ window.clearTimeout(timer);
1458
+ controller.abort();
1381
1459
  };
1382
1460
  }, [reloadKey, lang]);
1383
1461
  /** 刷新当前 profile 已安装插件表;宿主未挂本地路由时静默降级为空表。 */
@@ -1438,7 +1516,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1438
1516
  */
1439
1517
  const hubHasUpdate = (() => {
1440
1518
  if (!hubUpdateInfo) return false;
1441
- return hubUpdateInfo.version !== "1.3.2";
1519
+ return hubUpdateInfo.version !== "1.3.4";
1442
1520
  })();
1443
1521
  (0, react.useMemo)(() => {
1444
1522
  if (!plugins) return [];
@@ -1479,7 +1557,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1479
1557
  hubPlugin,
1480
1558
  stats,
1481
1559
  failed,
1482
- reload: () => setReloadKey((k) => k + 1),
1560
+ reload: () => {
1561
+ loadRetriesRef.current = 0;
1562
+ setReloadKey((k) => k + 1);
1563
+ },
1483
1564
  installed,
1484
1565
  installedItems,
1485
1566
  installedName,
@@ -2769,6 +2850,82 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2769
2850
  strokeLinejoin: "round"
2770
2851
  }));
2771
2852
  }
2853
+ /** 确认弹窗图标:圆形徽标 + 白色图形 —— 普通确认(安装/更新/重启/忽略)蓝底白问号;
2854
+ * 危险操作(清空/删除/卸载/重置)红底白动作图形。居中放在弹窗标题下方,一眼区分确认类型。 */
2855
+ function ConfirmIcon({ type }) {
2856
+ const danger = type !== "question";
2857
+ const glyphs = type === "trash" ? [
2858
+ (0, react.createElement)("path", {
2859
+ d: "M4.5 6.5h15M9.5 6.5V4.8a1.3 1.3 0 0 1 1.3-1.3h2.4a1.3 1.3 0 0 1 1.3 1.3v1.7",
2860
+ stroke: "#ffffff",
2861
+ strokeWidth: 1.9,
2862
+ strokeLinecap: "round",
2863
+ strokeLinejoin: "round"
2864
+ }),
2865
+ (0, react.createElement)("path", {
2866
+ d: "M6.2 6.5l.7 12.2a1.5 1.5 0 0 0 1.5 1.3h7.2a1.5 1.5 0 0 0 1.5-1.3l.7-12.2",
2867
+ stroke: "#ffffff",
2868
+ strokeWidth: 1.9,
2869
+ strokeLinecap: "round",
2870
+ strokeLinejoin: "round"
2871
+ }),
2872
+ (0, react.createElement)("path", {
2873
+ d: "M10 10.2v6M14 10.2v6",
2874
+ stroke: "#ffffff",
2875
+ strokeWidth: 1.9,
2876
+ strokeLinecap: "round"
2877
+ })
2878
+ ] : type === "warning" ? [
2879
+ (0, react.createElement)("path", {
2880
+ d: "M12 4.2l8.5 14.3a1 1 0 0 1-.87 1.5H4.37a1 1 0 0 1-.87-1.5L12 4.2z",
2881
+ stroke: "#ffffff",
2882
+ strokeWidth: 1.9,
2883
+ strokeLinejoin: "round"
2884
+ }),
2885
+ (0, react.createElement)("path", {
2886
+ d: "M12 9.6v4.5",
2887
+ stroke: "#ffffff",
2888
+ strokeWidth: 1.9,
2889
+ strokeLinecap: "round"
2890
+ }),
2891
+ (0, react.createElement)("circle", {
2892
+ cx: 12,
2893
+ cy: 16.7,
2894
+ r: 1.05,
2895
+ fill: "#ffffff"
2896
+ })
2897
+ ] : type === "reset" ? [(0, react.createElement)("path", {
2898
+ d: "M4.5 7.8A8.4 8.4 0 1 1 3.6 14.4",
2899
+ stroke: "#ffffff",
2900
+ strokeWidth: 1.9,
2901
+ strokeLinecap: "round"
2902
+ }), (0, react.createElement)("path", {
2903
+ d: "M3.9 3.9v3.9h3.9",
2904
+ stroke: "#ffffff",
2905
+ strokeWidth: 1.9,
2906
+ strokeLinecap: "round",
2907
+ strokeLinejoin: "round"
2908
+ })] : [(0, react.createElement)("path", {
2909
+ d: "M9.5 9.2a2.6 2.6 0 1 1 3.7 2.38c-.84.38-1.2.95-1.2 1.72",
2910
+ stroke: "#ffffff",
2911
+ strokeWidth: 1.9,
2912
+ strokeLinecap: "round"
2913
+ }), (0, react.createElement)("circle", {
2914
+ cx: 12,
2915
+ cy: 16.4,
2916
+ r: 1.1,
2917
+ fill: "#ffffff"
2918
+ })];
2919
+ return (0, react.createElement)("div", {
2920
+ className: danger ? `${Modal_module_css_default.confirmIcon} ${Modal_module_css_default.confirmIconDanger}` : Modal_module_css_default.confirmIcon,
2921
+ "aria-hidden": "true"
2922
+ }, (0, react.createElement)("svg", {
2923
+ viewBox: "0 0 24 24",
2924
+ width: 22,
2925
+ height: 22,
2926
+ fill: "none"
2927
+ }, ...glyphs));
2928
+ }
2772
2929
  /** 系统日志图标:文档纸 + 三行文字(stroke 继承 currentColor),设置左侧导航「系统日志」用。 */
2773
2930
  function LogsIcon() {
2774
2931
  return (0, react.createElement)("svg", {
@@ -2888,7 +3045,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2888
3045
  needsRestart,
2889
3046
  onRestart,
2890
3047
  onClose
2891
- }) : (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.trustHint }, t("confirmDesc")), (0, react.createElement)("div", { className: Modal_module_css_default.modalRow }, (0, react.createElement)("span", { className: Modal_module_css_default.modalLabel }, t("confirmPlugin")), (0, react.createElement)("span", {
3048
+ }) : (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, !busy ? (0, react.createElement)("div", { className: Modal_module_css_default.confirmIconWrap }, (0, react.createElement)(ConfirmIcon, { type: "question" })) : null, (0, react.createElement)("div", { className: Modal_module_css_default.trustHint }, t("confirmDesc")), (0, react.createElement)("div", { className: Modal_module_css_default.modalRow }, (0, react.createElement)("span", { className: Modal_module_css_default.modalLabel }, t("confirmPlugin")), (0, react.createElement)("span", {
2892
3049
  className: Modal_module_css_default.modalValue,
2893
3050
  title: name
2894
3051
  }, name)), plugin?.source?.repo ? (0, react.createElement)("div", { className: Modal_module_css_default.modalRow }, (0, react.createElement)("span", { className: Modal_module_css_default.modalLabel }, t("confirmSource")), (0, react.createElement)("a", {
@@ -2941,7 +3098,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2941
3098
  needsRestart,
2942
3099
  onRestart,
2943
3100
  onClose
2944
- }) : (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.modalDesc }, t("uninstallDesc")), (0, react.createElement)("div", { className: Modal_module_css_default.modalRow }, (0, react.createElement)("span", { className: Modal_module_css_default.modalLabel }, t("confirmPlugin")), (0, react.createElement)("span", {
3101
+ }) : (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, !busy ? (0, react.createElement)("div", { className: Modal_module_css_default.confirmIconWrap }, (0, react.createElement)(ConfirmIcon, { type: "trash" })) : null, (0, react.createElement)("div", { className: Modal_module_css_default.modalDesc }, t("uninstallDesc")), (0, react.createElement)("div", { className: Modal_module_css_default.modalRow }, (0, react.createElement)("span", { className: Modal_module_css_default.modalLabel }, t("confirmPlugin")), (0, react.createElement)("span", {
2945
3102
  className: Modal_module_css_default.modalValue,
2946
3103
  title: plugin.displayName ?? plugin.slug
2947
3104
  }, plugin.displayName ?? plugin.slug)), plugin.source?.repo ? (0, react.createElement)("div", { className: Modal_module_css_default.modalRow }, (0, react.createElement)("span", { className: Modal_module_css_default.modalLabel }, t("confirmSource")), (0, react.createElement)("a", {
@@ -3039,7 +3196,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3039
3196
  type: "button",
3040
3197
  "aria-label": t("errorClose"),
3041
3198
  onClick: onClose
3042
- }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("restartHint")), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
3199
+ }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.confirmIconWrap }, (0, react.createElement)(ConfirmIcon, { type: "warning" })), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("restartHint")), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
3043
3200
  className: Modal_module_css_default.restartLater,
3044
3201
  type: "button",
3045
3202
  disabled: restarting,
@@ -3333,6 +3490,51 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3333
3490
  }, t("uninstall")))));
3334
3491
  }
3335
3492
  //#endregion
3493
+ //#region src/client/components/modals/ConfirmDialog.tsx
3494
+ /**
3495
+ * DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
3496
+ * Website: https://dsh-plugin.org
3497
+ * GitHub: https://github.com/dshplugin/dsh-plugin-hub
3498
+ *
3499
+ * Generic confirm dialog — the single entry point for every "are you sure?"
3500
+ * question in the app. Rule: any question must be a modal dialog, never an
3501
+ * in-button double-click.
3502
+ *
3503
+ * The icon in the middle tells the type at a glance: a blue question mark
3504
+ * for routine confirmations (install / update / restart / ignore), a red
3505
+ * action glyph for destructive ones (clear / delete / uninstall / reset).
3506
+ */
3507
+ /** 通用确认弹窗:标题 + 类型图标 + 描述 + 取消/确认按钮。
3508
+ * type='question' → 蓝问号 + 品牌蓝确认按钮;危险类型 → 红图形 + 红色确认按钮。 */
3509
+ function ConfirmDialog({ type, title, desc, confirmLabel, cancelLabel, busy, busyLabel, t, onConfirm, onCancel }) {
3510
+ const danger = type !== "question";
3511
+ return (0, react.createElement)("div", {
3512
+ className: Modal_module_css_default.overlay,
3513
+ onClick: (e) => {
3514
+ if (e.target === e.currentTarget) onCancel();
3515
+ }
3516
+ }, (0, react.createElement)("div", {
3517
+ className: Modal_module_css_default.modal,
3518
+ role: "dialog",
3519
+ "aria-modal": "true"
3520
+ }, (0, react.createElement)("div", { className: Modal_module_css_default.modalHead }, (0, react.createElement)("div", { className: Modal_module_css_default.modalTitle }, title), (0, react.createElement)("button", {
3521
+ className: Modal_module_css_default.modalClose,
3522
+ type: "button",
3523
+ "aria-label": t("errorClose"),
3524
+ onClick: onCancel
3525
+ }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.confirmIconWrap }, (0, react.createElement)(ConfirmIcon, { type })), desc ? (0, react.createElement)("div", { className: Modal_module_css_default.modalDesc }, desc) : null, (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
3526
+ className: Modal_module_css_default.restartLater,
3527
+ type: "button",
3528
+ disabled: busy,
3529
+ onClick: onCancel
3530
+ }, cancelLabel ?? t("confirmCancel")), (0, react.createElement)("button", {
3531
+ className: danger ? Modal_module_css_default.dangerConfirm : Modal_module_css_default.confirmPrimary,
3532
+ type: "button",
3533
+ disabled: busy,
3534
+ onClick: onConfirm
3535
+ }, busy && busyLabel ? busyLabel : confirmLabel)))));
3536
+ }
3537
+ //#endregion
3336
3538
  //#region src/client/components/modals/NotificationsModal.tsx
3337
3539
  /**
3338
3540
  * DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
@@ -3378,6 +3580,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3378
3580
  }));
3379
3581
  }
3380
3582
  function NotificationsModal({ records, tasks, pendingRestarts, t, env, onClose, onCopy, onClear, onRemove, onUpdate, onIgnoreUpdate, cancelTask, restarting, onRestart, resolveRepo }) {
3583
+ const [confirmClear, setConfirmClear] = (0, react.useState)(false);
3584
+ const [confirmRemoveId, setConfirmRemoveId] = (0, react.useState)(null);
3381
3585
  return (0, react.createElement)("div", {
3382
3586
  className: Modal_module_css_default.overlay,
3383
3587
  onClick: (e) => {
@@ -3473,7 +3677,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3473
3677
  title: t("removeNotification"),
3474
3678
  onClick: (e) => {
3475
3679
  e.stopPropagation();
3476
- onRemove(r.id);
3680
+ setConfirmRemoveId(r.id);
3477
3681
  }
3478
3682
  }, (0, react.createElement)(CloseIcon))), !r.ok && (() => {
3479
3683
  const kind = classifyFailure(r.message);
@@ -3501,11 +3705,33 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3501
3705
  }, fmtTime(r.at))) : null);
3502
3706
  })), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, records.length > 0 ? (0, react.createElement)("button", {
3503
3707
  className: Modal_module_css_default.failClear,
3504
- onClick: onClear
3708
+ onClick: () => setConfirmClear(true)
3505
3709
  }, t("notificationsClear")) : null, (0, react.createElement)("button", {
3506
3710
  className: Modal_module_css_default.restartNow,
3507
3711
  onClick: onClose
3508
- }, t("errorClose"))))));
3712
+ }, t("errorClose"))))), confirmClear && (0, react.createElement)(ConfirmDialog, {
3713
+ type: "trash",
3714
+ title: t("notificationsClearConfirmTitle"),
3715
+ desc: t("notificationsClearConfirmDesc"),
3716
+ confirmLabel: t("notificationsClear"),
3717
+ t,
3718
+ onConfirm: () => {
3719
+ setConfirmClear(false);
3720
+ onClear();
3721
+ },
3722
+ onCancel: () => setConfirmClear(false)
3723
+ }), confirmRemoveId !== null && (0, react.createElement)(ConfirmDialog, {
3724
+ type: "trash",
3725
+ title: t("removeNotificationConfirmTitle"),
3726
+ desc: t("removeNotificationConfirmDesc"),
3727
+ confirmLabel: t("removeNotification"),
3728
+ t,
3729
+ onConfirm: () => {
3730
+ onRemove(confirmRemoveId);
3731
+ setConfirmRemoveId(null);
3732
+ },
3733
+ onCancel: () => setConfirmRemoveId(null)
3734
+ }));
3509
3735
  }
3510
3736
  //#endregion
3511
3737
  //#region src/client/components/layout/CatalogHeader.tsx
@@ -3647,38 +3873,43 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3647
3873
  tag.textContent = css$9;
3648
3874
  document.head.appendChild(tag);
3649
3875
  }
3876
+ const cssRegistry$9 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
3877
+ if (!cssRegistry$9.some((e) => e.tagId === tagId$9)) cssRegistry$9.push({
3878
+ tagId: tagId$9,
3879
+ css: css$9
3880
+ });
3650
3881
  var List_module_css_default = {
3651
- "cardTitle": "_3XaZHa_cardTitle",
3652
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
3653
- "topic": "_3XaZHa_topic",
3654
- "body": "_3XaZHa_body",
3882
+ "desc": "_3XaZHa_desc",
3655
3883
  "cardHead": "_3XaZHa_cardHead",
3656
- "card": "_3XaZHa_card",
3657
- "detailBtn": "_3XaZHa_detailBtn",
3884
+ "moreSentinel": "_3XaZHa_moreSentinel",
3885
+ "cardTitle": "_3XaZHa_cardTitle",
3886
+ "installBtn": "_3XaZHa_installBtn",
3887
+ "stateTitle": "_3XaZHa_stateTitle",
3888
+ "retryBtn": "_3XaZHa_retryBtn",
3658
3889
  "cardSide": "_3XaZHa_cardSide",
3659
- "state": "_3XaZHa_state",
3660
3890
  "footLink": "_3XaZHa_footLink",
3661
- "actions": "_3XaZHa_actions",
3662
- "verified": "_3XaZHa_verified",
3663
3891
  "installBtnUpdate": "_3XaZHa_installBtnUpdate",
3664
- "fork": "_3XaZHa_fork",
3665
- "footer": "_3XaZHa_footer",
3892
+ "categoryBadge": "_3XaZHa_categoryBadge",
3893
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
3666
3894
  "cardMain": "_3XaZHa_cardMain",
3667
- "moreSentinel": "_3XaZHa_moreSentinel",
3895
+ "verified": "_3XaZHa_verified",
3896
+ "topic": "_3XaZHa_topic",
3897
+ "card": "_3XaZHa_card",
3898
+ "body": "_3XaZHa_body",
3899
+ "fork": "_3XaZHa_fork",
3668
3900
  "list": "_3XaZHa_list",
3669
- "retryBtn": "_3XaZHa_retryBtn",
3670
- "categoryBadge": "_3XaZHa_categoryBadge",
3671
3901
  "uninstallBtn": "_3XaZHa_uninstallBtn",
3672
3902
  "stats": "_3XaZHa_stats",
3673
- "versionBadge": "_3XaZHa_versionBadge",
3674
- "desc": "_3XaZHa_desc",
3903
+ "state": "_3XaZHa_state",
3904
+ "stateDesc": "_3XaZHa_stateDesc",
3675
3905
  "updateBadge": "_3XaZHa_updateBadge",
3906
+ "versionBadge": "_3XaZHa_versionBadge",
3676
3907
  "topics": "_3XaZHa_topics",
3677
- "installBtnCopied": "_3XaZHa_installBtnCopied",
3678
- "stateDesc": "_3XaZHa_stateDesc",
3679
3908
  "star": "_3XaZHa_star",
3680
- "installBtn": "_3XaZHa_installBtn",
3681
- "stateTitle": "_3XaZHa_stateTitle",
3909
+ "actions": "_3XaZHa_actions",
3910
+ "footer": "_3XaZHa_footer",
3911
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
3912
+ "detailBtn": "_3XaZHa_detailBtn",
3682
3913
  "date": "_3XaZHa_date"
3683
3914
  };
3684
3915
  //#endregion
@@ -3875,16 +4106,21 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3875
4106
  tag.textContent = css$8;
3876
4107
  document.head.appendChild(tag);
3877
4108
  }
4109
+ const cssRegistry$8 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
4110
+ if (!cssRegistry$8.some((e) => e.tagId === tagId$8)) cssRegistry$8.push({
4111
+ tagId: tagId$8,
4112
+ css: css$8
4113
+ });
3878
4114
  var SectionTabs_module_css_default = {
3879
- "tabActive": "_7tvizq_tabActive",
3880
- "noticeIcon": "_7tvizq_noticeIcon",
3881
- "noticeCount": "_7tvizq_noticeCount",
3882
4115
  "root": "_7tvizq_root",
4116
+ "tabIcon": "_7tvizq_tabIcon",
3883
4117
  "noticeBtn": "_7tvizq_noticeBtn",
3884
- "tab": "_7tvizq_tab",
4118
+ "noticeIcon": "_7tvizq_noticeIcon",
4119
+ "tabActive": "_7tvizq_tabActive",
3885
4120
  "tabCount": "_7tvizq_tabCount",
3886
- "tabIcon": "_7tvizq_tabIcon",
3887
- "tabCountActive": "_7tvizq_tabCountActive"
4121
+ "tab": "_7tvizq_tab",
4122
+ "tabCountActive": "_7tvizq_tabCountActive",
4123
+ "noticeCount": "_7tvizq_noticeCount"
3888
4124
  };
3889
4125
  //#endregion
3890
4126
  //#region src/client/components/layout/SectionTabs.tsx
@@ -3955,43 +4191,48 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3955
4191
  tag.textContent = css$7;
3956
4192
  document.head.appendChild(tag);
3957
4193
  }
4194
+ const cssRegistry$7 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
4195
+ if (!cssRegistry$7.some((e) => e.tagId === tagId$7)) cssRegistry$7.push({
4196
+ tagId: tagId$7,
4197
+ css: css$7
4198
+ });
3958
4199
  var InstalledView_module_css_default = {
3959
- "segRow": "_1nXeGW_segRow",
3960
4200
  "root": "_1nXeGW_root",
3961
- "emptyDesc": "_1nXeGW_emptyDesc",
3962
- "row": "_1nXeGW_row",
3963
- "rowCategory": "_1nXeGW_rowCategory",
3964
- "emptyTitle": "_1nXeGW_emptyTitle",
3965
4201
  "empty": "_1nXeGW_empty",
3966
- "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
3967
- "rowMeta": "_1nXeGW_rowMeta",
3968
- "segLabel": "_1nXeGW_segLabel",
3969
- "rowSourceTag": "_1nXeGW_rowSourceTag",
3970
- "exampleBadge": "_1nXeGW_exampleBadge",
3971
- "segBtn": "_1nXeGW_segBtn",
3972
- "rowDetail": "_1nXeGW_rowDetail",
3973
- "rowUpdate": "_1nXeGW_rowUpdate",
3974
- "segBtnActive": "_1nXeGW_segBtnActive",
4202
+ "segGroup": "_1nXeGW_segGroup",
3975
4203
  "toolbar": "_1nXeGW_toolbar",
4204
+ "statusDot": "_1nXeGW_statusDot",
3976
4205
  "list": "_1nXeGW_list",
3977
- "statusPending": "_1nXeGW_statusPending",
4206
+ "segBtnActive": "_1nXeGW_segBtnActive",
4207
+ "emptyDesc": "_1nXeGW_emptyDesc",
4208
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
4209
+ "searchInput": "_1nXeGW_searchInput",
4210
+ "segBtn": "_1nXeGW_segBtn",
4211
+ "emptyTitle": "_1nXeGW_emptyTitle",
4212
+ "row": "_1nXeGW_row",
4213
+ "exampleBadge": "_1nXeGW_exampleBadge",
4214
+ "exampleRow": "_1nXeGW_exampleRow",
4215
+ "rowTitleLine": "_1nXeGW_rowTitleLine",
4216
+ "rowRestart": "_1nXeGW_rowRestart",
4217
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
3978
4218
  "rowRepo": "_1nXeGW_rowRepo",
4219
+ "segRow": "_1nXeGW_segRow",
4220
+ "rowDesc": "_1nXeGW_rowDesc",
3979
4221
  "updateBadge": "_1nXeGW_updateBadge",
3980
- "rowTitle": "_1nXeGW_rowTitle",
3981
- "rowRestart": "_1nXeGW_rowRestart",
4222
+ "rowActions": "_1nXeGW_rowActions",
4223
+ "statusPending": "_1nXeGW_statusPending",
3982
4224
  "searchWrap": "_1nXeGW_searchWrap",
3983
- "segGroup": "_1nXeGW_segGroup",
3984
- "rowDesc": "_1nXeGW_rowDesc",
4225
+ "rowDetail": "_1nXeGW_rowDetail",
3985
4226
  "statusInactive": "_1nXeGW_statusInactive",
4227
+ "versionBadge": "_1nXeGW_versionBadge",
4228
+ "rowCategory": "_1nXeGW_rowCategory",
4229
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4230
+ "rowMeta": "_1nXeGW_rowMeta",
3986
4231
  "rowUninstall": "_1nXeGW_rowUninstall",
3987
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
3988
- "searchInput": "_1nXeGW_searchInput",
3989
- "exampleRow": "_1nXeGW_exampleRow",
3990
- "rowActions": "_1nXeGW_rowActions",
3991
- "rowTitleLine": "_1nXeGW_rowTitleLine",
3992
- "rowMain": "_1nXeGW_rowMain",
3993
- "statusDot": "_1nXeGW_statusDot",
3994
- "versionBadge": "_1nXeGW_versionBadge"
4232
+ "segLabel": "_1nXeGW_segLabel",
4233
+ "rowTitle": "_1nXeGW_rowTitle",
4234
+ "rowUpdate": "_1nXeGW_rowUpdate",
4235
+ "rowMain": "_1nXeGW_rowMain"
3995
4236
  };
3996
4237
  //#endregion
3997
4238
  //#region src/client/components/views/InstalledView.tsx
@@ -4231,28 +4472,33 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4231
4472
  tag.textContent = css$6;
4232
4473
  document.head.appendChild(tag);
4233
4474
  }
4475
+ const cssRegistry$6 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
4476
+ if (!cssRegistry$6.some((e) => e.tagId === tagId$6)) cssRegistry$6.push({
4477
+ tagId: tagId$6,
4478
+ css: css$6
4479
+ });
4234
4480
  var CustomInstallView_module_css_default = {
4235
- "helpLine": "zISxCG_helpLine",
4236
4481
  "installError": "zISxCG_installError",
4482
+ "installInputError": "zISxCG_installInputError",
4237
4483
  "installCards": "zISxCG_installCards",
4238
- "installLabel": "zISxCG_installLabel",
4484
+ "helpNote": "zISxCG_helpNote",
4485
+ "installBtn": "zISxCG_installBtn",
4486
+ "installExample": "zISxCG_installExample",
4239
4487
  "installCardDisabled": "zISxCG_installCardDisabled",
4240
- "helpBody": "zISxCG_helpBody",
4241
- "installInput": "zISxCG_installInput",
4242
- "installCard": "zISxCG_installCard",
4243
- "helpCmd": "zISxCG_helpCmd",
4244
4488
  "channelOffText": "zISxCG_channelOffText",
4245
- "helpNote": "zISxCG_helpNote",
4489
+ "channelOffBtn": "zISxCG_channelOffBtn",
4490
+ "helpLine": "zISxCG_helpLine",
4491
+ "root": "zISxCG_root",
4492
+ "channelOff": "zISxCG_channelOff",
4493
+ "installLabel": "zISxCG_installLabel",
4494
+ "installInput": "zISxCG_installInput",
4246
4495
  "installCardHead": "zISxCG_installCardHead",
4496
+ "helpBody": "zISxCG_helpBody",
4497
+ "installCard": "zISxCG_installCard",
4247
4498
  "installRow": "zISxCG_installRow",
4248
- "channelOff": "zISxCG_channelOff",
4249
- "installInputError": "zISxCG_installInputError",
4250
- "channelOffBtn": "zISxCG_channelOffBtn",
4251
- "installBtn": "zISxCG_installBtn",
4252
- "installExample": "zISxCG_installExample",
4253
- "installHelpBtn": "zISxCG_installHelpBtn",
4254
4499
  "desc": "zISxCG_desc",
4255
- "root": "zISxCG_root"
4500
+ "installHelpBtn": "zISxCG_installHelpBtn",
4501
+ "helpCmd": "zISxCG_helpCmd"
4256
4502
  };
4257
4503
  //#endregion
4258
4504
  //#region src/client/components/views/CustomInstallView.tsx
@@ -4519,27 +4765,32 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4519
4765
  tag.textContent = css$5;
4520
4766
  document.head.appendChild(tag);
4521
4767
  }
4768
+ const cssRegistry$5 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
4769
+ if (!cssRegistry$5.some((e) => e.tagId === tagId$5)) cssRegistry$5.push({
4770
+ tagId: tagId$5,
4771
+ css: css$5
4772
+ });
4522
4773
  var SettingsView_module_css_default = {
4523
- "pageTitle": "_506LLG_pageTitle",
4524
- "settingControlStack": "_506LLG_settingControlStack",
4525
- "navItem": "_506LLG_navItem",
4774
+ "pageHeader": "_506LLG_pageHeader",
4526
4775
  "navItemActive": "_506LLG_navItemActive",
4527
- "content": "_506LLG_content",
4776
+ "controlDropdown": "_506LLG_controlDropdown",
4777
+ "settingRow": "_506LLG_settingRow",
4778
+ "textInput": "_506LLG_textInput",
4528
4779
  "settingLabel": "_506LLG_settingLabel",
4529
- "sidebar": "_506LLG_sidebar",
4780
+ "root": "_506LLG_root",
4781
+ "pageDesc": "_506LLG_pageDesc",
4530
4782
  "settingRowStack": "_506LLG_settingRowStack",
4783
+ "navIcon": "_506LLG_navIcon",
4784
+ "sidebar": "_506LLG_sidebar",
4785
+ "navItem": "_506LLG_navItem",
4786
+ "settingControlStack": "_506LLG_settingControlStack",
4787
+ "content": "_506LLG_content",
4531
4788
  "settingDesc": "_506LLG_settingDesc",
4532
- "pageHeader": "_506LLG_pageHeader",
4533
- "controlDropdown": "_506LLG_controlDropdown",
4534
- "root": "_506LLG_root",
4789
+ "resetBtn": "_506LLG_resetBtn",
4535
4790
  "card": "_506LLG_card",
4536
- "textInput": "_506LLG_textInput",
4537
- "pageDesc": "_506LLG_pageDesc",
4538
4791
  "settingTitle": "_506LLG_settingTitle",
4539
- "settingRow": "_506LLG_settingRow",
4540
- "navIcon": "_506LLG_navIcon",
4541
4792
  "settingControl": "_506LLG_settingControl",
4542
- "resetBtn": "_506LLG_resetBtn"
4793
+ "pageTitle": "_506LLG_pageTitle"
4543
4794
  };
4544
4795
  //#endregion
4545
4796
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -4552,18 +4803,23 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4552
4803
  tag.textContent = css$4;
4553
4804
  document.head.appendChild(tag);
4554
4805
  }
4806
+ const cssRegistry$4 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
4807
+ if (!cssRegistry$4.some((e) => e.tagId === tagId$4)) cssRegistry$4.push({
4808
+ tagId: tagId$4,
4809
+ css: css$4
4810
+ });
4555
4811
  var Dropdown_module_css_default = {
4556
- "dropdown": "B_Gxsq_dropdown",
4557
- "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
4558
- "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4559
- "dropdownPanel": "B_Gxsq_dropdownPanel",
4560
- "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
4561
4812
  "dropdownLabel": "B_Gxsq_dropdownLabel",
4813
+ "dropdownItem": "B_Gxsq_dropdownItem",
4814
+ "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
4815
+ "dropdown": "B_Gxsq_dropdown",
4562
4816
  "dropdownCount": "B_Gxsq_dropdownCount",
4817
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
4563
4818
  "dropdownBtn": "B_Gxsq_dropdownBtn",
4819
+ "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4820
+ "dropdownPanel": "B_Gxsq_dropdownPanel",
4564
4821
  "dropdownArrow": "B_Gxsq_dropdownArrow",
4565
- "dropdownItem": "B_Gxsq_dropdownItem",
4566
- "dropdownItemActive": "B_Gxsq_dropdownItemActive"
4822
+ "dropdownItemLabel": "B_Gxsq_dropdownItemLabel"
4567
4823
  };
4568
4824
  //#endregion
4569
4825
  //#region src/client/components/ui/Dropdown.tsx
@@ -4635,9 +4891,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4635
4891
  tag.textContent = css$3;
4636
4892
  document.head.appendChild(tag);
4637
4893
  }
4894
+ const cssRegistry$3 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
4895
+ if (!cssRegistry$3.some((e) => e.tagId === tagId$3)) cssRegistry$3.push({
4896
+ tagId: tagId$3,
4897
+ css: css$3
4898
+ });
4638
4899
  var Toggle_module_css_default = {
4639
- "knob": "k-cD4G_knob",
4640
4900
  "toggle": "k-cD4G_toggle",
4901
+ "knob": "k-cD4G_knob",
4641
4902
  "toggleOn": "k-cD4G_toggleOn"
4642
4903
  };
4643
4904
  //#endregion
@@ -4673,30 +4934,35 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4673
4934
  tag.textContent = css$2;
4674
4935
  document.head.appendChild(tag);
4675
4936
  }
4937
+ const cssRegistry$2 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
4938
+ if (!cssRegistry$2.some((e) => e.tagId === tagId$2)) cssRegistry$2.push({
4939
+ tagId: tagId$2,
4940
+ css: css$2
4941
+ });
4676
4942
  var DiagnosticsView_module_css_default = {
4943
+ "summaryRunning": "k9eRya_summaryRunning",
4677
4944
  "envDesc": "k9eRya_envDesc",
4678
- "panel": "k9eRya_panel",
4679
- "envRow": "k9eRya_envRow",
4945
+ "name": "k9eRya_name",
4946
+ "row": "k9eRya_row",
4947
+ "meta": "k9eRya_meta",
4680
4948
  "badge": "k9eRya_badge",
4681
- "display": "k9eRya_display",
4682
- "envLabel": "k9eRya_envLabel",
4683
- "badgeFail": "k9eRya_badgeFail",
4684
- "envTitle": "k9eRya_envTitle",
4685
- "head": "k9eRya_head",
4686
- "badgeRunning": "k9eRya_badgeRunning",
4949
+ "badgeOk": "k9eRya_badgeOk",
4950
+ "envRow": "k9eRya_envRow",
4687
4951
  "badgeIdle": "k9eRya_badgeIdle",
4952
+ "badgeRunning": "k9eRya_badgeRunning",
4688
4953
  "summary": "k9eRya_summary",
4954
+ "envTitle": "k9eRya_envTitle",
4689
4955
  "runBtn": "k9eRya_runBtn",
4690
- "envCopyBtn": "k9eRya_envCopyBtn",
4691
- "summaryOk": "k9eRya_summaryOk",
4692
4956
  "diagPulse": "k9eRya_diagPulse",
4693
- "summaryRunning": "k9eRya_summaryRunning",
4694
- "name": "k9eRya_name",
4695
- "badgeOk": "k9eRya_badgeOk",
4957
+ "head": "k9eRya_head",
4958
+ "envCopyBtn": "k9eRya_envCopyBtn",
4959
+ "panel": "k9eRya_panel",
4696
4960
  "headHint": "k9eRya_headHint",
4697
- "meta": "k9eRya_meta",
4961
+ "display": "k9eRya_display",
4962
+ "summaryOk": "k9eRya_summaryOk",
4698
4963
  "summaryFail": "k9eRya_summaryFail",
4699
- "row": "k9eRya_row"
4964
+ "badgeFail": "k9eRya_badgeFail",
4965
+ "envLabel": "k9eRya_envLabel"
4700
4966
  };
4701
4967
  //#endregion
4702
4968
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -4844,7 +5110,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4844
5110
  }
4845
5111
  //#endregion
4846
5112
  //#region \0dsh-css:src/client/styles/LogsView.module.css.mjs
4847
- const css$1 = "._3j77BW_panel{flex-direction:column;min-width:0;display:flex}._3j77BW_head{border-bottom:1px solid var(--hub-border-1);flex-direction:column;align-items:stretch;gap:6px;padding:8px 12px;display:flex}._3j77BW_headHint{min-width:0;color:var(--hub-text-tertiary);font-size:11px;line-height:16px}._3j77BW_actions{flex:none;justify-content:flex-start;align-items:center;gap:6px;display:flex}._3j77BW_btn{height:24px;color:var(--hub-text-secondary);background:var(--hub-bg-hover);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;padding:0 10px;font-size:11.5px;font-weight:500;transition:color .12s,background-color .12s,border-color .12s}._3j77BW_btn:hover:not(:disabled){color:var(--hub-text-primary);background:var(--hub-bg-2)}._3j77BW_btn:disabled{opacity:.55;cursor:default}._3j77BW_btnPrimary{color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}._3j77BW_btnPrimary:hover:not(:disabled){background:var(--hub-brand-hover);border-color:var(--hub-brand-hover)}._3j77BW_list{flex-direction:column;max-height:340px;display:flex;overflow-y:auto}._3j77BW_entry{align-items:baseline;gap:8px;min-width:0;padding:5px 12px;font-size:11px;line-height:16px;display:flex}._3j77BW_entry:hover{background:var(--hub-bg-hover)}._3j77BW_time{font-variant-numeric:tabular-nums;color:var(--hub-text-tertiary);white-space:nowrap;flex:none}._3j77BW_event{color:var(--hub-text-tertiary);white-space:nowrap;flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px}._3j77BW_message{min-width:0;color:var(--hub-text-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}._3j77BW_pathRow{border-bottom:1px solid var(--hub-border-1);align-items:center;gap:8px;padding:6px 12px;display:flex}._3j77BW_pathLabel{color:var(--hub-text-tertiary);flex:none;font-size:11px;line-height:16px}._3j77BW_pathText{min-width:0;color:var(--hub-text-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;line-height:16px;overflow:hidden}._3j77BW_footFail{color:var(--hub-danger-text);flex:none;font-size:11px;line-height:16px}._3j77BW_pathDialog{flex-direction:column;gap:10px;display:flex}._3j77BW_pathDialogDesc{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}._3j77BW_pathDialogRow{align-items:center;gap:6px;display:flex}._3j77BW_pathDialogReset{justify-content:space-between;align-items:center;gap:8px;display:flex}._3j77BW_pathDialogHint{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}._3j77BW_linkBtn{color:var(--hub-brand);cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-size:11.5px;font-weight:500;line-height:16px}._3j77BW_linkBtn:hover{text-decoration:underline}._3j77BW_pathDraft{min-width:0;height:26px;color:var(--hub-text-primary);background:var(--hub-bg-1);border:1px solid var(--hub-border-input);border-radius:6px;outline:none;flex:1;padding:0 9px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;transition:border-color .12s}._3j77BW_pathDraft:focus{border-color:var(--hub-brand-border)}._3j77BW_pathDraft::placeholder{color:var(--hub-text-disabled)}._3j77BW_pathDialogFoot{justify-content:flex-end;gap:6px;display:flex}._3j77BW_previewRow{text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;width:100%;padding:0;display:block}._3j77BW_filterBar{flex-wrap:wrap;align-items:center;gap:6px;padding:2px 0 0;display:flex}._3j77BW_filterChip{height:22px;color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:11px;flex:none;padding:0 10px;font-size:11px;line-height:20px;transition:color .12s,background-color .12s,border-color .12s}._3j77BW_filterChip:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3j77BW_filterChipActive,._3j77BW_filterChipActive:hover{color:var(--hub-brand);background:var(--hub-brand-tint);border-color:var(--hub-brand-border-soft);font-weight:500}._3j77BW_filterChipActive:hover{background:var(--hub-brand-tint-strong);border-color:var(--hub-brand-border)}._3j77BW_search{flex:1;min-width:140px}._3j77BW_searchInput{width:100%;height:24px;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;outline:none;padding:0 8px;font-size:11px;line-height:16px;transition:border-color .12s,background-color .12s}._3j77BW_searchInput:focus{border-color:var(--hub-brand);background:var(--hub-bg-1)}._3j77BW_searchInput::placeholder{color:var(--hub-text-tertiary)}._3j77BW_logList{flex-direction:column;flex:auto;min-height:0;padding:4px 0 6px;display:flex;overflow-y:auto}._3j77BW_more{height:26px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;align-self:center;margin:10px 0 4px;padding:0 18px;font-size:11.5px;font-weight:500;transition:color .12s,background-color .12s,border-color .12s}._3j77BW_more:hover:not(:disabled){color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}._3j77BW_more:disabled{opacity:.55;cursor:default}._3j77BW_moreEnd{text-align:center;color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex:none;padding:12px 0 4px;font-size:11px;line-height:16px}._3j77BW_foot{border-top:1px solid var(--hub-border-1);align-items:center;gap:8px;padding:8px 12px;display:flex}._3j77BW_footPath{min-width:0;color:var(--hub-text-tertiary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;line-height:16px;overflow:hidden}._3j77BW_footCount{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex:none;font-size:11px;line-height:16px}._3j77BW_footActions{flex:none;align-items:center;gap:6px;display:inline-flex}._3j77BW_badge{letter-spacing:.3px;flex:none;font-size:10px;font-weight:600}._3j77BW_badgeSuccess{color:var(--hub-success)}._3j77BW_badgeError{color:var(--hub-danger-text)}._3j77BW_badgeWarn{color:var(--hub-warning)}._3j77BW_badgeInfo{color:var(--hub-text-secondary)}._3j77BW_badgeDebug{color:var(--hub-text-tertiary)}._3j77BW_catBadge{border:1px solid #0000;border-radius:4px;flex:none;padding:0 6px;font-size:10px;font-weight:500;line-height:16px}._3j77BW_catInstall{color:var(--hub-brand);border-color:var(--hub-brand-border-soft);background:var(--hub-brand-tint)}._3j77BW_catUninstall{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}._3j77BW_catUpdate{color:var(--hub-warning);border-color:var(--hub-warning-border);background:var(--hub-warning-tint)}._3j77BW_catDiagnostics{color:var(--hub-success);border-color:var(--hub-success-border);background:var(--hub-success-tint)}._3j77BW_catSettings{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}._3j77BW_catSystem{color:var(--hub-text-secondary);border-color:var(--hub-border-2);background:var(--hub-bg-hover)}._3j77BW_empty{text-align:center;color:var(--hub-text-tertiary);padding:28px 12px;font-size:11.5px}";
5113
+ const css$1 = "._3j77BW_panel{flex-direction:column;min-width:0;display:flex}._3j77BW_head{border-bottom:1px solid var(--hub-border-1);flex-direction:column;align-items:stretch;gap:6px;padding:8px 12px;display:flex}._3j77BW_headHint{min-width:0;color:var(--hub-text-tertiary);font-size:11px;line-height:16px}._3j77BW_actions{flex:none;justify-content:flex-start;align-items:center;gap:6px;display:flex}._3j77BW_btn{height:24px;color:var(--hub-text-secondary);background:var(--hub-bg-hover);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;padding:0 10px;font-size:11.5px;font-weight:500;transition:color .12s,background-color .12s,border-color .12s}._3j77BW_btn:hover:not(:disabled){color:var(--hub-text-primary);background:var(--hub-bg-2)}._3j77BW_btn:disabled{opacity:.55;cursor:default}._3j77BW_headActions{flex:1;justify-content:flex-end;margin-right:4px;display:flex}._3j77BW_clearBtn{height:22px;color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:6px;flex:none;padding:0 10px;font-size:11px;font-weight:500;transition:color .12s,background-color .12s,border-color .12s}._3j77BW_clearBtn:hover:not(:disabled){color:var(--hub-text-primary);background:var(--hub-bg-2)}._3j77BW_clearBtn:disabled{opacity:.55;cursor:default}._3j77BW_list{flex-direction:column;max-height:340px;display:flex;overflow-y:auto}._3j77BW_entry{align-items:baseline;gap:8px;min-width:0;padding:5px 12px;font-size:11px;line-height:16px;display:flex}._3j77BW_entry:hover{background:var(--hub-bg-hover)}._3j77BW_time{font-variant-numeric:tabular-nums;color:var(--hub-text-tertiary);white-space:nowrap;flex:none}._3j77BW_event{color:var(--hub-text-tertiary);white-space:nowrap;flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px}._3j77BW_message{min-width:0;color:var(--hub-text-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}._3j77BW_pathRow{border-bottom:1px solid var(--hub-border-1);align-items:center;gap:8px;padding:6px 12px;display:flex}._3j77BW_pathLabel{color:var(--hub-text-tertiary);flex:none;font-size:11px;line-height:16px}._3j77BW_pathText{min-width:0;color:var(--hub-text-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;line-height:16px;overflow:hidden}._3j77BW_footFail{color:var(--hub-danger-text);flex:none;font-size:11px;line-height:16px}._3j77BW_pathDialog{flex-direction:column;gap:10px;display:flex}._3j77BW_pathDialogDesc{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}._3j77BW_pathDialogRow{align-items:center;gap:6px;display:flex}._3j77BW_pathDialogReset{justify-content:space-between;align-items:center;gap:8px;display:flex}._3j77BW_pathDialogHint{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}._3j77BW_linkBtn{color:var(--hub-brand);cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-size:11.5px;font-weight:500;line-height:16px}._3j77BW_linkBtn:hover{text-decoration:underline}._3j77BW_pathDraft{min-width:0;height:26px;color:var(--hub-text-primary);background:var(--hub-bg-1);border:1px solid var(--hub-border-input);border-radius:6px;outline:none;flex:1;padding:0 9px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;transition:border-color .12s}._3j77BW_pathDraft:focus{border-color:var(--hub-brand-border)}._3j77BW_pathDraft::placeholder{color:var(--hub-text-disabled)}._3j77BW_pathDialogFoot{justify-content:flex-end;gap:6px;display:flex}._3j77BW_previewRow{text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;width:100%;padding:0;display:block}._3j77BW_filterBar{flex-wrap:wrap;align-items:center;gap:6px;padding:2px 0 0;display:flex}._3j77BW_filterChip{height:22px;color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:11px;flex:none;padding:0 10px;font-size:11px;line-height:20px;transition:color .12s,background-color .12s,border-color .12s}._3j77BW_filterChip:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3j77BW_filterChipActive,._3j77BW_filterChipActive:hover{color:var(--hub-brand);background:var(--hub-brand-tint);border-color:var(--hub-brand-border-soft);font-weight:500}._3j77BW_filterChipActive:hover{background:var(--hub-brand-tint-strong);border-color:var(--hub-brand-border)}._3j77BW_search{flex:1;min-width:140px}._3j77BW_searchInput{width:100%;height:24px;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;outline:none;padding:0 8px;font-size:11px;line-height:16px;transition:border-color .12s,background-color .12s}._3j77BW_searchInput:focus{border-color:var(--hub-brand);background:var(--hub-bg-1)}._3j77BW_searchInput::placeholder{color:var(--hub-text-tertiary)}._3j77BW_logList{flex-direction:column;flex:auto;min-height:0;padding:4px 0 6px;display:flex;overflow-y:auto}._3j77BW_more{height:26px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;align-self:center;margin:10px 0 4px;padding:0 18px;font-size:11.5px;font-weight:500;transition:color .12s,background-color .12s,border-color .12s}._3j77BW_more:hover:not(:disabled){color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}._3j77BW_more:disabled{opacity:.55;cursor:default}._3j77BW_moreEnd{text-align:center;color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex:none;padding:12px 0 4px;font-size:11px;line-height:16px}._3j77BW_foot{border-top:1px solid var(--hub-border-1);align-items:center;gap:8px;padding:8px 12px;display:flex}._3j77BW_footPath{min-width:0;color:var(--hub-text-tertiary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;line-height:16px;overflow:hidden}._3j77BW_footCount{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex:none;font-size:11px;line-height:16px}._3j77BW_footActions{flex:none;align-items:center;gap:6px;display:inline-flex}._3j77BW_badge{letter-spacing:.3px;flex:none;font-size:10px;font-weight:600}._3j77BW_badgeSuccess{color:var(--hub-success)}._3j77BW_badgeError{color:var(--hub-danger-text)}._3j77BW_badgeWarn{color:var(--hub-warning)}._3j77BW_badgeInfo{color:var(--hub-text-secondary)}._3j77BW_badgeDebug{color:var(--hub-text-tertiary)}._3j77BW_catBadge{border:1px solid #0000;border-radius:4px;flex:none;padding:0 6px;font-size:10px;font-weight:500;line-height:16px}._3j77BW_catInstall{color:var(--hub-brand);border-color:var(--hub-brand-border-soft);background:var(--hub-brand-tint)}._3j77BW_catUninstall{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}._3j77BW_catUpdate{color:var(--hub-warning);border-color:var(--hub-warning-border);background:var(--hub-warning-tint)}._3j77BW_catDiagnostics{color:var(--hub-success);border-color:var(--hub-success-border);background:var(--hub-success-tint)}._3j77BW_catSettings{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}._3j77BW_catSystem{color:var(--hub-text-secondary);border-color:var(--hub-border-2);background:var(--hub-bg-hover)}._3j77BW_empty{text-align:center;color:var(--hub-text-tertiary);padding:28px 12px;font-size:11.5px}";
4848
5114
  const tagId$1 = "dsh-plugin/LogsView.module.css";
4849
5115
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
4850
5116
  const tag = document.createElement("style");
@@ -4853,57 +5119,63 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4853
5119
  tag.textContent = css$1;
4854
5120
  document.head.appendChild(tag);
4855
5121
  }
5122
+ const cssRegistry$1 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
5123
+ if (!cssRegistry$1.some((e) => e.tagId === tagId$1)) cssRegistry$1.push({
5124
+ tagId: tagId$1,
5125
+ css: css$1
5126
+ });
4856
5127
  var LogsView_module_css_default = {
4857
- "pathDialogFoot": "_3j77BW_pathDialogFoot",
4858
- "pathLabel": "_3j77BW_pathLabel",
4859
- "footCount": "_3j77BW_footCount",
4860
- "headHint": "_3j77BW_headHint",
4861
- "actions": "_3j77BW_actions",
4862
- "panel": "_3j77BW_panel",
4863
- "btnPrimary": "_3j77BW_btnPrimary",
4864
- "badgeInfo": "_3j77BW_badgeInfo",
4865
- "message": "_3j77BW_message",
4866
- "linkBtn": "_3j77BW_linkBtn",
4867
- "badgeSuccess": "_3j77BW_badgeSuccess",
4868
- "pathText": "_3j77BW_pathText",
4869
- "search": "_3j77BW_search",
4870
- "catInstall": "_3j77BW_catInstall",
4871
- "badgeDebug": "_3j77BW_badgeDebug",
5128
+ "filterBar": "_3j77BW_filterBar",
5129
+ "pathDialogRow": "_3j77BW_pathDialogRow",
5130
+ "more": "_3j77BW_more",
4872
5131
  "catBadge": "_3j77BW_catBadge",
4873
- "badgeError": "_3j77BW_badgeError",
4874
- "empty": "_3j77BW_empty",
4875
- "pathDialogReset": "_3j77BW_pathDialogReset",
4876
- "searchInput": "_3j77BW_searchInput",
4877
- "catSystem": "_3j77BW_catSystem",
4878
- "catSettings": "_3j77BW_catSettings",
5132
+ "panel": "_3j77BW_panel",
4879
5133
  "footFail": "_3j77BW_footFail",
4880
5134
  "filterChipActive": "_3j77BW_filterChipActive",
4881
- "more": "_3j77BW_more",
4882
- "pathDialogHint": "_3j77BW_pathDialogHint",
4883
- "foot": "_3j77BW_foot",
4884
- "filterBar": "_3j77BW_filterBar",
4885
- "event": "_3j77BW_event",
4886
- "filterChip": "_3j77BW_filterChip",
5135
+ "pathLabel": "_3j77BW_pathLabel",
5136
+ "catInstall": "_3j77BW_catInstall",
5137
+ "catSettings": "_3j77BW_catSettings",
5138
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
4887
5139
  "pathDraft": "_3j77BW_pathDraft",
4888
- "footPath": "_3j77BW_footPath",
4889
- "catDiagnostics": "_3j77BW_catDiagnostics",
4890
- "pathRow": "_3j77BW_pathRow",
4891
- "list": "_3j77BW_list",
4892
- "previewRow": "_3j77BW_previewRow",
4893
5140
  "moreEnd": "_3j77BW_moreEnd",
4894
- "entry": "_3j77BW_entry",
5141
+ "pathText": "_3j77BW_pathText",
5142
+ "badgeWarn": "_3j77BW_badgeWarn",
5143
+ "catSystem": "_3j77BW_catSystem",
5144
+ "empty": "_3j77BW_empty",
5145
+ "message": "_3j77BW_message",
5146
+ "event": "_3j77BW_event",
4895
5147
  "head": "_3j77BW_head",
4896
- "footActions": "_3j77BW_footActions",
4897
5148
  "logList": "_3j77BW_logList",
4898
- "badge": "_3j77BW_badge",
4899
- "badgeWarn": "_3j77BW_badgeWarn",
4900
- "pathDialog": "_3j77BW_pathDialog",
4901
- "pathDialogRow": "_3j77BW_pathDialogRow",
5149
+ "filterChip": "_3j77BW_filterChip",
5150
+ "previewRow": "_3j77BW_previewRow",
5151
+ "actions": "_3j77BW_actions",
5152
+ "headActions": "_3j77BW_headActions",
5153
+ "pathRow": "_3j77BW_pathRow",
5154
+ "searchInput": "_3j77BW_searchInput",
5155
+ "headHint": "_3j77BW_headHint",
5156
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5157
+ "footPath": "_3j77BW_footPath",
5158
+ "pathDialogHint": "_3j77BW_pathDialogHint",
5159
+ "footCount": "_3j77BW_footCount",
5160
+ "badgeSuccess": "_3j77BW_badgeSuccess",
5161
+ "badgeDebug": "_3j77BW_badgeDebug",
5162
+ "linkBtn": "_3j77BW_linkBtn",
5163
+ "footActions": "_3j77BW_footActions",
5164
+ "btn": "_3j77BW_btn",
5165
+ "foot": "_3j77BW_foot",
5166
+ "entry": "_3j77BW_entry",
5167
+ "badgeError": "_3j77BW_badgeError",
5168
+ "badgeInfo": "_3j77BW_badgeInfo",
5169
+ "search": "_3j77BW_search",
4902
5170
  "catUninstall": "_3j77BW_catUninstall",
4903
5171
  "catUpdate": "_3j77BW_catUpdate",
4904
- "pathDialogDesc": "_3j77BW_pathDialogDesc",
4905
- "time": "_3j77BW_time",
4906
- "btn": "_3j77BW_btn"
5172
+ "catDiagnostics": "_3j77BW_catDiagnostics",
5173
+ "clearBtn": "_3j77BW_clearBtn",
5174
+ "pathDialog": "_3j77BW_pathDialog",
5175
+ "badge": "_3j77BW_badge",
5176
+ "list": "_3j77BW_list",
5177
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5178
+ "time": "_3j77BW_time"
4907
5179
  };
4908
5180
  //#endregion
4909
5181
  //#region src/client/components/modals/LogsModal.tsx
@@ -5032,6 +5304,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5032
5304
  const [error, setError] = (0, react.useState)(false);
5033
5305
  const [opening, setOpening] = (0, react.useState)(false);
5034
5306
  const [openFailed, setOpenFailed] = (0, react.useState)(false);
5307
+ const [showClearConfirm, setShowClearConfirm] = (0, react.useState)(false);
5308
+ const [clearing, setClearing] = (0, react.useState)(false);
5309
+ const [clearFailed, setClearFailed] = (0, react.useState)(false);
5035
5310
  const offsetRef = (0, react.useRef)(0);
5036
5311
  /** 拉一页:过滤参数取当前 state,偏移量由调用方给出。 */
5037
5312
  const fetchPage = (0, react.useCallback)(async (offset) => {
@@ -5109,6 +5384,25 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5109
5384
  setOpening(false);
5110
5385
  if (!ok) setOpenFailed(true);
5111
5386
  };
5387
+ /** 清空所有日志:确认弹窗(独立弹出框,垃圾桶图标)确认后执行。 */
5388
+ const doClear = async () => {
5389
+ setClearing(true);
5390
+ try {
5391
+ if (!(await fetch("/dsh-plugin-hub/clear-log", {
5392
+ method: "POST",
5393
+ cache: "no-store"
5394
+ })).ok) {
5395
+ setClearFailed(true);
5396
+ return;
5397
+ }
5398
+ await reload();
5399
+ } catch {
5400
+ setClearFailed(true);
5401
+ } finally {
5402
+ setClearing(false);
5403
+ setShowClearConfirm(false);
5404
+ }
5405
+ };
5112
5406
  /** 导出:拼纯文本 → Blob → 触发浏览器下载 .log 文件 */
5113
5407
  const exportFile = () => {
5114
5408
  const text = entries.map((e) => `[${fmtLogTime(e.at)}] [${e.level}] [${e.category}] [${e.event}] ${e.message}`).join("\n");
@@ -5132,7 +5426,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5132
5426
  className: `${Modal_module_css_default.errorModal} ${Modal_module_css_default.logModal}`,
5133
5427
  role: "dialog",
5134
5428
  "aria-modal": "true"
5135
- }, (0, react.createElement)("div", { className: Modal_module_css_default.modalHead }, (0, react.createElement)("div", { className: Modal_module_css_default.modalTitle }, t("logModalTitle")), (0, react.createElement)("button", {
5429
+ }, (0, react.createElement)("div", { className: Modal_module_css_default.modalHead }, (0, react.createElement)("div", { className: Modal_module_css_default.modalTitle }, t("logModalTitle")), (0, react.createElement)("div", { className: LogsView_module_css_default.headActions }, (0, react.createElement)("button", {
5430
+ type: "button",
5431
+ className: LogsView_module_css_default.clearBtn,
5432
+ disabled: clearing,
5433
+ title: t("logClearAllTip"),
5434
+ onClick: () => setShowClearConfirm(true)
5435
+ }, t("logClearAll"))), (0, react.createElement)("button", {
5136
5436
  className: Modal_module_css_default.modalClose,
5137
5437
  "aria-label": t("errorClose"),
5138
5438
  onClick: onClose
@@ -5165,7 +5465,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5165
5465
  }, loading ? t("logsLoading") : t("logLoadMore")) : (0, react.createElement)("div", { className: LogsView_module_css_default.moreEnd }, t("logNoMore", { n: total }))))), (0, react.createElement)("div", { className: LogsView_module_css_default.foot }, (0, react.createElement)("span", {
5166
5466
  className: LogsView_module_css_default.footPath,
5167
5467
  title: path
5168
- }, `${t("logPathLabel")}: ${path === "" ? "…" : path}`), openFailed ? (0, react.createElement)("span", { className: LogsView_module_css_default.footFail }, t("logOpenFileFail")) : (0, react.createElement)("span", { className: LogsView_module_css_default.footCount }, t("logCount", { n: total })), (0, react.createElement)("div", { className: LogsView_module_css_default.footActions }, (0, react.createElement)("button", {
5468
+ }, `${t("logPathLabel")}: ${path === "" ? "…" : path}`), clearFailed ? (0, react.createElement)("span", { className: LogsView_module_css_default.footFail }, t("logClearFailed")) : openFailed ? (0, react.createElement)("span", { className: LogsView_module_css_default.footFail }, t("logOpenFileFail")) : (0, react.createElement)("span", { className: LogsView_module_css_default.footCount }, t("logCount", { n: total })), (0, react.createElement)("div", { className: LogsView_module_css_default.footActions }, (0, react.createElement)("button", {
5169
5469
  type: "button",
5170
5470
  className: LogsView_module_css_default.btn,
5171
5471
  disabled: opening || path === "",
@@ -5173,10 +5473,20 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5173
5473
  onClick: () => void openFile()
5174
5474
  }, t("logOpenFile")), (0, react.createElement)("button", {
5175
5475
  type: "button",
5176
- className: `${LogsView_module_css_default.btn} ${LogsView_module_css_default.btnPrimary}`,
5476
+ className: LogsView_module_css_default.btn,
5177
5477
  disabled: entries.length === 0,
5178
5478
  onClick: exportFile
5179
- }, t("logsExport"))))));
5479
+ }, t("logsExport"))))), showClearConfirm && (0, react.createElement)(ConfirmDialog, {
5480
+ type: "trash",
5481
+ title: t("logClearConfirmTitle"),
5482
+ desc: t("logClearConfirmDesc"),
5483
+ confirmLabel: t("logClearAll"),
5484
+ busy: clearing,
5485
+ busyLabel: t("logClearing"),
5486
+ t,
5487
+ onConfirm: () => void doClear(),
5488
+ onCancel: () => setShowClearConfirm(false)
5489
+ }));
5180
5490
  }
5181
5491
  //#endregion
5182
5492
  //#region src/client/components/modals/LogsPathModal.tsx
@@ -5369,7 +5679,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5369
5679
  const preview = entries.slice(0, PREVIEW);
5370
5680
  return (0, react.createElement)("div", { className: LogsView_module_css_default.panel }, (0, react.createElement)("div", { className: LogsView_module_css_default.head }, (0, react.createElement)("span", { className: LogsView_module_css_default.headHint }, t("logsHeadHint")), (0, react.createElement)("div", { className: LogsView_module_css_default.actions }, (0, react.createElement)("button", {
5371
5681
  type: "button",
5372
- className: `${LogsView_module_css_default.btn} ${LogsView_module_css_default.btnPrimary}`,
5682
+ className: LogsView_module_css_default.btn,
5373
5683
  onClick: () => setOpen(true)
5374
5684
  }, t("logViewerOpen")), (0, react.createElement)("button", {
5375
5685
  type: "button",
@@ -5620,7 +5930,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5620
5930
  type: "button",
5621
5931
  "aria-label": t("errorClose"),
5622
5932
  onClick: () => setResetConfirm(false)
5623
- }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("settingsResetConfirmDetail")), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
5933
+ }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.confirmIconWrap }, (0, react.createElement)(ConfirmIcon, { type: "warning" })), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("settingsResetConfirmDetail")), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
5624
5934
  className: Modal_module_css_default.restartLater,
5625
5935
  type: "button",
5626
5936
  onClick: () => setResetConfirm(false)
@@ -5707,6 +6017,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5707
6017
  alive = false;
5708
6018
  };
5709
6019
  }, []);
6020
+ (0, react.useEffect)(() => {
6021
+ ensurePluginCss();
6022
+ }, [view]);
5710
6023
  const queue = useTaskQueue({
5711
6024
  t,
5712
6025
  refreshInstalled: catalog.refreshInstalled,
@@ -6040,7 +6353,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6040
6353
  });
6041
6354
  }
6042
6355
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
6043
- info: catalog.hubUpdateInfo ?? { version: "1.3.2" },
6356
+ info: catalog.hubUpdateInfo ?? { version: "1.3.4" },
6044
6357
  lang,
6045
6358
  t,
6046
6359
  hasUpdate: catalog.hubHasUpdate,
@@ -6090,9 +6403,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6090
6403
  }),
6091
6404
  cancelTask: queue.cancelTask,
6092
6405
  restarting,
6093
- onRestart: () => {
6094
- requestRestart();
6095
- },
6406
+ onRestart: () => setShowRestartConfirm(true),
6096
6407
  resolveRepo: (repo) => issueRepoOf(repo, catalog.installedItems, catalog.plugins)
6097
6408
  }), ignoreTarget && (0, react.createElement)("div", {
6098
6409
  className: Modal_module_css_default.overlay,
@@ -6108,7 +6419,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6108
6419
  type: "button",
6109
6420
  "aria-label": t("errorClose"),
6110
6421
  onClick: () => setIgnoreTarget(null)
6111
- }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("ignoreUpdateConfirmDetail")), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
6422
+ }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.confirmIconWrap }, (0, react.createElement)(ConfirmIcon, { type: "question" })), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("ignoreUpdateConfirmDetail")), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
6112
6423
  className: Modal_module_css_default.restartLater,
6113
6424
  type: "button",
6114
6425
  onClick: () => setIgnoreTarget(null)
@@ -6134,9 +6445,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6134
6445
  onClose: () => setConfirmPlugin(null),
6135
6446
  onCopy: () => copyCommand(confirmPlugin),
6136
6447
  onInstall: () => queue.installNow(confirmPlugin, confirmIsUpdate ? { update: true } : void 0),
6137
- onRestart: () => {
6138
- requestRestart();
6139
- }
6448
+ onRestart: () => setShowRestartConfirm(true)
6140
6449
  }), confirmCustomTarget && (0, react.createElement)(InstallModal, {
6141
6450
  plugin: null,
6142
6451
  customTarget: confirmCustomTarget,
@@ -6161,9 +6470,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6161
6470
  });
6162
6471
  },
6163
6472
  onInstall: () => void queue.installCustom(confirmCustomTarget, confirmIsUpdate ? { update: true } : void 0),
6164
- onRestart: () => {
6165
- requestRestart();
6166
- }
6473
+ onRestart: () => setShowRestartConfirm(true)
6167
6474
  }), confirmGlobalNpm && (0, react.createElement)(InstallModal, {
6168
6475
  plugin: null,
6169
6476
  globalNpm: confirmGlobalNpm.pkgs,
@@ -6188,9 +6495,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6188
6495
  });
6189
6496
  },
6190
6497
  onInstall: () => void queue.installGlobalNpm(confirmGlobalNpm.pkgs),
6191
- onRestart: () => {
6192
- requestRestart();
6193
- }
6498
+ onRestart: () => setShowRestartConfirm(true)
6194
6499
  }), (uninstallPlugin || uninstallItem) && (0, react.createElement)(UninstallModal, {
6195
6500
  plugin: uninstallPlugin ?? pluginOfItem(uninstallItem),
6196
6501
  done: uninstallDone,
@@ -6214,9 +6519,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6214
6519
  if (uninstallItem) queue.uninstallItem(uninstallItem);
6215
6520
  else if (uninstallPlugin) queue.uninstallNow(uninstallPlugin);
6216
6521
  },
6217
- onRestart: () => {
6218
- requestRestart();
6219
- }
6522
+ onRestart: () => setShowRestartConfirm(true)
6220
6523
  }), detailItem && (0, react.createElement)(InstalledDetailModal, {
6221
6524
  item: detailItem,
6222
6525
  t,
@@ -6287,6 +6590,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6287
6590
  tag.textContent = css;
6288
6591
  document.head.appendChild(tag);
6289
6592
  }
6593
+ const cssRegistry = globalThis.__DSH_PLUGIN_CSS__ ??= [];
6594
+ if (!cssRegistry.some((e) => e.tagId === tagId)) cssRegistry.push({
6595
+ tagId,
6596
+ css
6597
+ });
6290
6598
  //#endregion
6291
6599
  //#region src/client/index.tsx
6292
6600
  /**