English · 简体中文
Kidai Plugin Market Hub(纪代插件市场)— Marketplace Hub for DeepSeek Harness
Project / package name:
kidai-plugin-market-hub— Kidai Plugin Market Hub / 纪代插件市场. A hub launcher that puts the full plugin marketplace one click away from the home sidebar, plus a standalone full-screen hub page with an immediate-restart button on top.
A dual-face (Host + Client) plugin for DeepSeek Harness (DSH) that adds a launcher above the 设置 (Settings) button on the home sidebar. Clicking it opens a standalone full-screen hub page (shell.overlay) hosting the two-tab marketplace UI — 插件市场 (marketplace) and 已安装 (installed) — with restart DSH pinned at the top-right.
Features
- Sidebar launcher — injected into
sidebar.footer.action(order 10), rendered right above the home sidebar's 设置 button; one click opens the hub. - Standalone full-screen hub page —
shell.overlayoverlay with a header bar: title, "Restart now" (two-step confirm, calls the HostrestartApp), and a close button. - Two tabs, one place — the marketplace catalog and installed-plugin management live in a single full-screen page instead of deep inside Settings.
- Live catalog — merges GitHub repos tagged
dsh-plugin(topic:dsh-pluginsearch API), npm registry search results, and the community-curated awesome-dsh-plugin list, cached in memory for 5 minutes; the browser bundle has a direct-fetch fallback path. - Search & sorting — matches plugin name (including full repo name) and description; sort by recently updated / most starred / name.
- One card per plugin — the repository owner's avatar as the icon (initial-letter fallback), plus name, description, topic tags, star count, and update date.
- "Release page" button — opens the plugin's GitHub page in a new window.
- "Install locally" button — after confirmation, the Host runs
pnpm addin the active DSH profile directory (resolving an npm package name first, falling back togit+https), then appends any newdsh.bundle.patch-declaring dependency todsh.profile.bundles— the same reconciliationdsh plugin addperforms. Success reports "restart DSH to activate". - Installed-tab management — enable / disable per plugin (
setEnabled/cancelEnabled), open the plugin's install directory in the file manager (openLocal), check for newer npm versions (checkUpdates), update one plugin to latest (updatePlugin), view its README (fetchReadme), and run a static security audit (auditPackage) that blocks installation when high-risk findings are detected. - Restart on top — the hub header's "Restart now" button restarts DSH immediately after installs, updates, or toggles.
Install
Manual install into a Desktop / Web profile
From a DSH terminal, target the profile you use (Desktop defaults to desktop, Web to web):
dsh plugin --profile desktop add kidai-plugin-market-hub
Local path or git spec works too:
dsh plugin --profile desktop add file:D:\path\to\kidai-plugin-market-hub
dsh plugin --profile desktop add git+https://github.com/NokorinNishikino/kidai-plugin-market-hub.git
Then restart DSH. The scripts/install-profile.ps1 helper performs the equivalent local install (copies the package into the profile tree and updates the manifest).
Requires
pnpmon PATH (or the pnpm bundled with DSH), plus network access toapi.github.com(catalog) andregistry.npmjs.org(install validation).
Uninstall
dsh plugin --profile desktop remove kidai-plugin-market-hub
How it works
| Part | File | Notes |
|---|---|---|
| Host half | lib/index.js |
Cordis plugin whose default export is PluginMarketGateway (a TypertRemoteService, namespace pluginMarketHub) exposing listPublished / installed / installPlugin / setEnabled / openLocal / cancelEnabled / checkUpdates / updatePlugin / fetchReadme / auditPackage / restartApp via SRC Remote markers. |
| Composition | cordis.patch.yml |
Inserts the plugin rows; because the package also declares dsh.client, the same rows feed the browser module manifest. |
| Client half | lib/client.js |
Browser bundle registering the sidebar launcher (sidebar.footer.action, order 10) and the full-screen hub page (shell.overlay, order 10), mounting the pluginMarketHub Remote descriptors (hand-written strict codecs, no zod), and rendering the two-tab UI. |
| Install channel | Host installPlugin(spec) |
Validates the spec (npm name / GitHub repo), resolves pnpm, runs pnpm add in the profile directory, reconciles dsh.profile.bundles. |
| Restart channel | Host restartApp() |
Detects the running DSH deployment and requests a restart; the hub header shows the two-step "Restart now" button. |
Catalog sources & network notes
Sources are tried in order; the first success wins (the tab shows which source was used below its heading):
- GitHub API (official) —
api.github.comtopic:dsh-pluginrepository search; - GitHub API mirrors —
ghfast.top/ghproxy.netprefix proxies (used when the official API is unreachable); - npm official search —
registry.npmjs.org/-/v1/search?text=dsh-plugin, filtered todsh-plugin-*/dsh-*names; - npmmirror search —
registry.npmmirror.com/-/v1/search(usually the fastest/most reliable from mainland China); - awesome-dsh-plugin curated list — the community-maintained
awesome-dsh-plugin/awesome-dsh-pluginREADME, parsed for- [owner/repo](url) - descriptionbullets (including monorepo#subpackageentries) and merged into the catalog under an "AWESOME" source badge. Fetched through the same CDN-first chain as repo files, so it consumes no GitHub API quota.
If every source fails, the last successfully fetched catalog persisted at .plugin-market-cache.json inside the profile directory is returned (marked "offline cache"); only a never-succeeded run reports an error.
If the list still fails to load, try any of:
Set the environment variable
DSH_PLUGIN_MARKET_GITHUB_APIto a working GitHub API mirror base (tried first), then restart DSH, e.g.:setx DSH_PLUGIN_MARKET_GITHUB_API "https://ghfast.top/https://api.github.com"(
setxtakes effect for newly started processes only.)Make sure at least one of
registry.npmjs.org/registry.npmmirror.comis reachable — either npm source is enough for the catalog to load.The "Refresh" button bypasses the 5-minute cache and forces a refetch.
Develop & publish
- Follow the community
dsh-plugin-*naming convention and publish to npm; tag the GitHub repo with thedsh-plugintopic to appear in this marketplace. - Host changes (
lib/index.js) take effect on restart; browser-bundle changes (lib/client.js) take effect on restart (or through thedsh-client-hmrdev chain). - Local syntax check:
node --check lib/index.js && node --check lib/client.js.
License
MIT
No comments yet. Be the first to write one.