dsh-enhancement-suite 0.1.3 → 0.2.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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Scorp1o117
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Scorp1o117
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -2,11 +2,20 @@
2
2
 
3
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
4
 
5
- **Vision · Soul / Persona · Long-term Memory · Plugin Marketplace**
5
+ **Vision · Soul / Persona · Long-term Memory · Plugin Marketplace · Reasoning Options**
6
6
 
7
- The official entry point and one-command installer for the four 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.
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
8
 
9
- Version 0.1.3 is validated with DSH `0.1.1-rc.1` and reports pnpm native-build policy failures explicitly.
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).
10
19
 
11
20
  > **This repository does not vendor or replace the individual plugins.**
12
21
  > **Each plugin remains independently maintained in its own upstream repository.**
@@ -45,6 +54,14 @@ Version 0.1.3 is validated with DSH `0.1.1-rc.1` and reports pnpm native-build p
45
54
 
46
55
  [→ upstream repository](https://github.com/Scorp1o117/dsh-plugin-marketplace)
47
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
+
48
65
  ---
49
66
 
50
67
  ## Requirements
@@ -76,12 +93,12 @@ dsh-enhance install
76
93
 
77
94
  ```
78
95
  dsh-enhance list Show the plugin registry (installed state per profile)
79
- dsh-enhance install Install all four plugins into a profile
96
+ dsh-enhance install Install all plugins into a profile
80
97
  dsh-enhance update Update installed plugins to the latest versions
81
98
  dsh-enhance doctor Check Node, dsh CLI, profile and per-plugin state
82
99
 
83
100
  --profile <name> target profile (default: web)
84
- --only <keys> comma-separated selection: vision,soul,memory,marketplace (or package names)
101
+ --only <keys> comma-separated selection: vision,soul,memory,marketplace,reasoning (or package names)
85
102
  --dry-run print what would run without executing anything
86
103
  ```
87
104
 
@@ -95,8 +112,8 @@ dsh-enhance update --profile headless
95
112
 
96
113
  ## How it installs
97
114
 
98
- 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 four upstream packages stay independent in the profile.
99
- 2. All four plugins now declare `dsh.bundle.patch` (as of vision 0.3.9 / soul-md 0.5.4 / tdai-memory 0.2.9 / marketplace 0.2.4), so `dsh plugin add` reconciles each into `dsh.profile.bundles` and its own bundle layer auto-mounts it.
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.
100
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.)
101
118
  4. Restart `dsh web` and the plugins load.
102
119
 
package/README.zh.md CHANGED
@@ -2,11 +2,18 @@
2
2
 
3
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
4
 
5
- **Vision · Soul / Persona · Long-term Memory · Plugin Marketplace**
5
+ **Vision · Soul / Persona · Long-term Memory · Plugin Marketplace · Reasoning Options**
6
6
 
7
- 四个 Scorp1o117 插件的官方总入口和一键安装套件,为 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)增强能力。这是一个真正可用的一键安装器,而不是链接合集:它驱动官方 `dsh plugin` CLI、自动处理挂载、并检查结果。
7
+ Scorp1o117 DSH 插件(增强 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness))的官方总入口和一键安装套件。这是一个真正可用的一键安装器,而不是链接合集:它驱动官方 `dsh plugin` CLI、自动处理挂载、并检查结果。
8
8
 
9
- 0.1.3 已针对 DSH `0.1.1-rc.1` 验证,并会明确识别 pnpm 原生依赖构建策略导致的安装失败。
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 兼容版本)。
10
17
 
11
18
  > **本仓库不复制、不替代任何独立插件。**
12
19
  > **每个插件都在各自的 upstream 仓库独立维护。**
@@ -45,6 +52,14 @@
45
52
 
46
53
  [→ upstream 仓库](https://github.com/Scorp1o117/dsh-plugin-marketplace)
47
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
+
48
63
  ---
49
64
 
50
65
  ## 环境要求
@@ -76,12 +91,12 @@ dsh-enhance install
76
91
 
77
92
  ```
78
93
  dsh-enhance list 查看插件清单(含 profile 内的安装状态)
79
- dsh-enhance install 把四个插件安装进 profile
94
+ dsh-enhance install 把全部插件安装进 profile
80
95
  dsh-enhance update 更新已安装插件到最新版本
81
96
  dsh-enhance doctor 检查 Node、dsh CLI、profile 与各插件状态
82
97
 
83
98
  --profile <name> 目标 profile(默认:web)
84
- --only <keys> 逗号分隔的选择:vision,soul,memory,marketplace(或包名)
99
+ --only <keys> 逗号分隔的选择:vision,soul,memory,marketplace,reasoning(或包名)
85
100
  --dry-run 只打印将要执行的操作,不实际执行
86
101
  ```
87
102
 
@@ -95,9 +110,9 @@ dsh-enhance update --profile headless
95
110
 
96
111
  ## 安装方式
97
112
 
98
- 1. 每个插件都通过**官方 CLI** 安装:`dsh plugin --profile <profile> add <package>`。本套件绝不通过自身的依赖图或自己的 cordis patch 间接加载插件——四个 upstream 包在 profile 中保持独立。
99
- 2. `dsh-plugin-marketplace` 声明了 `dsh.bundle.patch`,`dsh plugin add` 会把它对账进 `dsh.profile.bundles`,由 bundle 层自动挂载。
100
- 3. 其余三个是普通依赖;套件用与 marketplace 一键安装相同的安全、幂等逻辑,把挂载行追加到 profile 的 `cordis.patch.yml`(空 `[]` 补丁会被正确替换、重复挂载会被跳过、流式数组会被拒绝而不是损坏)。
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 第三方插件仍会用安全、幂等的挂载逻辑处理:空 `[]` 补丁会被正确替换、重复挂载会被跳过、流式数组会被拒绝而不是损坏。)
101
116
  4. 重启 `dsh web` 即可加载。
102
117
 
103
118
  每一步都有清晰的 `✓` / `✗` 反馈,失败绝不吞掉,且不读取、不打印任何 API Key。
@@ -3,12 +3,13 @@
3
3
  * dsh-enhance — DeepSeek Harness Enhancement Suite CLI.
4
4
  *
5
5
  * Zero-dependency, cross-platform (Windows / Linux / macOS) installer and
6
- * registry for the four Scorp1o117 DSH plugins:
6
+ * registry for the Scorp1o117 DSH plugins (see plugins.json):
7
7
  *
8
8
  * vision dsh-tool-vision Vision
9
9
  * soul dsh-soul-md Persona
10
10
  * memory dsh-tdai-memory Memory
11
11
  * marketplace dsh-plugin-marketplace Marketplace
12
+ * reasoning dsh-reasoning-options Model
12
13
  *
13
14
  * Install always prefers the official DeepSeek Harness plugin CLI
14
15
  * (`dsh plugin --profile <profile> add <package>`); this suite never loads
@@ -35,6 +36,7 @@ const DEFAULT_PROFILE = MANIFEST.defaultProfile ?? "web";
35
36
  /** Short keys and full package names are both accepted for --only. */
36
37
  const KEY_ALIASES = new Map(PLUGINS.map((p) => [p.key, p.name]));
37
38
  const NODE_MIN = MANIFEST.node ?? ">=22.18";
39
+ const DSH_MIN = MANIFEST.dsh ?? ">=0.1.0-rc.7";
38
40
 
39
41
  const ok = (msg) => console.log(` ✓ ${msg}`);
40
42
  const bad = (msg) => console.log(` ✗ ${msg}`);
@@ -364,7 +366,7 @@ Usage:
364
366
 
365
367
  Commands:
366
368
  list Show the plugin registry (installed state per profile)
367
- install Install all four plugins into a profile
369
+ install Install all ${PLUGINS.length} plugins into a profile
368
370
  update Update installed plugins to the latest versions
369
371
  doctor Check Node, dsh CLI, profile and per-plugin state
370
372
 
@@ -383,6 +385,7 @@ Examples:
383
385
 
384
386
  Notes:
385
387
  - 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
386
389
  - Requires Node ${NODE_MIN} (dsh-tdai-memory constraint)
387
390
  - This suite never loads plugins through its own dependency graph`);
388
391
  }
@@ -401,6 +404,7 @@ function cmdList(profile) {
401
404
  }
402
405
  head("");
403
406
  console.log(`Node requirement: ${NODE_MIN} (running ${process.version})`);
407
+ console.log(`DSH requirement: ${DSH_MIN}`);
404
408
  }
405
409
 
406
410
  async function cmdInstall(profile, only, dryRun) {
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * validate-manifest — validates plugins.json for the suite.
4
4
  *
5
- * Checks: exactly four plugins, no duplicate names/keys, all required
5
+ * Checks: at least one plugin, no duplicate names/keys, all required
6
6
  * fields present, repo URLs are https github.com links. Exits non-zero on
7
7
  * any violation. Used by CI and `npm run check`.
8
8
  */
@@ -20,19 +20,23 @@ 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
24
  if (!Array.isArray(manifest.plugins)) {
24
25
  fail("plugins.json: missing plugins array");
25
26
  } else {
26
- if (manifest.plugins.length !== 4) fail(`expected exactly 4 plugins, got ${manifest.plugins.length}`);
27
+ if (manifest.plugins.length < 1) fail("plugins.json: plugins array is empty");
27
28
  const names = manifest.plugins.map((p) => p.name);
28
29
  const keys = manifest.plugins.map((p) => p.key);
29
30
  if (new Set(names).size !== names.length) fail("duplicate plugin names");
30
31
  if (new Set(keys).size !== keys.length) fail("duplicate plugin keys");
32
+ const rc6Pins = manifest.rc6Pins ?? {};
31
33
  for (const p of manifest.plugins) {
32
34
  for (const field of REQUIRED) {
33
35
  if (typeof p[field] !== "string" || p[field].length === 0) fail(`${p.name ?? "?"}: missing required field ${field}`);
34
36
  }
35
37
  if (!/^https:\/\/github\.com\//.test(p.repo ?? "")) fail(`${p.name ?? "?"}: repo must be an https github.com URL`);
38
+ const pin = rc6Pins[p.name];
39
+ if (pin !== "none" && !/^\d+\.\d+\.\d+$/.test(pin ?? "")) fail(`${p.name ?? "?"}: missing rc6 compatibility pin (semver, or "none" when the plugin requires DSH rc.7+)`);
36
40
  }
37
41
  }
38
42
 
@@ -1,102 +1,102 @@
1
- # Architecture — dsh-enhancement-suite
2
-
3
- ## Positioning
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:
8
-
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.
12
-
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
- ```
27
-
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`).
1
+ # Architecture — dsh-enhancement-suite
2
+
3
+ ## Positioning
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:
8
+
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.
12
+
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
+ ```
27
+
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`).
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-enhancement-suite",
3
- "version": "0.1.3",
4
- "description": "Enhancement suite for DeepSeek Harness — the official installer and registry for Scorp1o117's Vision, Soul/Persona, Memory & Marketplace plugins.",
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
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "engines": {
package/plugins.json CHANGED
@@ -1,7 +1,15 @@
1
1
  {
2
2
  "suite": "dsh-enhancement-suite",
3
3
  "node": ">=22.18",
4
+ "dsh": ">=0.1.0-rc.7",
4
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
+ },
5
13
  "plugins": [
6
14
  {
7
15
  "key": "vision",
@@ -42,6 +50,16 @@
42
50
  "repo": "https://github.com/Scorp1o117/dsh-plugin-marketplace",
43
51
  "description": "直接在 DSH Web UI 中发现和浏览插件。",
44
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."
45
63
  }
46
64
  ]
47
65
  }