dshmarket 1.21.3 → 1.22.0

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.md CHANGED
@@ -50,7 +50,7 @@ its own dsh: it may be older than the one `npm` would give you (#139).
50
50
 
51
51
  ## Speed
52
52
 
53
- Installs prefer npm tarballs over full-repo GitHub downloads whenever a plugin publishes to npm (registry-verified against the repo to prevent name squatting). Registry installs are typically seconds; GitHub-only plugins depend on your connection to GitHub.
53
+ Installs prefer repo-verified npm packages, then author-supplied prebuilt GitHub Release tarballs, before falling back to full-repo GitHub source downloads. Prebuilt installs are typically seconds and do not need local build scripts; source-only plugins depend on your connection to GitHub.
54
54
 
55
55
  ## Security
56
56
 
@@ -105,6 +105,10 @@ DSHM_REGISTRY_URL=https://your-mirror.example/plugins.json dsh web
105
105
 
106
106
  [deepseek-harness-desktop](https://github.com/hairyf/deepseek-harness-desktop) — a native desktop app for DeepSeek Harness built with **Tauri** (Rust + Web): one-click local install and launch with no Node.js setup required. On first run it offers to install this plugin market as a recommended preset.
107
107
 
108
+ ### DeepSeek Harness Desktop (anywhere-labs)
109
+
110
+ [deepseek-harness-desktop](https://github.com/anywhere-labs/deepseek-harness-desktop) — an Electron desktop app for DeepSeek Harness built around the idea that everything is a plugin, including the desktop itself: profile switching, a bundled Node and pnpm, and a recoverable install path that snapshots the profile before a change. [dshdesktop.cn](https://dshdesktop.cn)
111
+
108
112
  ### DSH Get
109
113
 
110
114
  [DSH Get](https://www.dshget.com/) — a searchable web directory for discovering DeepSeek Harness plugins: category filters, bilingual descriptions, install commands and per-plugin detail pages. Its normalized catalog snapshot is public at [bobby-sheng/dshget-data](https://github.com/bobby-sheng/dshget-data).
package/README.zh.md CHANGED
@@ -47,7 +47,7 @@ dsh plugin --profile web add dshmarket
47
47
 
48
48
  ## 速度
49
49
 
50
- 只要插件发布了 npm 包(registry 会校验其 repository 指回同一仓库,防冒名),安装即走 npm tarball 而非整仓 GitHub 下载——通常秒级;仅 GitHub 分发的插件取决于你到 GitHub 的网络。
50
+ 安装依次优先使用经仓库验证的 npm 包、作者提供的 GitHub Release 预构建 tarball,最后才回退到整仓 GitHub 源码下载。预构建安装通常只需数秒且无需执行本地构建脚本;仅提供源码的插件仍取决于你到 GitHub 的网络。
51
51
 
52
52
  ## 安全
53
53
 
@@ -102,6 +102,10 @@ DSHM_REGISTRY_URL=https://your-mirror.example/plugins.json dsh web
102
102
 
103
103
  [deepseek-harness-desktop](https://github.com/hairyf/deepseek-harness-desktop)——基于 **Tauri**(Rust + Web)构建的 DeepSeek Harness 原生桌面客户端:一键本地安装并启动,无需自装 Node.js;首次启动可选择安装本插件市场作为推荐插件。
104
104
 
105
+ ### DeepSeek Harness Desktop(anywhere-labs)
106
+
107
+ [deepseek-harness-desktop](https://github.com/anywhere-labs/deepseek-harness-desktop)——基于 Electron 的 DeepSeek Harness 桌面客户端,理念是「万物皆插件,桌面本身也是插件」:支持 profile 切换、内置 Node 与 pnpm,安装前会先给 profile 拍快照以便回滚。[dshdesktop.cn](https://dshdesktop.cn)
108
+
105
109
  ### DSH Get
106
110
 
107
111
  [DSH Get](https://www.dshget.com/)——DeepSeek Harness 插件的网页检索目录:分类筛选、中英描述、安装命令与插件详情页;其规范化的目录快照公开在 [bobby-sheng/dshget-data](https://github.com/bobby-sheng/dshget-data)。
package/client/client.js CHANGED
@@ -280,6 +280,8 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
280
280
  progressHint: "首次安装需要下载与解析依赖,大型插件可能需要 1-3 分钟",
281
281
  toastReady: "已安装并已生效",
282
282
  toastTheme: "已启用。可在 设置 → 插件市场 → 主题 中随时切换",
283
+ toastToggledOn: "已启用",
284
+ toastToggledOff: "已停用,功能立即停止",
283
285
  gotIt: "知道了",
284
286
  stateLive: "已生效",
285
287
  stateRestart: "已安装,重启后生效",
@@ -294,6 +296,7 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
294
296
  packagesDone: "已处理 {0} 个包",
295
297
  updatedLive: "✓ 已更新,已生效",
296
298
  partialNote: "已取消,部分变更已写入",
299
+ reconciledNote: "已移除,但 pnpm 收尾时报错(通常是文件被占用);配置已同步,无需重试",
297
300
  actWhy: "为什么未生效?",
298
301
  tabList: "列表",
299
302
  tabGroups: "分组",
@@ -653,6 +656,8 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
653
656
  progressHint: "First installs download and resolve dependencies — large plugins can take 1-3 minutes",
654
657
  toastReady: "installed and live",
655
658
  toastTheme: "is now active. Switch any time in Settings → Plugin Market → Themes",
659
+ toastToggledOn: "is now on",
660
+ toastToggledOff: "is now off — it stopped working right away",
656
661
  gotIt: "Got it",
657
662
  stateLive: "Active",
658
663
  stateRestart: "Installed — restart to apply",
@@ -667,6 +672,7 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
667
672
  packagesDone: "{0} packages processed",
668
673
  updatedLive: "✓ Updated — live",
669
674
  partialNote: "Cancelled — some changes were applied",
675
+ reconciledNote: "Removed, but pnpm reported an error while finishing up (usually a locked file). The profile is already reconciled — no retry needed.",
670
676
  actWhy: "Why not live?",
671
677
  tabList: "List",
672
678
  tabGroups: "Groups",
@@ -4292,6 +4298,12 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
4292
4298
  const [removedCount, setRemovedCount] = (0, react.useState)(0);
4293
4299
  /** Toggles whose live fiber did not follow the switch — restart to apply. */
4294
4300
  const [toggleRestart, setToggleRestart] = (0, react.useState)(0);
4301
+ /** Last completed toggle, shown as a toast (#299). The switch and the row
4302
+ * tag already say the new state, but both live in a row the user may have
4303
+ * scrolled past — a mis-click there goes unnoticed. The toast is fixed on
4304
+ * screen, so it is the part that actually catches an accident. */
4305
+ const [toggled, setToggled] = (0, react.useState)(null);
4306
+ const toggledDone = (0, react.useCallback)(() => setToggled(null), []);
4295
4307
  /**
4296
4308
  * Dismissal of the host-reported restart notice, keyed to the current boot
4297
4309
  * so it reappears after a restart that did not happen and after any new
@@ -5026,6 +5038,12 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
5026
5038
  if (body.partial === true) setInstallError(t("partialNote"));
5027
5039
  return;
5028
5040
  }
5041
+ if (body.reconciled === true) {
5042
+ if (!body.hot) setRemovedCount((n) => n + 1);
5043
+ refreshInstalled();
5044
+ setInstallError(t("reconciledNote"));
5045
+ return;
5046
+ }
5029
5047
  const text = (v) => typeof v === "string" ? v : v && typeof v.text === "string" ? v.text : v == null ? "" : JSON.stringify(v);
5030
5048
  setInstallError((text(body.error) || humanOutput(text(body.stderr)) || "error").trim().slice(-600));
5031
5049
  }
@@ -5057,6 +5075,10 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
5057
5075
  }));
5058
5076
  if (body.restart === true) setToggleRestart((n) => n + 1);
5059
5077
  if (body.refresh === true) setRefreshNames((names) => names.includes(name) ? names : names.concat(name));
5078
+ if (!reload) setToggled({
5079
+ name,
5080
+ enabled
5081
+ });
5060
5082
  refreshInstalled();
5061
5083
  if (reload) {
5062
5084
  sessionStorage.removeItem("dshm-toast");
@@ -7531,6 +7553,11 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
7531
7553
  text: t("exportLogFail"),
7532
7554
  icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, { size: 14 }),
7533
7555
  onDone: exportToastDone
7556
+ }),
7557
+ toggled !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
7558
+ text: toggled.name + " " + t(toggled.enabled ? "toastToggledOn" : "toastToggledOff"),
7559
+ icon: toggled.enabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, { size: 14 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, { size: 14 }),
7560
+ onDone: toggledDone
7534
7561
  })
7535
7562
  ]
7536
7563
  });