dsh-plugin 1.3.4 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +38 -1
- package/README.md +38 -1
- package/client/client.js +449 -410
- package/client/client.js.map +1 -1
- package/lib/http/routes.js +9 -5
- package/lib/services/install/npm-resolve.js +3 -1
- package/lib/services/install/task-queue.js +29 -15
- package/lib/services/profile/profile.js +4 -3
- package/lib/services/settings.js +1 -1
- package/lib/types/services/install/install-types.d.ts +2 -2
- package/lib/types/services/install/npm-resolve.d.ts +3 -1
- package/lib/types/services/install/task-queue.d.ts +3 -3
- package/lib/types/services/settings.d.ts +2 -2
- package/package.json +1 -1
- package/src/client/components/PluginHubSection.tsx +13 -7
- package/src/client/components/modals/NotificationsModal.tsx +9 -3
- package/src/client/components/views/CustomInstallView.tsx +35 -14
- package/src/client/components/views/DiagnosticsView.tsx +7 -3
- package/src/client/components/views/SettingsView.tsx +20 -33
- package/src/client/hooks/useSettings.ts +3 -3
- package/src/client/hooks/useTaskQueue.ts +12 -6
- package/src/client/locales.ts +31 -15
- package/src/client/logic/failures.ts +3 -0
- package/src/client/logic/renderMarkdown.ts +9 -5
- package/src/client/logic/urls.ts +12 -1
- package/src/client/styles/CustomInstallView.module.css +25 -0
- package/src/client/styles/Dropdown.module.css +10 -0
- package/src/client/styles/Modal.module.css +11 -0
- package/src/server/http/routes.ts +9 -4
- package/src/server/services/install/install-types.ts +2 -2
- package/src/server/services/install/npm-resolve.ts +3 -1
- package/src/server/services/install/task-queue.ts +36 -20
- package/src/server/services/profile/profile.ts +4 -3
- package/src/server/services/settings.ts +3 -3
package/client/client.js
CHANGED
|
@@ -59,13 +59,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
59
59
|
gitInstallInvalid: "请输入 GitHub 仓库地址,例如:owner/repo 或 https://github.com/owner/repo",
|
|
60
60
|
dshCmdLabel: "DeepSeek Harness 命令",
|
|
61
61
|
dshCmdPlaceholder: "粘贴官方 dsh plugin 命令",
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
dshCmdInsertHubUpdate: "插入更新命令",
|
|
63
|
+
dshCmdExample: "例如:dsh plugin --profile web add github:owner/repo,或 dsh plugin --profile web update dsh-plugin",
|
|
64
|
+
dshCmdInvalid: "请输入官方 dsh plugin 命令(--profile 必填,支持 add / update)。例如:dsh plugin --profile web update dsh-plugin",
|
|
64
65
|
installHelp: "帮助",
|
|
65
66
|
helpModalTitle: "支持的命令格式",
|
|
66
67
|
npmInstallHelp: "lodash、@scope/pkg 直接输入包名\nnpm install lodash\nnpm i lodash\npnpm add @scope/pkg\npnpm i @scope/pkg\nnpm install -g @scope/cli 全局安装 CLI 工具,不进「已安装」列表",
|
|
67
68
|
gitInstallHelp: "owner/repo\nhttps://github.com/owner/repo\ngithub:owner/repo\ngit+https://github.com/owner/repo.git\ngit@github.com:owner/repo.git",
|
|
68
|
-
dshCmdHelp: "dsh plugin --profile web add
|
|
69
|
+
dshCmdHelp: "dsh plugin --profile web add <目标> 安装\ndsh plugin --profile web update <目标> 更新已安装目标到最新版本\ndsh plugin --profile=web add <目标>\ndsh plugin --profile=web update <目标>\n --profile 必填,官方 CLI 无 -p 简写;<目标> 可为 npm 包名或 github:owner/repo;卸载请用「已安装」列表",
|
|
69
70
|
globalNpmHint: "将全局安装 CLI 工具(npm install -g),不会出现在「已安装」列表,无需重启宿主",
|
|
70
71
|
installCliBtn: "安装",
|
|
71
72
|
channelDisabledHint: "该安装通道已关闭,请在「设置 → 安全信任」中打开开关",
|
|
@@ -107,14 +108,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
107
108
|
settingsUpdateDesc: "更新检查方式与安装走到的网络通道",
|
|
108
109
|
settingsCheckOnStart: "启动时检查更新",
|
|
109
110
|
settingsCheckOnStartDesc: "打开插件中心时检查已安装插件是否有新版,发现更新会提示",
|
|
111
|
+
settingsProxy: "HTTP 代理",
|
|
112
|
+
settingsProxyDesc: "npm / git / 目录数据请求统一走该代理;留空直连",
|
|
110
113
|
settingsMirror: "npm 镜像源",
|
|
111
|
-
settingsMirrorDesc: "npm
|
|
114
|
+
settingsMirrorDesc: "默认跟随本机 npm 配置;官方源慢可换国内镜像",
|
|
115
|
+
mirrorNone: "未配置(跟随本机 npm 配置)",
|
|
112
116
|
mirrorOfficial: "官方源 registry.npmjs.org",
|
|
113
117
|
mirrorNpmmirror: "阿里云 npmmirror",
|
|
114
118
|
mirrorTencent: "腾讯云镜像",
|
|
115
|
-
|
|
116
|
-
settingsProxy: "HTTP 代理",
|
|
117
|
-
settingsProxyDesc: "npm / git / 目录数据请求统一走该代理;留空直连",
|
|
119
|
+
mirrorTsinghua: "清华大学 TUNA 镜像",
|
|
118
120
|
settingsSecurity: "安全信任",
|
|
119
121
|
settingsSecurityDesc: "命令行安装的三个通道开关:NPM 包、GitHub 源码与 DSH 命令",
|
|
120
122
|
settingsEnableNpm: "启用 NPM 安装",
|
|
@@ -178,6 +180,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
178
180
|
logEmptyFilter: "没有符合条件的日志",
|
|
179
181
|
settingsDiagFail: "不可达",
|
|
180
182
|
diagNpm: "npm 源",
|
|
183
|
+
diagNpmUnset: "未配置(跟随本机 npm 配置)",
|
|
181
184
|
diagGithub: "GitHub",
|
|
182
185
|
diagCatalog: "目录站点",
|
|
183
186
|
diagOk: "OK",
|
|
@@ -226,6 +229,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
226
229
|
installNow: "直接安装",
|
|
227
230
|
installing: "安装中…",
|
|
228
231
|
installDone: "安装成功",
|
|
232
|
+
updateDone: "更新成功",
|
|
229
233
|
installResultTitle: "插件安装成功",
|
|
230
234
|
installResultDesc: "",
|
|
231
235
|
confirmUpdateTitle: "确认更新",
|
|
@@ -265,6 +269,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
265
269
|
errorTitle: "操作失败",
|
|
266
270
|
errorTitleInstall: "安装失败",
|
|
267
271
|
errorTitleUninstall: "卸载失败",
|
|
272
|
+
errorTitleUpdate: "更新失败",
|
|
268
273
|
errorPlugin: "插件",
|
|
269
274
|
errorClose: "知道了",
|
|
270
275
|
errorCopy: "复制错误信息",
|
|
@@ -359,13 +364,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
359
364
|
gitInstallInvalid: "Enter a GitHub repository address, e.g. owner/repo or https://github.com/owner/repo",
|
|
360
365
|
dshCmdLabel: "DeepSeek Harness command",
|
|
361
366
|
dshCmdPlaceholder: "Paste an official dsh plugin command",
|
|
362
|
-
|
|
363
|
-
|
|
367
|
+
dshCmdInsertHubUpdate: "Insert update command",
|
|
368
|
+
dshCmdExample: "e.g. dsh plugin --profile web add github:owner/repo, or dsh plugin --profile web update dsh-plugin",
|
|
369
|
+
dshCmdInvalid: "Paste an official dsh plugin command (--profile required, add / update), e.g. dsh plugin --profile web update dsh-plugin",
|
|
364
370
|
installHelp: "Help",
|
|
365
371
|
helpModalTitle: "Supported command formats",
|
|
366
372
|
npmInstallHelp: "lodash or @scope/pkg just type the package name\nnpm install lodash\nnpm i lodash\npnpm add @scope/pkg\npnpm i @scope/pkg\nnpm install -g @scope/cli installs the CLI globally, not shown in Installed",
|
|
367
373
|
gitInstallHelp: "owner/repo\nhttps://github.com/owner/repo\ngithub:owner/repo\ngit+https://github.com/owner/repo.git\ngit@github.com:owner/repo.git",
|
|
368
|
-
dshCmdHelp: "dsh plugin --profile web add <target
|
|
374
|
+
dshCmdHelp: "dsh plugin --profile web add <target> install\ndsh plugin --profile web update <target> update an installed target to the latest version\ndsh plugin --profile=web add <target>\ndsh plugin --profile=web update <target>\n --profile is required and there is no -p shorthand; <target> can be an npm package or github:owner/repo; uninstall from the Installed list",
|
|
369
375
|
globalNpmHint: "This installs CLI tools globally (npm install -g). They won't appear in Installed and no host restart is needed.",
|
|
370
376
|
installCliBtn: "Install",
|
|
371
377
|
channelDisabledHint: "This install channel is disabled — enable it in Settings → Security & Trust",
|
|
@@ -409,14 +415,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
409
415
|
settingsCheckOnStartDesc: "Check installed plugins for new versions when the hub opens; you will be notified when updates are found",
|
|
410
416
|
settingsAutoInstall: "Auto-install updates",
|
|
411
417
|
settingsAutoInstallDesc: "Install detected updates in the background without asking (a host restart applies them)",
|
|
412
|
-
|
|
413
|
-
|
|
418
|
+
settingsProxy: "HTTP proxy",
|
|
419
|
+
settingsProxyDesc: "Route npm, git and catalog requests through this proxy; leave empty to connect directly",
|
|
420
|
+
settingsMirror: "npm mirror",
|
|
421
|
+
settingsMirrorDesc: "Unset by default — follows local npm config; pick a domestic mirror if slow",
|
|
422
|
+
mirrorNone: "Unset (follow local npm config)",
|
|
414
423
|
mirrorOfficial: "Official registry.npmjs.org",
|
|
415
424
|
mirrorNpmmirror: "Alibaba npmmirror",
|
|
416
425
|
mirrorTencent: "Tencent Cloud mirror",
|
|
417
|
-
|
|
418
|
-
settingsProxy: "HTTP proxy",
|
|
419
|
-
settingsProxyDesc: "Route npm, git and catalog requests through this proxy; leave empty to connect directly",
|
|
426
|
+
mirrorTsinghua: "Tsinghua TUNA mirror",
|
|
420
427
|
settingsSecurity: "Security & Trust",
|
|
421
428
|
settingsSecurityDesc: "Toggles for the three command-line install channels: npm packages, GitHub sources and DSH commands",
|
|
422
429
|
settingsEnableNpm: "Enable npm installs",
|
|
@@ -480,6 +487,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
480
487
|
logEmptyFilter: "No matching log entries",
|
|
481
488
|
settingsDiagFail: "Unreachable",
|
|
482
489
|
diagNpm: "npm registry",
|
|
490
|
+
diagNpmUnset: "Unset (follow local npm config)",
|
|
483
491
|
diagGithub: "GitHub",
|
|
484
492
|
diagCatalog: "Catalog site",
|
|
485
493
|
diagOk: "OK",
|
|
@@ -528,6 +536,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
528
536
|
installNow: "Install",
|
|
529
537
|
installing: "Installing…",
|
|
530
538
|
installDone: "Installed",
|
|
539
|
+
updateDone: "Updated",
|
|
531
540
|
installResultTitle: "Plugin installed successfully",
|
|
532
541
|
installResultDesc: "",
|
|
533
542
|
confirmUpdateTitle: "Confirm update",
|
|
@@ -568,6 +577,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
568
577
|
errorTitle: "Operation failed",
|
|
569
578
|
errorTitleInstall: "Install failed",
|
|
570
579
|
errorTitleUninstall: "Removal failed",
|
|
580
|
+
errorTitleUpdate: "Update failed",
|
|
571
581
|
errorPlugin: "Plugin",
|
|
572
582
|
errorClose: "Got it",
|
|
573
583
|
errorCopy: "Copy error",
|
|
@@ -632,46 +642,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
632
642
|
css: css$11
|
|
633
643
|
});
|
|
634
644
|
var Header_module_css_default = {
|
|
635
|
-
"headerTitleRow": "qikqja_headerTitleRow",
|
|
636
|
-
"sortGroup": "qikqja_sortGroup",
|
|
637
|
-
"segGroup": "qikqja_segGroup",
|
|
638
|
-
"segBtn": "qikqja_segBtn",
|
|
639
|
-
"tabsRow": "qikqja_tabsRow",
|
|
640
|
-
"search": "qikqja_search",
|
|
641
|
-
"header": "qikqja_header",
|
|
642
|
-
"tabs": "qikqja_tabs",
|
|
643
|
-
"copyIcon": "qikqja_copyIcon",
|
|
644
645
|
"adBanner": "qikqja_adBanner",
|
|
646
|
+
"githubIcon": "qikqja_githubIcon",
|
|
647
|
+
"tabsRow": "qikqja_tabsRow",
|
|
645
648
|
"segBtnActive": "qikqja_segBtnActive",
|
|
646
|
-
"
|
|
647
|
-
"langBtn": "qikqja_langBtn",
|
|
648
|
-
"headerRight": "qikqja_headerRight",
|
|
649
|
-
"tabActive": "qikqja_tabActive",
|
|
649
|
+
"segBtn": "qikqja_segBtn",
|
|
650
650
|
"aboutBtn": "qikqja_aboutBtn",
|
|
651
|
+
"version": "qikqja_version",
|
|
652
|
+
"segGroup": "qikqja_segGroup",
|
|
653
|
+
"tabs": "qikqja_tabs",
|
|
654
|
+
"taglineLink": "qikqja_taglineLink",
|
|
655
|
+
"tabCount": "qikqja_tabCount",
|
|
656
|
+
"tagline": "qikqja_tagline",
|
|
657
|
+
"headerTitleRow": "qikqja_headerTitleRow",
|
|
651
658
|
"resultSeg": "qikqja_resultSeg",
|
|
659
|
+
"adText": "qikqja_adText",
|
|
652
660
|
"root": "qikqja_root",
|
|
661
|
+
"langBtn": "qikqja_langBtn",
|
|
662
|
+
"sortGroup": "qikqja_sortGroup",
|
|
663
|
+
"adArrow": "qikqja_adArrow",
|
|
664
|
+
"controls": "qikqja_controls",
|
|
665
|
+
"tabActive": "qikqja_tabActive",
|
|
653
666
|
"adBadge": "qikqja_adBadge",
|
|
654
|
-
"tagline": "qikqja_tagline",
|
|
655
|
-
"version": "qikqja_version",
|
|
656
|
-
"versionBtn": "qikqja_versionBtn",
|
|
657
|
-
"logoIcon": "qikqja_logoIcon",
|
|
658
667
|
"brandTitle": "qikqja_brandTitle",
|
|
659
|
-
"
|
|
660
|
-
"
|
|
661
|
-
"
|
|
668
|
+
"resultCount": "qikqja_resultCount",
|
|
669
|
+
"header": "qikqja_header",
|
|
670
|
+
"logoIcon": "qikqja_logoIcon",
|
|
671
|
+
"search": "qikqja_search",
|
|
672
|
+
"headerRight": "qikqja_headerRight",
|
|
662
673
|
"tab": "qikqja_tab",
|
|
663
|
-
"
|
|
674
|
+
"versionBtn": "qikqja_versionBtn",
|
|
664
675
|
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
665
|
-
"resultCount": "qikqja_resultCount",
|
|
666
676
|
"title": "qikqja_title",
|
|
667
|
-
"
|
|
668
|
-
"
|
|
669
|
-
"
|
|
670
|
-
"
|
|
677
|
+
"copyIcon": "qikqja_copyIcon",
|
|
678
|
+
"githubLink": "qikqja_githubLink",
|
|
679
|
+
"searchRow": "qikqja_searchRow",
|
|
680
|
+
"segLabel": "qikqja_segLabel"
|
|
671
681
|
};
|
|
672
682
|
//#endregion
|
|
673
683
|
//#region \0dsh-css:src/client/styles/Modal.module.css.mjs
|
|
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}";
|
|
684
|
+
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_aboutContent img[width=\"250\"]{object-fit:contain;width:250px;height:250px;max-height:250px}.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}";
|
|
675
685
|
const tagId$10 = "dsh-plugin/Modal.module.css";
|
|
676
686
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
|
|
677
687
|
const tag = document.createElement("style");
|
|
@@ -686,134 +696,134 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
686
696
|
css: css$10
|
|
687
697
|
});
|
|
688
698
|
var Modal_module_css_default = {
|
|
689
|
-
"
|
|
690
|
-
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
691
|
-
"detailModal": "BiQ1zG_detailModal",
|
|
692
|
-
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
693
|
-
"modalLabel": "BiQ1zG_modalLabel",
|
|
694
|
-
"toast": "BiQ1zG_toast",
|
|
695
|
-
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
696
|
-
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
697
|
-
"queueSection": "BiQ1zG_queueSection",
|
|
699
|
+
"modalCancel": "BiQ1zG_modalCancel",
|
|
698
700
|
"errorTitle": "BiQ1zG_errorTitle",
|
|
699
|
-
"
|
|
700
|
-
"
|
|
701
|
-
"
|
|
702
|
-
"
|
|
703
|
-
"
|
|
704
|
-
"
|
|
705
|
-
"
|
|
706
|
-
"
|
|
707
|
-
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
708
|
-
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
709
|
-
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
710
|
-
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
711
|
-
"progress": "BiQ1zG_progress",
|
|
712
|
-
"aboutContent": "BiQ1zG_aboutContent",
|
|
713
|
-
"overlayIn": "BiQ1zG_overlayIn",
|
|
714
|
-
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
701
|
+
"noticeTime": "BiQ1zG_noticeTime",
|
|
702
|
+
"queueSection": "BiQ1zG_queueSection",
|
|
703
|
+
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
704
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
705
|
+
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
706
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
707
|
+
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
708
|
+
"detailModal": "BiQ1zG_detailModal",
|
|
715
709
|
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
716
|
-
"
|
|
717
|
-
"
|
|
710
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
711
|
+
"modalWide": "BiQ1zG_modalWide",
|
|
718
712
|
"modalDesc": "BiQ1zG_modalDesc",
|
|
719
713
|
"modalLink": "BiQ1zG_modalLink",
|
|
720
|
-
"restartNow": "BiQ1zG_restartNow",
|
|
721
|
-
"detailDim": "BiQ1zG_detailDim",
|
|
722
|
-
"detailMono": "BiQ1zG_detailMono",
|
|
723
|
-
"modalWide": "BiQ1zG_modalWide",
|
|
724
|
-
"queuedHint": "BiQ1zG_queuedHint",
|
|
725
|
-
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
726
|
-
"overlay": "BiQ1zG_overlay",
|
|
727
|
-
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
728
|
-
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
729
|
-
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
730
714
|
"resultTitle": "BiQ1zG_resultTitle",
|
|
731
|
-
"
|
|
732
|
-
"
|
|
733
|
-
"
|
|
734
|
-
"modalValue": "BiQ1zG_modalValue",
|
|
735
|
-
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
736
|
-
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
737
|
-
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
715
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
716
|
+
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
717
|
+
"errorBox": "BiQ1zG_errorBox",
|
|
738
718
|
"trustHint": "BiQ1zG_trustHint",
|
|
739
|
-
"
|
|
740
|
-
"
|
|
741
|
-
"
|
|
742
|
-
"
|
|
743
|
-
"
|
|
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",
|
|
719
|
+
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
720
|
+
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
721
|
+
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
722
|
+
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
723
|
+
"restartLater": "BiQ1zG_restartLater",
|
|
753
724
|
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
754
|
-
"
|
|
755
|
-
"
|
|
756
|
-
"
|
|
725
|
+
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
726
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
727
|
+
"resultCheck": "BiQ1zG_resultCheck",
|
|
728
|
+
"modalInstall": "BiQ1zG_modalInstall",
|
|
757
729
|
"result": "BiQ1zG_result",
|
|
758
|
-
"
|
|
759
|
-
"
|
|
730
|
+
"noticeMain": "BiQ1zG_noticeMain",
|
|
731
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
732
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
733
|
+
"detailLink": "BiQ1zG_detailLink",
|
|
760
734
|
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
761
|
-
"
|
|
762
|
-
"
|
|
763
|
-
"resultDesc": "BiQ1zG_resultDesc",
|
|
735
|
+
"failCopy": "BiQ1zG_failCopy",
|
|
736
|
+
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
764
737
|
"failList": "BiQ1zG_failList",
|
|
765
|
-
"aboutModal": "BiQ1zG_aboutModal",
|
|
766
|
-
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
767
|
-
"progressFill": "BiQ1zG_progressFill",
|
|
768
|
-
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
769
738
|
"modalRow": "BiQ1zG_modalRow",
|
|
770
|
-
"
|
|
771
|
-
"
|
|
772
|
-
"
|
|
773
|
-
"
|
|
739
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
740
|
+
"modalLabel": "BiQ1zG_modalLabel",
|
|
741
|
+
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
742
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
743
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
744
|
+
"logModal": "BiQ1zG_logModal",
|
|
745
|
+
"linkIcon": "BiQ1zG_linkIcon",
|
|
746
|
+
"aboutContent": "BiQ1zG_aboutContent",
|
|
747
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
748
|
+
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
749
|
+
"detailPathText": "BiQ1zG_detailPathText",
|
|
750
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
751
|
+
"detailStars": "BiQ1zG_detailStars",
|
|
752
|
+
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
753
|
+
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
754
|
+
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
774
755
|
"modalClose": "BiQ1zG_modalClose",
|
|
775
|
-
"
|
|
776
|
-
"
|
|
756
|
+
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
757
|
+
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
758
|
+
"errorModal": "BiQ1zG_errorModal",
|
|
759
|
+
"modalActions": "BiQ1zG_modalActions",
|
|
760
|
+
"detailMono": "BiQ1zG_detailMono",
|
|
761
|
+
"failRepo": "BiQ1zG_failRepo",
|
|
762
|
+
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
763
|
+
"failKind": "BiQ1zG_failKind",
|
|
764
|
+
"modalValue": "BiQ1zG_modalValue",
|
|
777
765
|
"toastFail": "BiQ1zG_toastFail",
|
|
778
|
-
"
|
|
779
|
-
"
|
|
780
|
-
"
|
|
781
|
-
"
|
|
782
|
-
"
|
|
783
|
-
"
|
|
784
|
-
"progressHead": "BiQ1zG_progressHead",
|
|
785
|
-
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
786
|
-
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
766
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
767
|
+
"queuedHint": "BiQ1zG_queuedHint",
|
|
768
|
+
"detailDim": "BiQ1zG_detailDim",
|
|
769
|
+
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
770
|
+
"noticeHead": "BiQ1zG_noticeHead",
|
|
771
|
+
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
787
772
|
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
788
|
-
"
|
|
789
|
-
"
|
|
790
|
-
"errorModal": "BiQ1zG_errorModal",
|
|
773
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
774
|
+
"modalIn": "BiQ1zG_modalIn",
|
|
791
775
|
"modalHead": "BiQ1zG_modalHead",
|
|
792
|
-
"
|
|
793
|
-
"
|
|
794
|
-
"
|
|
795
|
-
"
|
|
796
|
-
"
|
|
797
|
-
"
|
|
776
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
777
|
+
"progressHead": "BiQ1zG_progressHead",
|
|
778
|
+
"progressTrack": "BiQ1zG_progressTrack",
|
|
779
|
+
"stripCancel": "BiQ1zG_stripCancel",
|
|
780
|
+
"aboutModal": "BiQ1zG_aboutModal",
|
|
781
|
+
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
782
|
+
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
783
|
+
"modal": "BiQ1zG_modal",
|
|
784
|
+
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
785
|
+
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
786
|
+
"detailArrow": "BiQ1zG_detailArrow",
|
|
787
|
+
"progressFill": "BiQ1zG_progressFill",
|
|
788
|
+
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
789
|
+
"modalBody": "BiQ1zG_modalBody",
|
|
790
|
+
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
791
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
792
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
793
|
+
"overlay": "BiQ1zG_overlay",
|
|
794
|
+
"failRow": "BiQ1zG_failRow",
|
|
795
|
+
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
796
|
+
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
798
797
|
"detailLabel": "BiQ1zG_detailLabel",
|
|
799
|
-
"
|
|
798
|
+
"noticeRow": "BiQ1zG_noticeRow",
|
|
799
|
+
"progress": "BiQ1zG_progress",
|
|
800
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
801
|
+
"modalTitle": "BiQ1zG_modalTitle",
|
|
802
|
+
"modalCopy": "BiQ1zG_modalCopy",
|
|
803
|
+
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
804
|
+
"progressText": "BiQ1zG_progressText",
|
|
805
|
+
"failHead": "BiQ1zG_failHead",
|
|
806
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
807
|
+
"toast": "BiQ1zG_toast",
|
|
808
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
800
809
|
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
801
|
-
"
|
|
802
|
-
"
|
|
803
|
-
"
|
|
804
|
-
"
|
|
805
|
-
"
|
|
806
|
-
"
|
|
807
|
-
"
|
|
808
|
-
"
|
|
809
|
-
"
|
|
810
|
-
"
|
|
811
|
-
"
|
|
812
|
-
"
|
|
813
|
-
"
|
|
814
|
-
"
|
|
815
|
-
"
|
|
816
|
-
"
|
|
810
|
+
"restartNow": "BiQ1zG_restartNow",
|
|
811
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
812
|
+
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
813
|
+
"overlayIn": "BiQ1zG_overlayIn",
|
|
814
|
+
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
815
|
+
"queueRow": "BiQ1zG_queueRow",
|
|
816
|
+
"resultDesc": "BiQ1zG_resultDesc",
|
|
817
|
+
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
818
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
819
|
+
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
820
|
+
"failClear": "BiQ1zG_failClear",
|
|
821
|
+
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
822
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
823
|
+
"modalCmd": "BiQ1zG_modalCmd",
|
|
824
|
+
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
825
|
+
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
826
|
+
"failBigIssue": "BiQ1zG_failBigIssue"
|
|
817
827
|
};
|
|
818
828
|
//#endregion
|
|
819
829
|
//#region src/client/logic/install-command.ts
|
|
@@ -822,7 +832,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
822
832
|
* (走 npm registry tarball,更快、与 GitHub 网络无关);无 npm 包名 → git 直装。
|
|
823
833
|
* 返回值 target 即传给后端 /install 的安装目标(npm 包名 或 owner/repo)。
|
|
824
834
|
*/
|
|
825
|
-
function installTargetOf
|
|
835
|
+
function installTargetOf(p) {
|
|
826
836
|
const pkg = (p.source?.npmPackage ?? "").trim();
|
|
827
837
|
const repo = (p.source?.repo ?? "").trim();
|
|
828
838
|
if (pkg && repo) return {
|
|
@@ -838,7 +848,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
838
848
|
* 需专属 profile(--profile dsh-tui),无法从 repo/npm 包名推断,必须用官方命令);
|
|
839
849
|
* 常规插件无目录命令时按通道回退生成:npm 显示包名,git 显示显式 HTTPS URL。 */
|
|
840
850
|
function installCommandOf(p, withProfile = false) {
|
|
841
|
-
const { target, via } = installTargetOf
|
|
851
|
+
const { target, via } = installTargetOf(p);
|
|
842
852
|
if (via === "npm") {
|
|
843
853
|
const cmd = p.install?.command;
|
|
844
854
|
if (cmd) return cmd;
|
|
@@ -883,7 +893,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
883
893
|
* tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
|
|
884
894
|
* node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
|
|
885
895
|
*/
|
|
886
|
-
const PLUGIN_VERSION = "1.3.
|
|
896
|
+
const PLUGIN_VERSION = "1.3.6";
|
|
887
897
|
const CATEGORY_ORDER = [
|
|
888
898
|
"interface",
|
|
889
899
|
"session",
|
|
@@ -1516,7 +1526,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1516
1526
|
*/
|
|
1517
1527
|
const hubHasUpdate = (() => {
|
|
1518
1528
|
if (!hubUpdateInfo) return false;
|
|
1519
|
-
return hubUpdateInfo.version !== "1.3.
|
|
1529
|
+
return hubUpdateInfo.version !== "1.3.6";
|
|
1520
1530
|
})();
|
|
1521
1531
|
(0, react.useMemo)(() => {
|
|
1522
1532
|
if (!plugins) return [];
|
|
@@ -1783,6 +1793,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1783
1793
|
function pluginSiteUrl(repo) {
|
|
1784
1794
|
return `${SITE_URL}plugins/${repo}`;
|
|
1785
1795
|
}
|
|
1796
|
+
/** 根据实际执行的命令判定失败动作标签(安装/更新/卸载):
|
|
1797
|
+
* 命令形如 `dsh plugin --profile web add|update|remove <target>`,
|
|
1798
|
+
* 出现 remove/update 动词即对应归类,其余(add、全局 npm 命令、未知)一律算安装。 */
|
|
1799
|
+
function actionLabelOf(command) {
|
|
1800
|
+
if (command && /\s+remove\s+/i.test(command)) return "Remove";
|
|
1801
|
+
if (command && /\s+update\s+/i.test(command)) return "Update";
|
|
1802
|
+
return "Install";
|
|
1803
|
+
}
|
|
1786
1804
|
/**
|
|
1787
1805
|
* 一键反馈 GitHub Issue 的预填链接:标题带「来自 dsh-plugin.org」标识,正文只带
|
|
1788
1806
|
* 核心信息 —— 原因判定 + 关键错误代码 + 尝试过的安装方式 + 宿主机器环境快照 +
|
|
@@ -1793,7 +1811,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1793
1811
|
* 组织 scope 与 GitHub 用户名不一致时也能直接指认正确的 npm 包名。
|
|
1794
1812
|
*/
|
|
1795
1813
|
function pluginIssueUrl(repo, message, env, command, attempts) {
|
|
1796
|
-
const title = `[dsh-plugin.org | dsh-plugin-hub]
|
|
1814
|
+
const title = `[dsh-plugin.org | dsh-plugin-hub] ${actionLabelOf(command)} failed: ${repo}`;
|
|
1797
1815
|
const kind = classifyFailure(message);
|
|
1798
1816
|
const reason = /\[packaging\]/i.test(message) ? "plugin distribution is incomplete — the entry file declared in package.json is missing from the published package (github tarball or npm package); please commit build output or publish a complete package" : kind === "pluginPrepare" ? "plugin prepare/build script failed during install (packaging/distribution issue)" : kind === "pnpmIgnoredBuild" ? "plugin depends on a native module whose build script pnpm blocks by default (use a prebuilt variant)" : "plugin-side install failure";
|
|
1799
1817
|
const code = coreErrorCode(message);
|
|
@@ -1901,8 +1919,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1901
1919
|
*/
|
|
1902
1920
|
const DEFAULT_SETTINGS = {
|
|
1903
1921
|
checkUpdatesOnStart: true,
|
|
1904
|
-
npmRegistry: "",
|
|
1905
1922
|
proxy: "",
|
|
1923
|
+
npmRegistry: "",
|
|
1906
1924
|
enableNpmInstall: true,
|
|
1907
1925
|
enableGitInstall: true,
|
|
1908
1926
|
enableDshInstall: true,
|
|
@@ -2088,11 +2106,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2088
2106
|
desc: q.desc,
|
|
2089
2107
|
version: q.version
|
|
2090
2108
|
});
|
|
2091
|
-
onInstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart);
|
|
2109
|
+
onInstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart, q.action === "update");
|
|
2092
2110
|
}
|
|
2093
2111
|
} else {
|
|
2094
2112
|
const detail = lines.length > 0 ? [...lines].reverse().join("\n") : q.kind === "uninstall" ? t("uninstallFail") : t("installFail");
|
|
2095
|
-
onError(detail, q.repo, q.kind, q.command, q.attempts);
|
|
2113
|
+
onError(detail, q.repo, q.kind, q.command, q.attempts, q.action === "update");
|
|
2096
2114
|
}
|
|
2097
2115
|
maybeStopPoll();
|
|
2098
2116
|
};
|
|
@@ -2230,6 +2248,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2230
2248
|
kind: isRemove ? "uninstall" : "install",
|
|
2231
2249
|
target: isRemove ? fallback : display || fallback,
|
|
2232
2250
|
repo: isRemove ? null : display || fallback,
|
|
2251
|
+
action: a.action === "add" || a.action === "update" || a.action === "remove" ? a.action : "add",
|
|
2233
2252
|
status: a.status === "running" ? "running" : "pending",
|
|
2234
2253
|
progress: typeof a.progress === "number" ? a.progress : 0,
|
|
2235
2254
|
lines: Array.isArray(a.lines) ? a.lines : [],
|
|
@@ -2272,6 +2291,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2272
2291
|
lines: [],
|
|
2273
2292
|
optimistic: true,
|
|
2274
2293
|
command: input.command,
|
|
2294
|
+
action: input.update ? "update" : "add",
|
|
2275
2295
|
attempts: [],
|
|
2276
2296
|
needsRestart: true
|
|
2277
2297
|
}]);
|
|
@@ -2323,7 +2343,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2323
2343
|
const installNow = async (p, opts) => {
|
|
2324
2344
|
const repo = p.source?.repo ?? "";
|
|
2325
2345
|
if (!repo) return;
|
|
2326
|
-
const { target } = installTargetOf
|
|
2346
|
+
const { target } = installTargetOf(p);
|
|
2327
2347
|
if (!target) return;
|
|
2328
2348
|
await submitInstall({
|
|
2329
2349
|
target,
|
|
@@ -3236,7 +3256,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3236
3256
|
codeSpans.push(String(code));
|
|
3237
3257
|
return `\u0000${codeSpans.length - 1}\u0000`;
|
|
3238
3258
|
});
|
|
3239
|
-
out = out.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g, (m, alt, url) =>
|
|
3259
|
+
out = out.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g, (m, alt, url) => {
|
|
3260
|
+
const src = String(url);
|
|
3261
|
+
if (!/^https?:\/\//i.test(src) || /[\u0000]/.test(src)) return m;
|
|
3262
|
+
if (/\/dsh-plugin-user-group-qr-[^/]*$/i.test(src)) return `<img src="${src}" alt="${String(alt)}" width="250" height="250" loading="lazy">`;
|
|
3263
|
+
return `<img src="${src}" alt="${String(alt)}" loading="lazy">`;
|
|
3264
|
+
});
|
|
3240
3265
|
out = out.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, (m, text, url) => /^https?:\/\//i.test(String(url)) && !/[\u0000]/.test(String(url)) ? `<a href="${String(url)}" target="_blank" rel="noopener noreferrer">${String(text)}</a>` : m);
|
|
3241
3266
|
out = out.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>");
|
|
3242
3267
|
out = out.replace(/(^|[^*])\*([^*]+)\*/g, "$1<em>$2</em>");
|
|
@@ -3641,7 +3666,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3641
3666
|
onClick: () => onUpdate(r.repo),
|
|
3642
3667
|
title: t("updateNoticeGo")
|
|
3643
3668
|
} : {}
|
|
3644
|
-
}, (0, react.createElement)("div", { className: Modal_module_css_default.noticeRowMain }, (0, react.createElement)("div", { className: r.ok ? Modal_module_css_default.noticeBadgeOk : Modal_module_css_default.noticeBadgeFail }, (0, react.createElement)(BadgeGlyph, { ok: r.ok })), (0, react.createElement)("div", { className: Modal_module_css_default.noticeMain }, (0, react.createElement)("div", { className: Modal_module_css_default.noticeHead }, (0, react.createElement)("span", { className: r.ok ? Modal_module_css_default.noticeTextOk : Modal_module_css_default.noticeTextFail }, r.ok ? isUpdate ? t("updateNoticeTitle") : r.kind === "install" ? t("installDone") : t("uninstallDone") : r.kind === "install" ? t("errorTitleInstall") : t("errorTitleUninstall")), isUpdate && r.version ? (0, react.createElement)("span", {
|
|
3669
|
+
}, (0, react.createElement)("div", { className: Modal_module_css_default.noticeRowMain }, (0, react.createElement)("div", { className: r.ok ? Modal_module_css_default.noticeBadgeOk : Modal_module_css_default.noticeBadgeFail }, (0, react.createElement)(BadgeGlyph, { ok: r.ok })), (0, react.createElement)("div", { className: Modal_module_css_default.noticeMain }, (0, react.createElement)("div", { className: Modal_module_css_default.noticeHead }, (0, react.createElement)("span", { className: r.ok ? Modal_module_css_default.noticeTextOk : Modal_module_css_default.noticeTextFail }, r.ok ? isUpdate ? t("updateNoticeTitle") : r.action === "update" ? t("updateDone") : r.kind === "install" ? t("installDone") : t("uninstallDone") : r.action === "update" ? t("errorTitleUpdate") : r.kind === "install" ? t("errorTitleInstall") : t("errorTitleUninstall")), isUpdate && r.version ? (0, react.createElement)("span", {
|
|
3645
3670
|
className: Modal_module_css_default.noticeVersion,
|
|
3646
3671
|
title: r.version
|
|
3647
3672
|
}, `v${r.version}`) : null, r.repo ? isUpdate ? (0, react.createElement)("span", {
|
|
@@ -3653,7 +3678,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3653
3678
|
target: "_blank",
|
|
3654
3679
|
rel: "noopener noreferrer",
|
|
3655
3680
|
title: shownRepo
|
|
3656
|
-
}, shownRepo) :
|
|
3681
|
+
}, shownRepo) : (0, react.createElement)("span", {
|
|
3682
|
+
className: Modal_module_css_default.failRepo,
|
|
3683
|
+
title: r.repo
|
|
3684
|
+
}, r.repo) : null, !r.ok && (0, react.createElement)("button", {
|
|
3657
3685
|
className: Modal_module_css_default.failCopy,
|
|
3658
3686
|
onClick: () => onCopy(r.message)
|
|
3659
3687
|
}, t("failCopy")), r.ok ? (0, react.createElement)("span", {
|
|
@@ -3879,38 +3907,38 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3879
3907
|
css: css$9
|
|
3880
3908
|
});
|
|
3881
3909
|
var List_module_css_default = {
|
|
3882
|
-
"desc": "_3XaZHa_desc",
|
|
3883
|
-
"cardHead": "_3XaZHa_cardHead",
|
|
3884
|
-
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
3885
|
-
"cardTitle": "_3XaZHa_cardTitle",
|
|
3886
|
-
"installBtn": "_3XaZHa_installBtn",
|
|
3887
|
-
"stateTitle": "_3XaZHa_stateTitle",
|
|
3888
|
-
"retryBtn": "_3XaZHa_retryBtn",
|
|
3889
3910
|
"cardSide": "_3XaZHa_cardSide",
|
|
3890
|
-
"footLink": "_3XaZHa_footLink",
|
|
3891
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
3892
|
-
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
3893
|
-
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
3894
|
-
"cardMain": "_3XaZHa_cardMain",
|
|
3895
|
-
"verified": "_3XaZHa_verified",
|
|
3896
|
-
"topic": "_3XaZHa_topic",
|
|
3897
3911
|
"card": "_3XaZHa_card",
|
|
3912
|
+
"actions": "_3XaZHa_actions",
|
|
3913
|
+
"topics": "_3XaZHa_topics",
|
|
3914
|
+
"cardMain": "_3XaZHa_cardMain",
|
|
3898
3915
|
"body": "_3XaZHa_body",
|
|
3899
|
-
"fork": "_3XaZHa_fork",
|
|
3900
3916
|
"list": "_3XaZHa_list",
|
|
3917
|
+
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
3918
|
+
"footer": "_3XaZHa_footer",
|
|
3919
|
+
"cardTitle": "_3XaZHa_cardTitle",
|
|
3920
|
+
"retryBtn": "_3XaZHa_retryBtn",
|
|
3901
3921
|
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
3902
|
-
"
|
|
3903
|
-
"
|
|
3904
|
-
"
|
|
3905
|
-
"
|
|
3922
|
+
"date": "_3XaZHa_date",
|
|
3923
|
+
"topic": "_3XaZHa_topic",
|
|
3924
|
+
"fork": "_3XaZHa_fork",
|
|
3925
|
+
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
3906
3926
|
"versionBadge": "_3XaZHa_versionBadge",
|
|
3907
|
-
"
|
|
3908
|
-
"star": "_3XaZHa_star",
|
|
3909
|
-
"actions": "_3XaZHa_actions",
|
|
3910
|
-
"footer": "_3XaZHa_footer",
|
|
3911
|
-
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
3927
|
+
"installBtn": "_3XaZHa_installBtn",
|
|
3912
3928
|
"detailBtn": "_3XaZHa_detailBtn",
|
|
3913
|
-
"
|
|
3929
|
+
"desc": "_3XaZHa_desc",
|
|
3930
|
+
"verified": "_3XaZHa_verified",
|
|
3931
|
+
"star": "_3XaZHa_star",
|
|
3932
|
+
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
3933
|
+
"stateDesc": "_3XaZHa_stateDesc",
|
|
3934
|
+
"footLink": "_3XaZHa_footLink",
|
|
3935
|
+
"state": "_3XaZHa_state",
|
|
3936
|
+
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
3937
|
+
"updateBadge": "_3XaZHa_updateBadge",
|
|
3938
|
+
"stats": "_3XaZHa_stats",
|
|
3939
|
+
"stateTitle": "_3XaZHa_stateTitle",
|
|
3940
|
+
"cardHead": "_3XaZHa_cardHead",
|
|
3941
|
+
"installBtnCopied": "_3XaZHa_installBtnCopied"
|
|
3914
3942
|
};
|
|
3915
3943
|
//#endregion
|
|
3916
3944
|
//#region src/client/hooks/useIncrementalList.ts
|
|
@@ -4112,15 +4140,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4112
4140
|
css: css$8
|
|
4113
4141
|
});
|
|
4114
4142
|
var SectionTabs_module_css_default = {
|
|
4115
|
-
"
|
|
4143
|
+
"tabCount": "_7tvizq_tabCount",
|
|
4144
|
+
"tabActive": "_7tvizq_tabActive",
|
|
4116
4145
|
"tabIcon": "_7tvizq_tabIcon",
|
|
4117
|
-
"noticeBtn": "_7tvizq_noticeBtn",
|
|
4118
4146
|
"noticeIcon": "_7tvizq_noticeIcon",
|
|
4119
|
-
"
|
|
4120
|
-
"
|
|
4147
|
+
"noticeBtn": "_7tvizq_noticeBtn",
|
|
4148
|
+
"noticeCount": "_7tvizq_noticeCount",
|
|
4149
|
+
"root": "_7tvizq_root",
|
|
4121
4150
|
"tab": "_7tvizq_tab",
|
|
4122
|
-
"tabCountActive": "_7tvizq_tabCountActive"
|
|
4123
|
-
"noticeCount": "_7tvizq_noticeCount"
|
|
4151
|
+
"tabCountActive": "_7tvizq_tabCountActive"
|
|
4124
4152
|
};
|
|
4125
4153
|
//#endregion
|
|
4126
4154
|
//#region src/client/components/layout/SectionTabs.tsx
|
|
@@ -4197,42 +4225,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4197
4225
|
css: css$7
|
|
4198
4226
|
});
|
|
4199
4227
|
var InstalledView_module_css_default = {
|
|
4200
|
-
"
|
|
4201
|
-
"empty": "_1nXeGW_empty",
|
|
4202
|
-
"segGroup": "_1nXeGW_segGroup",
|
|
4203
|
-
"toolbar": "_1nXeGW_toolbar",
|
|
4204
|
-
"statusDot": "_1nXeGW_statusDot",
|
|
4228
|
+
"segBtn": "_1nXeGW_segBtn",
|
|
4205
4229
|
"list": "_1nXeGW_list",
|
|
4230
|
+
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
4231
|
+
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
4232
|
+
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
4206
4233
|
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
4234
|
+
"statusInactive": "_1nXeGW_statusInactive",
|
|
4235
|
+
"rowCategory": "_1nXeGW_rowCategory",
|
|
4207
4236
|
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
4208
|
-
"
|
|
4209
|
-
"
|
|
4210
|
-
"segBtn": "_1nXeGW_segBtn",
|
|
4211
|
-
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
4237
|
+
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
4238
|
+
"segLabel": "_1nXeGW_segLabel",
|
|
4212
4239
|
"row": "_1nXeGW_row",
|
|
4213
|
-
"
|
|
4240
|
+
"statusDot": "_1nXeGW_statusDot",
|
|
4241
|
+
"rowMeta": "_1nXeGW_rowMeta",
|
|
4242
|
+
"searchInput": "_1nXeGW_searchInput",
|
|
4243
|
+
"updateBadge": "_1nXeGW_updateBadge",
|
|
4244
|
+
"searchWrap": "_1nXeGW_searchWrap",
|
|
4245
|
+
"root": "_1nXeGW_root",
|
|
4246
|
+
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
4214
4247
|
"exampleRow": "_1nXeGW_exampleRow",
|
|
4215
|
-
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
4216
|
-
"rowRestart": "_1nXeGW_rowRestart",
|
|
4217
|
-
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
4218
|
-
"rowRepo": "_1nXeGW_rowRepo",
|
|
4219
|
-
"segRow": "_1nXeGW_segRow",
|
|
4220
4248
|
"rowDesc": "_1nXeGW_rowDesc",
|
|
4221
|
-
"
|
|
4249
|
+
"segRow": "_1nXeGW_segRow",
|
|
4250
|
+
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
4222
4251
|
"rowActions": "_1nXeGW_rowActions",
|
|
4223
|
-
"statusPending": "_1nXeGW_statusPending",
|
|
4224
|
-
"searchWrap": "_1nXeGW_searchWrap",
|
|
4225
|
-
"rowDetail": "_1nXeGW_rowDetail",
|
|
4226
|
-
"statusInactive": "_1nXeGW_statusInactive",
|
|
4227
4252
|
"versionBadge": "_1nXeGW_versionBadge",
|
|
4228
|
-
"
|
|
4229
|
-
"
|
|
4230
|
-
"rowMeta": "_1nXeGW_rowMeta",
|
|
4231
|
-
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
4232
|
-
"segLabel": "_1nXeGW_segLabel",
|
|
4253
|
+
"segGroup": "_1nXeGW_segGroup",
|
|
4254
|
+
"statusPending": "_1nXeGW_statusPending",
|
|
4233
4255
|
"rowTitle": "_1nXeGW_rowTitle",
|
|
4234
|
-
"
|
|
4235
|
-
"
|
|
4256
|
+
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
4257
|
+
"empty": "_1nXeGW_empty",
|
|
4258
|
+
"rowRepo": "_1nXeGW_rowRepo",
|
|
4259
|
+
"rowRestart": "_1nXeGW_rowRestart",
|
|
4260
|
+
"rowMain": "_1nXeGW_rowMain",
|
|
4261
|
+
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
4262
|
+
"toolbar": "_1nXeGW_toolbar",
|
|
4263
|
+
"rowDetail": "_1nXeGW_rowDetail"
|
|
4236
4264
|
};
|
|
4237
4265
|
//#endregion
|
|
4238
4266
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -4463,7 +4491,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4463
4491
|
}
|
|
4464
4492
|
//#endregion
|
|
4465
4493
|
//#region \0dsh-css:src/client/styles/CustomInstallView.module.css.mjs
|
|
4466
|
-
const css$6 = ".zISxCG_root{flex-direction:column;gap:10px;min-width:0;max-width:560px;display:flex}.zISxCG_desc{color:var(--hub-text-tertiary);margin:0;font-size:12px;line-height:18px}.zISxCG_installCards{flex-direction:column;flex-shrink:0;gap:10px;min-width:0;display:flex}.zISxCG_installCard{background:var(--hub-bg-1);border:1px solid var(--hub-border-1);border-radius:8px;flex-direction:column;gap:8px;min-width:0;padding:10px 12px;display:flex}.zISxCG_installCardHead{align-items:center;min-width:0;display:flex}.zISxCG_installLabel{color:var(--hub-text-primary);font-size:12px;font-weight:600;line-height:18px}.zISxCG_installHelpBtn{width:18px;height:18px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:1px solid #0000;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;margin-left:6px;padding:0;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.zISxCG_installHelpBtn:hover{color:var(--hub-brand);background:var(--hub-brand-tint);border-color:var(--hub-brand-border-soft)}.zISxCG_installExample{color:var(--hub-text-tertiary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:16px;overflow:hidden}.zISxCG_installRow{align-items:center;gap:8px;min-width:0;display:flex}.zISxCG_installInput{min-width:0;height:28px;color:var(--hub-text-primary);border:1px solid var(--hub-border-2);background:0 0;border-radius:6px;outline:none;flex:auto;padding:0 9px;font-size:12px;line-height:26px;transition:border-color .12s}.zISxCG_installInput::placeholder{color:var(--hub-text-tertiary)}.zISxCG_installInput:focus{border-color:var(--hub-brand)}.zISxCG_installInputError,.zISxCG_installInputError:focus{border-color:var(--hub-danger-text)}.zISxCG_installBtn{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;flex-shrink:0;padding:5px 14px;font-family:inherit;font-size:12px;font-weight:500;line-height:18px;transition:background .12s,opacity .12s}.zISxCG_installBtn:hover{background:var(--hub-brand-hover)}.zISxCG_installBtn:disabled{opacity:.45;cursor:default}.zISxCG_installCardDisabled{opacity:.8}.zISxCG_channelOff{min-width:0;color:var(--hub-warn);background:var(--hub-warn-tint);border:1px solid var(--hub-warn-border);border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 9px;font-size:12px;line-height:16px;display:flex}.zISxCG_channelOffText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.zISxCG_channelOffBtn{color:var(--hub-warn-strong);border:1px solid var(--hub-warn-border);cursor:pointer;white-space:nowrap;background:0 0;border-radius:6px;flex-shrink:0;padding:3px 10px;font-family:inherit;font-size:12px;font-weight:500;line-height:18px;transition:background .12s,color .12s}.zISxCG_channelOffBtn:hover{background:var(--hub-warn-tint);color:var(--hub-warn)}.zISxCG_installError{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border);border-radius:6px;padding:5px 8px;font-size:12px;line-height:16px}.zISxCG_helpBody{flex-direction:column;gap:7px;padding:4px 2px;display:flex}.zISxCG_helpLine{align-items:baseline;gap:12px;min-width:0;font-size:12px;line-height:20px;display:flex}.zISxCG_helpCmd{color:var(--hub-text-primary);white-space:nowrap;flex-shrink:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.zISxCG_helpNote{min-width:0;color:var(--hub-text-tertiary);font-size:11px}";
|
|
4494
|
+
const css$6 = ".zISxCG_root{flex-direction:column;gap:10px;min-width:0;max-width:560px;display:flex}.zISxCG_desc{color:var(--hub-text-tertiary);margin:0;font-size:12px;line-height:18px}.zISxCG_installCards{flex-direction:column;flex-shrink:0;gap:10px;min-width:0;display:flex}.zISxCG_installCard{background:var(--hub-bg-1);border:1px solid var(--hub-border-1);border-radius:8px;flex-direction:column;gap:8px;min-width:0;padding:10px 12px;display:flex}.zISxCG_installCardHead{align-items:center;min-width:0;display:flex}.zISxCG_installLabel{color:var(--hub-text-primary);font-size:12px;font-weight:600;line-height:18px}.zISxCG_installHelpBtn{width:18px;height:18px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:1px solid #0000;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;margin-left:6px;padding:0;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.zISxCG_installHelpBtn:hover{color:var(--hub-brand);background:var(--hub-brand-tint);border-color:var(--hub-brand-border-soft)}.zISxCG_installInsertBtn{color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;background:0 0;border-radius:6px;flex-shrink:0;margin-left:auto;padding:2px 9px;font-family:inherit;font-size:11px;font-weight:500;line-height:16px;transition:color .12s,border-color .12s,background .12s}.zISxCG_installInsertBtn:hover{color:var(--hub-brand);border-color:var(--hub-brand-border-soft);background:var(--hub-brand-tint)}.zISxCG_installExample{color:var(--hub-text-tertiary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;line-height:16px;overflow:hidden}.zISxCG_installRow{align-items:center;gap:8px;min-width:0;display:flex}.zISxCG_installInput{min-width:0;height:28px;color:var(--hub-text-primary);border:1px solid var(--hub-border-2);background:0 0;border-radius:6px;outline:none;flex:auto;padding:0 9px;font-size:12px;line-height:26px;transition:border-color .12s}.zISxCG_installInput::placeholder{color:var(--hub-text-tertiary)}.zISxCG_installInput:focus{border-color:var(--hub-brand)}.zISxCG_installInputError,.zISxCG_installInputError:focus{border-color:var(--hub-danger-text)}.zISxCG_installBtn{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;flex-shrink:0;padding:5px 14px;font-family:inherit;font-size:12px;font-weight:500;line-height:18px;transition:background .12s,opacity .12s}.zISxCG_installBtn:hover{background:var(--hub-brand-hover)}.zISxCG_installBtn:disabled{opacity:.45;cursor:default}.zISxCG_installCardDisabled{opacity:.8}.zISxCG_channelOff{min-width:0;color:var(--hub-warn);background:var(--hub-warn-tint);border:1px solid var(--hub-warn-border);border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 9px;font-size:12px;line-height:16px;display:flex}.zISxCG_channelOffText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.zISxCG_channelOffBtn{color:var(--hub-warn-strong);border:1px solid var(--hub-warn-border);cursor:pointer;white-space:nowrap;background:0 0;border-radius:6px;flex-shrink:0;padding:3px 10px;font-family:inherit;font-size:12px;font-weight:500;line-height:18px;transition:background .12s,color .12s}.zISxCG_channelOffBtn:hover{background:var(--hub-warn-tint);color:var(--hub-warn)}.zISxCG_installError{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border);border-radius:6px;padding:5px 8px;font-size:12px;line-height:16px}.zISxCG_helpBody{flex-direction:column;gap:7px;padding:4px 2px;display:flex}.zISxCG_helpLine{align-items:baseline;gap:12px;min-width:0;font-size:12px;line-height:20px;display:flex}.zISxCG_helpCmd{color:var(--hub-text-primary);white-space:nowrap;flex-shrink:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.zISxCG_helpNote{min-width:0;color:var(--hub-text-tertiary);font-size:11px}";
|
|
4467
4495
|
const tagId$6 = "dsh-plugin/CustomInstallView.module.css";
|
|
4468
4496
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
|
|
4469
4497
|
const tag = document.createElement("style");
|
|
@@ -4478,27 +4506,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4478
4506
|
css: css$6
|
|
4479
4507
|
});
|
|
4480
4508
|
var CustomInstallView_module_css_default = {
|
|
4481
|
-
"
|
|
4482
|
-
"
|
|
4509
|
+
"installInput": "zISxCG_installInput",
|
|
4510
|
+
"installExample": "zISxCG_installExample",
|
|
4511
|
+
"desc": "zISxCG_desc",
|
|
4483
4512
|
"installCards": "zISxCG_installCards",
|
|
4513
|
+
"installInsertBtn": "zISxCG_installInsertBtn",
|
|
4484
4514
|
"helpNote": "zISxCG_helpNote",
|
|
4485
|
-
"
|
|
4486
|
-
"installExample": "zISxCG_installExample",
|
|
4487
|
-
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
4515
|
+
"installLabel": "zISxCG_installLabel",
|
|
4488
4516
|
"channelOffText": "zISxCG_channelOffText",
|
|
4489
4517
|
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
4490
4518
|
"helpLine": "zISxCG_helpLine",
|
|
4519
|
+
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
4491
4520
|
"root": "zISxCG_root",
|
|
4492
4521
|
"channelOff": "zISxCG_channelOff",
|
|
4493
|
-
"installLabel": "zISxCG_installLabel",
|
|
4494
|
-
"installInput": "zISxCG_installInput",
|
|
4495
|
-
"installCardHead": "zISxCG_installCardHead",
|
|
4496
4522
|
"helpBody": "zISxCG_helpBody",
|
|
4497
|
-
"
|
|
4498
|
-
"installRow": "zISxCG_installRow",
|
|
4499
|
-
"desc": "zISxCG_desc",
|
|
4523
|
+
"installCardHead": "zISxCG_installCardHead",
|
|
4500
4524
|
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
4501
|
-
"
|
|
4525
|
+
"installRow": "zISxCG_installRow",
|
|
4526
|
+
"installBtn": "zISxCG_installBtn",
|
|
4527
|
+
"helpCmd": "zISxCG_helpCmd",
|
|
4528
|
+
"installInputError": "zISxCG_installInputError",
|
|
4529
|
+
"installCard": "zISxCG_installCard",
|
|
4530
|
+
"installError": "zISxCG_installError"
|
|
4502
4531
|
};
|
|
4503
4532
|
//#endregion
|
|
4504
4533
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -4526,20 +4555,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4526
4555
|
const GITHUB_BARE_RE = /^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/;
|
|
4527
4556
|
/** npm 包名(含 @scope/pkg) */
|
|
4528
4557
|
const NPM_PACKAGE_RE = /^(?:@[a-z0-9._-]+\/)?[a-z0-9._-]+$/;
|
|
4529
|
-
/** DSH 命令行前缀(官方唯一形式 `dsh plugin --profile <name> add <target>`)——
|
|
4558
|
+
/** DSH 命令行前缀(官方唯一形式 `dsh plugin --profile <name> <add|update> <target>`)—— 提取其中的动作与目标。
|
|
4530
4559
|
* 官方 CLI(apps/cli/src/args.ts,commander):--profile 为必填长选项(无 -p 简写,省略即报错),
|
|
4531
|
-
* 支持 `--profile=<name>`
|
|
4532
|
-
|
|
4560
|
+
* 支持 `--profile=<name>` 等号形式;命令大小写不敏感。update = 已安装目标覆盖更新到最新;
|
|
4561
|
+
* remove 不走这里(卸载由「已安装」列表的卸载按钮执行,命令框不认卸载动词)。
|
|
4562
|
+
* 与 server 端 installTargetOf 口径一致。 */
|
|
4563
|
+
const DSH_PLUGIN_CMD_RE = /^dsh\s+plugin\s+--profile(?:\s+|=)\S+\s+(add|update)\s+(.+)$/i;
|
|
4533
4564
|
/** npm 全局安装命令(官方 README 格式,如 `npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui`)——
|
|
4534
4565
|
* 提取 -g 之后的包列表;任一包名非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf 口径一致。 */
|
|
4535
4566
|
const NPM_GLOBAL_CMD_RE = /^npm\s+(?:install|i)\s+(?:-g|--global)\s+(.+)$/i;
|
|
4536
4567
|
/** 常规 npm/pnpm 安装命令(装进当前 profile,如 `npm install lodash`、`pnpm add @scope/pkg`)——
|
|
4537
4568
|
* 提取命令后的包列表;包列表在 splitPackages 里逐个校验。 */
|
|
4538
4569
|
const NPM_INSTALL_CMD_RE = /^(?:npm\s+(?:install|i)|pnpm\s+(?:add|i|install))\s+(.+)$/i;
|
|
4539
|
-
|
|
4570
|
+
/** 解析 DSH 命令:返回 { action, target };非官方命令返回 null(交给格式错误提示)。 */
|
|
4571
|
+
function parseDshCommand(raw) {
|
|
4540
4572
|
const input = raw.trim();
|
|
4541
4573
|
const match = DSH_PLUGIN_CMD_RE.exec(input);
|
|
4542
|
-
|
|
4574
|
+
if (match === null) return null;
|
|
4575
|
+
return {
|
|
4576
|
+
action: match[1].toLowerCase(),
|
|
4577
|
+
target: match[2].trim()
|
|
4578
|
+
};
|
|
4543
4579
|
}
|
|
4544
4580
|
/** 空格分隔的包列表:逐个按 npm 包名语法校验 + 拒绝以 - 开头的 token(npm 会把 --xxx 当参数而非包名),
|
|
4545
4581
|
* 任一非法返回 null(交给格式错误提示)。与 server 端 globalNpmPackagesOf 同口径。 */
|
|
@@ -4578,9 +4614,6 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4578
4614
|
const input = raw.trim();
|
|
4579
4615
|
return GITHUB_URL_RE.test(input) || GITHUB_BARE_RE.test(input);
|
|
4580
4616
|
}
|
|
4581
|
-
function isDshCommand(raw) {
|
|
4582
|
-
return DSH_PLUGIN_CMD_RE.test(raw.trim());
|
|
4583
|
-
}
|
|
4584
4617
|
/** 卡片标题旁的「帮助」弹窗:三块卡片各自的标题与格式清单语言包 key。 */
|
|
4585
4618
|
const HELP_CARDS = {
|
|
4586
4619
|
npm: {
|
|
@@ -4596,7 +4629,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4596
4629
|
contentKey: "dshCmdHelp"
|
|
4597
4630
|
}
|
|
4598
4631
|
};
|
|
4599
|
-
function CustomInstallView({ t, onInstallCustom, enableNpm, enableGit, enableDsh, onOpenSettings }) {
|
|
4632
|
+
function CustomInstallView({ t, onInstallCustom, enableNpm, enableGit, enableDsh, onOpenSettings, profile }) {
|
|
4600
4633
|
/** 自定义安装:NPM 包输入与格式错误('' = 无错误) */
|
|
4601
4634
|
const [npmQuery, setNpmQuery] = (0, react.useState)("");
|
|
4602
4635
|
const [npmError, setNpmError] = (0, react.useState)("");
|
|
@@ -4641,14 +4674,20 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4641
4674
|
const submitCmd = () => {
|
|
4642
4675
|
const raw = cmdQuery.trim();
|
|
4643
4676
|
if (!raw) return;
|
|
4644
|
-
|
|
4677
|
+
const parsed = parseDshCommand(raw);
|
|
4678
|
+
if (parsed === null) {
|
|
4645
4679
|
setCmdError(t("dshCmdInvalid"));
|
|
4646
4680
|
return;
|
|
4647
4681
|
}
|
|
4648
|
-
onInstallCustom(
|
|
4682
|
+
onInstallCustom(parsed.target);
|
|
4649
4683
|
setCmdQuery("");
|
|
4650
4684
|
setCmdError("");
|
|
4651
4685
|
};
|
|
4686
|
+
/** 一键插入 DSH Plugin Hub 自身的更新命令:按当前 profile 拼官方命令填进输入框,用户确认后提交 */
|
|
4687
|
+
const insertHubUpdate = () => {
|
|
4688
|
+
setCmdQuery(`dsh plugin --profile ${profile} update dsh-plugin`);
|
|
4689
|
+
setCmdError("");
|
|
4690
|
+
};
|
|
4652
4691
|
return (0, react.createElement)("div", { className: CustomInstallView_module_css_default.root }, (0, react.createElement)("p", { className: CustomInstallView_module_css_default.desc }, t("customViewDesc")), (0, react.createElement)("div", { className: CustomInstallView_module_css_default.installCards }, (0, react.createElement)("div", { className: enableNpm ? CustomInstallView_module_css_default.installCard : `${CustomInstallView_module_css_default.installCard} ${CustomInstallView_module_css_default.installCardDisabled}` }, (0, react.createElement)("div", { className: CustomInstallView_module_css_default.installCardHead }, (0, react.createElement)("span", { className: CustomInstallView_module_css_default.installLabel }, t("npmInstallLabel")), (0, react.createElement)("button", {
|
|
4653
4692
|
type: "button",
|
|
4654
4693
|
className: CustomInstallView_module_css_default.installHelpBtn,
|
|
@@ -4711,7 +4750,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4711
4750
|
title: t("installHelp"),
|
|
4712
4751
|
"aria-label": t("installHelp"),
|
|
4713
4752
|
onClick: () => setHelpFor("cmd")
|
|
4714
|
-
}, (0, react.createElement)(HelpIcon))
|
|
4753
|
+
}, (0, react.createElement)(HelpIcon)), enableDsh ? (0, react.createElement)("button", {
|
|
4754
|
+
type: "button",
|
|
4755
|
+
className: CustomInstallView_module_css_default.installInsertBtn,
|
|
4756
|
+
onClick: insertHubUpdate
|
|
4757
|
+
}, t("dshCmdInsertHubUpdate")) : null), !enableDsh ? channelOffRow : [
|
|
4715
4758
|
(0, react.createElement)("div", { className: CustomInstallView_module_css_default.installExample }, t("dshCmdExample")),
|
|
4716
4759
|
(0, react.createElement)("div", { className: CustomInstallView_module_css_default.installRow }, (0, react.createElement)("input", {
|
|
4717
4760
|
className: cmdError ? `${CustomInstallView_module_css_default.installInput} ${CustomInstallView_module_css_default.installInputError}` : CustomInstallView_module_css_default.installInput,
|
|
@@ -4771,30 +4814,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4771
4814
|
css: css$5
|
|
4772
4815
|
});
|
|
4773
4816
|
var SettingsView_module_css_default = {
|
|
4817
|
+
"root": "_506LLG_root",
|
|
4818
|
+
"navItem": "_506LLG_navItem",
|
|
4774
4819
|
"pageHeader": "_506LLG_pageHeader",
|
|
4775
|
-
"
|
|
4820
|
+
"settingDesc": "_506LLG_settingDesc",
|
|
4821
|
+
"settingRowStack": "_506LLG_settingRowStack",
|
|
4776
4822
|
"controlDropdown": "_506LLG_controlDropdown",
|
|
4777
|
-
"settingRow": "_506LLG_settingRow",
|
|
4778
|
-
"textInput": "_506LLG_textInput",
|
|
4779
4823
|
"settingLabel": "_506LLG_settingLabel",
|
|
4780
|
-
"
|
|
4824
|
+
"navItemActive": "_506LLG_navItemActive",
|
|
4825
|
+
"card": "_506LLG_card",
|
|
4826
|
+
"pageTitle": "_506LLG_pageTitle",
|
|
4827
|
+
"content": "_506LLG_content",
|
|
4828
|
+
"textInput": "_506LLG_textInput",
|
|
4781
4829
|
"pageDesc": "_506LLG_pageDesc",
|
|
4782
|
-
"settingRowStack": "_506LLG_settingRowStack",
|
|
4783
|
-
"navIcon": "_506LLG_navIcon",
|
|
4784
|
-
"sidebar": "_506LLG_sidebar",
|
|
4785
|
-
"navItem": "_506LLG_navItem",
|
|
4786
4830
|
"settingControlStack": "_506LLG_settingControlStack",
|
|
4787
|
-
"content": "_506LLG_content",
|
|
4788
|
-
"settingDesc": "_506LLG_settingDesc",
|
|
4789
4831
|
"resetBtn": "_506LLG_resetBtn",
|
|
4790
|
-
"
|
|
4832
|
+
"sidebar": "_506LLG_sidebar",
|
|
4833
|
+
"navIcon": "_506LLG_navIcon",
|
|
4791
4834
|
"settingTitle": "_506LLG_settingTitle",
|
|
4792
|
-
"
|
|
4793
|
-
"
|
|
4835
|
+
"settingRow": "_506LLG_settingRow",
|
|
4836
|
+
"settingControl": "_506LLG_settingControl"
|
|
4794
4837
|
};
|
|
4795
4838
|
//#endregion
|
|
4796
4839
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
4797
|
-
const css$4 = ".B_Gxsq_dropdown{flex-shrink:0;position:relative}.B_Gxsq_dropdownBtn{box-sizing:border-box;border:1px solid var(--hub-border-2);height:28px;color:var(--hub-text-primary);background:var(--hub-bg-hover);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;align-items:center;gap:6px;padding:0 10px;font-size:12px;line-height:26px;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.B_Gxsq_dropdownBtn:hover{background:#80808047}.B_Gxsq_dropdownLabel{white-space:nowrap}.B_Gxsq_dropdownArrow,.B_Gxsq_dropdownArrowOpen{color:var(--hub-text-tertiary);transition:transform .12s,color .12s;display:inline-flex}.B_Gxsq_dropdownArrowOpen{color:var(--hub-text-secondary);transform:rotate(180deg)}.B_Gxsq_dropdownPanel{z-index:20;border:1px solid var(--hub-border-2);background:var(--hub-bg-1);border-radius:8px;flex-direction:column;gap:1px;min-width:100%;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);left:0}.B_Gxsq_dropdownItem,.B_Gxsq_dropdownItemActive{text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;justify-content:space-between;align-items:center;gap:12px;width:100%;padding:5px 8px;font-size:12px;line-height:16px;transition:color .12s,background .12s;display:flex}.B_Gxsq_dropdownItem{color:var(--hub-text-secondary);background:0 0}.B_Gxsq_dropdownItem:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.B_Gxsq_dropdownItemActive{color:var(--hub-brand);background:var(--hub-brand-tint);font-weight:600}.B_Gxsq_dropdownItemLabel{white-space:nowrap}.B_Gxsq_dropdownCount,.B_Gxsq_dropdownCountActive{text-align:center;border-radius:999px;min-width:16px;padding:0 5px;font-size:10px;line-height:14px}.B_Gxsq_dropdownCount{color:var(--hub-text-tertiary);background:var(--hub-bg-btn)}.B_Gxsq_dropdownCountActive{color:var(--hub-text-on-fill);background:var(--hub-btn-fill)}";
|
|
4840
|
+
const css$4 = ".B_Gxsq_dropdown{flex-shrink:0;position:relative}.B_Gxsq_dropdownFill{width:100%}.B_Gxsq_dropdownFill>.B_Gxsq_dropdownBtn{justify-content:space-between;width:100%}.B_Gxsq_dropdownBtn{box-sizing:border-box;border:1px solid var(--hub-border-2);height:28px;color:var(--hub-text-primary);background:var(--hub-bg-hover);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;align-items:center;gap:6px;padding:0 10px;font-size:12px;line-height:26px;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.B_Gxsq_dropdownBtn:hover{background:#80808047}.B_Gxsq_dropdownLabel{white-space:nowrap}.B_Gxsq_dropdownArrow,.B_Gxsq_dropdownArrowOpen{color:var(--hub-text-tertiary);transition:transform .12s,color .12s;display:inline-flex}.B_Gxsq_dropdownArrowOpen{color:var(--hub-text-secondary);transform:rotate(180deg)}.B_Gxsq_dropdownPanel{z-index:20;border:1px solid var(--hub-border-2);background:var(--hub-bg-1);border-radius:8px;flex-direction:column;gap:1px;min-width:100%;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);left:0}.B_Gxsq_dropdownItem,.B_Gxsq_dropdownItemActive{text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;justify-content:space-between;align-items:center;gap:12px;width:100%;padding:5px 8px;font-size:12px;line-height:16px;transition:color .12s,background .12s;display:flex}.B_Gxsq_dropdownItem{color:var(--hub-text-secondary);background:0 0}.B_Gxsq_dropdownItem:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.B_Gxsq_dropdownItemActive{color:var(--hub-brand);background:var(--hub-brand-tint);font-weight:600}.B_Gxsq_dropdownItemLabel{white-space:nowrap}.B_Gxsq_dropdownCount,.B_Gxsq_dropdownCountActive{text-align:center;border-radius:999px;min-width:16px;padding:0 5px;font-size:10px;line-height:14px}.B_Gxsq_dropdownCount{color:var(--hub-text-tertiary);background:var(--hub-bg-btn)}.B_Gxsq_dropdownCountActive{color:var(--hub-text-on-fill);background:var(--hub-btn-fill)}";
|
|
4798
4841
|
const tagId$4 = "dsh-plugin/Dropdown.module.css";
|
|
4799
4842
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
|
|
4800
4843
|
const tag = document.createElement("style");
|
|
@@ -4809,19 +4852,63 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4809
4852
|
css: css$4
|
|
4810
4853
|
});
|
|
4811
4854
|
var Dropdown_module_css_default = {
|
|
4812
|
-
"
|
|
4855
|
+
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
4856
|
+
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
4813
4857
|
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
4814
|
-
"
|
|
4858
|
+
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
4815
4859
|
"dropdown": "B_Gxsq_dropdown",
|
|
4816
|
-
"
|
|
4860
|
+
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
4817
4861
|
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
4818
|
-
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
4819
4862
|
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
4863
|
+
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
4820
4864
|
"dropdownPanel": "B_Gxsq_dropdownPanel",
|
|
4821
|
-
"
|
|
4865
|
+
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
4822
4866
|
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel"
|
|
4823
4867
|
};
|
|
4824
4868
|
//#endregion
|
|
4869
|
+
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
4870
|
+
const css$3 = ".k-cD4G_toggle,.k-cD4G_toggleOn{cursor:pointer;border:none;border-radius:999px;flex:none;align-items:center;width:34px;height:18px;padding:0;transition:background-color .15s;display:inline-flex}.k-cD4G_toggle{background:var(--hub-bg-3);box-shadow:inset 0 0 0 1px var(--hub-border-2)}.k-cD4G_toggle:hover{background:var(--hub-bg-hover)}.k-cD4G_toggleOn{background:var(--hub-brand)}.k-cD4G_toggleOn:hover{background:var(--hub-brand-hover)}.k-cD4G_toggle:disabled,.k-cD4G_toggleOn:disabled{opacity:.5;cursor:not-allowed}.k-cD4G_knob{background:#fff;border-radius:999px;width:14px;height:14px;transition:transform .15s;display:block;transform:translate(2px);box-shadow:0 1px 2px #00000040}.k-cD4G_toggleOn .k-cD4G_knob{transform:translate(18px)}";
|
|
4871
|
+
const tagId$3 = "dsh-plugin/Toggle.module.css";
|
|
4872
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
|
|
4873
|
+
const tag = document.createElement("style");
|
|
4874
|
+
tag.dataset.plugin = "dsh-plugin";
|
|
4875
|
+
tag.dataset.pluginCss = tagId$3;
|
|
4876
|
+
tag.textContent = css$3;
|
|
4877
|
+
document.head.appendChild(tag);
|
|
4878
|
+
}
|
|
4879
|
+
const cssRegistry$3 = globalThis.__DSH_PLUGIN_CSS__ ??= [];
|
|
4880
|
+
if (!cssRegistry$3.some((e) => e.tagId === tagId$3)) cssRegistry$3.push({
|
|
4881
|
+
tagId: tagId$3,
|
|
4882
|
+
css: css$3
|
|
4883
|
+
});
|
|
4884
|
+
var Toggle_module_css_default = {
|
|
4885
|
+
"knob": "k-cD4G_knob",
|
|
4886
|
+
"toggle": "k-cD4G_toggle",
|
|
4887
|
+
"toggleOn": "k-cD4G_toggleOn"
|
|
4888
|
+
};
|
|
4889
|
+
//#endregion
|
|
4890
|
+
//#region src/client/components/ui/Toggle.tsx
|
|
4891
|
+
/**
|
|
4892
|
+
* DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
|
|
4893
|
+
* Website: https://dsh-plugin.org
|
|
4894
|
+
* GitHub: https://github.com/dshplugin/dsh-plugin-hub
|
|
4895
|
+
*
|
|
4896
|
+
* Compact switch used by the settings rows. Native-button based so it is
|
|
4897
|
+
* keyboard focusable and announces state via aria-checked; styling driven
|
|
4898
|
+
* by the --hub-* tokens (on = brand fill, off = neutral track).
|
|
4899
|
+
*/
|
|
4900
|
+
function Toggle({ checked, onChange, title, disabled }) {
|
|
4901
|
+
return (0, react.createElement)("button", {
|
|
4902
|
+
type: "button",
|
|
4903
|
+
role: "switch",
|
|
4904
|
+
"aria-checked": checked,
|
|
4905
|
+
disabled,
|
|
4906
|
+
title,
|
|
4907
|
+
className: checked ? Toggle_module_css_default.toggleOn : Toggle_module_css_default.toggle,
|
|
4908
|
+
onClick: () => onChange(!checked)
|
|
4909
|
+
}, (0, react.createElement)("span", { className: Toggle_module_css_default.knob }));
|
|
4910
|
+
}
|
|
4911
|
+
//#endregion
|
|
4825
4912
|
//#region src/client/components/ui/Dropdown.tsx
|
|
4826
4913
|
/**
|
|
4827
4914
|
* DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
|
|
@@ -4881,49 +4968,6 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4881
4968
|
}, (0, react.createElement)("span", { className: Dropdown_module_css_default.dropdownItemLabel }, o.label), typeof o.count === "number" ? (0, react.createElement)("span", { className: o.value === value ? Dropdown_module_css_default.dropdownCountActive : Dropdown_module_css_default.dropdownCount }, o.count) : null))));
|
|
4882
4969
|
}
|
|
4883
4970
|
//#endregion
|
|
4884
|
-
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
4885
|
-
const css$3 = ".k-cD4G_toggle,.k-cD4G_toggleOn{cursor:pointer;border:none;border-radius:999px;flex:none;align-items:center;width:34px;height:18px;padding:0;transition:background-color .15s;display:inline-flex}.k-cD4G_toggle{background:var(--hub-bg-3);box-shadow:inset 0 0 0 1px var(--hub-border-2)}.k-cD4G_toggle:hover{background:var(--hub-bg-hover)}.k-cD4G_toggleOn{background:var(--hub-brand)}.k-cD4G_toggleOn:hover{background:var(--hub-brand-hover)}.k-cD4G_toggle:disabled,.k-cD4G_toggleOn:disabled{opacity:.5;cursor:not-allowed}.k-cD4G_knob{background:#fff;border-radius:999px;width:14px;height:14px;transition:transform .15s;display:block;transform:translate(2px);box-shadow:0 1px 2px #00000040}.k-cD4G_toggleOn .k-cD4G_knob{transform:translate(18px)}";
|
|
4886
|
-
const tagId$3 = "dsh-plugin/Toggle.module.css";
|
|
4887
|
-
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
|
|
4888
|
-
const tag = document.createElement("style");
|
|
4889
|
-
tag.dataset.plugin = "dsh-plugin";
|
|
4890
|
-
tag.dataset.pluginCss = tagId$3;
|
|
4891
|
-
tag.textContent = css$3;
|
|
4892
|
-
document.head.appendChild(tag);
|
|
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
|
-
});
|
|
4899
|
-
var Toggle_module_css_default = {
|
|
4900
|
-
"toggle": "k-cD4G_toggle",
|
|
4901
|
-
"knob": "k-cD4G_knob",
|
|
4902
|
-
"toggleOn": "k-cD4G_toggleOn"
|
|
4903
|
-
};
|
|
4904
|
-
//#endregion
|
|
4905
|
-
//#region src/client/components/ui/Toggle.tsx
|
|
4906
|
-
/**
|
|
4907
|
-
* DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
|
|
4908
|
-
* Website: https://dsh-plugin.org
|
|
4909
|
-
* GitHub: https://github.com/dshplugin/dsh-plugin-hub
|
|
4910
|
-
*
|
|
4911
|
-
* Compact switch used by the settings rows. Native-button based so it is
|
|
4912
|
-
* keyboard focusable and announces state via aria-checked; styling driven
|
|
4913
|
-
* by the --hub-* tokens (on = brand fill, off = neutral track).
|
|
4914
|
-
*/
|
|
4915
|
-
function Toggle({ checked, onChange, title, disabled }) {
|
|
4916
|
-
return (0, react.createElement)("button", {
|
|
4917
|
-
type: "button",
|
|
4918
|
-
role: "switch",
|
|
4919
|
-
"aria-checked": checked,
|
|
4920
|
-
disabled,
|
|
4921
|
-
title,
|
|
4922
|
-
className: checked ? Toggle_module_css_default.toggleOn : Toggle_module_css_default.toggle,
|
|
4923
|
-
onClick: () => onChange(!checked)
|
|
4924
|
-
}, (0, react.createElement)("span", { className: Toggle_module_css_default.knob }));
|
|
4925
|
-
}
|
|
4926
|
-
//#endregion
|
|
4927
4971
|
//#region \0dsh-css:src/client/styles/DiagnosticsView.module.css.mjs
|
|
4928
4972
|
const css$2 = ".k9eRya_panel{flex-direction:column;min-width:0;display:flex}.k9eRya_envRow{border-bottom:1px solid var(--hub-border-1);align-items:center;gap:10px;padding:8px 12px;display:flex}.k9eRya_envLabel{flex:1;min-width:0}.k9eRya_envTitle{color:var(--hub-text-primary);font-size:12.5px;font-weight:500;line-height:18px}.k9eRya_envDesc{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.k9eRya_envCopyBtn{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 12px;font-size:11.5px;font-weight:500;transition:color .12s,background-color .12s,border-color .12s}.k9eRya_envCopyBtn:hover:not(:disabled){color:var(--hub-text-primary);background:var(--hub-bg-2)}.k9eRya_envCopyBtn:disabled{opacity:.55;cursor:default}.k9eRya_head{border-bottom:1px solid var(--hub-border-1);align-items:center;gap:10px;padding:8px 12px;display:flex}.k9eRya_headHint{min-width:0;color:var(--hub-text-tertiary);flex:1;font-size:11px;line-height:16px}.k9eRya_runBtn{height:24px;color:var(--hub-brand);background:var(--hub-brand-tint);cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #0000;border-radius:6px;flex:none;padding:0 12px;font-size:11.5px;font-weight:500;transition:color .12s,background-color .12s,border-color .12s}.k9eRya_runBtn:hover:not(:disabled){color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}.k9eRya_runBtn:disabled{opacity:.55;cursor:default}.k9eRya_row{box-sizing:border-box;border:none;border-bottom:1px solid var(--hub-border-1);width:100%;min-width:0;font:inherit;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;align-items:center;gap:10px;padding:9px 12px;transition:background-color .12s;display:flex}.k9eRya_row:last-of-type{border-bottom:none}.k9eRya_row:hover:not(:disabled){background:var(--hub-bg-hover)}.k9eRya_row:disabled{cursor:default}.k9eRya_name{color:var(--hub-text-primary);white-space:nowrap;flex:none;font-size:12.5px;font-weight:500;line-height:18px}.k9eRya_display{min-width:0;color:var(--hub-text-tertiary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:11px;line-height:16px;overflow:hidden}.k9eRya_meta{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex:none;font-size:11px;line-height:16px}.k9eRya_badge{text-align:center;white-space:nowrap;font-variant-numeric:tabular-nums;border-radius:999px;flex:none;height:17px;padding:0 8px;font-size:10.5px;line-height:17px}.k9eRya_badgeOk{color:var(--hub-success);background:var(--hub-success-tint)}.k9eRya_badgeFail{color:var(--hub-danger-text);background:var(--hub-danger-tint)}.k9eRya_badgeRunning{color:var(--hub-text-secondary);background:var(--hub-bg-hover);animation:1s ease-in-out infinite k9eRya_diagPulse}.k9eRya_badgeIdle{color:var(--hub-text-disabled);background:var(--hub-bg-hover)}@keyframes k9eRya_diagPulse{0%,to{opacity:1}50%{opacity:.4}}.k9eRya_summary{padding:8px 12px 10px;font-size:11px;line-height:16px}.k9eRya_summaryOk{color:var(--hub-success)}.k9eRya_summaryFail{color:var(--hub-danger-text)}.k9eRya_summaryRunning{color:var(--hub-text-tertiary)}";
|
|
4929
4973
|
const tagId$2 = "dsh-plugin/DiagnosticsView.module.css";
|
|
@@ -4940,29 +4984,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4940
4984
|
css: css$2
|
|
4941
4985
|
});
|
|
4942
4986
|
var DiagnosticsView_module_css_default = {
|
|
4987
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
4988
|
+
"row": "k9eRya_row",
|
|
4989
|
+
"badge": "k9eRya_badge",
|
|
4990
|
+
"summaryOk": "k9eRya_summaryOk",
|
|
4943
4991
|
"summaryRunning": "k9eRya_summaryRunning",
|
|
4944
|
-
"
|
|
4992
|
+
"head": "k9eRya_head",
|
|
4993
|
+
"envLabel": "k9eRya_envLabel",
|
|
4945
4994
|
"name": "k9eRya_name",
|
|
4946
|
-
"
|
|
4995
|
+
"runBtn": "k9eRya_runBtn",
|
|
4996
|
+
"envDesc": "k9eRya_envDesc",
|
|
4947
4997
|
"meta": "k9eRya_meta",
|
|
4948
|
-
"
|
|
4949
|
-
"badgeOk": "k9eRya_badgeOk",
|
|
4950
|
-
"envRow": "k9eRya_envRow",
|
|
4998
|
+
"envTitle": "k9eRya_envTitle",
|
|
4951
4999
|
"badgeIdle": "k9eRya_badgeIdle",
|
|
4952
|
-
"badgeRunning": "k9eRya_badgeRunning",
|
|
4953
5000
|
"summary": "k9eRya_summary",
|
|
4954
|
-
"
|
|
4955
|
-
"
|
|
5001
|
+
"summaryFail": "k9eRya_summaryFail",
|
|
5002
|
+
"panel": "k9eRya_panel",
|
|
5003
|
+
"badgeRunning": "k9eRya_badgeRunning",
|
|
5004
|
+
"display": "k9eRya_display",
|
|
4956
5005
|
"diagPulse": "k9eRya_diagPulse",
|
|
4957
|
-
"head": "k9eRya_head",
|
|
4958
5006
|
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
4959
|
-
"panel": "k9eRya_panel",
|
|
4960
5007
|
"headHint": "k9eRya_headHint",
|
|
4961
|
-
"
|
|
4962
|
-
"
|
|
4963
|
-
"summaryFail": "k9eRya_summaryFail",
|
|
4964
|
-
"badgeFail": "k9eRya_badgeFail",
|
|
4965
|
-
"envLabel": "k9eRya_envLabel"
|
|
5008
|
+
"badgeOk": "k9eRya_badgeOk",
|
|
5009
|
+
"envRow": "k9eRya_envRow"
|
|
4966
5010
|
};
|
|
4967
5011
|
//#endregion
|
|
4968
5012
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -4992,7 +5036,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4992
5036
|
const INITIAL_ROWS = [
|
|
4993
5037
|
{
|
|
4994
5038
|
key: "npm",
|
|
4995
|
-
display: "
|
|
5039
|
+
display: "",
|
|
4996
5040
|
nameKey: "diagNpm",
|
|
4997
5041
|
status: "idle",
|
|
4998
5042
|
ms: null,
|
|
@@ -5061,7 +5105,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5061
5105
|
if (ev.type === "ok" || ev.type === "fail") patchRows(ev.key, {
|
|
5062
5106
|
status: ev.type === "ok" ? "ok" : "fail",
|
|
5063
5107
|
ms: typeof ev.ms === "number" ? ev.ms : null,
|
|
5064
|
-
statusCode: typeof ev.status === "number" ? ev.status : null
|
|
5108
|
+
statusCode: typeof ev.status === "number" ? ev.status : null,
|
|
5109
|
+
display: typeof ev.display === "string" ? ev.display : ""
|
|
5065
5110
|
});
|
|
5066
5111
|
}
|
|
5067
5112
|
nl = buf.indexOf("\n");
|
|
@@ -5105,7 +5150,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5105
5150
|
disabled: r.status === "running",
|
|
5106
5151
|
onClick: () => run(r.key),
|
|
5107
5152
|
title: t("diagRecheck")
|
|
5108
|
-
}, (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.name }, t(r.nameKey)), (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.display }, r.display), (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.meta }, r.status === "ok" && r.ms !== null ? `${r.ms} ms` : ""), badge);
|
|
5153
|
+
}, (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.name }, t(r.nameKey)), (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.display }, r.display !== "" ? r.display : t("diagNpmUnset")), (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.meta }, r.status === "ok" && r.ms !== null ? `${r.ms} ms` : ""), badge);
|
|
5109
5154
|
}), (0, react.createElement)("div", { className: `${DiagnosticsView_module_css_default.summary} ${anyRunning ? DiagnosticsView_module_css_default.summaryRunning : allOk ? DiagnosticsView_module_css_default.summaryOk : DiagnosticsView_module_css_default.summaryFail}` }, anyRunning ? t("diagSummaryRunning") : allOk ? t("diagSummaryOk") : t("diagSummaryFail")));
|
|
5110
5155
|
}
|
|
5111
5156
|
//#endregion
|
|
@@ -5125,57 +5170,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5125
5170
|
css: css$1
|
|
5126
5171
|
});
|
|
5127
5172
|
var LogsView_module_css_default = {
|
|
5128
|
-
"
|
|
5129
|
-
"
|
|
5130
|
-
"more": "_3j77BW_more",
|
|
5173
|
+
"footCount": "_3j77BW_footCount",
|
|
5174
|
+
"footActions": "_3j77BW_footActions",
|
|
5131
5175
|
"catBadge": "_3j77BW_catBadge",
|
|
5132
|
-
"panel": "_3j77BW_panel",
|
|
5133
|
-
"footFail": "_3j77BW_footFail",
|
|
5134
|
-
"filterChipActive": "_3j77BW_filterChipActive",
|
|
5135
|
-
"pathLabel": "_3j77BW_pathLabel",
|
|
5136
5176
|
"catInstall": "_3j77BW_catInstall",
|
|
5137
|
-
"
|
|
5138
|
-
"
|
|
5139
|
-
"pathDraft": "_3j77BW_pathDraft",
|
|
5140
|
-
"moreEnd": "_3j77BW_moreEnd",
|
|
5141
|
-
"pathText": "_3j77BW_pathText",
|
|
5177
|
+
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
5178
|
+
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
5142
5179
|
"badgeWarn": "_3j77BW_badgeWarn",
|
|
5180
|
+
"badgeDebug": "_3j77BW_badgeDebug",
|
|
5143
5181
|
"catSystem": "_3j77BW_catSystem",
|
|
5144
|
-
"
|
|
5145
|
-
"
|
|
5146
|
-
"event": "_3j77BW_event",
|
|
5147
|
-
"head": "_3j77BW_head",
|
|
5148
|
-
"logList": "_3j77BW_logList",
|
|
5149
|
-
"filterChip": "_3j77BW_filterChip",
|
|
5150
|
-
"previewRow": "_3j77BW_previewRow",
|
|
5182
|
+
"badge": "_3j77BW_badge",
|
|
5183
|
+
"linkBtn": "_3j77BW_linkBtn",
|
|
5151
5184
|
"actions": "_3j77BW_actions",
|
|
5152
|
-
"
|
|
5153
|
-
"
|
|
5185
|
+
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
5186
|
+
"head": "_3j77BW_head",
|
|
5187
|
+
"more": "_3j77BW_more",
|
|
5188
|
+
"list": "_3j77BW_list",
|
|
5189
|
+
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
5154
5190
|
"searchInput": "_3j77BW_searchInput",
|
|
5191
|
+
"filterChip": "_3j77BW_filterChip",
|
|
5192
|
+
"panel": "_3j77BW_panel",
|
|
5193
|
+
"empty": "_3j77BW_empty",
|
|
5155
5194
|
"headHint": "_3j77BW_headHint",
|
|
5156
|
-
"
|
|
5195
|
+
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
5196
|
+
"clearBtn": "_3j77BW_clearBtn",
|
|
5197
|
+
"event": "_3j77BW_event",
|
|
5157
5198
|
"footPath": "_3j77BW_footPath",
|
|
5158
|
-
"
|
|
5159
|
-
"
|
|
5160
|
-
"
|
|
5161
|
-
"
|
|
5162
|
-
"
|
|
5163
|
-
"
|
|
5199
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
5200
|
+
"catSettings": "_3j77BW_catSettings",
|
|
5201
|
+
"logList": "_3j77BW_logList",
|
|
5202
|
+
"moreEnd": "_3j77BW_moreEnd",
|
|
5203
|
+
"message": "_3j77BW_message",
|
|
5204
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
5205
|
+
"pathDraft": "_3j77BW_pathDraft",
|
|
5164
5206
|
"btn": "_3j77BW_btn",
|
|
5207
|
+
"previewRow": "_3j77BW_previewRow",
|
|
5208
|
+
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
5209
|
+
"badgeInfo": "_3j77BW_badgeInfo",
|
|
5210
|
+
"footFail": "_3j77BW_footFail",
|
|
5165
5211
|
"foot": "_3j77BW_foot",
|
|
5212
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
5166
5213
|
"entry": "_3j77BW_entry",
|
|
5167
|
-
"
|
|
5168
|
-
"
|
|
5214
|
+
"filterChipActive": "_3j77BW_filterChipActive",
|
|
5215
|
+
"time": "_3j77BW_time",
|
|
5216
|
+
"headActions": "_3j77BW_headActions",
|
|
5217
|
+
"filterBar": "_3j77BW_filterBar",
|
|
5218
|
+
"pathText": "_3j77BW_pathText",
|
|
5169
5219
|
"search": "_3j77BW_search",
|
|
5170
|
-
"catUninstall": "_3j77BW_catUninstall",
|
|
5171
|
-
"catUpdate": "_3j77BW_catUpdate",
|
|
5172
|
-
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
5173
|
-
"clearBtn": "_3j77BW_clearBtn",
|
|
5174
5220
|
"pathDialog": "_3j77BW_pathDialog",
|
|
5175
|
-
"badge": "_3j77BW_badge",
|
|
5176
|
-
"list": "_3j77BW_list",
|
|
5177
5221
|
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
5178
|
-
"
|
|
5222
|
+
"badgeError": "_3j77BW_badgeError",
|
|
5223
|
+
"pathRow": "_3j77BW_pathRow"
|
|
5179
5224
|
};
|
|
5180
5225
|
//#endregion
|
|
5181
5226
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -5746,6 +5791,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5746
5791
|
* Diagnostics — live connectivity probe + environment snapshot
|
|
5747
5792
|
* Logs — system log viewer + storage location
|
|
5748
5793
|
*/
|
|
5794
|
+
/** npm 镜像源预设:空串 = 未配置(跟随用户本机 npm 配置,本插件不注入任何 registry)。
|
|
5795
|
+
* 只提供常见国内顶级镜像下拉,不做自定义输入 —— 想用其它镜像直接在 ~/.npmrc 配置即可。 */
|
|
5796
|
+
const MIRROR_PRESETS = [
|
|
5797
|
+
{
|
|
5798
|
+
value: "",
|
|
5799
|
+
labelKey: "mirrorNone"
|
|
5800
|
+
},
|
|
5801
|
+
{
|
|
5802
|
+
value: "https://registry.npmjs.org",
|
|
5803
|
+
labelKey: "mirrorOfficial"
|
|
5804
|
+
},
|
|
5805
|
+
{
|
|
5806
|
+
value: "https://registry.npmmirror.com",
|
|
5807
|
+
labelKey: "mirrorNpmmirror"
|
|
5808
|
+
},
|
|
5809
|
+
{
|
|
5810
|
+
value: "https://mirrors.cloud.tencent.com/npm/",
|
|
5811
|
+
labelKey: "mirrorTencent"
|
|
5812
|
+
},
|
|
5813
|
+
{
|
|
5814
|
+
value: "https://mirrors.tuna.tsinghua.edu.cn/npm/",
|
|
5815
|
+
labelKey: "mirrorTsinghua"
|
|
5816
|
+
}
|
|
5817
|
+
];
|
|
5749
5818
|
/** 左侧导航:顺序即展示顺序;labelKey 是分组标题,icon 是行内小图标。 */
|
|
5750
5819
|
const NAV = [
|
|
5751
5820
|
{
|
|
@@ -5774,21 +5843,6 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5774
5843
|
icon: ResetIcon
|
|
5775
5844
|
}
|
|
5776
5845
|
];
|
|
5777
|
-
/** npm 镜像源预设:空串 = 官方源;值相等即视为选中对应预设,其余进入「自定义」输入。 */
|
|
5778
|
-
const MIRROR_PRESETS = [
|
|
5779
|
-
{
|
|
5780
|
-
value: "",
|
|
5781
|
-
labelKey: "mirrorOfficial"
|
|
5782
|
-
},
|
|
5783
|
-
{
|
|
5784
|
-
value: "https://registry.npmmirror.com",
|
|
5785
|
-
labelKey: "mirrorNpmmirror"
|
|
5786
|
-
},
|
|
5787
|
-
{
|
|
5788
|
-
value: "https://mirrors.cloud.tencent.com/npm/",
|
|
5789
|
-
labelKey: "mirrorTencent"
|
|
5790
|
-
}
|
|
5791
|
-
];
|
|
5792
5846
|
/** 设置行:默认标签左控件右;stack=true 时控件独占一行(文本框整行显示),hairline 分隔。 */
|
|
5793
5847
|
function SettingRow({ title, desc, children, stack = false }) {
|
|
5794
5848
|
return (0, react.createElement)("div", { className: stack ? SettingsView_module_css_default.settingRowStack : SettingsView_module_css_default.settingRow }, (0, react.createElement)("div", { className: SettingsView_module_css_default.settingLabel }, (0, react.createElement)("div", { className: SettingsView_module_css_default.settingTitle }, title), desc ? (0, react.createElement)("div", { className: SettingsView_module_css_default.settingDesc }, desc) : null), (0, react.createElement)("div", { className: stack ? SettingsView_module_css_default.settingControlStack : SettingsView_module_css_default.settingControl }, children));
|
|
@@ -5798,13 +5852,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5798
5852
|
const [section, setSection] = (0, react.useState)("updates");
|
|
5799
5853
|
/** 恢复默认确认弹窗:点按钮先弹窗询问,确认后才真正 reset(不做两段式按钮) */
|
|
5800
5854
|
const [resetConfirm, setResetConfirm] = (0, react.useState)(false);
|
|
5801
|
-
const mirrorCustom = !MIRROR_PRESETS.some((p) => p.value === settings.npmRegistry);
|
|
5802
|
-
const onMirrorChange = (value) => {
|
|
5803
|
-
if (value === "custom") return;
|
|
5804
|
-
update({ npmRegistry: value });
|
|
5805
|
-
};
|
|
5806
|
-
const onMirrorInput = (e) => update({ npmRegistry: e.target.value });
|
|
5807
5855
|
const onProxyChange = (e) => update({ proxy: e.target.value });
|
|
5856
|
+
const onMirrorChange = (value) => update({ npmRegistry: value });
|
|
5808
5857
|
/** 每个分组的页面副标题(导航标题之上再补一句说明,保持桌面设置质感) */
|
|
5809
5858
|
const pageDesc = {
|
|
5810
5859
|
updates: t("settingsUpdateDesc"),
|
|
@@ -5825,29 +5874,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5825
5874
|
}), (0, react.createElement)(SettingRow, {
|
|
5826
5875
|
title: t("settingsMirror"),
|
|
5827
5876
|
desc: t("settingsMirrorDesc"),
|
|
5877
|
+
stack: true,
|
|
5828
5878
|
children: (0, react.createElement)(Dropdown, {
|
|
5829
|
-
value:
|
|
5830
|
-
options:
|
|
5831
|
-
value:
|
|
5832
|
-
label: t(
|
|
5833
|
-
})),
|
|
5834
|
-
value: "custom",
|
|
5835
|
-
label: t("mirrorCustom")
|
|
5836
|
-
}],
|
|
5879
|
+
value: settings.npmRegistry,
|
|
5880
|
+
options: MIRROR_PRESETS.map((m) => ({
|
|
5881
|
+
value: m.value,
|
|
5882
|
+
label: t(m.labelKey)
|
|
5883
|
+
})),
|
|
5837
5884
|
onChange: onMirrorChange,
|
|
5838
5885
|
title: t("settingsMirror"),
|
|
5839
|
-
className: SettingsView_module_css_default.controlDropdown
|
|
5840
|
-
})
|
|
5841
|
-
}), mirrorCustom && (0, react.createElement)(SettingRow, {
|
|
5842
|
-
title: t("mirrorCustom"),
|
|
5843
|
-
stack: true,
|
|
5844
|
-
children: (0, react.createElement)("input", {
|
|
5845
|
-
className: SettingsView_module_css_default.textInput,
|
|
5846
|
-
type: "url",
|
|
5847
|
-
value: settings.npmRegistry,
|
|
5848
|
-
placeholder: "https://registry.npmjs.org",
|
|
5849
|
-
spellCheck: false,
|
|
5850
|
-
onChange: onMirrorInput
|
|
5886
|
+
className: `${SettingsView_module_css_default.controlDropdown} ${Dropdown_module_css_default.dropdownFill}`
|
|
5851
5887
|
})
|
|
5852
5888
|
}), (0, react.createElement)(SettingRow, {
|
|
5853
5889
|
title: t("settingsProxy"),
|
|
@@ -6023,7 +6059,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6023
6059
|
const queue = useTaskQueue({
|
|
6024
6060
|
t,
|
|
6025
6061
|
refreshInstalled: catalog.refreshInstalled,
|
|
6026
|
-
onInstallDone: (viaModal, repo, needsRestart) => {
|
|
6062
|
+
onInstallDone: (viaModal, repo, needsRestart, update) => {
|
|
6027
6063
|
setInstallNeedsRestart(needsRestart);
|
|
6028
6064
|
if (viaModal) setInstallDone(true);
|
|
6029
6065
|
else setToast({
|
|
@@ -6032,6 +6068,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6032
6068
|
});
|
|
6033
6069
|
setNotifications(addSuccess({
|
|
6034
6070
|
kind: "install",
|
|
6071
|
+
action: update ? "update" : "install",
|
|
6035
6072
|
repo: repo ?? ""
|
|
6036
6073
|
}));
|
|
6037
6074
|
},
|
|
@@ -6047,7 +6084,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6047
6084
|
repo: repo ?? ""
|
|
6048
6085
|
}));
|
|
6049
6086
|
},
|
|
6050
|
-
onError: (message, repo, kind, command, attempts) => {
|
|
6087
|
+
onError: (message, repo, kind, command, attempts, update) => {
|
|
6051
6088
|
const issueRepo = issueRepoOf(repo ?? "", catalog.installedItems, catalog.plugins);
|
|
6052
6089
|
setErrorMsg({
|
|
6053
6090
|
message,
|
|
@@ -6058,7 +6095,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6058
6095
|
});
|
|
6059
6096
|
setNotifications(addFailure({
|
|
6060
6097
|
kind,
|
|
6061
|
-
|
|
6098
|
+
action: update ? "update" : "install",
|
|
6099
|
+
repo: repo ?? "",
|
|
6062
6100
|
message,
|
|
6063
6101
|
command,
|
|
6064
6102
|
attempts
|
|
@@ -6321,6 +6359,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6321
6359
|
enableGit: hubSettings.enableGitInstall,
|
|
6322
6360
|
enableDsh: hubSettings.enableDshInstall,
|
|
6323
6361
|
onOpenSettings: () => setView("settings"),
|
|
6362
|
+
profile: env?.profile ?? "web",
|
|
6324
6363
|
onInstallCustom: (raw, opts) => {
|
|
6325
6364
|
const target = raw.trim();
|
|
6326
6365
|
if (!target) return;
|
|
@@ -6353,7 +6392,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6353
6392
|
});
|
|
6354
6393
|
}
|
|
6355
6394
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
6356
|
-
info: catalog.hubUpdateInfo ?? { version: "1.3.
|
|
6395
|
+
info: catalog.hubUpdateInfo ?? { version: "1.3.6" },
|
|
6357
6396
|
lang,
|
|
6358
6397
|
t,
|
|
6359
6398
|
hasUpdate: catalog.hubHasUpdate,
|