@noob-stupid/dsh-plugin-console 0.3.46 → 0.3.47
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 +314 -319
- package/README.zh.md +281 -286
- package/lib/client.js +4 -4
- package/lib/index.js +22 -4
- package/package.json +44 -44
package/README.md
CHANGED
|
@@ -1,319 +1,314 @@
|
|
|
1
|
-
> **English**: [README.md](README.md) | **中文**: [README.zh.md](README.zh.md)
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
[ — usage questions, bug reports, plugin recommendations, and framework-upgrade war stories are all welcome.
|
|
317
|
-
|
|
318
|
-
> Field reports about the framework upgrade / rollback module (version spans, whether a rollback was clean, config-migration issues) are especially welcome — in the group or in [Discussions](https://github.com/Noob-stupid/dsh-plugin-hub/discussions). Every incident becomes a regression test.
|
|
319
|
-
|
|
1
|
+
> **English**: [README.md](README.md) | **中文**: [README.zh.md](README.zh.md)
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<img width="1170" height="609" alt="image" src="https://github.com/user-attachments/assets/b802d606-14ba-4151-9956-ff642ed12b0a" />
|
|
6
|
+
|
|
7
|
+
# DSH Plugin Hub (dsh-plugin-hub)
|
|
8
|
+
|
|
9
|
+
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
10
|
+
[](https://awesome-dsh-plugin.com)
|
|
11
|
+
[](https://github.com/Noob-stupid/dsh-plugin-hub/stargazers)
|
|
12
|
+
[](LICENSE)
|
|
13
|
+
[](https://github.com/Noob-stupid/dsh-plugin-hub/commits/main)
|
|
14
|
+
[](https://github.com/Noob-stupid/dsh-plugin-hub/actions/workflows/registry.yml)
|
|
15
|
+
[](https://github.com/topics/dsh-plugin)
|
|
16
|
+
[](https://www.npmjs.com/package/@noob-stupid/dsh-plugin-console)
|
|
17
|
+
[](https://www.npmjs.com/package/@noob-stupid/dsh-plugin-console)
|
|
18
|
+
[](https://github.com/Noob-stupid/dsh-plugin-hub/releases)[](https://www.dsh.so/artifact/dsh-plugin-hub)
|
|
19
|
+
[](https://www.dsh.so/artifact/dsh-plugin-hub)
|
|
20
|
+
|
|
21
|
+
> Manage all your DeepSeek Harness plugins in one panel: one-click enable/disable,
|
|
22
|
+
> a 500+ plugin & skill marketplace with one-click install, and one-click framework
|
|
23
|
+
> upgrade with auto-rollback.
|
|
24
|
+
|
|
25
|
+
## Why DSH Plugin Hub
|
|
26
|
+
|
|
27
|
+
- 🧩 **Plugin & skill hub** — auto-collected index of `dsh-plugin` repos (500+ by
|
|
28
|
+
stars) plus a Skills tab; browse, search, one-click install, **zero GitHub API
|
|
29
|
+
calls** (served via CDN).
|
|
30
|
+
- 🚀 **One-click framework upgrade** — backup → online install (service stays up) →
|
|
31
|
+
verify → **auto-rollback on failure**. Tested end-to-end.
|
|
32
|
+
- 🤖 **AI Empower** — give the console a package name or GitHub repo, the local AI
|
|
33
|
+
reads its docs and drafts a safe, confirmable deployment plan (install / config /
|
|
34
|
+
start / health-check); server components get an automatic control card.
|
|
35
|
+
→ [details](docs/ai-empower.md)
|
|
36
|
+
|
|
37
|
+
## Install
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
# npm release (recommended: prebuilt, no git / build authorization needed)
|
|
41
|
+
dsh plugin --profile web add @noob-stupid/dsh-plugin-console
|
|
42
|
+
|
|
43
|
+
# or install from GitHub source (needs git; allowBuilds authorization on first add)
|
|
44
|
+
dsh plugin --profile web add github:Noob-stupid/dsh-plugin-hub
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Then restart the dsh service → refresh the page → **Settings → Plugins → Plugin Console**.
|
|
48
|
+
|
|
49
|
+
<details><summary><b>More install options</b> (deploy script / hand it to an AI)</summary>
|
|
50
|
+
|
|
51
|
+
### Option 2: deploy script (fallback when network is restricted)
|
|
52
|
+
|
|
53
|
+
Windows (PowerShell):
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
git clone https://github.com/Noob-stupid/dsh-plugin-hub "$env:TEMP\dsh-plugin-console" 2>$null; & "$env:TEMP\dsh-plugin-console\deploy.ps1"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Linux / macOS:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
git clone https://github.com/Noob-stupid/dsh-plugin-hub /tmp/dsh-plugin-console 2>/dev/null; bash /tmp/dsh-plugin-console/deploy.sh
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The script copies the plugin into `$DSH_HOME/profiles/<profile>/node_modules/` and
|
|
66
|
+
idempotently appends an enable entry to `cordis.patch.yml`. Afterwards:
|
|
67
|
+
|
|
68
|
+
1. Restart the dsh service (host code changes need a process restart; CLI restarts the
|
|
69
|
+
process, the desktop client exits and reopens);
|
|
70
|
+
2. Refresh the page → Settings → Plugins → **Plugin Console**.
|
|
71
|
+
|
|
72
|
+
### Option 3: hand it to an AI in one sentence
|
|
73
|
+
|
|
74
|
+
> Install the DSH plugin hub (dsh-plugin-hub): run `dsh plugin --profile web add @noob-stupid/dsh-plugin-console` (npm release); if there is no dsh CLI, clone https://github.com/Noob-stupid/dsh-plugin-hub to `~/.dsh/profiles/web/node_modules/` and register it in `cordis.patch.yml` (id: plugin-console, name: @noob-stupid/dsh-plugin-console). Restart dsh web afterwards.
|
|
75
|
+
|
|
76
|
+
Requires: DSH ≥ 0.1.0-rc.6 (web profile, with `dsh-client-modules` / `dsh-host-plugin-inventory`).
|
|
77
|
+
|
|
78
|
+
</details>
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Highlights
|
|
83
|
+
|
|
84
|
+
| | Benefit | Detail |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| 🤖 | **AI Empower ** | Give the console a package name or GitHub repo — the local AI reads docs, drafts a **deployment plan** (install / write config / start service / health check) and executes it safely after your confirmation; server-type components get an automatic control card |
|
|
87
|
+
| 🛡️ | **Framework upgrade safety & adapt gate ** | Force-disables plugins incompatible with the new framework (enable locked; 「Check update → Update & adapt」auto-verifies and unlocks); full-tree checkpoint before upgrade, automatic rollback on relaunch failure, one-click rollback to the previous version |
|
|
88
|
+
| 🏠 | **Family-bundle cards & safety ** | Same-root subpath exports group into one family card (collapse/expand, batch check-update, one-click unlock-adapted, known-check preview); never-crash safety (pre-enable import probe + patch auto-heal + exports fallback); adapt-gate source-scan hard criterion & migrate detection; deleting a bundle sub-row disables only that row |
|
|
89
|
+
| 🚀 | **Server component cards** | Left-side floating card auto-aligned to the main panel: start / stop / status / **open Web UI** buttons, multi-server dropdown, collapsible |
|
|
90
|
+
| 🧩 | **Plugin & skill hub** | Auto-collected index of `dsh-plugin` topic repos (**500+** by stars) plus a **Skills tab** (`agent-skills` ∪ `claude-skills` ∪ `dsh-skill`, up to 300) — browse, search, one-click install, no GitHub API calls |
|
|
91
|
+
| 🤖 | **Auto-collection CI** | GitHub Actions reruns `build-index` every 6 hours (manual trigger available); authors just add the `dsh-plugin` / `agent-skills` / `claude-skills` / `dsh-skill` topic — no application needed |
|
|
92
|
+
| ⚡ | **Instant, rate-limit-free** | The index is served as a static `marketplace/index.json` via jsDelivr CDN (10-min host cache); terminal users make **zero GitHub API calls** |
|
|
93
|
+
| 🔄 | **Version detection & one-click update** | Semver-based; installed entries match npm `dist-tags.latest` / `beta`; subpackage mismatch warnings prevent mixed-version breakage |
|
|
94
|
+
| 🔀 | **Multi-source** | GitHub / Gitee (direct-repo mode) / custom search sources (URL template + header auth + private http); `⊞` merges GitHub + all custom sources in parallel |
|
|
95
|
+
| 🔒 | **Safe by default** | Loopback-only routes; AI fallback behind an explicit cost-consent modal; infrastructure rows are toggle-protected |
|
|
96
|
+
|
|
97
|
+
<details>
|
|
98
|
+
<summary><b>📑 目录 / Table of Contents</b></summary>
|
|
99
|
+
|
|
100
|
+
- [Highlights](#highlights)
|
|
101
|
+
- [AI 赋能与服务器组件控制](#ai-赋能与服务器组件控制)
|
|
102
|
+
- [One-click install](#one-click-install)
|
|
103
|
+
- [Usage](#usage)
|
|
104
|
+
- [Features](#features)
|
|
105
|
+
- [How it works](#how-it-works)
|
|
106
|
+
- [Compatibility](#compatibility)
|
|
107
|
+
- [Project layout](#project-layout)
|
|
108
|
+
- [HTTP endpoints](#http-endpoints)
|
|
109
|
+
- [Security](#security)
|
|
110
|
+
- [Known limitations](#known-limitations)
|
|
111
|
+
- [Help & Ecosystem](#help--ecosystem)
|
|
112
|
+
- [Contributing](#contributing)
|
|
113
|
+
- [Changelog](#changelog)
|
|
114
|
+
- [License](#license)
|
|
115
|
+
</details>
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Usage
|
|
120
|
+
|
|
121
|
+
1. Restart DSH → open the Web GUI → **Settings → Plugins → Plugin Console**.
|
|
122
|
+
2. **Installed list**: toggle plugins on/off (HMR applies within ~1s), search by name/id,
|
|
123
|
+
expand details (version, repository, README summary).
|
|
124
|
+
3. **Marketplace**: empty query on the GitHub source opens the static index (instant);
|
|
125
|
+
type a query to search live. Switch sources via the login pill (GitHub / Gitee / custom);
|
|
126
|
+
`⊞` merges all sources; `★` filters to `dsh plugin add`-installable packages.
|
|
127
|
+
4. **Skills tab**: switch 插件/技能 next to the search box to browse and install skills
|
|
128
|
+
(cloned into `~/.dsh/skills/<name>/`).
|
|
129
|
+
5. **Install**: click 添加到本地 → the chain runs in the background (safe to leave the page);
|
|
130
|
+
「检测更新」/「更新 → vX」 appear automatically for installed entries.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Features
|
|
135
|
+
|
|
136
|
+
### Installed plugins (one-click toggle + details)
|
|
137
|
+
|
|
138
|
+
- **Shows only third-party plugins by default** (extra/non-bundled), tagged
|
|
139
|
+
"Third-party" with a delete entry; click "All" to see the full list (1.5s flash feedback);
|
|
140
|
+
- Lists every plugin entry (name, load state, enabled state); search by name/id;
|
|
141
|
+
- Disable = append `- id: X` + `disabled: true` to the user patch layer, effective via HMR;
|
|
142
|
+
- Enable = remove that entry; bundle-layer rows disabled by default are overridden with
|
|
143
|
+
`disabled: false`;
|
|
144
|
+
- Tags "Patch-disabled / Patch-forced" distinguish user patch state;
|
|
145
|
+
- **Infrastructure protection**: host transport/hmr/storage/settings chain plugins
|
|
146
|
+
(70+ rows) are marked "Protected" and cannot be toggled — disabling them would break HMR;
|
|
147
|
+
- **Details panel**: version, repository/homepage links and a README summary for each plugin;
|
|
148
|
+
- **Version check**: 检测更新 reads npm `dist-tags.latest` (curl channel, works even when
|
|
149
|
+
node networking is blocked) and warns about subpackages that need syncing (depsOutdated).
|
|
150
|
+
|
|
151
|
+
### Framework one-click upgrade (deepseek-harness card)
|
|
152
|
+
|
|
153
|
+
- The **deepseek-harness** card shows **「框架升级 → vX」** when a newer framework version is
|
|
154
|
+
available (stable `latest` preferred; `next` channel when `latest` equals the installed
|
|
155
|
+
version); clicking runs the full flow: backup config + framework snapshot (rollback point)
|
|
156
|
+
→ **online install** (service stays up, page never disconnects) → version verification →
|
|
157
|
+
**auto-restart to apply**;
|
|
158
|
+
- **Real-time progress**: a `DSH-Upgrade` console window pops up showing live pnpm download
|
|
159
|
+
progress; the in-panel progress card shows the waiting time;
|
|
160
|
+
- **Upgrade protection**: failed installs **auto-rollback** (robocopy, backup verified before
|
|
161
|
+
upgrade), version check catches fake success, 15-min hard timeout, stall detection
|
|
162
|
+
(no debug-log updates → auto switch registry), global trap fallback, and 15-min stale-state
|
|
163
|
+
cleanup — the framework is never left broken;
|
|
164
|
+
- **pnpm channel**: npm-cli.js freezes at startup in the schtasks task environment (0-byte
|
|
165
|
+
debug log, no network requests ever sent); upgrades use `corepack pnpm` (starts in ~0.4s,
|
|
166
|
+
installed rc.8 in 11.5s) against the **npmmirror (China) registry**, with
|
|
167
|
+
`dangerouslyAllowAllBuilds` so native modules (node-pty/koffi) compile;
|
|
168
|
+
- **Runtime bin resolution**: under the pnpm layout `@deepseek-ai/dsh` is a Junction — the
|
|
169
|
+
relaunch step resolves `bin.js` at runtime (follows the Junction to the current version)
|
|
170
|
+
instead of using a path baked in at script-generation time;
|
|
171
|
+
- **Card dismiss semantics**: terminal states (done/failed) are permanently dismissed on ✕
|
|
172
|
+
(persisted); in-progress dismissal is session-only and the card returns after a refresh.
|
|
173
|
+
|
|
174
|
+
### Marketplace (multi-source)
|
|
175
|
+
|
|
176
|
+
- **Source switcher**: click the login pill to switch between **GitHub / Gitee / custom
|
|
177
|
+
sources** (persisted); title, loading text, placeholder and note all follow the source;
|
|
178
|
+
- **GitHub**: default query `dsh-plugin`, browser-direct with server fallback;
|
|
179
|
+
- **Gitee**: official search API is retired, so it uses **direct-repo mode** — enter
|
|
180
|
+
`owner/repo` (Chinese paths and full URLs supported) to find and install a repository;
|
|
181
|
+
- **Custom sources**: add in Source Manager (URL template with `{q}`/`{page}` placeholders),
|
|
182
|
+
optional **header auth** (e.g. `Authorization: Bearer ...`), and **local/private http URLs**;
|
|
183
|
+
- **Multi-source summary**: the `⊞` toggle searches GitHub + all custom sources in parallel,
|
|
184
|
+
merging results with source labels;
|
|
185
|
+
- **★ official filter**: shows only packages installable via `dsh plugin add` — root packages
|
|
186
|
+
with a `dsh.bundle` manifest (official) or aggregate repos whose **subpackage carries
|
|
187
|
+
`dsh.bundle`** (subpackage-installable); markers are enriched by the server (curl dual-channel)
|
|
188
|
+
with a client-side fallback;
|
|
189
|
+
- **Type badges**: 官方 / 聚合 / 技能 (repo contains SKILL.md) recognized automatically.
|
|
190
|
+
|
|
191
|
+
### Static index market (plugin & skill tabs)
|
|
192
|
+
|
|
193
|
+
> **Hybrid architecture**: browsing uses the static index (instant, zero GitHub API calls),
|
|
194
|
+
> searching uses live channels (GitHub search API / multi-source parallel) — they complement
|
|
195
|
+
> each other: a brand-new repo can be found by live search even before it enters the index.
|
|
196
|
+
|
|
197
|
+
- Empty query on the GitHub source shows the **static index** (`marketplace/index.json`,
|
|
198
|
+
jsDelivr CDN + 10-min host cache): 500+ plugins by stars, instant, **zero GitHub API calls**;
|
|
199
|
+
- **插件 / 技能 tabs** next to the search box: the skills tab lists auto-collected
|
|
200
|
+
`agent-skills` ∪ `claude-skills` ∪ `dsh-skill` repos (up to 300);
|
|
201
|
+
- **Auto version check**: installed entries in the market are checked against npm
|
|
202
|
+
`dist-tags.latest` in the background — cards turn into **「更新 → vX」** buttons;
|
|
203
|
+
- **Skill install**: skill entries install by git-clone into `~/.dsh/skills/<name>/`
|
|
204
|
+
(frontmatter `name` wins over repo name; SKILL.md found at repo root or first-level
|
|
205
|
+
subdirectory). Installed skills show a grey 「已装」 badge.
|
|
206
|
+
|
|
207
|
+
### Source Manager
|
|
208
|
+
|
|
209
|
+
The floating "Sources" button (right of the title row, semi-transparent) opens the manager:
|
|
210
|
+
|
|
211
|
+

|
|
212
|
+
|
|
213
|
+
- **Install sources (registry)**: add / inline edit / set primary / restore defaults;
|
|
214
|
+
private and intranet addresses supported; **deletion is protected** (install-critical);
|
|
215
|
+
- **Search sources**: built-in GitHub, Gitee + custom search sources (add/remove, `🔒` shows
|
|
216
|
+
header count);
|
|
217
|
+
- **Gitee login (optional)**: direct mode needs no login; login only raises rate limits —
|
|
218
|
+
create a third-party app (gitee.com → Data management → Third-party apps, scopes
|
|
219
|
+
user_info, projects), fill client_id / client_secret, save, then authorize.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Documentation
|
|
224
|
+
|
|
225
|
+
- [AI Empower 与服务器组件控制](docs/ai-empower.md)
|
|
226
|
+
- [Framework upgrade safety & plugin adapt gate](docs/upgrade-safety-adapt-gate.md)
|
|
227
|
+
- [How it works](docs/how-it-works.md) · [Compatibility](docs/compatibility.md) · [Project layout](docs/project-layout.md)
|
|
228
|
+
- [HTTP endpoints](docs/http-endpoints.md) · [Local AI fallback & consent](docs/ai-fallback.md)
|
|
229
|
+
- [Framework patch (cordis.patch.yml)](docs/framework-patch.md) · [Security & disclaimer](docs/security-disclaimer.md)
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Known limitations
|
|
234
|
+
|
|
235
|
+
- Host code changes require a **service restart** (the panel's restart button is
|
|
236
|
+
watchdog-safe); client changes just need a page refresh;
|
|
237
|
+
- Live GitHub search depends on GitHub reachability (browser-direct + server fallback;
|
|
238
|
+
during network-blackout windows retry later);
|
|
239
|
+
- Version detection works for npm-published packages; skill-type repos have no version concept;
|
|
240
|
+
- The static index is capped (500 plugins / 300 skills per build); authors bump their star
|
|
241
|
+
count or wait for the 6h CI cycle to enter the index;
|
|
242
|
+
- Skills are discovered by `dsh-skill-filesystem` — if the current profile does not enable
|
|
243
|
+
that plugin, installed skills stay dormant until it is enabled and DSH restarted.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Help
|
|
248
|
+
|
|
249
|
+
- **Panel missing**: restart dsh → refresh → Settings → Plugins → Plugin Console.
|
|
250
|
+
- **Toggle does nothing**: infrastructure rows are "Protected" (by design); normal toggles
|
|
251
|
+
take effect via HMR within 1-3s.
|
|
252
|
+
- **Compatibility warning**: a breaking upstream release arrived; see Compatibility.
|
|
253
|
+
- **Search empty/fails**: GitHub uses browser-direct (falls back to the server channel);
|
|
254
|
+
Gitee is direct-repo mode (enter `owner/repo`); check custom-source URL/headers; retry
|
|
255
|
+
during network blackout windows.
|
|
256
|
+
- **★ filter empty**: ★ shows only `dsh plugin add`-installable packages (official +
|
|
257
|
+
subpackage-bundle aggregates); markers are backfilled in 1-3s — no false "none" report.
|
|
258
|
+
- **Install fails**: confirm the repo has package.json and the package is published; npm
|
|
259
|
+
failures fall back to git install; switch the primary source if npmmirror is unstable.
|
|
260
|
+
- **Skill not found by DSH**: enable `@deepseek-ai/dsh-skill-filesystem` in the profile
|
|
261
|
+
(`cordis.yml`) and restart; skills live in `~/.dsh/skills/<name>/`.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Ecosystem & discoverability
|
|
266
|
+
|
|
267
|
+
- Listed on [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) (the community main list) and [DSH Directory](https://dsh.directory);
|
|
268
|
+
- This hub's own auto-collection index (500+ plugins / 300 skills, refreshed by CI every 6h) includes **any** repo tagged `dsh-plugin` / `agent-skills` / `claude-skills` / `dsh-skill` — tag your repo and it appears in the market automatically, no application needed;
|
|
269
|
+
- If you build DSH plugins, this panel is your distribution channel: one-click install for every user of the hub.
|
|
270
|
+
|
|
271
|
+
## Support
|
|
272
|
+
|
|
273
|
+
If this panel saves you time or makes DSH more fun to use:
|
|
274
|
+
|
|
275
|
+
- ⭐ **Star this repo** — it directly helps more DSH users find it;
|
|
276
|
+
- Share it with DSH users or in DSH communities;
|
|
277
|
+
- Submit your own plugin (tag it `dsh-plugin`) to grow the ecosystem;
|
|
278
|
+
- Found a bug or want a feature? [Open an issue](https://github.com/Noob-stupid/dsh-plugin-hub/issues).
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Contributing
|
|
283
|
+
|
|
284
|
+
Contributions of all kinds are welcome — issues, PRs, docs, translations.
|
|
285
|
+
|
|
286
|
+
- **Guidelines**: [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
287
|
+
- **Code of Conduct**: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
|
|
288
|
+
- **Security policy**: [SECURITY.md](SECURITY.md) (report vulnerabilities privately)
|
|
289
|
+
- **Issue templates**: bug reports & feature requests via the [new issue](https://github.com/Noob-stupid/dsh-plugin-hub/issues/new/choose) page
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Changelog
|
|
294
|
+
|
|
295
|
+
See [CHANGELOG.md](CHANGELOG.md).
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## License
|
|
300
|
+
|
|
301
|
+
MIT
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Preview (experimental · not for production)
|
|
308
|
+
|
|
309
|
+
The layered-refactor preview lives in its **own repository**: [**`Noob-stupid/dsh-plugin-hub-refactor`**](https://github.com/Noob-stupid/dsh-plugin-hub-refactor)
|
|
310
|
+
|
|
311
|
+
- **What it is**: the monolithic `lib/index.js` (7637 lines) split into layers — `lib/index.js` **142 lines** + `lib/server/**` **36 modules**; **feature-equivalent to `0.3.46`**, maintainability only;
|
|
312
|
+
- **Verified**: 17 test suites green · 8 architecture-guard assertions · **47/47 routes identical** (`status` + response fields) against the stable build;
|
|
313
|
+
- **Not yet exercised**: real framework upgrade / rollback, restart guardian, real install/uninstall, component start/stop, real AI run, Gitee OAuth (~10–25% long-tail risk, subjective);
|
|
314
|
+
- **For everyday use** stick to npm `@noob-stupid/dsh-plugin-console@0.3.46`, or `main` of this repo.
|