dsh-enhancement-suite 0.2.0 → 0.3.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
@@ -1,141 +1,29 @@
1
- # DeepSeek Harness Enhancement Suite
2
-
3
- [![中文文档](https://img.shields.io/badge/%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3-blue)](README.zh.md) [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE) [![Node](https://img.shields.io/badge/node-%3E%3D22.18-green)](package.json)
4
-
5
- **Vision · Soul / Persona · Long-term Memory · Plugin Marketplace · Reasoning Options**
6
-
7
- The official entry point and one-command installer for the Scorp1o117 plugins that enhance [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH). This suite is a real installer — not a link collection: it drives the official `dsh plugin` CLI, mounts what needs mounting, and checks the result.
8
-
9
- Version 0.1.4 and newer require DSH `0.1.0-rc.7` or newer and are validated
10
- with `0.1.0-rc.7`, `0.1.0-rc.8`, and `0.1.1-rc.1`. They also report pnpm
11
- native-build policy failures explicitly.
12
-
13
- DSH `0.1.0-rc.6` users must install the last compatible plugin releases
14
- directly: `dsh-tool-vision@0.6.1`, `dsh-soul-md@0.5.6`,
15
- `dsh-tdai-memory@0.2.11`, and `dsh-plugin-marketplace@0.2.6`. Do not use the
16
- suite's unpinned `install` command on rc.6 because it intentionally resolves
17
- the current releases. `dsh-reasoning-options` requires DSH `0.1.0-rc.7` or
18
- newer (no rc.6-compatible release exists).
19
-
20
- > **This repository does not vendor or replace the individual plugins.**
21
- > **Each plugin remains independently maintained in its own upstream repository.**
22
-
23
- ---
24
-
25
- ## 👁️ dsh-tool-vision
26
-
27
- 给文本模型增加视觉能力和图片桥接。
28
-
29
- [![npm](https://img.shields.io/npm/v/dsh-tool-vision)](https://www.npmjs.com/package/dsh-tool-vision) [![license](https://img.shields.io/npm/l/dsh-tool-vision)](https://github.com/Scorp1o117/dsh-tool-vision/blob/main/LICENSE)
30
-
31
- [→ upstream repository](https://github.com/Scorp1o117/dsh-tool-vision)
32
-
33
- ## 🎭 dsh-soul-md
34
-
35
- 为 Agent 增加 soul.md 人设、会话/工作区 Persona 和可演化人格。
36
-
37
- [![npm](https://img.shields.io/npm/v/dsh-soul-md)](https://www.npmjs.com/package/dsh-soul-md) [![license](https://img.shields.io/npm/l/dsh-soul-md)](https://github.com/Scorp1o117/dsh-soul-md/blob/main/LICENSE)
38
-
39
- [→ upstream repository](https://github.com/Scorp1o117/dsh-soul-md)
40
-
41
- ## 🧠 dsh-tdai-memory
42
-
43
- 完整的长期分层记忆、召回与搜索。
44
-
45
- [![npm](https://img.shields.io/npm/v/dsh-tdai-memory)](https://www.npmjs.com/package/dsh-tdai-memory) [![license](https://img.shields.io/npm/l/dsh-tdai-memory)](https://github.com/Scorp1o117/dsh-tdai-memory/blob/main/LICENSE)
46
-
47
- [→ upstream repository](https://github.com/Scorp1o117/dsh-tdai-memory)
48
-
49
- ## 🛒 dsh-plugin-marketplace
50
-
51
- 直接在 DSH Web UI 中发现和浏览插件。
52
-
53
- [![npm](https://img.shields.io/npm/v/dsh-plugin-marketplace)](https://www.npmjs.com/package/dsh-plugin-marketplace) [![license](https://img.shields.io/npm/l/dsh-plugin-marketplace)](https://github.com/Scorp1o117/dsh-plugin-marketplace/blob/main/LICENSE)
54
-
55
- [→ upstream repository](https://github.com/Scorp1o117/dsh-plugin-marketplace)
56
-
57
- ## 🎚️ dsh-reasoning-options
58
-
59
- 为所有第三方(pi-ai)模型自动添加推理强度选项(off → max 七档,默认 high)。
60
-
61
- [![npm](https://img.shields.io/npm/v/dsh-reasoning-options)](https://www.npmjs.com/package/dsh-reasoning-options) [![license](https://img.shields.io/npm/l/dsh-reasoning-options)](https://github.com/Scorp1o117/dsh-reasoning-options/blob/main/LICENSE)
62
-
63
- [→ upstream repository](https://github.com/Scorp1o117/dsh-reasoning-options)
64
-
65
- ---
66
-
67
- ## Requirements
68
-
69
- - **Node.js >= 22.18** — the full suite inherits the `dsh-tdai-memory` engine requirement
70
- - **dsh CLI** on `PATH` — the official DeepSeek Harness CLI (`dsh plugin --profile <p> add <pkg>` is the install mechanism)
71
- - A target profile (default: `web`)
72
-
73
- ## Install & usage
74
-
75
- From this repository (no install needed):
76
-
77
- ```bash
78
- node bin/dsh-enhance.mjs list
79
- node bin/dsh-enhance.mjs install --dry-run
80
- node bin/dsh-enhance.mjs install
81
- node bin/dsh-enhance.mjs doctor
82
- ```
83
-
84
- As a global command (once published to npm):
85
-
86
- ```bash
87
- npm install -g dsh-enhancement-suite
88
- dsh-enhance list
89
- dsh-enhance install
90
- ```
91
-
92
- ## CLI
93
-
94
- ```
95
- dsh-enhance list Show the plugin registry (installed state per profile)
96
- dsh-enhance install Install all plugins into a profile
97
- dsh-enhance update Update installed plugins to the latest versions
98
- dsh-enhance doctor Check Node, dsh CLI, profile and per-plugin state
99
-
100
- --profile <name> target profile (default: web)
101
- --only <keys> comma-separated selection: vision,soul,memory,marketplace,reasoning (or package names)
102
- --dry-run print what would run without executing anything
103
- ```
104
-
105
- Examples:
106
-
107
- ```bash
108
- dsh-enhance install --dry-run # preview everything
109
- dsh-enhance install --profile web --only vision,soul
110
- dsh-enhance update --profile headless
111
- ```
112
-
113
- ## How it installs
114
-
115
- 1. Every plugin is installed through the **official CLI**: `dsh plugin --profile <profile> add <package>`. This suite never loads the plugins through its own dependency graph or its own cordis patch — the upstream packages stay independent in the profile.
116
- 2. All plugins declare `dsh.bundle.patch` (as of vision 0.3.9 / soul-md 0.5.4 / tdai-memory 0.2.9 / marketplace 0.2.4 / reasoning-options 0.1.0), so `dsh plugin add` reconciles each into `dsh.profile.bundles` and its own bundle layer auto-mounts it.
117
- 3. For profiles that mounted a plugin manually before it gained its bundle manifest, the suite **removes the stale manual row** from `cordis.patch.yml` — two mounts of the same entry id would abort boot. (Non-bundle third-party plugins still get the safe idempotent mount logic: empty `[]` patches are replaced correctly, duplicates are skipped, flow-style arrays are refused instead of corrupted.)
118
- 4. Restart `dsh web` and the plugins load.
119
-
120
- Every step reports a clear `✓` / `✗`, failures are never swallowed, and no API key is read, printed, or forwarded.
121
-
122
- ## Integration / Adoption
123
-
124
- The following plugins are adopted and shipped built-in by the **Deepseek Harness EAC** desktop client:
125
-
126
- - 👁️ `dsh-tool-vision`
127
- - 🎭 `dsh-soul-md`
128
- - 🧠 `dsh-tdai-memory`
129
-
130
- [Deepseek-Harness-EAC](https://github.com/zouyuxuan122/Deepseek-Harness-EAC)
131
-
132
- > Note: EAC's built-in marketplace implementation is a separate project; it does not use `dsh-plugin-marketplace`.
133
-
134
- ## Documentation
135
-
136
- - [Architecture](docs/architecture.md) — design decisions, manifest schema, safety rules
137
- - [plugins.json](plugins.json) — the plugin manifest (npm name, repo, category, display name, description)
138
-
139
- ## License
140
-
141
- MIT — see [LICENSE](LICENSE). Each plugin keeps its own MIT license in its upstream repository.
1
+ # DeepSeek Harness Enhancement Suite
2
+
3
+ Install and update **Vision, Soul / Persona, Memory, Marketplace, Reasoning Options and Motion UI** from a DSH plugin configuration page or the dsh-enhance CLI. Version 0.3.0 requires DSH 0.2.0-rc.2 or later 0.2.x and Node >=22.19.
4
+
5
+ ## Desktop and Web configuration page
6
+
7
+ Use the Desktop-provided dsh command (Application → Manage dsh Command):
8
+
9
+ ```sh
10
+ dsh plugin --profile desktop add dsh-enhancement-suite@0.3.0
11
+ ```
12
+
13
+ Use --profile web for Web. Restart DSH and open **Plugins → Installed → dsh-enhancement-suite**. Choose **Install all**, **Update installed plugins**, or an individual install/update button. Motion UI is included as dsh-motion-ui. The page displays installed versions, operation progress and errors. All operations target the active Host's profile and use its official CLI; no API credentials are needed. Updating installed plugins skips missing plugins; Install all installs or updates all six. Restart DSH afterwards.
14
+
15
+ The suite shares the marketplace's operation engine without mounting a duplicate marketplace plugin. Installing all adds the marketplace as its own independent bundle. Use the marketplace configuration page for uninstall and management of other installed plugins. Built-in DSH bundles are protected.
16
+
17
+ ## CLI
18
+
19
+ ```sh
20
+ npx dsh-enhancement-suite list --profile desktop
21
+ npx dsh-enhancement-suite install --profile desktop
22
+ npx dsh-enhancement-suite update --profile desktop --only motion,reasoning
23
+ ```
24
+
25
+ On Desktop, the dsh command on PATH must be installed by Desktop. If another global CLI shadows it on Windows, set DSH_ENHANCE_DESKTOP_EXECUTABLE to the absolute DeepSeek Harness.exe path before running dsh-enhance; this uses Desktop's bundled CLI and pnpm. --dry-run previews operations. --only accepts short keys or package names. Individual plugins remain independently maintained and are installed directly into the profile.
26
+
27
+ ## Validation
28
+
29
+ npm run check validates syntax, the six-plugin registry and CLI help/list. npm test validates the bundle, configuration page and CLI selection.
package/README.zh.md CHANGED
@@ -1,139 +1,27 @@
1
- # DeepSeek Harness Enhancement Suite
2
-
3
- [![English](https://img.shields.io/badge/English-blue)](README.md) [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE) [![Node](https://img.shields.io/badge/node-%3E%3D22.18-green)](package.json)
4
-
5
- **Vision · Soul / Persona · Long-term Memory · Plugin Marketplace · Reasoning Options**
6
-
7
- Scorp1o117 DSH 插件(增强 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness))的官方总入口和一键安装套件。这是一个真正可用的一键安装器,而不是链接合集:它驱动官方 `dsh plugin` CLI、自动处理挂载、并检查结果。
8
-
9
- 从 `0.1.4` 起最低支持 DSH `0.1.0-rc.7`,已针对 `0.1.0-rc.7`、
10
- `0.1.0-rc.8` 和 `0.1.1-rc.1` 验证,并会明确识别 pnpm 原生依赖构建策略导致的安装失败。
11
-
12
- 仍使用 DSH `0.1.0-rc.6` 的用户请直接安装最后兼容的插件版本:
13
- `dsh-tool-vision@0.6.1`、`dsh-soul-md@0.5.6`、`dsh-tdai-memory@0.2.11`
14
- 和 `dsh-plugin-marketplace@0.2.6`。不要在 rc.6 上使用套件不锁版本的 `install`
15
- 命令,因为它会按设计安装当前最新版。`dsh-reasoning-options` 要求 DSH
16
- `0.1.0-rc.7` 或更高(没有 rc.6 兼容版本)。
17
-
18
- > **本仓库不复制、不替代任何独立插件。**
19
- > **每个插件都在各自的 upstream 仓库独立维护。**
20
-
21
- ---
22
-
23
- ## 👁️ dsh-tool-vision
24
-
25
- 给文本模型增加视觉能力和图片桥接。
26
-
27
- [![npm](https://img.shields.io/npm/v/dsh-tool-vision)](https://www.npmjs.com/package/dsh-tool-vision) [![license](https://img.shields.io/npm/l/dsh-tool-vision)](https://github.com/Scorp1o117/dsh-tool-vision/blob/main/LICENSE)
28
-
29
- [→ upstream 仓库](https://github.com/Scorp1o117/dsh-tool-vision)
30
-
31
- ## 🎭 dsh-soul-md
32
-
33
- 为 Agent 增加 soul.md 人设、会话/工作区 Persona 和可演化人格。
34
-
35
- [![npm](https://img.shields.io/npm/v/dsh-soul-md)](https://www.npmjs.com/package/dsh-soul-md) [![license](https://img.shields.io/npm/l/dsh-soul-md)](https://github.com/Scorp1o117/dsh-soul-md/blob/main/LICENSE)
36
-
37
- [→ upstream 仓库](https://github.com/Scorp1o117/dsh-soul-md)
38
-
39
- ## 🧠 dsh-tdai-memory
40
-
41
- 完整的长期分层记忆、召回与搜索。
42
-
43
- [![npm](https://img.shields.io/npm/v/dsh-tdai-memory)](https://www.npmjs.com/package/dsh-tdai-memory) [![license](https://img.shields.io/npm/l/dsh-tdai-memory)](https://github.com/Scorp1o117/dsh-tdai-memory/blob/main/LICENSE)
44
-
45
- [→ upstream 仓库](https://github.com/Scorp1o117/dsh-tdai-memory)
46
-
47
- ## 🛒 dsh-plugin-marketplace
48
-
49
- 直接在 DSH Web UI 中发现和浏览插件。
50
-
51
- [![npm](https://img.shields.io/npm/v/dsh-plugin-marketplace)](https://www.npmjs.com/package/dsh-plugin-marketplace) [![license](https://img.shields.io/npm/l/dsh-plugin-marketplace)](https://github.com/Scorp1o117/dsh-plugin-marketplace/blob/main/LICENSE)
52
-
53
- [→ upstream 仓库](https://github.com/Scorp1o117/dsh-plugin-marketplace)
54
-
55
- ## 🎚️ dsh-reasoning-options
56
-
57
- 为所有第三方(pi-ai)模型自动添加推理强度选项(off → max 七档,默认 high)。
58
-
59
- [![npm](https://img.shields.io/npm/v/dsh-reasoning-options)](https://www.npmjs.com/package/dsh-reasoning-options) [![license](https://img.shields.io/npm/l/dsh-reasoning-options)](https://github.com/Scorp1o117/dsh-reasoning-options/blob/main/LICENSE)
60
-
61
- [→ upstream 仓库](https://github.com/Scorp1o117/dsh-reasoning-options)
62
-
63
- ---
64
-
65
- ## 环境要求
66
-
67
- - **Node.js >= 22.18** —— 完整套件继承 `dsh-tdai-memory` 的引擎要求
68
- - **dsh CLI** 在 `PATH` 上 —— 安装机制是官方 CLI:`dsh plugin --profile <p> add <pkg>`
69
- - 目标 profile(默认:`web`)
70
-
71
- ## 安装与使用
72
-
73
- 从本仓库直接运行(无需安装):
74
-
75
- ```bash
76
- node bin/dsh-enhance.mjs list
77
- node bin/dsh-enhance.mjs install --dry-run
78
- node bin/dsh-enhance.mjs install
79
- node bin/dsh-enhance.mjs doctor
80
- ```
81
-
82
- 发布到 npm 后作为全局命令使用:
83
-
84
- ```bash
85
- npm install -g dsh-enhancement-suite
86
- dsh-enhance list
87
- dsh-enhance install
88
- ```
89
-
90
- ## CLI
91
-
92
- ```
93
- dsh-enhance list 查看插件清单(含 profile 内的安装状态)
94
- dsh-enhance install 把全部插件安装进 profile
95
- dsh-enhance update 更新已安装插件到最新版本
96
- dsh-enhance doctor 检查 Node、dsh CLI、profile 与各插件状态
97
-
98
- --profile <name> 目标 profile(默认:web)
99
- --only <keys> 逗号分隔的选择:vision,soul,memory,marketplace,reasoning(或包名)
100
- --dry-run 只打印将要执行的操作,不实际执行
101
- ```
102
-
103
- 示例:
104
-
105
- ```bash
106
- dsh-enhance install --dry-run # 预览全部操作
107
- dsh-enhance install --profile web --only vision,soul
108
- dsh-enhance update --profile headless
109
- ```
110
-
111
- ## 安装方式
112
-
113
- 1. 每个插件都通过**官方 CLI** 安装:`dsh plugin --profile <profile> add <package>`。本套件绝不通过自身的依赖图或自己的 cordis patch 间接加载插件——各 upstream 包在 profile 中保持独立。
114
- 2. 所有插件都声明了 `dsh.bundle.patch`(vision 0.3.9 / soul-md 0.5.4 / tdai-memory 0.2.9 / marketplace 0.2.4 / reasoning-options 0.1.0 起),`dsh plugin add` 会把它对账进 `dsh.profile.bundles`,由各自的 bundle 层自动挂载。
115
- 3. 对于在获得 bundle 声明前就已手动挂载的插件,套件会**移除 cordis.patch.yml 里的过期手动行**——同一 entry id 挂两次会启动失败。(非 bundle 第三方插件仍会用安全、幂等的挂载逻辑处理:空 `[]` 补丁会被正确替换、重复挂载会被跳过、流式数组会被拒绝而不是损坏。)
116
- 4. 重启 `dsh web` 即可加载。
117
-
118
- 每一步都有清晰的 `✓` / `✗` 反馈,失败绝不吞掉,且不读取、不打印任何 API Key。
119
-
120
- ## 集成 / 采用
121
-
122
- 以下插件已被 **Deepseek Harness EAC** 桌面客户端内置采用:
123
-
124
- - 👁️ `dsh-tool-vision`
125
- - 🎭 `dsh-soul-md`
126
- - 🧠 `dsh-tdai-memory`
127
-
128
- [Deepseek-Harness-EAC](https://github.com/zouyuxuan122/Deepseek-Harness-EAC)
129
-
130
- > 注意:EAC 内置的 marketplace 实现是另一个项目,并没有使用 `dsh-plugin-marketplace`。
131
-
132
- ## 文档
133
-
134
- - [架构说明](docs/architecture.md) —— 设计决策、manifest 结构、安全规则
135
- - [plugins.json](plugins.json) —— 插件 manifest(npm 包名、仓库、分类、显示名、描述)
136
-
137
- ## License
138
-
139
- MIT —— 见 [LICENSE](LICENSE)。各插件在各自 upstream 仓库保留独立的 MIT License。
1
+ # DeepSeek Harness Enhancement Suite
2
+
3
+ 在 DSH 插件配置页或 dsh-enhance 命令行中安装、更新 **视觉、Soul / Persona、长期记忆、插件市场、推理强度、Motion UI** 六个插件。0.3.0 需要 DSH 0.2.0-rc.2 或后续 0.2.x,以及 Node >=22.19。
4
+
5
+ ## Desktop / Web 配置页
6
+
7
+ 使用 Desktop 提供的 dsh 命令(应用 → 管理 dsh 命令):
8
+
9
+ ```sh
10
+ dsh plugin --profile desktop add dsh-enhancement-suite@0.3.0
11
+ ```
12
+
13
+ Web 使用 --profile web。重启后打开 **插件 → 已安装 → dsh-enhancement-suite**,可一键安装全部、一键更新已安装插件,或单独安装/更新。Motion UI 对应 dsh-motion-ui。页面展示真实安装版本、进度和错误,不需要 API 密钥。更新已安装插件会跳过未安装项;安装全部则安装或更新全部六项。完成后重启 DSH。
14
+
15
+ 套件共用插件市场的操作后端,不重复挂载市场插件。一键安装全部后,市场作为独立 bundle 挂载。卸载插件和管理套件之外的插件,请使用插件市场配置页。内置 DSH bundle 由 DSH 自身管理。
16
+
17
+ ## 命令行
18
+
19
+ ```sh
20
+ npx dsh-enhancement-suite list --profile desktop
21
+ npx dsh-enhancement-suite install --profile desktop
22
+ npx dsh-enhancement-suite update --profile desktop --only motion,reasoning
23
+ ```
24
+
25
+ Desktop 的 PATH 命令应通过 Desktop 安装。如果被全局 Web CLI 遮挡,Windows 可设置 DSH_ENHANCE_DESKTOP_EXECUTABLE 为 DeepSeek Harness.exe 的绝对路径,命令行会调用 Desktop 自带 CLI 和 pnpm。--dry-run 预览操作;--only 支持短名称和完整包名。各插件保持独立维护并直接安装到 Profile。
26
+
27
+ npm run check 验证语法、六插件清单和 CLI help/list;npm test 验证 bundle、配置页和命令行选择。
@@ -0,0 +1,7 @@
1
+ # v0.3.0 validation — 2026-10-12
2
+
3
+ - npm run check and npm test passed (3 tests).
4
+ - Six-plugin registry includes dsh-motion-ui; suite page submits revision-checked batch requests and follows DSH locale.
5
+ - Packed suite started on the installed Desktop 0.2.0-rc.2 runtime in an isolated profile alongside the marketplace without duplicate mounts.
6
+ - Browser showed all six plugin rows and one-click install/update controls. Refresh completed through the actual Host settings channel.
7
+ - The shared engine's real Desktop install/update/uninstall path was exercised by the marketplace smoke; batch selection and serialization are covered by engine tests.
@@ -36,7 +36,7 @@ const DEFAULT_PROFILE = MANIFEST.defaultProfile ?? "web";
36
36
  /** Short keys and full package names are both accepted for --only. */
37
37
  const KEY_ALIASES = new Map(PLUGINS.map((p) => [p.key, p.name]));
38
38
  const NODE_MIN = MANIFEST.node ?? ">=22.18";
39
- const DSH_MIN = MANIFEST.dsh ?? ">=0.1.0-rc.7";
39
+ const DSH_MIN = MANIFEST.dsh ?? ">=0.2.0-rc.2 <0.3.0";
40
40
 
41
41
  const ok = (msg) => console.log(` ✓ ${msg}`);
42
42
  const bad = (msg) => console.log(` ✗ ${msg}`);
@@ -72,7 +72,13 @@ function installedManifest(pkg, profile) {
72
72
  }
73
73
 
74
74
  /** Locate the dsh CLI on PATH (dsh.cmd / dsh.exe on Windows, dsh elsewhere). */
75
- function findDsh() {
75
+ function findDsh(profile) {
76
+ if (profile === "desktop" && process.env.DSH_ENHANCE_DESKTOP_EXECUTABLE) {
77
+ const executable = process.env.DSH_ENHANCE_DESKTOP_EXECUTABLE;
78
+ const cli = join(dirname(executable), "resources", "app.asar", "dsh", "node_modules", "@deepseek-ai", "dsh-desktop-host", "lib", "cli.js");
79
+ if (!existsSync(executable)) throw new CliError(`Desktop executable not found: ${executable}`);
80
+ return { executable, prefix: ["--expose-internals", cli], env: { ...process.env, ELECTRON_RUN_AS_NODE: "1" } };
81
+ }
76
82
  const override = process.env.DSH_ENHANCE_DSH_BIN;
77
83
  if (override) return override;
78
84
  const names = process.platform === "win32" ? ["dsh.cmd", "dsh.exe", "dsh"] : ["dsh"];
@@ -98,14 +104,17 @@ function quoteArg(arg) {
98
104
  * Node's `args + shell:true` deprecation (DEP0190) is not triggered.
99
105
  */
100
106
  function run(bin, args, { capture = false, cwd } = {}) {
107
+ let env = process.env;
108
+ if (typeof bin === "object") { env = bin.env; args = [...bin.prefix, ...args]; bin = bin.executable; }
101
109
  return new Promise((resolve) => {
102
110
  const opts = {
103
111
  stdio: capture ? ["ignore", "pipe", "pipe"] : "inherit",
104
112
  windowsHide: true,
113
+ env,
105
114
  ...(cwd ? { cwd } : {}),
106
115
  };
107
116
  let child;
108
- if (process.platform === "win32") {
117
+ if (process.platform === "win32" && /\.(cmd|bat)$/i.test(bin)) {
109
118
  child = spawn([bin, ...args].map(quoteArg).join(" "), { ...opts, shell: true });
110
119
  } else {
111
120
  child = spawn(bin, args, opts);
@@ -385,9 +394,9 @@ Examples:
385
394
 
386
395
  Notes:
387
396
  - Install prefers the official CLI: dsh plugin --profile <profile> add <package>
388
- - Requires DSH ${DSH_MIN}; rc.6 users must install the pinned legacy releases documented in the README
397
+ - Requires DSH ${DSH_MIN}; use older suite releases for older DSH versions
389
398
  - Requires Node ${NODE_MIN} (dsh-tdai-memory constraint)
390
- - This suite never loads plugins through its own dependency graph`);
399
+ - Plugins are installed directly into the selected profile`);
391
400
  }
392
401
 
393
402
  // ── commands ────────────────────────────────────────────────────────────────
@@ -409,7 +418,7 @@ function cmdList(profile) {
409
418
 
410
419
  async function cmdInstall(profile, only, dryRun) {
411
420
  const plugins = resolveSelection(only);
412
- const dsh = findDsh();
421
+ const dsh = findDsh(profile);
413
422
  if (!dsh) {
414
423
  bad("dsh CLI not found on PATH — install dsh first (https://github.com/deepseek-ai/deepseek-harness)");
415
424
  process.exitCode = 1;
@@ -421,7 +430,7 @@ async function cmdInstall(profile, only, dryRun) {
421
430
  info(`${p.emoji} ${p.name}`);
422
431
  const latest = await latestVersion(p.name);
423
432
  const installed = installedVersion(p.name, profile);
424
- const addArgs = ["plugin", "--profile", profile, "add", p.name];
433
+ const addArgs = ["plugin", "--profile", profile, "add", `${p.name}@latest`];
425
434
  if (dryRun) {
426
435
  ok(`npm latest: ${latest ?? "unknown (network?)"}; installed: ${installed ?? "not installed"}`);
427
436
  if (latest && installed && installed !== latest) {
@@ -480,79 +489,16 @@ async function cmdInstall(profile, only, dryRun) {
480
489
  console.log("Fix the reported plugin(s) and re-run dsh-enhance install. No partial state was hidden.");
481
490
  process.exitCode = 1;
482
491
  } else {
483
- console.log("Restart dsh web for the new plugins to load.");
484
- }
485
- }
486
-
487
- async function cmdUpdate(profile, only, dryRun) {
488
- const plugins = resolveSelection(only);
489
- const dsh = findDsh();
490
- if (!dsh) {
491
- bad("dsh CLI not found on PATH");
492
- process.exitCode = 1;
493
- return;
494
- }
495
- head(`Updating ${plugins.length} plugin(s) in profile "${profile}"`);
496
- const failures = [];
497
- for (const p of plugins) {
498
- if (!installedManifest(p.name, profile)) {
499
- info(`${p.emoji} ${p.name}: not installed — run "dsh-enhance install" first`);
500
- continue;
501
- }
502
- const installed = installedVersion(p.name, profile);
503
- info(`${p.emoji} ${p.name} (installed ${installed})`);
504
- const latest = await latestVersion(p.name);
505
- const args = ["plugin", "--profile", profile, "update", p.name];
506
- if (dryRun) {
507
- ok(`npm latest: ${latest ?? "unknown (network?)"}`);
508
- if (latest && installed && installed !== latest) {
509
- ok(`would bump range to ^${latest} (pnpm keeps stale lockfile versions otherwise)`);
510
- ok(`would ensure minimumReleaseAgeExclude entry for ${p.name}@${latest}`);
511
- }
512
- ok(`would run: dsh ${args.join(" ")}`);
513
- continue;
514
- }
515
- if (latest && installed && installed !== latest) {
516
- if (bumpProfileRange(profile, p.name, latest)) info(`range align: ^${installed} → ^${latest}`);
517
- ensureReleaseAgeExclude(profile, p.name, latest);
518
- }
519
- const result = await run(dsh, args, { capture: true });
520
- if (result.code !== 0) {
521
- bad(`${p.name} update failed (${result.code}): ${failureSummary(result)}`);
522
- failures.push(`${p.name}: dsh plugin update exited ${result.code}`);
523
- continue;
524
- }
525
- let after = installedVersion(p.name, profile);
526
- ok(`updated: ${after ?? "latest"}`);
527
- if (latest && after !== latest) {
528
- const pnpm = findPnpm();
529
- if (!pnpm) {
530
- bad(`${p.name}: still at ${after ?? "?"}, npm latest ${latest} — install pnpm and re-run`);
531
- failures.push(`${p.name}: version mismatch (${after ?? "?"} ≠ ${latest})`);
532
- continue;
533
- }
534
- info(`installed ${after ?? "?"} ≠ latest ${latest} — running pnpm install as fallback`);
535
- const pr = await run(pnpm, ["install"], { capture: true, cwd: profileDir(profile) });
536
- after = installedVersion(p.name, profile);
537
- if (pr.code !== 0 || after !== latest) {
538
- bad(`${p.name}: still at ${after ?? "?"}, npm latest ${latest} (pnpm exit ${pr.code}): ${failureSummary(pr)}`);
539
- failures.push(`${p.name}: version mismatch (${after ?? "?"} ≠ ${latest})`);
540
- continue;
541
- }
542
- ok(`pnpm install fallback: ${after}`);
543
- }
544
- const mount = ensureMounted(p.name, profile);
545
- if (mount.changed) ok(mount.note);
546
- }
547
- head("");
548
- if (failures.length > 0) {
549
- for (const f of failures) console.log(` ✗ ${f}`);
550
- process.exitCode = 1;
551
- } else {
552
- console.log("Update finished. Restart dsh web to load the new versions.");
492
+ console.log("Restart DSH for the new plugins to load.");
553
493
  }
554
494
  }
555
495
 
496
+ async function cmdUpdate(profile, only, dryRun) {
497
+ const plugins = resolveSelection(only).filter(plugin => installedVersion(plugin.name, profile));
498
+ if (!plugins.length) { info("No installed suite plugins to update."); return; }
499
+ return cmdInstall(profile, plugins.map(plugin => plugin.name), dryRun);
500
+ }
501
+
556
502
  function cmdDoctor(profile) {
557
503
  let healthy = true;
558
504
  head("DeepSeek Harness Enhancement Suite — doctor");
@@ -562,9 +508,9 @@ function cmdDoctor(profile) {
562
508
  bad(`Node ${process.versions.node} — this suite requires ${NODE_MIN} (dsh-tdai-memory constraint)`);
563
509
  healthy = false;
564
510
  }
565
- const dsh = findDsh();
511
+ const dsh = findDsh(profile);
566
512
  if (dsh) {
567
- ok(`dsh CLI found: ${dsh}`);
513
+ ok(`dsh CLI found: ${typeof dsh === "object" ? dsh.executable : dsh}`);
568
514
  } else {
569
515
  bad("dsh CLI not found on PATH — install DeepSeek Harness first");
570
516
  healthy = false;
@@ -20,7 +20,7 @@ const fail = (message) => {
20
20
  };
21
21
 
22
22
  const manifest = JSON.parse(readFileSync(join(ROOT, "plugins.json"), "utf8"));
23
- if (manifest.dsh !== ">=0.1.0-rc.7") fail(`expected dsh requirement >=0.1.0-rc.7, got ${manifest.dsh ?? "missing"}`);
23
+ if (manifest.dsh !== ">=0.2.0-rc.2 <0.3.0") fail(`expected dsh requirement >=0.2.0-rc.2 <0.3.0, got ${manifest.dsh ?? "missing"}`);
24
24
  if (!Array.isArray(manifest.plugins)) {
25
25
  fail("plugins.json: missing plugins array");
26
26
  } else {
package/client.js ADDED
@@ -0,0 +1,72 @@
1
+ window.__ModuleLoader__.load({
2
+ id: "dsh-enhancement-suite",
3
+ factory: function (require) {
4
+ var react = require("react"), h = react.createElement;
5
+ var zh = {
6
+ title: "增强套件", intro: "在当前 Profile 安装和更新六个增强插件。完成后请重启 DSH。",
7
+ installAll: "一键安装全部", updateAll: "一键更新已安装插件", refresh: "刷新列表",
8
+ install: "安装", update: "更新", missing: "未安装", busy: "正在处理…", ok: "操作完成,请重启 DSH", error: "操作失败", unavailable: "配置未加载", hostTimeout: "宿主尚未确认请求,请检查插件是否启用。",
9
+ };
10
+ var en = {
11
+ title: "Enhancement Suite", intro: "Install and update six enhancement plugins in the current profile. Restart DSH afterwards.",
12
+ installAll: "Install all", updateAll: "Update installed plugins", refresh: "Refresh list",
13
+ install: "Install", update: "Update", missing: "Not installed", busy: "Working…", ok: "Completed; restart DSH", error: "Operation failed", unavailable: "Configuration is not loaded", hostTimeout: "The host has not acknowledged the request; check that the plugin is enabled.",
14
+ };
15
+ var plugins = [
16
+ ["dsh-tool-vision", "Vision"], ["dsh-soul-md", "Soul / Persona"], ["dsh-tdai-memory", "Memory"],
17
+ ["dsh-plugin-marketplace", "Marketplace"], ["dsh-reasoning-options", "Reasoning"], ["dsh-motion-ui", "Motion UI"],
18
+ ];
19
+ function SuitePage(props) {
20
+ var scope = props.scope, t = props.t;
21
+ var [snapshot, setSnapshot] = react.useState(function () { return scope.getSnapshot(); });
22
+ var [sending, setSending] = react.useState(false);
23
+ var [error, setError] = react.useState("");
24
+ var refreshLocale = react.useState(0)[1];
25
+ react.useEffect(function () { return props.locale.subscribe(function () { refreshLocale(function (v) { return v + 1; }); }); }, [props.locale]);
26
+ react.useEffect(function () { setSnapshot(scope.getSnapshot()); return scope.subscribe(function () { setSnapshot(scope.getSnapshot()); }); }, [scope]);
27
+ var channel = snapshot.status === "ready" ? snapshot.value : {};
28
+ var request = channel.install || {}, state = channel.installState || {};
29
+ react.useEffect(function () {
30
+ if (!request.ts) return;
31
+ var timer = setTimeout(function () { setError("hostTimeout"); }, 15000);
32
+ return function () { clearTimeout(timer); };
33
+ }, [request.ts]);
34
+ if (snapshot.status !== "ready") return h("p", null, t("unavailable"));
35
+ var busy = sending || Boolean(request.ts) || state.status === "running";
36
+ function run(pkg, action) {
37
+ if (busy || !snapshot.writable) return;
38
+ setSending(true); setError("");
39
+ var value = { pkg: pkg, action: action, ts: Date.now() };
40
+ Promise.resolve().then(function () { return scope.mutate([{ op: "set", path: ["install"], value: value }], snapshot.revision); }).then(function (accepted) {
41
+ setSnapshot(scope.getSnapshot());
42
+ if (!accepted) setError("error");
43
+ }).catch(function () { setError("error"); }).finally(function () { setSending(false); });
44
+ }
45
+ var rows = channel.inventory && channel.inventory.packages || [];
46
+ var button = function (label, pkg, action) { return h("button", { type: "button", disabled: busy || !snapshot.writable, onClick: function () { run(pkg, action); }, style: { padding: "8px 12px", borderRadius: 6, cursor: "pointer", font: "inherit" } }, t(label)); };
47
+ return h("section", { style: { maxWidth: 720, display: "flex", flexDirection: "column", gap: 16, fontSize: 13, color: "var(--dsw-alias-label-primary)" } },
48
+ h("h3", { style: { margin: 0 } }, t("title") + " · " + (channel.inventory?.profile || "")),
49
+ h("p", { style: { margin: 0 } }, t("intro")),
50
+ h("div", { style: { display: "flex", gap: 8, flexWrap: "wrap" } }, button("installAll", "~suite", "suite-install"), button("updateAll", "~suite", "suite-update"), button("refresh", "~refresh", "refresh")),
51
+ plugins.map(function (plugin) {
52
+ var installed = rows.find(function (row) { return row.name === plugin[0]; });
53
+ return h("div", { key: plugin[0], style: { display: "flex", gap: 10, alignItems: "center", flexWrap: "wrap", padding: "12px 0", borderBottom: "1px solid var(--dsw-alias-border-l2)" } },
54
+ h("span", { style: { flex: "1 1 250px", overflowWrap: "anywhere" } }, plugin[0] + " · " + (installed?.version || t("missing"))), button(installed ? "update" : "install", plugin[0], installed ? "update" : "install"));
55
+ }),
56
+ error ? h("p", { role: "alert" }, t(error)) : null,
57
+ busy ? h("p", { role: "status" }, t("busy")) : state.status === "error" ? h("p", { role: "alert" }, t("error") + ": " + state.message) : state.status === "ok" ? h("p", { role: "status" }, t("ok")) : null);
58
+ }
59
+ return {
60
+ inject: ["slots", "locale", "configForms"],
61
+ apply: function (ctx) {
62
+ ctx.effect(function () { return ctx.locale.register("enhancementSuite", { zh: zh, en: en }); });
63
+ var scope = ctx.configForms.get("enhancement-suite"), t = ctx.locale.bind("enhancementSuite");
64
+ ctx.slots.inject("plugins.bundle.config", function () {
65
+ return ctx.slots.register({ name: "plugins.bundle.config", key: "dsh-enhancement-suite", locale: "enhancementSuite" }, function (props) {
66
+ return h(SuitePage, Object.assign({}, props, { scope: scope, t: t, locale: ctx.locale }));
67
+ });
68
+ });
69
+ },
70
+ };
71
+ },
72
+ });
@@ -0,0 +1,3 @@
1
+ - insert:
2
+ - id: enhancement-suite
3
+ name: 'dsh-enhancement-suite'
@@ -1,102 +1,11 @@
1
- # Architecture — dsh-enhancement-suite
1
+ # Enhancement suite architecture
2
2
 
3
- ## Positioning
3
+ The suite has two entry points: a DSH bundle with a configuration page, and the standalone dsh-enhance CLI. plugins.json owns the six-plugin registry, including dsh-motion-ui.
4
4
 
5
- `dsh-enhancement-suite` is the **official entry point and installer** for the four
6
- Scorp1o117 DeepSeek Harness plugins. It is deliberately **not** a wrapper that
7
- owns the plugins:
5
+ The Host bundle registers enhancement-suite with the same management schema and request consumer exported by dsh-plugin-marketplace/management. It passes the six package names as the allowed batch selection. The browser uses configForms to submit revision-checked requests. The suite does not mount the marketplace Host itself; installing the marketplace as a profile dependency gives it its own independent bundle entry.
8
6
 
9
- - The four upstream repositories are the single source of truth for each plugin.
10
- - This repository vendors **no plugin source code**.
11
- - The suite's only runtime artifact is a zero-dependency CLI plus a manifest.
7
+ The shared engine discovers the active profile from profileContext and settings.documentPath. Desktop subprocesses use the packaged dsh-desktop-host CLI under Electron Node mode, which carries Desktop profile authorization and bundled pnpm. Web subprocesses use their active dsh CLI. A process-wide profile queue serializes suite and marketplace package operations, including when module copies differ.
12
8
 
13
- ```
14
- ┌─────────────────────────────────────────────────────────────┐
15
- │ dsh-enhancement-suite (this repo) │
16
- │ README / docs / manifest / CLI │
17
- │ └── bin/dsh-enhance.mjs ── spawns ──▶ dsh plugin CLI │
18
- │ │ │
19
- │ plugins.json (registry metadata only) │ installs │
20
- └──────────────────────────────────────────────│──────────────┘
21
- ▼
22
- ┌───────────────┬───────────────┬───────────────┬──────────────────┐
23
- │ dsh-tool-vision│ dsh-soul-md │ dsh-tdai-memory│ dsh-plugin- │
24
- │ (upstream) │ (upstream) │ (upstream) │ marketplace │
25
- └───────────────┴───────────────┴───────────────┴──────────────────┘
26
- ```
9
+ Install and update invoke the official CLI with add package@latest. DSH reconciles bundle registrations. Uninstall invokes remove and structurally removes legacy manual YAML mounts and their configuration patches. Inventory reads direct profile dependencies plus built-in bundle names; built-ins remain managed by DSH. Progress, completion and errors use the plugin settings namespace outside HMR transactions. A failed batch reports partial installed state.
27
10
 
28
- ## Why the official CLI, and why not transitive dependencies
29
-
30
- Installing through `dsh plugin --profile <p> add <pkg>` (which forwards to pnpm
31
- inside the profile and reconciles `dsh.profile.bundles`) keeps the plugins
32
- resolvable from the **profile root**, exactly as if the user installed them by
33
- hand. Loading the plugins as dependencies of this suite package would make them
34
- resolve through the suite's `node_modules` chain, which pnpm may place outside
35
- the profile — plugins then fail to load at boot. Hence:
36
-
37
- - `package.json` has **zero dependencies**.
38
- - The suite never emits its own cordis patch for the four plugins.
39
- - Mounting (when required) is written into the **profile's own**
40
- `cordis.patch.yml`, with the same idempotent logic the marketplace uses.
41
-
42
- ## Plugin manifest (`plugins.json`)
43
-
44
- | Field | Meaning |
45
- |---|---|
46
- | `key` | Short CLI key (`vision`, `soul`, `memory`, `marketplace`) |
47
- | `name` | npm package name (also the `dsh plugin add` argument) |
48
- | `displayName` | Display name |
49
- | `emoji` | Card emoji used by the CLI/README |
50
- | `category` | Suite category |
51
- | `repo` | Upstream GitHub repository (source of truth) |
52
- | `description` / `descriptionEn` | Bilingual one-line descriptions |
53
-
54
- CI validates: exactly four plugins, no duplicate names/keys, all required
55
- fields present, `repo` is an https GitHub URL.
56
-
57
- ## Install flow
58
-
59
- 1. `dsh plugin --profile <profile> add <package>` (official CLI).
60
- 2. If the installed package declares `dsh.bundle.patch` (currently only
61
- `dsh-plugin-marketplace`) → the reconcile step already registered it in
62
- `dsh.profile.bundles`; the bundle layer auto-mounts it. **No patch edit.**
63
- 3. Otherwise (plain dependency) → append a mount row to the profile's
64
- `cordis.patch.yml`:
65
- - idempotent (scans for `name: '<pkg>'`);
66
- - an empty `[]` patch (optionally after comment lines) is **replaced**
67
- with a block-style `- insert:` list — appending after `[]` would create
68
- two top-level YAML documents and crash boot;
69
- - a non-empty flow-style array is **refused** with a manual-mount message;
70
- - a package already in `dsh.profile.bundles` is skipped.
71
- 4. `update` maps to `dsh plugin --profile <profile> update <package>`, then
72
- re-runs the idempotent mount check.
73
-
74
- ## Safety rules
75
-
76
- - **No shell string concatenation.** Every subprocess is spawned with an
77
- argument array; on Windows the `.cmd` shim is executed with Node's
78
- per-argument quoting (`shell: true` + args array, never a joined command
79
- string).
80
- - **No secrets.** The CLI never reads, prints, or forwards API keys; it does
81
- not touch environment secrets or the credentials store.
82
- - **No swallowed failures.** Each plugin's install/update reports its own
83
- `✓`/`✗`; failures are collected, summarized, and reflected in the exit code
84
- (non-zero on any failure). Partial state is never hidden.
85
- - **`--dry-run`** prints the exact commands and patch edits without executing.
86
-
87
- ## Doctor checks
88
-
89
- - Node version ≥ `22.18` (suite-wide requirement inherited from
90
- `dsh-tdai-memory`).
91
- - `dsh` CLI present on `PATH` (override with `DSH_ENHANCE_DSH_BIN`).
92
- - Target profile directory exists.
93
- - Per plugin: installed version, mount state (bundles / patch / own bundle
94
- layer).
95
-
96
- ## Versioning and release
97
-
98
- - Suite version follows semver; the README badges query npm **live** for the
99
- four plugins, so version numbers are never hard-coded.
100
- - npm publishing is intentionally not automated yet; CI only syntax-checks the
101
- CLI, validates the manifest, and optionally cross-checks npm availability
102
- (network failures are informational, `continue-on-error`).
11
+ The CLI retains list/install/update/doctor and --only/--profile/--dry-run. Windows Desktop installations shadowed by a global Web CLI can set DSH_ENHANCE_DESKTOP_EXECUTABLE to select the packaged carrier explicitly. The UI always uses the active Host carrier. Package changes require restarting DSH.
package/index.js ADDED
@@ -0,0 +1,13 @@
1
+ import z from "@deepseek-ai/schemastery";
2
+ import { readFileSync } from "node:fs";
3
+ import { managementFields, installManagement } from "dsh-plugin-marketplace/management";
4
+
5
+ export const name = "enhancement-suite";
6
+ export const inject = ["settings", "profileContext"];
7
+ export const Config = z.object(managementFields).volatile();
8
+ const manifest = JSON.parse(readFileSync(new URL("./plugins.json", import.meta.url), "utf8"));
9
+
10
+ /** Mount the same Desktop-aware operation engine used by the marketplace. */
11
+ export function apply(ctx, config) {
12
+ installManagement(ctx, config, name, { packages: manifest.plugins.map(plugin => plugin.name) });
13
+ }
package/locale/en.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Enhancement Suite",
4
+ "description": "Install and update six enhancement plugins in DSH Desktop and Web."
5
+ }
6
+ }
package/locale/zh.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "增强套件",
4
+ "description": "一键安装和更新六个增强插件,支持 DSH Desktop。"
5
+ }
6
+ }
package/package.json CHANGED
@@ -1,44 +1,80 @@
1
- {
2
- "name": "dsh-enhancement-suite",
3
- "version": "0.2.0",
4
- "description": "Enhancement suite for DeepSeek Harness — the official installer and registry for Scorp1o117's Vision, Soul/Persona, Memory, Marketplace & Reasoning plugins.",
5
- "type": "module",
6
- "license": "MIT",
7
- "engines": {
8
- "node": ">=22.18"
9
- },
10
- "bin": {
11
- "dsh-enhance": "./bin/dsh-enhance.mjs"
12
- },
13
- "files": [
14
- "bin",
15
- "plugins.json",
16
- "README.md",
17
- "README.zh.md",
18
- "LICENSE",
19
- "docs"
20
- ],
21
- "scripts": {
22
- "check": "node --check bin/dsh-enhance.mjs && node bin/validate-manifest.mjs && node bin/dsh-enhance.mjs --help && node bin/dsh-enhance.mjs list",
23
- "prepublishOnly": "npm run check"
24
- },
25
- "keywords": [
26
- "deepseek-harness",
27
- "dsh",
28
- "dsh-plugin",
29
- "ai-agent",
30
- "vision",
31
- "memory",
32
- "persona",
33
- "plugin-marketplace"
34
- ],
35
- "repository": {
36
- "type": "git",
37
- "url": "git+https://github.com/Scorp1o117/dsh-enhancement-suite.git"
38
- },
39
- "bugs": {
40
- "url": "https://github.com/Scorp1o117/dsh-enhancement-suite/issues"
41
- },
42
- "homepage": "https://github.com/Scorp1o117/dsh-enhancement-suite",
43
- "dependencies": {}
44
- }
1
+ {
2
+ "name": "dsh-enhancement-suite",
3
+ "version": "0.3.0",
4
+ "description": "Install and update six DSH enhancement plugins from Desktop/Web configuration or the CLI, including Motion UI.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "engines": {
8
+ "node": ">=22.19"
9
+ },
10
+ "bin": {
11
+ "dsh-enhance": "./bin/dsh-enhance.mjs"
12
+ },
13
+ "files": [
14
+ "bin",
15
+ "plugins.json",
16
+ "README.md",
17
+ "README.zh.md",
18
+ "LICENSE",
19
+ "docs",
20
+ "index.js",
21
+ "client.js",
22
+ "cordis.patch.yml",
23
+ "locale",
24
+ "VERIFICATION.md"
25
+ ],
26
+ "scripts": {
27
+ "check": "node --check index.js && node --check client.js && node --check bin/dsh-enhance.mjs && node bin/validate-manifest.mjs && node bin/dsh-enhance.mjs --help && node bin/dsh-enhance.mjs list",
28
+ "prepublishOnly": "npm run check",
29
+ "test": "node --test tests/*.test.mjs"
30
+ },
31
+ "keywords": [
32
+ "deepseek-harness",
33
+ "dsh",
34
+ "dsh-plugin",
35
+ "ai-agent",
36
+ "vision",
37
+ "memory",
38
+ "persona",
39
+ "plugin-marketplace"
40
+ ],
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/Scorp1o117/dsh-enhancement-suite.git"
44
+ },
45
+ "bugs": {
46
+ "url": "https://github.com/Scorp1o117/dsh-enhancement-suite/issues"
47
+ },
48
+ "homepage": "https://github.com/Scorp1o117/dsh-enhancement-suite",
49
+ "dependencies": {
50
+ "dsh-plugin-marketplace": "^0.5.0",
51
+ "@deepseek-ai/schemastery": "^3.18.4"
52
+ },
53
+ "main": "index.js",
54
+ "exports": {
55
+ ".": "./index.js",
56
+ "./client": "./client.js",
57
+ "./package.json": "./package.json",
58
+ "./locale/*.json": "./locale/*.json"
59
+ },
60
+ "peerDependencies": {
61
+ "@deepseek-ai/dsh-settings": ">=0.2.0-rc.2 <0.3.0",
62
+ "react": "^18.2.0"
63
+ },
64
+ "dsh": {
65
+ "bundle": {
66
+ "patch": "./cordis.patch.yml"
67
+ },
68
+ "client": {
69
+ "platform": "web"
70
+ },
71
+ "compatibility": {
72
+ "dsh": ">=0.2.0-rc.2 <0.3.0",
73
+ "node": ">=22.19",
74
+ "profiles": [
75
+ "web",
76
+ "desktop"
77
+ ]
78
+ }
79
+ }
80
+ }
package/plugins.json CHANGED
@@ -1,65 +1,76 @@
1
- {
2
- "suite": "dsh-enhancement-suite",
3
- "node": ">=22.18",
4
- "dsh": ">=0.1.0-rc.7",
5
- "defaultProfile": "web",
6
- "rc6Pins": {
7
- "dsh-tool-vision": "0.6.1",
8
- "dsh-soul-md": "0.5.6",
9
- "dsh-tdai-memory": "0.2.11",
10
- "dsh-plugin-marketplace": "0.2.6",
11
- "dsh-reasoning-options": "none"
12
- },
13
- "plugins": [
14
- {
15
- "key": "vision",
16
- "name": "dsh-tool-vision",
17
- "displayName": "dsh-tool-vision",
18
- "emoji": "👁️",
19
- "category": "Vision",
20
- "repo": "https://github.com/Scorp1o117/dsh-tool-vision",
21
- "description": "给文本模型增加视觉能力和图片桥接。",
22
- "descriptionEn": "Adds vision capability and image bridging to text-only models."
23
- },
24
- {
25
- "key": "soul",
26
- "name": "dsh-soul-md",
27
- "displayName": "dsh-soul-md",
28
- "emoji": "🎭",
29
- "category": "Persona",
30
- "repo": "https://github.com/Scorp1o117/dsh-soul-md",
31
- "description": "为 Agent 增加 soul.md 人设、会话/工作区 Persona 和可演化人格。",
32
- "descriptionEn": "soul.md personas, session/workspace persona switching, and an evolving personality with long-term memory."
33
- },
34
- {
35
- "key": "memory",
36
- "name": "dsh-tdai-memory",
37
- "displayName": "dsh-tdai-memory",
38
- "emoji": "🧠",
39
- "category": "Memory",
40
- "repo": "https://github.com/Scorp1o117/dsh-tdai-memory",
41
- "description": "完整的长期分层记忆、召回与搜索。",
42
- "descriptionEn": "Full long-term layered memory (L0-L3), recall and search."
43
- },
44
- {
45
- "key": "marketplace",
46
- "name": "dsh-plugin-marketplace",
47
- "displayName": "dsh-plugin-marketplace",
48
- "emoji": "🛒",
49
- "category": "Marketplace",
50
- "repo": "https://github.com/Scorp1o117/dsh-plugin-marketplace",
51
- "description": "直接在 DSH Web UI 中发现和浏览插件。",
52
- "descriptionEn": "Discover and browse plugins directly inside the DSH Web UI."
53
- },
54
- {
55
- "key": "reasoning",
56
- "name": "dsh-reasoning-options",
57
- "displayName": "dsh-reasoning-options",
58
- "emoji": "🎚️",
59
- "category": "Model",
60
- "repo": "https://github.com/Scorp1o117/dsh-reasoning-options",
61
- "description": "为所有第三方(pi-ai)模型自动添加推理强度选项(off→max 七档,默认 high)。",
62
- "descriptionEn": "Auto-adds reasoning-effort levels (off→max, default high) to every pi-ai third-party model."
63
- }
64
- ]
65
- }
1
+ {
2
+ "suite": "dsh-enhancement-suite",
3
+ "node": ">=22.19",
4
+ "dsh": ">=0.2.0-rc.2 <0.3.0",
5
+ "defaultProfile": "web",
6
+ "rc6Pins": {
7
+ "dsh-tool-vision": "0.6.1",
8
+ "dsh-soul-md": "0.5.6",
9
+ "dsh-tdai-memory": "0.2.11",
10
+ "dsh-plugin-marketplace": "0.2.6",
11
+ "dsh-reasoning-options": "none",
12
+ "dsh-motion-ui": "none"
13
+ },
14
+ "plugins": [
15
+ {
16
+ "key": "vision",
17
+ "name": "dsh-tool-vision",
18
+ "displayName": "dsh-tool-vision",
19
+ "emoji": "👁️",
20
+ "category": "Vision",
21
+ "repo": "https://github.com/Scorp1o117/dsh-tool-vision",
22
+ "description": "给文本模型增加视觉能力和图片桥接。",
23
+ "descriptionEn": "Adds vision capability and image bridging to text-only models."
24
+ },
25
+ {
26
+ "key": "soul",
27
+ "name": "dsh-soul-md",
28
+ "displayName": "dsh-soul-md",
29
+ "emoji": "🎭",
30
+ "category": "Persona",
31
+ "repo": "https://github.com/Scorp1o117/dsh-soul-md",
32
+ "description": "为 Agent 增加 soul.md 人设、会话/工作区 Persona 和可演化人格。",
33
+ "descriptionEn": "soul.md personas, session/workspace persona switching, and an evolving personality with long-term memory."
34
+ },
35
+ {
36
+ "key": "memory",
37
+ "name": "dsh-tdai-memory",
38
+ "displayName": "dsh-tdai-memory",
39
+ "emoji": "🧠",
40
+ "category": "Memory",
41
+ "repo": "https://github.com/Scorp1o117/dsh-tdai-memory",
42
+ "description": "完整的长期分层记忆、召回与搜索。",
43
+ "descriptionEn": "Full long-term layered memory (L0-L3), recall and search."
44
+ },
45
+ {
46
+ "key": "marketplace",
47
+ "name": "dsh-plugin-marketplace",
48
+ "displayName": "dsh-plugin-marketplace",
49
+ "emoji": "🛒",
50
+ "category": "Marketplace",
51
+ "repo": "https://github.com/Scorp1o117/dsh-plugin-marketplace",
52
+ "description": "直接在 DSH Web UI 中发现和浏览插件。",
53
+ "descriptionEn": "Discover and browse plugins directly inside the DSH Web UI."
54
+ },
55
+ {
56
+ "key": "reasoning",
57
+ "name": "dsh-reasoning-options",
58
+ "displayName": "dsh-reasoning-options",
59
+ "emoji": "🎚️",
60
+ "category": "Model",
61
+ "repo": "https://github.com/Scorp1o117/dsh-reasoning-options",
62
+ "description": "为第三方模型添加推理档位,支持 Default 不注入推理强度。",
63
+ "descriptionEn": "Reasoning levels with native Default (no injected effort)."
64
+ },
65
+ {
66
+ "key": "motion",
67
+ "name": "dsh-motion-ui",
68
+ "displayName": "dsh-motion-ui",
69
+ "emoji": "✨",
70
+ "category": "UI",
71
+ "repo": "https://github.com/Scorp1o117/dsh-motion-ui",
72
+ "description": "交互界面、HTML/SVG 动画与本地计算。",
73
+ "descriptionEn": "Interactive UI, HTML/SVG animation and local calculations."
74
+ }
75
+ ]
76
+ }