dshmarket 1.16.4 → 1.16.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/client.js +32 -4
- package/client/client.js.map +1 -1
- package/lib/backup.js +41 -0
- package/lib/compatibility.js +20 -1
- package/lib/routes.js +61 -11
- package/lib/types/backup.d.ts +23 -0
- package/lib/types/compatibility.d.ts +28 -1
- package/lib/types/verify.d.ts +42 -0
- package/lib/verify.js +90 -0
- package/package.json +1 -1
- package/src/backup.ts +35 -0
- package/src/client/MarketSection.tsx +44 -3
- package/src/client/locales.ts +6 -0
- package/src/compatibility.ts +36 -2
- package/src/routes.ts +65 -15
- package/src/verify.ts +90 -0
package/client/client.js
CHANGED
|
@@ -104,6 +104,8 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
104
104
|
agentBusyUpdate: "有 agent 正在运行,请等待其完成或将其取消后再更新——更新会直接替换插件文件,运行中的 agent 可能中途报错或新旧版本混用。",
|
|
105
105
|
agentBusyInstall: "有 agent 正在运行,请等待其完成或将其取消后再安装——安装会修改插件文件,运行中的 agent 可能中途报错。",
|
|
106
106
|
compatRiskBanner: "检测到兼容性风险,建议重启前到诊断页处理,或一键回滚本次操作。",
|
|
107
|
+
shadowNameBanner: "本次操作让同一个插件名在两个层里同时存在,重启后只有一个会生效:",
|
|
108
|
+
brokenBundleBanner: "下列插件的前端文件已损坏、无法解析,刷新后界面可能空白,建议回滚:",
|
|
107
109
|
goDiagnose: "去诊断页修复",
|
|
108
110
|
rollbackNow: "一键回滚",
|
|
109
111
|
rollingBack: "回滚中…",
|
|
@@ -252,6 +254,7 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
252
254
|
backupDone: "备份已上传",
|
|
253
255
|
restoreDone: "恢复完成,请重启 DeepSeek Harness",
|
|
254
256
|
restorePartial: "恢复已完成,但下列插件安装失败:",
|
|
257
|
+
restoreUnportable: "依赖指向了另一台机器上的绝对路径,本机不存在,需要手动改成本机路径或重新安装",
|
|
255
258
|
restoreConfirm: "恢复将覆盖当前 profile 配置并重新安装插件,确定继续吗?",
|
|
256
259
|
restorePreviewDone: "备份已导入,请在「已安装」中确认后开始恢复",
|
|
257
260
|
restoreMissing: "备份中有 {0} 个插件尚未安装",
|
|
@@ -461,6 +464,8 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
461
464
|
agentBusyUpdate: "An agent is currently working — wait for it to finish (or cancel it) before updating. Updates replace plugin files in place, so a working agent can fail or mix versions mid-turn.",
|
|
462
465
|
agentBusyInstall: "An agent is currently working — wait for it to finish (or cancel it) before installing. Installing changes plugin files, so a working agent can fail mid-turn.",
|
|
463
466
|
compatRiskBanner: "Compatibility risk detected — open Diagnostics before restarting, or roll this operation back.",
|
|
467
|
+
shadowNameBanner: "This operation left one plugin name defined in two layers; only one will load after a restart:",
|
|
468
|
+
brokenBundleBanner: "These plugins now have a client bundle that will not parse; the page may come up blank after a refresh — rolling back is recommended:",
|
|
464
469
|
goDiagnose: "Open Diagnostics",
|
|
465
470
|
rollbackNow: "Roll back",
|
|
466
471
|
rollingBack: "Rolling back…",
|
|
@@ -609,6 +614,7 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
609
614
|
backupDone: "Backup uploaded",
|
|
610
615
|
restoreDone: "Restore complete — restart DeepSeek Harness",
|
|
611
616
|
restorePartial: "Restore completed, but these plugins failed to install:",
|
|
617
|
+
restoreUnportable: "points at an absolute path from another machine that does not exist here — repoint it locally or reinstall the plugin",
|
|
612
618
|
restoreConfirm: "Restore will overwrite this profile configuration and reinstall plugins. Continue?",
|
|
613
619
|
restorePreviewDone: "Backup imported. Review Installed, then start restore.",
|
|
614
620
|
restoreMissing: "{0} plugins from this backup are not installed",
|
|
@@ -4181,6 +4187,13 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
4181
4187
|
const first = risks[0];
|
|
4182
4188
|
return `${first.plugin}: ${first.peer} ${first.range} vs ${first.resolved}`;
|
|
4183
4189
|
};
|
|
4190
|
+
/** Which name now resolves from two layers, and which layers those are. */
|
|
4191
|
+
const shadowSummary = (entries) => {
|
|
4192
|
+
if (entries.length === 0) return "";
|
|
4193
|
+
const first = entries[0];
|
|
4194
|
+
const rest = entries.length > 1 ? ` (+${entries.length - 1})` : "";
|
|
4195
|
+
return `${first.name} — ${first.layers.join(" / ")}${rest}`;
|
|
4196
|
+
};
|
|
4184
4197
|
const doInstall = (0, react.useCallback)((plugin) => {
|
|
4185
4198
|
setBuildsSkipped(null);
|
|
4186
4199
|
setConfirming(null);
|
|
@@ -4693,7 +4706,8 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
4693
4706
|
}, [updatableNames, doUpdate]);
|
|
4694
4707
|
const finishRestore = (0, react.useCallback)((body) => {
|
|
4695
4708
|
const errors = Array.isArray(body.errors) ? body.errors : [];
|
|
4696
|
-
|
|
4709
|
+
const unportable = Array.isArray(body.unportable) ? body.unportable : [];
|
|
4710
|
+
setRestoreErrors([...errors.map((item) => `${String(item.name)}: ${String(item.error)}`), ...unportable.map((item) => `${String(item.name)}: ${t("restoreUnportable")} (${String(item.spec)})`)]);
|
|
4697
4711
|
setBackupRestored(true);
|
|
4698
4712
|
setBackupMessage(t("restoreDone"));
|
|
4699
4713
|
if (errors.length === 0) {
|
|
@@ -5652,9 +5666,23 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
5652
5666
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5653
5667
|
className: Market_module_css_default.grow,
|
|
5654
5668
|
children: [
|
|
5655
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
5656
|
-
|
|
5657
|
-
|
|
5669
|
+
compatibilityNotice.risks.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
5670
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: t("compatRiskBanner") }),
|
|
5671
|
+
" ",
|
|
5672
|
+
compatibilitySummary(compatibilityNotice.risks)
|
|
5673
|
+
] }),
|
|
5674
|
+
compatibilityNotice.shadowedNames !== void 0 && compatibilityNotice.shadowedNames.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
5675
|
+
compatibilityNotice.risks.length > 0 && " · ",
|
|
5676
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: t("shadowNameBanner") }),
|
|
5677
|
+
" ",
|
|
5678
|
+
shadowSummary(compatibilityNotice.shadowedNames)
|
|
5679
|
+
] }),
|
|
5680
|
+
compatibilityNotice.brokenBundles !== void 0 && compatibilityNotice.brokenBundles.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
5681
|
+
(compatibilityNotice.risks.length > 0 || (compatibilityNotice.shadowedNames?.length ?? 0) > 0) && " · ",
|
|
5682
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: t("brokenBundleBanner") }),
|
|
5683
|
+
" ",
|
|
5684
|
+
compatibilityNotice.brokenBundles.map((entry) => entry.name).join(", ")
|
|
5685
|
+
] })
|
|
5658
5686
|
]
|
|
5659
5687
|
}),
|
|
5660
5688
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|