dsh-plugin 2.2.5 → 2.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +12 -20
- package/README.md +12 -20
- package/client/client.js +296 -296
- package/lib/http/shared.js +1 -1
- package/lib/http/task.js +3 -2
- package/lib/services/install/task-queue.js +4 -2
- package/lib/services/runtime-exec.js +24 -0
- package/lib/types/http/shared.d.ts +1 -1
- package/lib/types/services/runtime-exec.d.ts +17 -0
- package/package.json +1 -1
- package/src/server/http/shared.ts +1 -1
- package/src/server/http/task.ts +3 -2
- package/src/server/services/install/task-queue.ts +4 -2
- package/src/server/services/runtime-exec.ts +28 -0
package/README.en.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
# DSH Plugin Hub - Download & Install DeepSeek Harness Plugins
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**5,686 DeepSeek Harness (DSH) plugins indexed, all hand-verified, in one community hub, updated daily. Browse, search, download and install by category — free, human-verified, traceable.**
|
|
10
10
|
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
[](https://www.npmjs.com/package/dsh-plugin)
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
DSH Plugin Hub is a **community plugin marketplace for DeepSeek Harness**: an open-source plugin built to the official plugin development spec. Installed under **Settings → Plugin Hub**, it lets you browse, search and install community plugins without leaving the app. This is an independent community project, not affiliated with DeepSeek Harness.
|
|
30
30
|
|
|
31
31
|
<p align="center">
|
|
32
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
32
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-market-en.png?v=2.2.5" alt="DSH Plugin Hub plugin market UI" width="840">
|
|
33
33
|
</p>
|
|
34
34
|
|
|
35
35
|
## Plugin Hub Features
|
|
@@ -48,7 +48,7 @@ DSH Plugin Hub is a **community plugin marketplace for DeepSeek Harness**: an op
|
|
|
48
48
|
|
|
49
49
|
**Rich catalog · human-curated**
|
|
50
50
|
|
|
51
|
-
- Indexes **
|
|
51
|
+
- Indexes **5,686** community plugins, all hand-verified, curated and released every day by [dsh-plugin.org](https://dsh-plugin.org)
|
|
52
52
|
- Covers UI & experience, sessions & messages, memory & context, tooling and more — browse by category or search straight to it
|
|
53
53
|
- Every plugin shows its verification status (verified), star / fork ratings, version and last-update time — fully sourced
|
|
54
54
|
|
|
@@ -63,21 +63,13 @@ DSH Plugin Hub is a **community plugin marketplace for DeepSeek Harness**: an op
|
|
|
63
63
|
- Same data source as the website; the catalog updates automatically, no manual upgrade needed
|
|
64
64
|
- Browser-side only, no host dependencies, no telemetry, no data collection
|
|
65
65
|
|
|
66
|
-
## Join the User Group · Feedback
|
|
67
|
-
|
|
68
|
-
Questions, feature ideas or just want to talk plugins? Scan the QR code to join the DSH Plugin Hub user group — report issues, share suggestions, and improve the hub with the community. The current QR code is valid until October 18, 2026, and will be refreshed once it expires.
|
|
69
|
-
|
|
70
|
-
<p align="center">
|
|
71
|
-
<img src="https://api.dsh-plugin.org/images/dsh-plugin-user-group-qr.png?v=2026-10-18" alt="DSH Plugin Hub user group QR code" width="250" height="250">
|
|
72
|
-
</p>
|
|
73
|
-
|
|
74
66
|
## Feature Highlights
|
|
75
67
|
|
|
76
68
|
**Installed plugins · Custom install**
|
|
77
69
|
|
|
78
70
|
<p align="center">
|
|
79
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
80
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
71
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-installed-en.png?v=2.2.5" alt="Installed plugins" width="400">
|
|
72
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-custom-install-en.png?v=2.2.5" alt="Custom install" width="400">
|
|
81
73
|
</p>
|
|
82
74
|
|
|
83
75
|
Manages every installed plugin with search, source filters and sorting, plus update / uninstall and reveal-in-Finder per row · Installs any plugin outside the catalog via an npm package, GitHub source or a DSH command
|
|
@@ -85,8 +77,8 @@ Manages every installed plugin with search, source filters and sorting, plus upd
|
|
|
85
77
|
**Settings · System logs**
|
|
86
78
|
|
|
87
79
|
<p align="center">
|
|
88
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
89
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
80
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-settings-en.png?v=2.2.5" alt="Settings" width="400">
|
|
81
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-system-logs-en.png?v=2.2.5" alt="System logs" width="400">
|
|
90
82
|
</p>
|
|
91
83
|
|
|
92
84
|
Centralizes update checks, npm mirror, proxy channel, trust toggles, diagnostics and log location · Records install / uninstall / settings / diagnostics trails, filterable by category and level, with a built-in viewer
|
|
@@ -94,8 +86,8 @@ Centralizes update checks, npm mirror, proxy channel, trust toggles, diagnostics
|
|
|
94
86
|
**Confirm install · Confirm uninstall**
|
|
95
87
|
|
|
96
88
|
<p align="center">
|
|
97
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
98
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
89
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-install-confirm-en.png?v=2.2.5" alt="Confirm install" width="400">
|
|
90
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-uninstall-confirm-en.png?v=2.2.5" alt="Confirm uninstall" width="400">
|
|
99
91
|
</p>
|
|
100
92
|
|
|
101
93
|
Shows the plugin, its source repo and the command before anything runs; the install starts only after confirmation · Shows what will be removed and its source; nothing is removed until the user confirms
|
|
@@ -103,8 +95,8 @@ Shows the plugin, its source repo and the command before anything runs; the inst
|
|
|
103
95
|
**Confirm update · Notifications**
|
|
104
96
|
|
|
105
97
|
<p align="center">
|
|
106
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
107
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
98
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-update-confirm-en.png?v=2.2.5" alt="Confirm update" width="400">
|
|
99
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-notifications-en.png?v=2.2.5" alt="Notifications" width="400">
|
|
108
100
|
</p>
|
|
109
101
|
|
|
110
102
|
Pops up when a newer version is found; confirming overwrite-installs in place to the latest release · Gathers install / remove / update history, live task progress and pending-restart reminders in one place
|
|
@@ -124,7 +116,7 @@ Same data source as the hub — human-verified, updated daily · Browse every in
|
|
|
124
116
|
|
|
125
117
|
## Why DSH Plugin Hub
|
|
126
118
|
|
|
127
|
-
The DSH Plugin Hub indexes **
|
|
119
|
+
The DSH Plugin Hub indexes **5,686** DeepSeek Harness plugins (DSH), all hand-verified — updated daily, browse, search, download and install for free by category, fully sourced.
|
|
128
120
|
|
|
129
121
|
### Always Fresh
|
|
130
122
|
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
# DSH Plugin 插件市场 - DeepSeek Harness Plugin (DSH) 下载与安装 · 插件大全
|
|
8
8
|
|
|
9
|
-
**DeepSeek Harness Plugin(DSH)插件市场与插件大全,收录
|
|
9
|
+
**DeepSeek Harness Plugin(DSH)插件市场与插件大全,收录 5,686 个插件、全部人工精选验证、每日更新,免费浏览、搜索并按分类发现、下载与安装 DSH 插件,人工验证、来源可溯。**
|
|
10
10
|
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
[](https://www.npmjs.com/package/dsh-plugin)
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
DSH Plugin Hub 是 **DeepSeek Harness 社区插件市场**:一个遵循官方插件开发规范构建的开源插件,安装进「设置 → 插件市场」后,无需离开应用即可浏览、搜索并一键安装社区插件。本项目为独立社区项目,与 DeepSeek Harness 官方无隶属关系。
|
|
30
30
|
|
|
31
31
|
<p align="center">
|
|
32
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
32
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-market-zh.png?v=2.2.5" alt="DSH Plugin Hub 插件市场界面" width="840">
|
|
33
33
|
</p>
|
|
34
34
|
|
|
35
35
|
## 插件市场特性
|
|
@@ -48,7 +48,7 @@ DSH Plugin Hub 是 **DeepSeek Harness 社区插件市场**:一个遵循官方
|
|
|
48
48
|
|
|
49
49
|
**资源丰富 · 人工精选**
|
|
50
50
|
|
|
51
|
-
- 收录 **
|
|
51
|
+
- 收录 **5,686** 个社区插件,全部已人工精选验证,由 [dsh-plugin.org](https://dsh-plugin.org) 每日收录、人工审核并发布
|
|
52
52
|
- 涵盖界面与体验、会话与消息、记忆与上下文、工具能力等分类,按分类浏览、搜索直达
|
|
53
53
|
- 每个插件标注人工验证状态(verified)、Star / Fork 评分、版本号与最近更新时间,来源可溯
|
|
54
54
|
|
|
@@ -63,21 +63,13 @@ DSH Plugin Hub 是 **DeepSeek Harness 社区插件市场**:一个遵循官方
|
|
|
63
63
|
- 数据与官网同源,安装后自动获取最新目录,无需手动升级
|
|
64
64
|
- 仅浏览器端注入,无宿主服务依赖,无遥测、无隐私采集
|
|
65
65
|
|
|
66
|
-
## 加入用户群 · 反馈问题
|
|
67
|
-
|
|
68
|
-
遇到使用问题、功能建议或想交流插件?扫码加入 DSH Plugin Hub 用户群,反馈问题、提交建议,与社区一起改进。当前二维码有效期至 2026 年 10 月 18 日,到期后会更新。
|
|
69
|
-
|
|
70
|
-
<p align="center">
|
|
71
|
-
<img src="https://api.dsh-plugin.org/images/dsh-plugin-user-group-qr.png?v=2026-10-18" alt="DSH Plugin Hub 用户群二维码" width="250" height="250">
|
|
72
|
-
</p>
|
|
73
|
-
|
|
74
66
|
## 功能一览
|
|
75
67
|
|
|
76
68
|
**已安装插件列表 · 自定义安装**
|
|
77
69
|
|
|
78
70
|
<p align="center">
|
|
79
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
80
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
71
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-installed-zh.png?v=2.2.5" alt="已安装插件列表" width="400">
|
|
72
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-custom-install-zh.png?v=2.2.5" alt="自定义安装" width="400">
|
|
81
73
|
</p>
|
|
82
74
|
|
|
83
75
|
集中管理当前环境已装的全部插件,支持搜索、来源筛选与排序,行尾提供更新、卸载与「在 Finder 中显示」 · 手动安装目录外的任意插件,支持 NPM 包、GitHub 源码与 DSH 命令行三种通道
|
|
@@ -85,8 +77,8 @@ DSH Plugin Hub 是 **DeepSeek Harness 社区插件市场**:一个遵循官方
|
|
|
85
77
|
**设置 · 系统日志**
|
|
86
78
|
|
|
87
79
|
<p align="center">
|
|
88
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
89
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
80
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-settings-zh.png?v=2.2.5" alt="设置" width="400">
|
|
81
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-system-logs-zh.png?v=2.2.5" alt="系统日志" width="400">
|
|
90
82
|
</p>
|
|
91
83
|
|
|
92
84
|
集中配置更新检查、NPM 镜像源、代理通道、安全信任、系统诊断与日志存放位置 · 记录安装、卸载、设置变更与诊断轨迹,按分类与级别筛选,内置日志查看器
|
|
@@ -94,8 +86,8 @@ DSH Plugin Hub 是 **DeepSeek Harness 社区插件市场**:一个遵循官方
|
|
|
94
86
|
**确认安装 · 确认卸载**
|
|
95
87
|
|
|
96
88
|
<p align="center">
|
|
97
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
98
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
89
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-install-confirm-zh.png?v=2.2.5" alt="确认安装" width="400">
|
|
90
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-uninstall-confirm-zh.png?v=2.2.5" alt="确认卸载" width="400">
|
|
99
91
|
</p>
|
|
100
92
|
|
|
101
93
|
安装前展示插件名称、来源仓库与执行命令,确认后才开始安装 · 卸载前展示待移除的插件,确认后才从环境移除,避免误删
|
|
@@ -103,8 +95,8 @@ DSH Plugin Hub 是 **DeepSeek Harness 社区插件市场**:一个遵循官方
|
|
|
103
95
|
**确认更新 · 通知中心**
|
|
104
96
|
|
|
105
97
|
<p align="center">
|
|
106
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
107
|
-
<img src="https://api.dsh-plugin.org/images/releases/2-
|
|
98
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-update-confirm-zh.png?v=2.2.5" alt="确认更新" width="400">
|
|
99
|
+
<img src="https://api.dsh-plugin.org/images/releases/2-2-5/dsh-plugin-hub-notifications-zh.png?v=2.2.5" alt="通知中心" width="400">
|
|
108
100
|
</p>
|
|
109
101
|
|
|
110
102
|
检测到新版本时弹出,确认后原位覆盖安装到最新版 · 集中管理安装、卸载、更新的历史记录、实时进度与待重启提醒
|
|
@@ -124,7 +116,7 @@ DSH Plugin Hub 是 **DeepSeek Harness 社区插件市场**:一个遵循官方
|
|
|
124
116
|
|
|
125
117
|
## 为什么选择 DSH Plugin Hub
|
|
126
118
|
|
|
127
|
-
DSH Plugin 插件市场收录 **
|
|
119
|
+
DSH Plugin 插件市场收录 **5,686** 个 DeepSeek Harness Plugin(DSH)插件,全部已人工精选验证,每日更新,免费按分类浏览、搜索、下载与安装,来源可溯。
|
|
128
120
|
|
|
129
121
|
### 及时更新
|
|
130
122
|
|
package/client/client.js
CHANGED
|
@@ -912,42 +912,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
912
912
|
css: css$11
|
|
913
913
|
});
|
|
914
914
|
var Header_module_css_default = {
|
|
915
|
-
"
|
|
916
|
-
"tabActive": "qikqja_tabActive",
|
|
917
|
-
"adBadge": "qikqja_adBadge",
|
|
918
|
-
"search": "qikqja_search",
|
|
919
|
-
"resultSeg": "qikqja_resultSeg",
|
|
920
|
-
"segBtn": "qikqja_segBtn",
|
|
921
|
-
"adArrow": "qikqja_adArrow",
|
|
922
|
-
"root": "qikqja_root",
|
|
915
|
+
"tabCount": "qikqja_tabCount",
|
|
923
916
|
"segBtnActive": "qikqja_segBtnActive",
|
|
917
|
+
"adText": "qikqja_adText",
|
|
918
|
+
"searchRow": "qikqja_searchRow",
|
|
924
919
|
"tab": "qikqja_tab",
|
|
925
|
-
"
|
|
926
|
-
"
|
|
920
|
+
"headerRight": "qikqja_headerRight",
|
|
921
|
+
"header": "qikqja_header",
|
|
927
922
|
"brandTitle": "qikqja_brandTitle",
|
|
928
|
-
"aboutBtn": "qikqja_aboutBtn",
|
|
929
923
|
"logoIcon": "qikqja_logoIcon",
|
|
930
|
-
"
|
|
931
|
-
"controls": "qikqja_controls",
|
|
932
|
-
"tagline": "qikqja_tagline",
|
|
933
|
-
"taglineLink": "qikqja_taglineLink",
|
|
934
|
-
"tabCount": "qikqja_tabCount",
|
|
935
|
-
"langBtn": "qikqja_langBtn",
|
|
936
|
-
"githubLink": "qikqja_githubLink",
|
|
937
|
-
"githubIcon": "qikqja_githubIcon",
|
|
924
|
+
"search": "qikqja_search",
|
|
938
925
|
"version": "qikqja_version",
|
|
939
|
-
"
|
|
926
|
+
"taglineLink": "qikqja_taglineLink",
|
|
940
927
|
"tabs": "qikqja_tabs",
|
|
941
|
-
"searchRow": "qikqja_searchRow",
|
|
942
|
-
"sortGroup": "qikqja_sortGroup",
|
|
943
|
-
"resultCount": "qikqja_resultCount",
|
|
944
|
-
"title": "qikqja_title",
|
|
945
|
-
"adText": "qikqja_adText",
|
|
946
928
|
"tabsRow": "qikqja_tabsRow",
|
|
929
|
+
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
947
930
|
"adBanner": "qikqja_adBanner",
|
|
948
|
-
"
|
|
931
|
+
"headerTitleRow": "qikqja_headerTitleRow",
|
|
932
|
+
"adArrow": "qikqja_adArrow",
|
|
933
|
+
"tagline": "qikqja_tagline",
|
|
949
934
|
"versionBtn": "qikqja_versionBtn",
|
|
950
|
-
"
|
|
935
|
+
"githubIcon": "qikqja_githubIcon",
|
|
936
|
+
"segLabel": "qikqja_segLabel",
|
|
937
|
+
"root": "qikqja_root",
|
|
938
|
+
"langBtn": "qikqja_langBtn",
|
|
939
|
+
"aboutBtn": "qikqja_aboutBtn",
|
|
940
|
+
"title": "qikqja_title",
|
|
941
|
+
"resultCount": "qikqja_resultCount",
|
|
942
|
+
"segBtn": "qikqja_segBtn",
|
|
943
|
+
"tabActive": "qikqja_tabActive",
|
|
944
|
+
"sortGroup": "qikqja_sortGroup",
|
|
945
|
+
"githubLink": "qikqja_githubLink",
|
|
946
|
+
"controls": "qikqja_controls",
|
|
947
|
+
"segGroup": "qikqja_segGroup",
|
|
948
|
+
"adBadge": "qikqja_adBadge",
|
|
949
|
+
"resultSeg": "qikqja_resultSeg",
|
|
950
|
+
"copyIcon": "qikqja_copyIcon"
|
|
951
951
|
};
|
|
952
952
|
//#endregion
|
|
953
953
|
//#region \0dsh-css:src/client/styles/Modal.module.css.mjs
|
|
@@ -966,142 +966,142 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
966
966
|
css: css$10
|
|
967
967
|
});
|
|
968
968
|
var Modal_module_css_default = {
|
|
969
|
-
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
970
|
-
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
971
|
-
"errorHint": "BiQ1zG_errorHint",
|
|
972
|
-
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
973
|
-
"noticeList": "BiQ1zG_noticeList",
|
|
974
|
-
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
975
|
-
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
976
|
-
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
977
|
-
"detailModal": "BiQ1zG_detailModal",
|
|
978
969
|
"errorModal": "BiQ1zG_errorModal",
|
|
979
|
-
"
|
|
980
|
-
"
|
|
981
|
-
"
|
|
982
|
-
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
983
|
-
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
984
|
-
"logModal": "BiQ1zG_logModal",
|
|
970
|
+
"failHead": "BiQ1zG_failHead",
|
|
971
|
+
"failRepoLabel": "BiQ1zG_failRepoLabel",
|
|
972
|
+
"detailLabel": "BiQ1zG_detailLabel",
|
|
985
973
|
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
986
|
-
"
|
|
974
|
+
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
975
|
+
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
976
|
+
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
977
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
978
|
+
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
979
|
+
"overlay": "BiQ1zG_overlay",
|
|
980
|
+
"resultTitle": "BiQ1zG_resultTitle",
|
|
981
|
+
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
982
|
+
"result": "BiQ1zG_result",
|
|
983
|
+
"detailArrow": "BiQ1zG_detailArrow",
|
|
987
984
|
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
988
|
-
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
989
|
-
"modal": "BiQ1zG_modal",
|
|
990
|
-
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
991
|
-
"detailLink": "BiQ1zG_detailLink",
|
|
992
|
-
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
993
|
-
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
994
|
-
"restartNow": "BiQ1zG_restartNow",
|
|
995
|
-
"trustHint": "BiQ1zG_trustHint",
|
|
996
|
-
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
997
|
-
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
998
|
-
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
999
|
-
"progress": "BiQ1zG_progress",
|
|
1000
|
-
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
1001
|
-
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
1002
|
-
"failRepoLabel": "BiQ1zG_failRepoLabel",
|
|
1003
|
-
"modalValue": "BiQ1zG_modalValue",
|
|
1004
985
|
"modalBody": "BiQ1zG_modalBody",
|
|
1005
|
-
"
|
|
1006
|
-
"
|
|
1007
|
-
"failCopy": "BiQ1zG_failCopy",
|
|
1008
|
-
"failKindTitle": "BiQ1zG_failKindTitle",
|
|
1009
|
-
"resultTitle": "BiQ1zG_resultTitle",
|
|
1010
|
-
"detailGrid": "BiQ1zG_detailGrid",
|
|
1011
|
-
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
1012
|
-
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
1013
|
-
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
1014
|
-
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
1015
|
-
"failRepo": "BiQ1zG_failRepo",
|
|
986
|
+
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
987
|
+
"progressFill": "BiQ1zG_progressFill",
|
|
1016
988
|
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
1017
|
-
"
|
|
1018
|
-
"
|
|
989
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
990
|
+
"modalLink": "BiQ1zG_modalLink",
|
|
991
|
+
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
1019
992
|
"noticeHead": "BiQ1zG_noticeHead",
|
|
1020
|
-
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
1021
|
-
"modalActions": "BiQ1zG_modalActions",
|
|
1022
|
-
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
1023
|
-
"modalLabel": "BiQ1zG_modalLabel",
|
|
1024
|
-
"modalInstall": "BiQ1zG_modalInstall",
|
|
1025
|
-
"bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
|
|
1026
|
-
"modalRow": "BiQ1zG_modalRow",
|
|
1027
|
-
"aboutModal": "BiQ1zG_aboutModal",
|
|
1028
|
-
"detailArrow": "BiQ1zG_detailArrow",
|
|
1029
993
|
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
1030
|
-
"
|
|
1031
|
-
"
|
|
1032
|
-
"
|
|
1033
|
-
"
|
|
1034
|
-
"
|
|
1035
|
-
"
|
|
994
|
+
"toastFail": "BiQ1zG_toastFail",
|
|
995
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
996
|
+
"trustHint": "BiQ1zG_trustHint",
|
|
997
|
+
"failList": "BiQ1zG_failList",
|
|
998
|
+
"failKindTitle": "BiQ1zG_failKindTitle",
|
|
999
|
+
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
1000
|
+
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
1036
1001
|
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
1002
|
+
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
1003
|
+
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
1004
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
1005
|
+
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
1006
|
+
"linkIcon": "BiQ1zG_linkIcon",
|
|
1007
|
+
"progressHead": "BiQ1zG_progressHead",
|
|
1008
|
+
"failRepoUrl": "BiQ1zG_failRepoUrl",
|
|
1009
|
+
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
1010
|
+
"failCopy": "BiQ1zG_failCopy",
|
|
1011
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
1012
|
+
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
1013
|
+
"modalActions": "BiQ1zG_modalActions",
|
|
1014
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
1015
|
+
"modalCmd": "BiQ1zG_modalCmd",
|
|
1016
|
+
"noticeTime": "BiQ1zG_noticeTime",
|
|
1017
|
+
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
1018
|
+
"restartNow": "BiQ1zG_restartNow",
|
|
1019
|
+
"detailStars": "BiQ1zG_detailStars",
|
|
1020
|
+
"logModal": "BiQ1zG_logModal",
|
|
1021
|
+
"resultDesc": "BiQ1zG_resultDesc",
|
|
1022
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
1023
|
+
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
1024
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
1025
|
+
"failReason": "BiQ1zG_failReason",
|
|
1026
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
1027
|
+
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
1028
|
+
"modalTitle": "BiQ1zG_modalTitle",
|
|
1029
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
1030
|
+
"detailDim": "BiQ1zG_detailDim",
|
|
1031
|
+
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
1032
|
+
"noticeMain": "BiQ1zG_noticeMain",
|
|
1033
|
+
"progress": "BiQ1zG_progress",
|
|
1034
|
+
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
1037
1035
|
"restartLater": "BiQ1zG_restartLater",
|
|
1038
1036
|
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
1037
|
+
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
1039
1038
|
"resultCheck": "BiQ1zG_resultCheck",
|
|
1040
|
-
"
|
|
1041
|
-
"
|
|
1042
|
-
"
|
|
1043
|
-
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
1044
|
-
"modalLink": "BiQ1zG_modalLink",
|
|
1045
|
-
"detailDim": "BiQ1zG_detailDim",
|
|
1046
|
-
"modalHead": "BiQ1zG_modalHead",
|
|
1047
|
-
"modalCmd": "BiQ1zG_modalCmd",
|
|
1048
|
-
"failRepoUrl": "BiQ1zG_failRepoUrl",
|
|
1049
|
-
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
1050
|
-
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
1039
|
+
"modalValue": "BiQ1zG_modalValue",
|
|
1040
|
+
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
1041
|
+
"modalInstall": "BiQ1zG_modalInstall",
|
|
1051
1042
|
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
1043
|
+
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
1044
|
+
"modalDesc": "BiQ1zG_modalDesc",
|
|
1052
1045
|
"modalCopy": "BiQ1zG_modalCopy",
|
|
1053
|
-
"
|
|
1054
|
-
"
|
|
1055
|
-
"
|
|
1046
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
1047
|
+
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
1048
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
1049
|
+
"detailPathText": "BiQ1zG_detailPathText",
|
|
1050
|
+
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
1051
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
1056
1052
|
"errorBox": "BiQ1zG_errorBox",
|
|
1057
|
-
"stripCancel": "BiQ1zG_stripCancel",
|
|
1058
|
-
"failHead": "BiQ1zG_failHead",
|
|
1059
|
-
"noticeMain": "BiQ1zG_noticeMain",
|
|
1060
|
-
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
1061
|
-
"failRow": "BiQ1zG_failRow",
|
|
1062
|
-
"failKind": "BiQ1zG_failKind",
|
|
1063
|
-
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
1064
1053
|
"failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
|
|
1065
|
-
"
|
|
1066
|
-
"
|
|
1067
|
-
"
|
|
1068
|
-
"
|
|
1069
|
-
"
|
|
1070
|
-
"
|
|
1071
|
-
"
|
|
1072
|
-
"
|
|
1073
|
-
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
1054
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
1055
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
1056
|
+
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
1057
|
+
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
1058
|
+
"modalHead": "BiQ1zG_modalHead",
|
|
1059
|
+
"modalIn": "BiQ1zG_modalIn",
|
|
1060
|
+
"modalCancel": "BiQ1zG_modalCancel",
|
|
1061
|
+
"queueSection": "BiQ1zG_queueSection",
|
|
1074
1062
|
"noticeRow": "BiQ1zG_noticeRow",
|
|
1075
|
-
"
|
|
1076
|
-
"
|
|
1077
|
-
"
|
|
1078
|
-
"
|
|
1079
|
-
"
|
|
1080
|
-
"
|
|
1081
|
-
"
|
|
1082
|
-
"toast": "BiQ1zG_toast",
|
|
1083
|
-
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
1084
|
-
"failReason": "BiQ1zG_failReason",
|
|
1063
|
+
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
1064
|
+
"modalRow": "BiQ1zG_modalRow",
|
|
1065
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
1066
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
1067
|
+
"modalClose": "BiQ1zG_modalClose",
|
|
1068
|
+
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
1069
|
+
"progressTrack": "BiQ1zG_progressTrack",
|
|
1085
1070
|
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
1086
|
-
"
|
|
1087
|
-
"
|
|
1071
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
1072
|
+
"failClear": "BiQ1zG_failClear",
|
|
1073
|
+
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
1074
|
+
"failKind": "BiQ1zG_failKind",
|
|
1075
|
+
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
1076
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
1077
|
+
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
1078
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
1079
|
+
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
1080
|
+
"aboutModal": "BiQ1zG_aboutModal",
|
|
1081
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
1088
1082
|
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
1089
|
-
"
|
|
1090
|
-
"
|
|
1091
|
-
"modalDesc": "BiQ1zG_modalDesc",
|
|
1092
|
-
"failList": "BiQ1zG_failList",
|
|
1093
|
-
"errorTitle": "BiQ1zG_errorTitle",
|
|
1094
|
-
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
1095
|
-
"aboutContent": "BiQ1zG_aboutContent",
|
|
1096
|
-
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
1097
|
-
"progressText": "BiQ1zG_progressText",
|
|
1098
|
-
"noticeTime": "BiQ1zG_noticeTime",
|
|
1083
|
+
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
1084
|
+
"bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
|
|
1099
1085
|
"modalWide": "BiQ1zG_modalWide",
|
|
1100
|
-
"
|
|
1086
|
+
"failRow": "BiQ1zG_failRow",
|
|
1087
|
+
"failRepo": "BiQ1zG_failRepo",
|
|
1088
|
+
"modalLabel": "BiQ1zG_modalLabel",
|
|
1089
|
+
"queuedHint": "BiQ1zG_queuedHint",
|
|
1090
|
+
"detailMono": "BiQ1zG_detailMono",
|
|
1091
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
1092
|
+
"queueRow": "BiQ1zG_queueRow",
|
|
1093
|
+
"modal": "BiQ1zG_modal",
|
|
1094
|
+
"errorTitle": "BiQ1zG_errorTitle",
|
|
1095
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
1096
|
+
"detailLink": "BiQ1zG_detailLink",
|
|
1097
|
+
"stripCancel": "BiQ1zG_stripCancel",
|
|
1098
|
+
"overlayIn": "BiQ1zG_overlayIn",
|
|
1101
1099
|
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
1102
|
-
"
|
|
1103
|
-
"
|
|
1104
|
-
"
|
|
1100
|
+
"progressText": "BiQ1zG_progressText",
|
|
1101
|
+
"toast": "BiQ1zG_toast",
|
|
1102
|
+
"detailModal": "BiQ1zG_detailModal",
|
|
1103
|
+
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
1104
|
+
"aboutContent": "BiQ1zG_aboutContent"
|
|
1105
1105
|
};
|
|
1106
1106
|
//#endregion
|
|
1107
1107
|
//#region src/server/services/install/release-target.ts
|
|
@@ -1191,7 +1191,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1191
1191
|
* tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
|
|
1192
1192
|
* node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
|
|
1193
1193
|
*/
|
|
1194
|
-
const PLUGIN_VERSION = "2.2.
|
|
1194
|
+
const PLUGIN_VERSION = "2.2.6";
|
|
1195
1195
|
const CATEGORY_ORDER = [
|
|
1196
1196
|
"interface",
|
|
1197
1197
|
"session",
|
|
@@ -2112,7 +2112,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2112
2112
|
* registry 真实发布时间下发(同源),据此判断最准。门槛命中要单列成 `pending` 而不是
|
|
2113
2113
|
* 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
|
|
2114
2114
|
*/
|
|
2115
|
-
const hubCurrentVersion = "2.2.
|
|
2115
|
+
const hubCurrentVersion = "2.2.6";
|
|
2116
2116
|
const hubUpdateResult = hubUpdateInfo === null ? {
|
|
2117
2117
|
state: "none",
|
|
2118
2118
|
target: null
|
|
@@ -5154,40 +5154,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5154
5154
|
css: css$9
|
|
5155
5155
|
});
|
|
5156
5156
|
var List_module_css_default = {
|
|
5157
|
+
"topics": "_3XaZHa_topics",
|
|
5158
|
+
"stats": "_3XaZHa_stats",
|
|
5159
|
+
"star": "_3XaZHa_star",
|
|
5160
|
+
"cardTitle": "_3XaZHa_cardTitle",
|
|
5161
|
+
"card": "_3XaZHa_card",
|
|
5162
|
+
"state": "_3XaZHa_state",
|
|
5163
|
+
"stateTitle": "_3XaZHa_stateTitle",
|
|
5164
|
+
"retryBtn": "_3XaZHa_retryBtn",
|
|
5165
|
+
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
5166
|
+
"cardMain": "_3XaZHa_cardMain",
|
|
5167
|
+
"footer": "_3XaZHa_footer",
|
|
5157
5168
|
"body": "_3XaZHa_body",
|
|
5158
|
-
"
|
|
5159
|
-
"
|
|
5169
|
+
"updateBadge": "_3XaZHa_updateBadge",
|
|
5170
|
+
"detailBtn": "_3XaZHa_detailBtn",
|
|
5160
5171
|
"stateActions": "_3XaZHa_stateActions",
|
|
5161
|
-
"footLink": "_3XaZHa_footLink",
|
|
5162
5172
|
"cardHead": "_3XaZHa_cardHead",
|
|
5163
|
-
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
5164
5173
|
"stateDesc": "_3XaZHa_stateDesc",
|
|
5165
|
-
"desc": "_3XaZHa_desc",
|
|
5166
|
-
"topic": "_3XaZHa_topic",
|
|
5167
|
-
"star": "_3XaZHa_star",
|
|
5168
5174
|
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
5169
|
-
"state": "_3XaZHa_state",
|
|
5170
|
-
"diagBtn": "_3XaZHa_diagBtn",
|
|
5171
5175
|
"fork": "_3XaZHa_fork",
|
|
5172
|
-
"
|
|
5173
|
-
"
|
|
5176
|
+
"verified": "_3XaZHa_verified",
|
|
5177
|
+
"diagBtn": "_3XaZHa_diagBtn",
|
|
5178
|
+
"date": "_3XaZHa_date",
|
|
5179
|
+
"list": "_3XaZHa_list",
|
|
5180
|
+
"footLink": "_3XaZHa_footLink",
|
|
5174
5181
|
"actions": "_3XaZHa_actions",
|
|
5175
|
-
"
|
|
5176
|
-
"cardTitle": "_3XaZHa_cardTitle",
|
|
5177
|
-
"retryBtn": "_3XaZHa_retryBtn",
|
|
5178
|
-
"cardSide": "_3XaZHa_cardSide",
|
|
5179
|
-
"stats": "_3XaZHa_stats",
|
|
5182
|
+
"topic": "_3XaZHa_topic",
|
|
5180
5183
|
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
5181
|
-
"
|
|
5182
|
-
"
|
|
5183
|
-
"
|
|
5184
|
-
"
|
|
5185
|
-
"date": "_3XaZHa_date",
|
|
5186
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
5187
|
-
"updateBadge": "_3XaZHa_updateBadge",
|
|
5188
|
-
"verified": "_3XaZHa_verified",
|
|
5184
|
+
"cardSide": "_3XaZHa_cardSide",
|
|
5185
|
+
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
5186
|
+
"installBtn": "_3XaZHa_installBtn",
|
|
5187
|
+
"desc": "_3XaZHa_desc",
|
|
5189
5188
|
"versionBadge": "_3XaZHa_versionBadge",
|
|
5190
|
-
"categoryBadge": "_3XaZHa_categoryBadge"
|
|
5189
|
+
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
5190
|
+
"installBtnUpdate": "_3XaZHa_installBtnUpdate"
|
|
5191
5191
|
};
|
|
5192
5192
|
//#endregion
|
|
5193
5193
|
//#region src/client/hooks/useIncrementalList.ts
|
|
@@ -5398,16 +5398,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5398
5398
|
css: css$8
|
|
5399
5399
|
});
|
|
5400
5400
|
var SectionTabs_module_css_default = {
|
|
5401
|
+
"tabIcon": "_7tvizq_tabIcon",
|
|
5401
5402
|
"tabCount": "_7tvizq_tabCount",
|
|
5402
|
-
"noticeCount": "_7tvizq_noticeCount",
|
|
5403
|
-
"tab": "_7tvizq_tab",
|
|
5404
5403
|
"tabCountActive": "_7tvizq_tabCountActive",
|
|
5405
|
-
"
|
|
5404
|
+
"tab": "_7tvizq_tab",
|
|
5406
5405
|
"noticeBtn": "_7tvizq_noticeBtn",
|
|
5407
|
-
"
|
|
5406
|
+
"tabActive": "_7tvizq_tabActive",
|
|
5407
|
+
"tabLabel": "_7tvizq_tabLabel",
|
|
5408
5408
|
"noticeIcon": "_7tvizq_noticeIcon",
|
|
5409
|
-
"
|
|
5410
|
-
"
|
|
5409
|
+
"noticeCount": "_7tvizq_noticeCount",
|
|
5410
|
+
"root": "_7tvizq_root"
|
|
5411
5411
|
};
|
|
5412
5412
|
//#endregion
|
|
5413
5413
|
//#region src/client/components/layout/SectionTabs.tsx
|
|
@@ -5483,42 +5483,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5483
5483
|
css: css$7
|
|
5484
5484
|
});
|
|
5485
5485
|
var InstalledView_module_css_default = {
|
|
5486
|
-
"
|
|
5487
|
-
"
|
|
5488
|
-
"
|
|
5489
|
-
"
|
|
5490
|
-
"root": "_1nXeGW_root",
|
|
5486
|
+
"rowMeta": "_1nXeGW_rowMeta",
|
|
5487
|
+
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
5488
|
+
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
5489
|
+
"empty": "_1nXeGW_empty",
|
|
5491
5490
|
"statusInactive": "_1nXeGW_statusInactive",
|
|
5492
|
-
"rowMain": "_1nXeGW_rowMain",
|
|
5493
5491
|
"rowRestart": "_1nXeGW_rowRestart",
|
|
5494
|
-
"
|
|
5492
|
+
"rowCategory": "_1nXeGW_rowCategory",
|
|
5493
|
+
"searchWrap": "_1nXeGW_searchWrap",
|
|
5494
|
+
"searchInput": "_1nXeGW_searchInput",
|
|
5495
|
+
"list": "_1nXeGW_list",
|
|
5495
5496
|
"rowRepo": "_1nXeGW_rowRepo",
|
|
5496
|
-
"
|
|
5497
|
-
"
|
|
5497
|
+
"root": "_1nXeGW_root",
|
|
5498
|
+
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
5498
5499
|
"segRow": "_1nXeGW_segRow",
|
|
5499
|
-
"rowCategory": "_1nXeGW_rowCategory",
|
|
5500
|
-
"versionBadge": "_1nXeGW_versionBadge",
|
|
5501
5500
|
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
5502
|
-
"toolbar": "_1nXeGW_toolbar",
|
|
5503
|
-
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
5504
|
-
"rowDetail": "_1nXeGW_rowDetail",
|
|
5505
|
-
"updateBadge": "_1nXeGW_updateBadge",
|
|
5506
|
-
"statusDot": "_1nXeGW_statusDot",
|
|
5507
5501
|
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
5508
|
-
"searchWrap": "_1nXeGW_searchWrap",
|
|
5509
5502
|
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
5503
|
+
"statusDot": "_1nXeGW_statusDot",
|
|
5504
|
+
"rowActions": "_1nXeGW_rowActions",
|
|
5510
5505
|
"segBtn": "_1nXeGW_segBtn",
|
|
5511
|
-
"
|
|
5512
|
-
"
|
|
5513
|
-
"
|
|
5514
|
-
"exampleRow": "_1nXeGW_exampleRow",
|
|
5515
|
-
"segLabel": "_1nXeGW_segLabel",
|
|
5516
|
-
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
5517
|
-
"rowMeta": "_1nXeGW_rowMeta",
|
|
5518
|
-
"rowDesc": "_1nXeGW_rowDesc",
|
|
5506
|
+
"row": "_1nXeGW_row",
|
|
5507
|
+
"updateBadge": "_1nXeGW_updateBadge",
|
|
5508
|
+
"rowDetail": "_1nXeGW_rowDetail",
|
|
5519
5509
|
"rowTitle": "_1nXeGW_rowTitle",
|
|
5510
|
+
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
5511
|
+
"rowMain": "_1nXeGW_rowMain",
|
|
5512
|
+
"rowDesc": "_1nXeGW_rowDesc",
|
|
5513
|
+
"statusPending": "_1nXeGW_statusPending",
|
|
5514
|
+
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
5515
|
+
"segLabel": "_1nXeGW_segLabel",
|
|
5516
|
+
"versionBadge": "_1nXeGW_versionBadge",
|
|
5517
|
+
"exampleRow": "_1nXeGW_exampleRow",
|
|
5520
5518
|
"segGroup": "_1nXeGW_segGroup",
|
|
5521
|
-
"
|
|
5519
|
+
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
5520
|
+
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
5521
|
+
"toolbar": "_1nXeGW_toolbar"
|
|
5522
5522
|
};
|
|
5523
5523
|
//#endregion
|
|
5524
5524
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -5765,27 +5765,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5765
5765
|
css: css$6
|
|
5766
5766
|
});
|
|
5767
5767
|
var CustomInstallView_module_css_default = {
|
|
5768
|
-
"installLabel": "zISxCG_installLabel",
|
|
5769
5768
|
"channelOff": "zISxCG_channelOff",
|
|
5769
|
+
"desc": "zISxCG_desc",
|
|
5770
|
+
"installExample": "zISxCG_installExample",
|
|
5770
5771
|
"installRow": "zISxCG_installRow",
|
|
5771
5772
|
"installError": "zISxCG_installError",
|
|
5772
|
-
"installCards": "zISxCG_installCards",
|
|
5773
|
-
"installInputError": "zISxCG_installInputError",
|
|
5774
5773
|
"installCard": "zISxCG_installCard",
|
|
5775
|
-
"installInput": "zISxCG_installInput",
|
|
5776
|
-
"root": "zISxCG_root",
|
|
5777
|
-
"installExample": "zISxCG_installExample",
|
|
5778
5774
|
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
5779
5775
|
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
5776
|
+
"installBtn": "zISxCG_installBtn",
|
|
5777
|
+
"channelOffText": "zISxCG_channelOffText",
|
|
5780
5778
|
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
5781
|
-
"
|
|
5779
|
+
"installCardHead": "zISxCG_installCardHead",
|
|
5780
|
+
"helpBody": "zISxCG_helpBody",
|
|
5782
5781
|
"helpCmd": "zISxCG_helpCmd",
|
|
5783
5782
|
"helpNote": "zISxCG_helpNote",
|
|
5784
|
-
"
|
|
5785
|
-
"
|
|
5786
|
-
"
|
|
5787
|
-
"
|
|
5788
|
-
"
|
|
5783
|
+
"installInput": "zISxCG_installInput",
|
|
5784
|
+
"root": "zISxCG_root",
|
|
5785
|
+
"installCards": "zISxCG_installCards",
|
|
5786
|
+
"installLabel": "zISxCG_installLabel",
|
|
5787
|
+
"installInputError": "zISxCG_installInputError",
|
|
5788
|
+
"helpLine": "zISxCG_helpLine"
|
|
5789
5789
|
};
|
|
5790
5790
|
//#endregion
|
|
5791
5791
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -5941,30 +5941,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5941
5941
|
css: css$5
|
|
5942
5942
|
});
|
|
5943
5943
|
var SettingsView_module_css_default = {
|
|
5944
|
+
"textInput": "_506LLG_textInput",
|
|
5945
|
+
"proxyControl": "_506LLG_proxyControl",
|
|
5946
|
+
"navItemActive": "_506LLG_navItemActive",
|
|
5944
5947
|
"card": "_506LLG_card",
|
|
5945
5948
|
"content": "_506LLG_content",
|
|
5946
|
-
"
|
|
5947
|
-
"
|
|
5949
|
+
"root": "_506LLG_root",
|
|
5950
|
+
"pageTitle": "_506LLG_pageTitle",
|
|
5951
|
+
"proxyHint": "_506LLG_proxyHint",
|
|
5952
|
+
"resetBtn": "_506LLG_resetBtn",
|
|
5953
|
+
"navIcon": "_506LLG_navIcon",
|
|
5948
5954
|
"settingLabel": "_506LLG_settingLabel",
|
|
5949
|
-
"
|
|
5950
|
-
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
5955
|
+
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5951
5956
|
"navItem": "_506LLG_navItem",
|
|
5952
|
-
"
|
|
5953
|
-
"
|
|
5954
|
-
"
|
|
5957
|
+
"settingTitle": "_506LLG_settingTitle",
|
|
5958
|
+
"settingRowStack": "_506LLG_settingRowStack",
|
|
5959
|
+
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
5960
|
+
"pageHeader": "_506LLG_pageHeader",
|
|
5961
|
+
"settingControl": "_506LLG_settingControl",
|
|
5955
5962
|
"settingRow": "_506LLG_settingRow",
|
|
5956
|
-
"sidebar": "_506LLG_sidebar",
|
|
5957
|
-
"proxyControl": "_506LLG_proxyControl",
|
|
5958
|
-
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5959
5963
|
"controlDropdown": "_506LLG_controlDropdown",
|
|
5960
|
-
"
|
|
5961
|
-
"
|
|
5962
|
-
"navIcon": "_506LLG_navIcon",
|
|
5963
|
-
"pageTitle": "_506LLG_pageTitle",
|
|
5964
|
+
"sidebar": "_506LLG_sidebar",
|
|
5965
|
+
"settingControlStack": "_506LLG_settingControlStack",
|
|
5964
5966
|
"settingDesc": "_506LLG_settingDesc",
|
|
5965
|
-
"
|
|
5966
|
-
"settingRowStack": "_506LLG_settingRowStack",
|
|
5967
|
-
"settingTitle": "_506LLG_settingTitle"
|
|
5967
|
+
"pageDesc": "_506LLG_pageDesc"
|
|
5968
5968
|
};
|
|
5969
5969
|
//#endregion
|
|
5970
5970
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
@@ -5983,18 +5983,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5983
5983
|
css: css$4
|
|
5984
5984
|
});
|
|
5985
5985
|
var Dropdown_module_css_default = {
|
|
5986
|
-
"dropdown": "B_Gxsq_dropdown",
|
|
5987
|
-
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
5988
|
-
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
5989
5986
|
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
5990
5987
|
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
5988
|
+
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
5989
|
+
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
5990
|
+
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
5991
5991
|
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
5992
|
-
"
|
|
5993
|
-
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
5992
|
+
"dropdown": "B_Gxsq_dropdown",
|
|
5994
5993
|
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
5995
|
-
"
|
|
5996
|
-
"
|
|
5997
|
-
"dropdownPanel": "B_Gxsq_dropdownPanel"
|
|
5994
|
+
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
5995
|
+
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
5996
|
+
"dropdownPanel": "B_Gxsq_dropdownPanel",
|
|
5997
|
+
"dropdownCountActive": "B_Gxsq_dropdownCountActive"
|
|
5998
5998
|
};
|
|
5999
5999
|
//#endregion
|
|
6000
6000
|
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
@@ -6014,8 +6014,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6014
6014
|
});
|
|
6015
6015
|
var Toggle_module_css_default = {
|
|
6016
6016
|
"toggle": "k-cD4G_toggle",
|
|
6017
|
-
"
|
|
6018
|
-
"
|
|
6017
|
+
"knob": "k-cD4G_knob",
|
|
6018
|
+
"toggleOn": "k-cD4G_toggleOn"
|
|
6019
6019
|
};
|
|
6020
6020
|
//#endregion
|
|
6021
6021
|
//#region src/client/components/ui/Toggle.tsx
|
|
@@ -6112,29 +6112,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6112
6112
|
css: css$2
|
|
6113
6113
|
});
|
|
6114
6114
|
var DiagnosticsView_module_css_default = {
|
|
6115
|
-
"
|
|
6116
|
-
"
|
|
6117
|
-
"
|
|
6118
|
-
"
|
|
6115
|
+
"badge": "k9eRya_badge",
|
|
6116
|
+
"summaryOk": "k9eRya_summaryOk",
|
|
6117
|
+
"envTitle": "k9eRya_envTitle",
|
|
6118
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
6119
|
+
"diagPulse": "k9eRya_diagPulse",
|
|
6119
6120
|
"display": "k9eRya_display",
|
|
6120
|
-
"
|
|
6121
|
-
"
|
|
6122
|
-
"meta": "k9eRya_meta",
|
|
6121
|
+
"envLabel": "k9eRya_envLabel",
|
|
6122
|
+
"name": "k9eRya_name",
|
|
6123
6123
|
"summary": "k9eRya_summary",
|
|
6124
6124
|
"panel": "k9eRya_panel",
|
|
6125
|
+
"summaryRunning": "k9eRya_summaryRunning",
|
|
6125
6126
|
"envDesc": "k9eRya_envDesc",
|
|
6126
|
-
"
|
|
6127
|
-
"
|
|
6128
|
-
"badgeRunning": "k9eRya_badgeRunning",
|
|
6127
|
+
"badgeIdle": "k9eRya_badgeIdle",
|
|
6128
|
+
"row": "k9eRya_row",
|
|
6129
6129
|
"head": "k9eRya_head",
|
|
6130
6130
|
"headHint": "k9eRya_headHint",
|
|
6131
|
-
"row": "k9eRya_row",
|
|
6132
|
-
"diagPulse": "k9eRya_diagPulse",
|
|
6133
|
-
"summaryOk": "k9eRya_summaryOk",
|
|
6134
|
-
"name": "k9eRya_name",
|
|
6135
|
-
"summaryRunning": "k9eRya_summaryRunning",
|
|
6136
6131
|
"envRow": "k9eRya_envRow",
|
|
6137
|
-
"
|
|
6132
|
+
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
6133
|
+
"meta": "k9eRya_meta",
|
|
6134
|
+
"badgeOk": "k9eRya_badgeOk",
|
|
6135
|
+
"runBtn": "k9eRya_runBtn",
|
|
6136
|
+
"badgeRunning": "k9eRya_badgeRunning",
|
|
6137
|
+
"summaryFail": "k9eRya_summaryFail"
|
|
6138
6138
|
};
|
|
6139
6139
|
//#endregion
|
|
6140
6140
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -6309,57 +6309,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6309
6309
|
css: css$1
|
|
6310
6310
|
});
|
|
6311
6311
|
var LogsView_module_css_default = {
|
|
6312
|
-
"clearBtn": "_3j77BW_clearBtn",
|
|
6313
|
-
"headActions": "_3j77BW_headActions",
|
|
6314
6312
|
"list": "_3j77BW_list",
|
|
6315
|
-
"
|
|
6316
|
-
"entry": "_3j77BW_entry",
|
|
6317
|
-
"pathLabel": "_3j77BW_pathLabel",
|
|
6318
|
-
"event": "_3j77BW_event",
|
|
6319
|
-
"footFail": "_3j77BW_footFail",
|
|
6313
|
+
"badgeError": "_3j77BW_badgeError",
|
|
6320
6314
|
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
6321
|
-
"
|
|
6322
|
-
"
|
|
6323
|
-
"searchInput": "_3j77BW_searchInput",
|
|
6324
|
-
"logList": "_3j77BW_logList",
|
|
6315
|
+
"footCount": "_3j77BW_footCount",
|
|
6316
|
+
"catInstall": "_3j77BW_catInstall",
|
|
6325
6317
|
"more": "_3j77BW_more",
|
|
6326
|
-
"
|
|
6327
|
-
"
|
|
6328
|
-
"badgeError": "_3j77BW_badgeError",
|
|
6318
|
+
"actions": "_3j77BW_actions",
|
|
6319
|
+
"badge": "_3j77BW_badge",
|
|
6329
6320
|
"head": "_3j77BW_head",
|
|
6330
|
-
"
|
|
6331
|
-
"
|
|
6332
|
-
"badgeInfo": "_3j77BW_badgeInfo",
|
|
6321
|
+
"filterChip": "_3j77BW_filterChip",
|
|
6322
|
+
"searchInput": "_3j77BW_searchInput",
|
|
6333
6323
|
"catSystem": "_3j77BW_catSystem",
|
|
6334
|
-
"
|
|
6335
|
-
"catSettings": "_3j77BW_catSettings",
|
|
6336
|
-
"panel": "_3j77BW_panel",
|
|
6337
|
-
"btn": "_3j77BW_btn",
|
|
6338
|
-
"filterBar": "_3j77BW_filterBar",
|
|
6339
|
-
"previewRow": "_3j77BW_previewRow",
|
|
6324
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
6340
6325
|
"linkBtn": "_3j77BW_linkBtn",
|
|
6341
|
-
"
|
|
6342
|
-
"
|
|
6343
|
-
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
6344
|
-
"footCount": "_3j77BW_footCount",
|
|
6326
|
+
"footActions": "_3j77BW_footActions",
|
|
6327
|
+
"entry": "_3j77BW_entry",
|
|
6345
6328
|
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
6346
|
-
"
|
|
6329
|
+
"headHint": "_3j77BW_headHint",
|
|
6330
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
6331
|
+
"pathDraft": "_3j77BW_pathDraft",
|
|
6332
|
+
"message": "_3j77BW_message",
|
|
6333
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
6347
6334
|
"time": "_3j77BW_time",
|
|
6348
6335
|
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
6349
|
-
"footPath": "_3j77BW_footPath",
|
|
6350
|
-
"pathDraft": "_3j77BW_pathDraft",
|
|
6351
6336
|
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
6352
6337
|
"search": "_3j77BW_search",
|
|
6353
|
-
"foot": "_3j77BW_foot",
|
|
6354
6338
|
"badgeDebug": "_3j77BW_badgeDebug",
|
|
6355
|
-
"
|
|
6356
|
-
"
|
|
6357
|
-
"
|
|
6358
|
-
"
|
|
6359
|
-
"
|
|
6339
|
+
"pathRow": "_3j77BW_pathRow",
|
|
6340
|
+
"logList": "_3j77BW_logList",
|
|
6341
|
+
"pathText": "_3j77BW_pathText",
|
|
6342
|
+
"headActions": "_3j77BW_headActions",
|
|
6343
|
+
"previewRow": "_3j77BW_previewRow",
|
|
6360
6344
|
"empty": "_3j77BW_empty",
|
|
6361
|
-
"
|
|
6362
|
-
"
|
|
6345
|
+
"footFail": "_3j77BW_footFail",
|
|
6346
|
+
"badgeWarn": "_3j77BW_badgeWarn",
|
|
6347
|
+
"badgeInfo": "_3j77BW_badgeInfo",
|
|
6348
|
+
"clearBtn": "_3j77BW_clearBtn",
|
|
6349
|
+
"filterChipActive": "_3j77BW_filterChipActive",
|
|
6350
|
+
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
6351
|
+
"event": "_3j77BW_event",
|
|
6352
|
+
"filterBar": "_3j77BW_filterBar",
|
|
6353
|
+
"moreEnd": "_3j77BW_moreEnd",
|
|
6354
|
+
"catSettings": "_3j77BW_catSettings",
|
|
6355
|
+
"catBadge": "_3j77BW_catBadge",
|
|
6356
|
+
"panel": "_3j77BW_panel",
|
|
6357
|
+
"pathDialog": "_3j77BW_pathDialog",
|
|
6358
|
+
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
6359
|
+
"foot": "_3j77BW_foot",
|
|
6360
|
+
"footPath": "_3j77BW_footPath",
|
|
6361
|
+
"btn": "_3j77BW_btn",
|
|
6362
|
+
"badgeSuccess": "_3j77BW_badgeSuccess"
|
|
6363
6363
|
};
|
|
6364
6364
|
//#endregion
|
|
6365
6365
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -7633,7 +7633,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7633
7633
|
openSection: settingsSection,
|
|
7634
7634
|
onConsumedOpenSection: () => setSettingsSection(null)
|
|
7635
7635
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
7636
|
-
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.2.
|
|
7636
|
+
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.2.6" },
|
|
7637
7637
|
state: catalog.hubUpdateState,
|
|
7638
7638
|
currentVersion: catalog.hubCurrentVersion,
|
|
7639
7639
|
lang,
|
package/lib/http/shared.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 跨平台宿主重启脚本(以 `node -e` 运行,独立于宿主进程)。
|
|
3
3
|
* 不用 `/bin/sh -c`:Windows 无 /bin/sh,且 lsof/nohup 仅 POSIX 存在。
|
|
4
|
-
* 由 `spawn(
|
|
4
|
+
* 由 `spawn(runtimeExecPath(), ['-e', SCRIPT, port], { detached, stdio:'ignore' })` 孵化,
|
|
5
5
|
* 宿主进程被 kill 后仍能完成「停旧 → 等端口释放 → 拉起新 dsh web」。
|
|
6
6
|
* 端口探测不到监听进程时不再假装重启(记一行日志后退出,见脚本内注释)。
|
|
7
7
|
*/
|
package/lib/http/task.js
CHANGED
|
@@ -10,6 +10,7 @@ import { join } from 'node:path';
|
|
|
10
10
|
import { activeTask, cancelTask, dumpLoaderEntries, getTask, githubTarget, listPendingRestarts, validPackageName } from '../services/install/install.js';
|
|
11
11
|
import { readInstalledVersions, recordInstalledVersion, removeInstalledVersion } from '../services/profile/installed-versions.js';
|
|
12
12
|
import { isDshPlugin, isEntryLoaded } from '../services/loader.js';
|
|
13
|
+
import { runtimeExecPath } from '../services/runtime-exec.js';
|
|
13
14
|
import { profileDirectory, readInstalled } from './catalog.js';
|
|
14
15
|
import { hostEnv } from './diagnostics.js';
|
|
15
16
|
import { HOST_RESTART_SCRIPT, isDesktopHost, readJsonBody, requireMethod, requireTrustedPost, sendJson } from './shared.js';
|
|
@@ -102,9 +103,9 @@ export function registerTaskRoutes(webServer, profile, loader) {
|
|
|
102
103
|
// detached 子进程完成「停旧进程 → 等端口释放 → 后台拉起 dsh web」,
|
|
103
104
|
// 即使当前宿主(即本插件所在进程)被 kill,重启仍会继续执行。
|
|
104
105
|
// 不用 /bin/sh:Windows 无此路径,且 lsof/nohup 等仅 POSIX 存在,
|
|
105
|
-
// 故孵化 node(
|
|
106
|
+
// 故孵化 node(runtimeExecPath()) 跑跨平台脚本 —— Windows 用
|
|
106
107
|
// netstat + taskkill + shell:true 解析 dsh.cmd,POSIX 用 lsof + SIGTERM。
|
|
107
|
-
spawn(
|
|
108
|
+
spawn(runtimeExecPath(), ['-e', HOST_RESTART_SCRIPT, String(port)], { detached: true, stdio: 'ignore' }).unref();
|
|
108
109
|
sendJson(response, 200, { ok: true, port });
|
|
109
110
|
},
|
|
110
111
|
},
|
|
@@ -24,6 +24,7 @@ import { commandOnPath, gitMissingDetail } from './preflight.js';
|
|
|
24
24
|
import { isTransportFailure, registryHost } from './registry-fallback.js';
|
|
25
25
|
import { dshTooOldMarker } from './dsh-compat.js';
|
|
26
26
|
import { OutputDecoder } from './decode-output.js';
|
|
27
|
+
import { runtimeExecPath } from '../runtime-exec.js';
|
|
27
28
|
/** 内存任务注册表,按任务 id 索引。 */
|
|
28
29
|
const tasks = new Map();
|
|
29
30
|
let nextTaskId = 1;
|
|
@@ -151,7 +152,8 @@ function cliInvocation(profile) {
|
|
|
151
152
|
const bootstrap = desktopCliBootstrap(entry);
|
|
152
153
|
if (bootstrap !== null) {
|
|
153
154
|
return {
|
|
154
|
-
|
|
155
|
+
// Android 上 execPath 是 linker64,直接用会把 --expose-internals 当可执行文件
|
|
156
|
+
file: runtimeExecPath(),
|
|
155
157
|
prefixArgs: ['--expose-internals', bootstrap],
|
|
156
158
|
// cwd 用 profile 目录(asar 路径不能作 cwd),不存在时由 spawnCwdFor 回退
|
|
157
159
|
cwd: spawnCwdFor(profile),
|
|
@@ -163,7 +165,7 @@ function cliInvocation(profile) {
|
|
|
163
165
|
if (/[\\/](?:bin\.(?:js|ts)|dsh)$/.test(entry)) {
|
|
164
166
|
const absoluteEntry = resolve(entry);
|
|
165
167
|
return {
|
|
166
|
-
file:
|
|
168
|
+
file: runtimeExecPath(),
|
|
167
169
|
prefixArgs: [...process.execArgv, absoluteEntry],
|
|
168
170
|
cwd: dirname(absoluteEntry),
|
|
169
171
|
useShell: false,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
|
|
3
|
+
* Website: https://dsh-plugin.org
|
|
4
|
+
* GitHub: https://github.com/dshplugin/dsh-plugin-hub
|
|
5
|
+
*
|
|
6
|
+
* 宿主运行时路径:需要 spawn 一个「和宿主同款」的 Node/Electron 进程时用它取可执行文件。
|
|
7
|
+
*/
|
|
8
|
+
/** Android 动态链接器的错误信息形如 `error: expected absolute path: "--expose-internals"`:
|
|
9
|
+
* linker64 的第一个参数必须是「被加载的可执行文件绝对路径」,传选项就会被拒绝。 */
|
|
10
|
+
const LINKER_RE = /(^|[\\/])linker(32|64)?$/i;
|
|
11
|
+
/**
|
|
12
|
+
* 宿主进程自身的可执行文件路径。
|
|
13
|
+
*
|
|
14
|
+
* 大多数平台就是 `process.execPath`;但 Android(bionic)上它常常是
|
|
15
|
+
* `/system/bin/linker64`(宿主由 `linker64 node …` 拉起)。这时拿 execPath 去 spawn
|
|
16
|
+
* 任何带参数的命令(如 `--expose-internals <cli.js>`)都会把第一个参数当成可执行文件,
|
|
17
|
+
* 直接报 `expected absolute path`,子进程什么都跑不起来。这类环境里真正的程序路径在
|
|
18
|
+
* `process.argv0`,故检测到链接器时改用它。
|
|
19
|
+
*/
|
|
20
|
+
export function runtimeExecPath(exec = process.execPath, argv0 = process.argv0) {
|
|
21
|
+
if (!LINKER_RE.test(exec))
|
|
22
|
+
return exec;
|
|
23
|
+
return argv0 && argv0 !== exec ? argv0 : exec;
|
|
24
|
+
}
|
|
@@ -10,7 +10,7 @@ import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
|
10
10
|
/**
|
|
11
11
|
* 跨平台宿主重启脚本(以 `node -e` 运行,独立于宿主进程)。
|
|
12
12
|
* 不用 `/bin/sh -c`:Windows 无 /bin/sh,且 lsof/nohup 仅 POSIX 存在。
|
|
13
|
-
* 由 `spawn(
|
|
13
|
+
* 由 `spawn(runtimeExecPath(), ['-e', SCRIPT, port], { detached, stdio:'ignore' })` 孵化,
|
|
14
14
|
* 宿主进程被 kill 后仍能完成「停旧 → 等端口释放 → 拉起新 dsh web」。
|
|
15
15
|
* 端口探测不到监听进程时不再假装重启(记一行日志后退出,见脚本内注释)。
|
|
16
16
|
*/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
|
|
3
|
+
* Website: https://dsh-plugin.org
|
|
4
|
+
* GitHub: https://github.com/dshplugin/dsh-plugin-hub
|
|
5
|
+
*
|
|
6
|
+
* 宿主运行时路径:需要 spawn 一个「和宿主同款」的 Node/Electron 进程时用它取可执行文件。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 宿主进程自身的可执行文件路径。
|
|
10
|
+
*
|
|
11
|
+
* 大多数平台就是 `process.execPath`;但 Android(bionic)上它常常是
|
|
12
|
+
* `/system/bin/linker64`(宿主由 `linker64 node …` 拉起)。这时拿 execPath 去 spawn
|
|
13
|
+
* 任何带参数的命令(如 `--expose-internals <cli.js>`)都会把第一个参数当成可执行文件,
|
|
14
|
+
* 直接报 `expected absolute path`,子进程什么都跑不起来。这类环境里真正的程序路径在
|
|
15
|
+
* `process.argv0`,故检测到链接器时改用它。
|
|
16
|
+
*/
|
|
17
|
+
export declare function runtimeExecPath(exec?: string, argv0?: string): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.6",
|
|
4
4
|
"description": "A community plugin marketplace for DeepSeek Harness, built to the official plugin spec — browse, search and install 10000+ human-curated community plugins without leaving the app. · DeepSeek Harness 社区插件市场(遵循官方开发规范):10000+ 人工精选社区插件,每日更新。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -11,7 +11,7 @@ import type { IncomingMessage, ServerResponse } from 'node:http'
|
|
|
11
11
|
/**
|
|
12
12
|
* 跨平台宿主重启脚本(以 `node -e` 运行,独立于宿主进程)。
|
|
13
13
|
* 不用 `/bin/sh -c`:Windows 无 /bin/sh,且 lsof/nohup 仅 POSIX 存在。
|
|
14
|
-
* 由 `spawn(
|
|
14
|
+
* 由 `spawn(runtimeExecPath(), ['-e', SCRIPT, port], { detached, stdio:'ignore' })` 孵化,
|
|
15
15
|
* 宿主进程被 kill 后仍能完成「停旧 → 等端口释放 → 拉起新 dsh web」。
|
|
16
16
|
* 端口探测不到监听进程时不再假装重启(记一行日志后退出,见脚本内注释)。
|
|
17
17
|
*/
|
package/src/server/http/task.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { join } from 'node:path'
|
|
|
10
10
|
import { activeTask, cancelTask, dumpLoaderEntries, getTask, githubTarget, listPendingRestarts, validPackageName, type LoaderHandle } from '../services/install/install.ts'
|
|
11
11
|
import { readInstalledVersions, recordInstalledVersion, removeInstalledVersion } from '../services/profile/installed-versions.ts'
|
|
12
12
|
import { isDshPlugin, isEntryLoaded } from '../services/loader.ts'
|
|
13
|
+
import { runtimeExecPath } from '../services/runtime-exec.ts'
|
|
13
14
|
import { profileDirectory, readInstalled } from './catalog.ts'
|
|
14
15
|
import { hostEnv } from './diagnostics.ts'
|
|
15
16
|
import { HOST_RESTART_SCRIPT, isDesktopHost, readJsonBody, requireMethod, requireTrustedPost, sendJson, type WebRoute, type WebServerService } from './shared.ts'
|
|
@@ -96,9 +97,9 @@ export function registerTaskRoutes(webServer: WebServerService, profile: string,
|
|
|
96
97
|
// detached 子进程完成「停旧进程 → 等端口释放 → 后台拉起 dsh web」,
|
|
97
98
|
// 即使当前宿主(即本插件所在进程)被 kill,重启仍会继续执行。
|
|
98
99
|
// 不用 /bin/sh:Windows 无此路径,且 lsof/nohup 等仅 POSIX 存在,
|
|
99
|
-
// 故孵化 node(
|
|
100
|
+
// 故孵化 node(runtimeExecPath()) 跑跨平台脚本 —— Windows 用
|
|
100
101
|
// netstat + taskkill + shell:true 解析 dsh.cmd,POSIX 用 lsof + SIGTERM。
|
|
101
|
-
spawn(
|
|
102
|
+
spawn(runtimeExecPath(), ['-e', HOST_RESTART_SCRIPT, String(port)], { detached: true, stdio: 'ignore' }).unref()
|
|
102
103
|
sendJson(response, 200, { ok: true, port })
|
|
103
104
|
},
|
|
104
105
|
},
|
|
@@ -26,6 +26,7 @@ import { commandOnPath, gitMissingDetail } from './preflight.ts'
|
|
|
26
26
|
import { isTransportFailure, registryHost } from './registry-fallback.ts'
|
|
27
27
|
import { dshTooOldMarker } from './dsh-compat.ts'
|
|
28
28
|
import { OutputDecoder } from './decode-output.ts'
|
|
29
|
+
import { runtimeExecPath } from '../runtime-exec.ts'
|
|
29
30
|
|
|
30
31
|
/** 内存任务注册表,按任务 id 索引。 */
|
|
31
32
|
const tasks = new Map<number, InstallTask>()
|
|
@@ -169,7 +170,8 @@ function cliInvocation(profile: string): Invocation {
|
|
|
169
170
|
const bootstrap = desktopCliBootstrap(entry)
|
|
170
171
|
if (bootstrap !== null) {
|
|
171
172
|
return {
|
|
172
|
-
|
|
173
|
+
// Android 上 execPath 是 linker64,直接用会把 --expose-internals 当可执行文件
|
|
174
|
+
file: runtimeExecPath(),
|
|
173
175
|
prefixArgs: ['--expose-internals', bootstrap],
|
|
174
176
|
// cwd 用 profile 目录(asar 路径不能作 cwd),不存在时由 spawnCwdFor 回退
|
|
175
177
|
cwd: spawnCwdFor(profile),
|
|
@@ -181,7 +183,7 @@ function cliInvocation(profile: string): Invocation {
|
|
|
181
183
|
if (/[\\/](?:bin\.(?:js|ts)|dsh)$/.test(entry)) {
|
|
182
184
|
const absoluteEntry = resolve(entry)
|
|
183
185
|
return {
|
|
184
|
-
file:
|
|
186
|
+
file: runtimeExecPath(),
|
|
185
187
|
prefixArgs: [...process.execArgv, absoluteEntry],
|
|
186
188
|
cwd: dirname(absoluteEntry),
|
|
187
189
|
useShell: false,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
|
|
3
|
+
* Website: https://dsh-plugin.org
|
|
4
|
+
* GitHub: https://github.com/dshplugin/dsh-plugin-hub
|
|
5
|
+
*
|
|
6
|
+
* 宿主运行时路径:需要 spawn 一个「和宿主同款」的 Node/Electron 进程时用它取可执行文件。
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Android 动态链接器的错误信息形如 `error: expected absolute path: "--expose-internals"`:
|
|
10
|
+
* linker64 的第一个参数必须是「被加载的可执行文件绝对路径」,传选项就会被拒绝。 */
|
|
11
|
+
const LINKER_RE = /(^|[\\/])linker(32|64)?$/i
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 宿主进程自身的可执行文件路径。
|
|
15
|
+
*
|
|
16
|
+
* 大多数平台就是 `process.execPath`;但 Android(bionic)上它常常是
|
|
17
|
+
* `/system/bin/linker64`(宿主由 `linker64 node …` 拉起)。这时拿 execPath 去 spawn
|
|
18
|
+
* 任何带参数的命令(如 `--expose-internals <cli.js>`)都会把第一个参数当成可执行文件,
|
|
19
|
+
* 直接报 `expected absolute path`,子进程什么都跑不起来。这类环境里真正的程序路径在
|
|
20
|
+
* `process.argv0`,故检测到链接器时改用它。
|
|
21
|
+
*/
|
|
22
|
+
export function runtimeExecPath(
|
|
23
|
+
exec: string = process.execPath,
|
|
24
|
+
argv0: string = process.argv0,
|
|
25
|
+
): string {
|
|
26
|
+
if (!LINKER_RE.test(exec)) return exec
|
|
27
|
+
return argv0 && argv0 !== exec ? argv0 : exec
|
|
28
|
+
}
|