@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 CHANGED
@@ -1,319 +1,314 @@
1
- > **English**: [README.md](README.md) | **中文**: [README.zh.md](README.zh.md)
2
-
3
- > **📢 npm release delayed to Sep 15, 2026**
4
- >
5
- > npm still serves **0.3.33** of `@noob-stupid/dsh-plugin-console`; **the latest (v0.3.46) will be published on 2026-09-15**.
6
- > Until then, get it straight from this repo / the [v0.3.46 release](https://github.com/Noob-stupid/dsh-plugin-hub/releases/tag/v0.3.46):
7
- > copy `lib/` and `package.json` into `~/.dsh/profiles/<profile>/node_modules/@noob-stupid/dsh-plugin-console/` and restart DSH (identical to the npm package).
8
- > After Sep 15: 「检测更新 → 更新并适配」 in the console, or `dsh plugin add @noob-stupid/dsh-plugin-console`.
9
-
10
- ---
11
-
12
- <img width="1170" height="609" alt="image" src="https://github.com/user-attachments/assets/b802d606-14ba-4151-9956-ff642ed12b0a" />
13
-
14
- # DSH Plugin Hub (dsh-plugin-hub)
15
-
16
- [![](https://img.shields.io/badge/powered_by-dsh-4D6BFE?style=flat-square&logo=deepseek&logoColor=white)](https://github.com/deepseek-ai/deepseek-harness)
17
- [![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com)
18
- [![GitHub stars](https://img.shields.io/github/stars/Noob-stupid/dsh-plugin-hub?style=flat-square&logo=github)](https://github.com/Noob-stupid/dsh-plugin-hub/stargazers)
19
- [![License](https://img.shields.io/github/license/Noob-stupid/dsh-plugin-hub?style=flat-square)](LICENSE)
20
- [![Last commit](https://img.shields.io/github/last-commit/Noob-stupid/dsh-plugin-hub?style=flat-square)](https://github.com/Noob-stupid/dsh-plugin-hub/commits/main)
21
- [![Registry CI](https://img.shields.io/github/actions/workflow/status/Noob-stupid/dsh-plugin-hub/registry.yml?label=registry%20CI&style=flat-square)](https://github.com/Noob-stupid/dsh-plugin-hub/actions/workflows/registry.yml)
22
- [![topic: dsh-plugin](https://img.shields.io/badge/topic-dsh_plugin-4D6BFE?style=flat-square)](https://github.com/topics/dsh-plugin)
23
- [![npm version](https://img.shields.io/npm/v/@noob-stupid/dsh-plugin-console?style=flat-square)](https://www.npmjs.com/package/@noob-stupid/dsh-plugin-console)
24
- [![npm downloads](https://img.shields.io/npm/dm/@noob-stupid/dsh-plugin-console?style=flat-square)](https://www.npmjs.com/package/@noob-stupid/dsh-plugin-console)
25
- [![GitHub Release](https://img.shields.io/github/v/release/Noob-stupid/dsh-plugin-hub?style=flat-square)](https://github.com/Noob-stupid/dsh-plugin-hub/releases)[![dsh.so security](https://www.dsh.so/badge/dsh-plugin-hub.svg)](https://www.dsh.so/artifact/dsh-plugin-hub)
26
- [![dsh.so install](https://www.dsh.so/badge/install/dsh-plugin-hub.svg)](https://www.dsh.so/artifact/dsh-plugin-hub)
27
-
28
- > Manage all your DeepSeek Harness plugins in one panel: one-click enable/disable,
29
- > a 500+ plugin & skill marketplace with one-click install, and one-click framework
30
- > upgrade with auto-rollback.
31
-
32
- ## Why DSH Plugin Hub
33
-
34
- - 🧩 **Plugin & skill hub** — auto-collected index of `dsh-plugin` repos (500+ by
35
- stars) plus a Skills tab; browse, search, one-click install, **zero GitHub API
36
- calls** (served via CDN).
37
- - 🚀 **One-click framework upgrade** — backup → online install (service stays up) →
38
- verify → **auto-rollback on failure**. Tested end-to-end.
39
- - 🤖 **AI Empower** — give the console a package name or GitHub repo, the local AI
40
- reads its docs and drafts a safe, confirmable deployment plan (install / config /
41
- start / health-check); server components get an automatic control card.
42
- → [details](docs/ai-empower.md)
43
-
44
- ## Install
45
-
46
- ```sh
47
- # npm release (recommended: prebuilt, no git / build authorization needed)
48
- dsh plugin --profile web add @noob-stupid/dsh-plugin-console
49
-
50
- # or install from GitHub source (needs git; allowBuilds authorization on first add)
51
- dsh plugin --profile web add github:Noob-stupid/dsh-plugin-hub
52
- ```
53
-
54
- Then restart the dsh service → refresh the page → **Settings → Plugins → Plugin Console**.
55
-
56
- <details><summary><b>More install options</b> (deploy script / hand it to an AI)</summary>
57
-
58
- ### Option 2: deploy script (fallback when network is restricted)
59
-
60
- Windows (PowerShell):
61
-
62
- ```powershell
63
- git clone https://github.com/Noob-stupid/dsh-plugin-hub "$env:TEMP\dsh-plugin-console" 2>$null; & "$env:TEMP\dsh-plugin-console\deploy.ps1"
64
- ```
65
-
66
- Linux / macOS:
67
-
68
- ```bash
69
- git clone https://github.com/Noob-stupid/dsh-plugin-hub /tmp/dsh-plugin-console 2>/dev/null; bash /tmp/dsh-plugin-console/deploy.sh
70
- ```
71
-
72
- The script copies the plugin into `$DSH_HOME/profiles/<profile>/node_modules/` and
73
- idempotently appends an enable entry to `cordis.patch.yml`. Afterwards:
74
-
75
- 1. Restart the dsh service (host code changes need a process restart; CLI restarts the
76
- process, the desktop client exits and reopens);
77
- 2. Refresh the page → Settings → Plugins → **Plugin Console**.
78
-
79
- ### Option 3: hand it to an AI in one sentence
80
-
81
- > 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.
82
-
83
- Requires: DSH ≥ 0.1.0-rc.6 (web profile, with `dsh-client-modules` / `dsh-host-plugin-inventory`).
84
-
85
- </details>
86
-
87
- ---
88
-
89
- ## Highlights
90
-
91
- | | Benefit | Detail |
92
- |---|---|---|
93
- | 🤖 | **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 |
94
- | 🛡️ | **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 |
95
- | 🏠 | **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 |
96
- | 🚀 | **Server component cards** | Left-side floating card auto-aligned to the main panel: start / stop / status / **open Web UI** buttons, multi-server dropdown, collapsible |
97
- | 🧩 | **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 |
98
- | 🤖 | **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 |
99
- | ⚡ | **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** |
100
- | 🔄 | **Version detection & one-click update** | Semver-based; installed entries match npm `dist-tags.latest` / `beta`; subpackage mismatch warnings prevent mixed-version breakage |
101
- | 🔀 | **Multi-source** | GitHub / Gitee (direct-repo mode) / custom search sources (URL template + header auth + private http); `⊞` merges GitHub + all custom sources in parallel |
102
- | 🔒 | **Safe by default** | Loopback-only routes; AI fallback behind an explicit cost-consent modal; infrastructure rows are toggle-protected |
103
-
104
- <details>
105
- <summary><b>📑 目录 / Table of Contents</b></summary>
106
-
107
- - [Highlights](#highlights)
108
- - [AI 赋能与服务器组件控制](#ai-赋能与服务器组件控制)
109
- - [One-click install](#one-click-install)
110
- - [Usage](#usage)
111
- - [Features](#features)
112
- - [How it works](#how-it-works)
113
- - [Compatibility](#compatibility)
114
- - [Project layout](#project-layout)
115
- - [HTTP endpoints](#http-endpoints)
116
- - [Security](#security)
117
- - [Known limitations](#known-limitations)
118
- - [Help & Ecosystem](#help--ecosystem)
119
- - [Contributing](#contributing)
120
- - [Changelog](#changelog)
121
- - [License](#license)
122
- </details>
123
-
124
- ---
125
-
126
- ## Usage
127
-
128
- 1. Restart DSH → open the Web GUI → **Settings → Plugins → Plugin Console**.
129
- 2. **Installed list**: toggle plugins on/off (HMR applies within ~1s), search by name/id,
130
- expand details (version, repository, README summary).
131
- 3. **Marketplace**: empty query on the GitHub source opens the static index (instant);
132
- type a query to search live. Switch sources via the login pill (GitHub / Gitee / custom);
133
- `⊞` merges all sources; `★` filters to `dsh plugin add`-installable packages.
134
- 4. **Skills tab**: switch 插件/技能 next to the search box to browse and install skills
135
- (cloned into `~/.dsh/skills/<name>/`).
136
- 5. **Install**: click 添加到本地 → the chain runs in the background (safe to leave the page);
137
- 「检测更新」/「更新 → vX」 appear automatically for installed entries.
138
-
139
- ---
140
-
141
- ## Features
142
-
143
- ### Installed plugins (one-click toggle + details)
144
-
145
- - **Shows only third-party plugins by default** (extra/non-bundled), tagged
146
- "Third-party" with a delete entry; click "All" to see the full list (1.5s flash feedback);
147
- - Lists every plugin entry (name, load state, enabled state); search by name/id;
148
- - Disable = append `- id: X` + `disabled: true` to the user patch layer, effective via HMR;
149
- - Enable = remove that entry; bundle-layer rows disabled by default are overridden with
150
- `disabled: false`;
151
- - Tags "Patch-disabled / Patch-forced" distinguish user patch state;
152
- - **Infrastructure protection**: host transport/hmr/storage/settings chain plugins
153
- (70+ rows) are marked "Protected" and cannot be toggled — disabling them would break HMR;
154
- - **Details panel**: version, repository/homepage links and a README summary for each plugin;
155
- - **Version check**: 检测更新 reads npm `dist-tags.latest` (curl channel, works even when
156
- node networking is blocked) and warns about subpackages that need syncing (depsOutdated).
157
-
158
- ### Framework one-click upgrade (deepseek-harness card)
159
-
160
- - The **deepseek-harness** card shows **「框架升级 → vX」** when a newer framework version is
161
- available (stable `latest` preferred; `next` channel when `latest` equals the installed
162
- version); clicking runs the full flow: backup config + framework snapshot (rollback point)
163
- → **online install** (service stays up, page never disconnects) → version verification →
164
- **auto-restart to apply**;
165
- - **Real-time progress**: a `DSH-Upgrade` console window pops up showing live pnpm download
166
- progress; the in-panel progress card shows the waiting time;
167
- - **Upgrade protection**: failed installs **auto-rollback** (robocopy, backup verified before
168
- upgrade), version check catches fake success, 15-min hard timeout, stall detection
169
- (no debug-log updates → auto switch registry), global trap fallback, and 15-min stale-state
170
- cleanup — the framework is never left broken;
171
- - **pnpm channel**: npm-cli.js freezes at startup in the schtasks task environment (0-byte
172
- debug log, no network requests ever sent); upgrades use `corepack pnpm` (starts in ~0.4s,
173
- installed rc.8 in 11.5s) against the **npmmirror (China) registry**, with
174
- `dangerouslyAllowAllBuilds` so native modules (node-pty/koffi) compile;
175
- - **Runtime bin resolution**: under the pnpm layout `@deepseek-ai/dsh` is a Junction — the
176
- relaunch step resolves `bin.js` at runtime (follows the Junction to the current version)
177
- instead of using a path baked in at script-generation time;
178
- - **Card dismiss semantics**: terminal states (done/failed) are permanently dismissed on ✕
179
- (persisted); in-progress dismissal is session-only and the card returns after a refresh.
180
-
181
- ### Marketplace (multi-source)
182
-
183
- - **Source switcher**: click the login pill to switch between **GitHub / Gitee / custom
184
- sources** (persisted); title, loading text, placeholder and note all follow the source;
185
- - **GitHub**: default query `dsh-plugin`, browser-direct with server fallback;
186
- - **Gitee**: official search API is retired, so it uses **direct-repo mode** — enter
187
- `owner/repo` (Chinese paths and full URLs supported) to find and install a repository;
188
- - **Custom sources**: add in Source Manager (URL template with `{q}`/`{page}` placeholders),
189
- optional **header auth** (e.g. `Authorization: Bearer ...`), and **local/private http URLs**;
190
- - **Multi-source summary**: the `⊞` toggle searches GitHub + all custom sources in parallel,
191
- merging results with source labels;
192
- - **★ official filter**: shows only packages installable via `dsh plugin add` — root packages
193
- with a `dsh.bundle` manifest (official) or aggregate repos whose **subpackage carries
194
- `dsh.bundle`** (subpackage-installable); markers are enriched by the server (curl dual-channel)
195
- with a client-side fallback;
196
- - **Type badges**: 官方 / 聚合 / 技能 (repo contains SKILL.md) recognized automatically.
197
-
198
- ### Static index market (plugin & skill tabs)
199
-
200
- > **Hybrid architecture**: browsing uses the static index (instant, zero GitHub API calls),
201
- > searching uses live channels (GitHub search API / multi-source parallel) — they complement
202
- > each other: a brand-new repo can be found by live search even before it enters the index.
203
-
204
- - Empty query on the GitHub source shows the **static index** (`marketplace/index.json`,
205
- jsDelivr CDN + 10-min host cache): 500+ plugins by stars, instant, **zero GitHub API calls**;
206
- - **插件 / 技能 tabs** next to the search box: the skills tab lists auto-collected
207
- `agent-skills` ∪ `claude-skills` ∪ `dsh-skill` repos (up to 300);
208
- - **Auto version check**: installed entries in the market are checked against npm
209
- `dist-tags.latest` in the background — cards turn into **「更新 → vX」** buttons;
210
- - **Skill install**: skill entries install by git-clone into `~/.dsh/skills/<name>/`
211
- (frontmatter `name` wins over repo name; SKILL.md found at repo root or first-level
212
- subdirectory). Installed skills show a grey 「已装」 badge.
213
-
214
- ### Source Manager
215
-
216
- The floating "Sources" button (right of the title row, semi-transparent) opens the manager:
217
-
218
- ![Source Manager](https://github.com/user-attachments/assets/ef712900-65ae-4f6f-9584-bacdd8d34ea1)
219
-
220
- - **Install sources (registry)**: add / inline edit / set primary / restore defaults;
221
- private and intranet addresses supported; **deletion is protected** (install-critical);
222
- - **Search sources**: built-in GitHub, Gitee + custom search sources (add/remove, `🔒` shows
223
- header count);
224
- - **Gitee login (optional)**: direct mode needs no login; login only raises rate limits —
225
- create a third-party app (gitee.com → Data management → Third-party apps, scopes
226
- user_info, projects), fill client_id / client_secret, save, then authorize.
227
-
228
- ---
229
-
230
- ## Documentation
231
-
232
- - [AI Empower 与服务器组件控制](docs/ai-empower.md)
233
- - [Framework upgrade safety & plugin adapt gate](docs/upgrade-safety-adapt-gate.md)
234
- - [How it works](docs/how-it-works.md) · [Compatibility](docs/compatibility.md) · [Project layout](docs/project-layout.md)
235
- - [HTTP endpoints](docs/http-endpoints.md) · [Local AI fallback & consent](docs/ai-fallback.md)
236
- - [Framework patch (cordis.patch.yml)](docs/framework-patch.md) · [Security & disclaimer](docs/security-disclaimer.md)
237
-
238
- ---
239
-
240
- ## Known limitations
241
-
242
- - Host code changes require a **service restart** (the panel's restart button is
243
- watchdog-safe); client changes just need a page refresh;
244
- - Live GitHub search depends on GitHub reachability (browser-direct + server fallback;
245
- during network-blackout windows retry later);
246
- - Version detection works for npm-published packages; skill-type repos have no version concept;
247
- - The static index is capped (500 plugins / 300 skills per build); authors bump their star
248
- count or wait for the 6h CI cycle to enter the index;
249
- - Skills are discovered by `dsh-skill-filesystem` — if the current profile does not enable
250
- that plugin, installed skills stay dormant until it is enabled and DSH restarted.
251
-
252
- ---
253
-
254
- ## Help
255
-
256
- - **Panel missing**: restart dsh → refresh → Settings → Plugins → Plugin Console.
257
- - **Toggle does nothing**: infrastructure rows are "Protected" (by design); normal toggles
258
- take effect via HMR within 1-3s.
259
- - **Compatibility warning**: a breaking upstream release arrived; see Compatibility.
260
- - **Search empty/fails**: GitHub uses browser-direct (falls back to the server channel);
261
- Gitee is direct-repo mode (enter `owner/repo`); check custom-source URL/headers; retry
262
- during network blackout windows.
263
- - **★ filter empty**: ★ shows only `dsh plugin add`-installable packages (official +
264
- subpackage-bundle aggregates); markers are backfilled in 1-3s — no false "none" report.
265
- - **Install fails**: confirm the repo has package.json and the package is published; npm
266
- failures fall back to git install; switch the primary source if npmmirror is unstable.
267
- - **Skill not found by DSH**: enable `@deepseek-ai/dsh-skill-filesystem` in the profile
268
- (`cordis.yml`) and restart; skills live in `~/.dsh/skills/<name>/`.
269
-
270
- ---
271
-
272
- ## Ecosystem & discoverability
273
-
274
- - Listed on [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) (the community main list) and [DSH Directory](https://dsh.directory);
275
- - 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;
276
- - If you build DSH plugins, this panel is your distribution channel: one-click install for every user of the hub.
277
-
278
- ## Support
279
-
280
- If this panel saves you time or makes DSH more fun to use:
281
-
282
- - ⭐ **Star this repo** — it directly helps more DSH users find it;
283
- - Share it with DSH users or in DSH communities;
284
- - Submit your own plugin (tag it `dsh-plugin`) to grow the ecosystem;
285
- - Found a bug or want a feature? [Open an issue](https://github.com/Noob-stupid/dsh-plugin-hub/issues).
286
-
287
- ---
288
-
289
- ## Contributing
290
-
291
- Contributions of all kinds are welcome — issues, PRs, docs, translations.
292
-
293
- - **Guidelines**: [CONTRIBUTING.md](CONTRIBUTING.md)
294
- - **Code of Conduct**: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
295
- - **Security policy**: [SECURITY.md](SECURITY.md) (report vulnerabilities privately)
296
- - **Issue templates**: bug reports & feature requests via the [new issue](https://github.com/Noob-stupid/dsh-plugin-hub/issues/new/choose) page
297
-
298
- ---
299
-
300
- ## Changelog
301
-
302
- See [CHANGELOG.md](CHANGELOG.md).
303
-
304
- ---
305
-
306
- ## License
307
-
308
- MIT
309
-
310
- ---
311
-
312
- ## Community
313
-
314
- <img src="./community-group.png" alt="Scan to join the dsh-plugin-hub community group" width="240">
315
-
316
- Scan to join the **dsh-plugin-hub community group** (QQ) — 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://img.shields.io/badge/powered_by-dsh-4D6BFE?style=flat-square&logo=deepseek&logoColor=white)](https://github.com/deepseek-ai/deepseek-harness)
10
+ [![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com)
11
+ [![GitHub stars](https://img.shields.io/github/stars/Noob-stupid/dsh-plugin-hub?style=flat-square&logo=github)](https://github.com/Noob-stupid/dsh-plugin-hub/stargazers)
12
+ [![License](https://img.shields.io/github/license/Noob-stupid/dsh-plugin-hub?style=flat-square)](LICENSE)
13
+ [![Last commit](https://img.shields.io/github/last-commit/Noob-stupid/dsh-plugin-hub?style=flat-square)](https://github.com/Noob-stupid/dsh-plugin-hub/commits/main)
14
+ [![Registry CI](https://img.shields.io/github/actions/workflow/status/Noob-stupid/dsh-plugin-hub/registry.yml?label=registry%20CI&style=flat-square)](https://github.com/Noob-stupid/dsh-plugin-hub/actions/workflows/registry.yml)
15
+ [![topic: dsh-plugin](https://img.shields.io/badge/topic-dsh_plugin-4D6BFE?style=flat-square)](https://github.com/topics/dsh-plugin)
16
+ [![npm version](https://img.shields.io/npm/v/@noob-stupid/dsh-plugin-console?style=flat-square)](https://www.npmjs.com/package/@noob-stupid/dsh-plugin-console)
17
+ [![npm downloads](https://img.shields.io/npm/dm/@noob-stupid/dsh-plugin-console?style=flat-square)](https://www.npmjs.com/package/@noob-stupid/dsh-plugin-console)
18
+ [![GitHub Release](https://img.shields.io/github/v/release/Noob-stupid/dsh-plugin-hub?style=flat-square)](https://github.com/Noob-stupid/dsh-plugin-hub/releases)[![dsh.so security](https://www.dsh.so/badge/dsh-plugin-hub.svg)](https://www.dsh.so/artifact/dsh-plugin-hub)
19
+ [![dsh.so install](https://www.dsh.so/badge/install/dsh-plugin-hub.svg)](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
+ ![Source Manager](https://github.com/user-attachments/assets/ef712900-65ae-4f6f-9584-bacdd8d34ea1)
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.