ð§© DSH æä»¶ç®¡çåš
August 16, 2026 · View on GitHub
ð§© DSH æä»¶ç®¡çåš
dsh-plugin-manager â åš DeepSeek Harness è®Ÿçœ®é¢æ¿éå åµçåŸåœ¢å管çåš,è®©äœ åæäœæ®é App äžæ ·ç®¡ç MCP æå¡ / Skills / å·²è£ æä»¶ / å 眮æä»¶å ,åŒå ³ã忢ãå é€å®æ¶ççæ,æ ééå¯ dsh webã
â¹ïž äºæ¬¡å 工声æ(Important)
æ¬é¡¹ç®æ¯å¯¹ liqichen/dsh-plugin-manager çäºæ¬¡å å·¥(fork / derivative work),åå§äœååå ¶ MIT 讞å¯è¯çæåœåäœè ææ(è§ LICENSE)ã
åšä¿çåçå šéšèœå(MCP åŒå ³/å é€ãSkills 管çãå 眮æä»¶å æµè§)çåºç¡äž,æ¬çæ¬æ°å¢:
- â¯ïž æä»¶åæ¢ / å¯çš ââ éè¿åå ¥/ç§»é€
cordis.patch.ymlçdisabledæ¡ç®,HMR ççæ- ðïž æä»¶å é€ ââ ç§»é€
package.jsonåŒçšäž bundles æ¡ç®,æä»¶ç®åœç§»å ¥~/.dsh/.trash/plugins/åæ¶ç«,坿¢å€- ðª èªç»ç¡®è®€åŒ¹çª ââ æ¿ä»£æµè§åšåç
confirm,æ ·åŒç²Ÿç®ãè·é DSH äž»é¢- ð¡ïž å€ä»œå»éãæŽå®æŽçæä»¶å ä¿¡æ¯(çæ¬ / cordis id / æ¬å°Â·npm æ¥æº / éŸæ¥è·¯åŸ)
äœ¿çšæ¬é¡¹ç®è¯·ä¿çäžè¿°åäœåéŸæ¥äžçæå£°æã
ð ç®åœ
- âš åèœç¹æ§
- ðž çé¢é¢è§
- ð å®è£
- ð¥ïž 䜿çšè¯Žæ
- âïž å·¥äœåç
- ð¡ API åè
- ðïž ç®åœç»æ
- â åžžè§é®é¢
- â ïž æ³šæäºé¡¹
- ð 讞å¯è¯
âš åèœç¹æ§
| èœå | 诎æ | çææ¹åŒ |
|---|---|---|
| ðïž MCP åŒå ³ | äžé®çŠçš/å¯çšä»»æ MCP æå¡(åå
¥ disabled: true æç§»é€) | 宿¶ççæ,æ ééå¯ |
| ðïž MCP å é€ | ä» cordis.patch.yml å 逿Žäžª MCP æ¡ç®(äžæ¹æ³šéä¿ç) | 宿¶ççæ,æ ééå¯ |
| ð Skills 管ç | æµè§å
šéš skill åæè¿°;å é€ = ç§»å
¥ .trash-* ç®åœ,坿¢å€ | ç«å³çæ |
| â¯ïž æä»¶åæ¢/å¯çš | äžé®åæ¢/å¯çšå·²è£
æä»¶(åå
¥/ç§»é€ cordis.patch.yml ç disabled æ¡ç®) | 宿¶ççæ,æ ééå¯ |
| ðïž æä»¶å é€ | ç§»é€ package.json äŸèµäž bundles æ¡ç®ãæž
ç patch æ¡ç®,æä»¶ç®åœç§»å
¥ ~/.dsh/.trash/plugins/ 坿¢å€ | éå¯ dsh web åå®å šåžèœœ |
| ðŠ æä»¶å æµè§ | åªè¯»æ¥ç DSH æ¬äœ 160+ å 眮æä»¶å çåç§°/çæ¬/诎æ | åªè¯» |
| ð¡ïž èªåšå€ä»œ | æ¯æ¬¡åæäœåèªåšå€ä»œé
眮䞺 *.bak-<æ¶éŽæ³> | â |
| ð é¶é¢å€è¿çš | å端å åµåš dsh web 宿䞻é,åæº API,äžå 端å£ãæ CORS æŽé² | â |
ðž çé¢é¢è§
管ç页äœäº DSH è®Ÿçœ®é¢æ¿ â ãæä»¶ç®¡çã,å䞪æ çŸé¡µ:
| MCP æå¡ | Skills | å·²è£ æä»¶ | å 眮æä»¶å |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
ð å®è£
åæ:å·²å®è£ DeepSeek Harness(dsh web),å¹¶äºè§£
~/.dshç®åœç»æã
æ¹åŒäž:仿¬ä»åºå®è£ (æšè)
# 1. å
éå¹¶æŸå
¥çšæ·æä»¶ç®åœ
git clone https://github.com/liqichen/dsh-plugin-manager.git
mkdir -p ~/.dsh/plugins/dsh-plugin-manager
cp -r dsh-plugin-manager/{index.js,client.js,package.json} ~/.dsh/plugins/dsh-plugin-manager/
# 2. éè¿ dsh CLI 泚åæä»¶
dsh plugin --profile web add ~/.dsh/plugins/dsh-plugin-manager
# 3. 声æäŸèµ(让 Node 端å¯è§£æ)
# çŒèŸ ~/.dsh/profiles/web/package.json,dependencies å å
¥:
# "dsh-plugin-manager": "file:../../plugins/dsh-plugin-manager"
# 4. åš ~/.dsh/profiles/web/cordis.patch.yml ç plugins å衚å å
¥:
# - id: plugin-manager-ui
# name: dsh-plugin-manager
# 5. éå¯ dsh web,æåŒã讟眮ãâãæä»¶ç®¡çãå³å¯äœ¿çš
æ¹åŒäº:legacy ç¬ç«çœé¡µç(äžäŸèµæä»¶ç³»ç»)
åŠææä»¶æºå¶äžéçš,ä»åºæäŸäºæ©æç¬ç«ç Python æå¡:
python3 legacy/server.py --port 17891
# æµè§åšæåŒ http://127.0.0.1:17891/
ð¥ïž 䜿çšè¯Žæ
æåŒ DSH 讟眮 â æä»¶ç®¡ç,äœ äŒçå°å䞪æ çŸé¡µ:
ðïž MCP æå¡
- æ¯äžª MCP äžåŒ å¡ç,æŸç€ºåç§°ãäŒ èŸæ¹åŒ(
stdio/httpåŸœç« )ãè¿è¡ç¶æãé 眮 id - å³äŸ§åŒå ³:äžé®çŠçš/å¯çš;å 逿é®:ç§»é€è¯¥æ¡ç®(æäºæ¬¡ç¡®è®€)
- é¡¶éšæŸç€ºé 眮æä»¶è·¯åŸäžæ»æ°é
ð Skills
- ååºææ skill å
SKILL.mdäžçæè¿°ãç®åœè·¯åŸ - å é€ = ç§»å
¥
~/.dsh/skills/.trash-*,å¯æåšæ¢å€
â¯ïž å·²è£ æä»¶(v0.2 æ°å¢)
- ååº
~/.dsh/profiles/web/package.jsoné声æçå šéšçšæ·æä»¶(æ¬å°link:äž npm å ), 以å~/.dsh/plugins/ã~/.dsh/profiles/web/plugins/äžæªè¢«åŒçšçå€å¿ç®åœ - æ¯åŒ å¡çæŸç€ºçæ¬ãcordis idãæ¥æº(æ¬å°/npm)ãå®è£ è·¯åŸäžè¿è¡ç¶æ
- åŒå
³:忢 = å
cordis.patch.ymlåå ¥- id: <id>+disabled: true(宿䞻 HMR ççæ); å¯çš = ç§»é€å¯¹åºæ¡ç®(æŽæ¡ä» å© disabled æ¶è¿æ¡ç®äžèµ·å ) - å é€:ä»
package.jsonç§»é€äŸèµäždsh.profile.bundlesæ¡ç®ãæž ç patch æ¡ç®, æä»¶ç®åœç§»å ¥~/.dsh/.trash/plugins/<æ¶éŽæ³>-<åç§°>åæ¶ç«;éå¯ dsh web åå®å šåžèœœ - â ïž åæ¢/å 逿¬ç®¡çåšèªèº«(
dsh-plugin-manager)äŒåžŠèµ°æ€çé¢, æ¢å€éæåšçŒèŸcordis.patch.ymlæä»åæ¶ç«è¿å
ðŠ å 眮æä»¶å
- è¡šæ Œå±ç€º DSH æ¬äœå
šéšæä»¶å
(åªè¯»),å级请䜿çš
npm update -g @deepseek-ai/dsh
æäœå®æå,页é¢äŒæç€ºãâ æ¹åšå·²å®æ¶ççæã;å·²æåŒçäŒè¯å»ºè®®åŒæ°äŒè¯,以巿°å·¥å ·å衚ã
âïž å·¥äœåç
æ¬æä»¶æ¯æ å DSH å端æä»¶,é dsh web äžåå¯åš,æ éç¬ç«è¿çš:
ââââââââââââââââââââââââââââ dsh web 宿䞻 ââââââââââââââââââââââââââââ
â â
â æµè§åšç«¯ (client.js) Node 端 (index.js) â
â âââââââââââââââââââââââââ âââââââââââââââââââââââââââ â
â â è®Ÿçœ®é¢æ¿ãæä»¶ç®¡çã页 â fetch â æ³šå /plugin-manager/ â â
â â React UI · åæº API â ââââââââââ¶ â api/* è·¯ç±(å
åµå端) â â
â âââââââââââââââââââââââââ â 读 / å: â â
â â · ~/.dsh/profiles/web/ â â
â â cordis.patch.yml â â
â â · ~/.dsh/skills/ â â
â â · ~/.dsh/profiles/ â â
â â node_modules/@deep- â â
â â seek-ai/ â â
â âââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
æ¶åçæä»¶è·¯åŸ:
| è·¯åŸ | äœçš |
|---|---|
~/.dsh/profiles/web/cordis.patch.yml | MCP æå¡é 眮(è¡¥äžå±),ä¿®æ¹å宿䞻 HMR ççæ |
~/.dsh/skills/ | Skill ç®åœ,å 逿¶éåœå䞺 .trash-<æ¶éŽæ³>-<åç§°> |
~/.dsh/profiles/node_modules/@deepseek-ai/ | DSH æ¬äœæä»¶å (åªè¯») |
ð¡ API åè
å端å åµåš dsh web 宿䞻,åæºæäŸäž€äžªæ¥å£:
GET /plugin-manager/api/state
è¿ååœåå šéšç¶æ:
{
"mcp": [
{ "id": "mcp-scrapling", "serverName": "scrapling", "transport": "stdio", "command": "scrapling", "disabled": false }
],
"skills": [ { "name": "obsidian-cli", "desc": "âŠ", "path": "/Users/me/.dsh/skills/obsidian-cli" } ],
"installedPlugins": [
{
"name": "dsh-plugin-manager", "version": "0.2.0", "desc": "âŠ",
"ids": ["plugin-manager-ui"], "disabled": false, "installed": true,
"isLink": true, "location": "/Users/me/.dsh/plugins/dsh-plugin-manager",
"source": "local", "depSpec": "link:âŠ"
}
],
"plugins": [ { "name": "dsh-client-web", "version": "1.2.3", "desc": "âŠ" } ],
"patchFile": "/Users/me/.dsh/profiles/web/cordis.patch.yml",
"profilePkgFile": "/Users/me/.dsh/profiles/web/package.json",
"skillsDir": "/Users/me/.dsh/skills",
"trashDir": "/Users/me/.dsh/.trash/plugins"
}
POST /plugin-manager/api/action
äºç§æäœ,kind åºå:
{ "kind": "mcp-toggle", "id": "mcp-scrapling", "disable": true }
{ "kind": "mcp-delete", "id": "mcp-scrapling" }
{ "kind": "skill-delete", "name": "obsidian-cli" }
{ "kind": "plugin-toggle", "name": "dsh-plugin-manager", "disable": true }
{ "kind": "plugin-delete", "name": "dsh-plugin-manager" }
ååºç»äžäžº { "ok": true, "message": "âŠ" }ã
ææåæäœå
å€ä»œç®æ æä»¶(cordis.patch.yml / package.json)䞺 .bak-<æ¶éŽæ³>,åæ¹æä»¶;
plugin-delete çæä»¶ç®åœç§»å
¥ ~/.dsh/.trash/plugins/ åæ¶ç«,äžçå ã
ð ïž çš DSH åŒå(åèªå·±ççç²®)
æ¬é¡¹ç®å°±æ¯çš DeepSeek Harness åŒååºæ¥ç ââ 仿³æ³å°äžçº¿,æŽäžªåŒåè¿çšç±è¿è¡åš DSH éç AI çŒç æºèœäœå®æ:
- éè¿ DSH ç MCP å·¥å
·(æµè§åšèªåšåãæä»¶è¯»åç)éåç ç©¶å®æ¹å端æä»¶çæ«æäžæ³šå
¥æºå¶(
dsh-client-modulesãdsh-cordis-host-runnerãsettings.sectionslot å¥çºŠ) - çŽæ¥è¯»å
cordis.patch.yml/~/.dsh/skills/åå€å®éª,éªè¯ãé 眮æ¹åš â 宿䞻 HMR ççæãéŸè·¯ - çš Playwright / Chrome DevTools èªåšåæªåŸãæ£æ¥ UI ææ
- æç»äº§ç©åäœäžºæ å DSH æä»¶è¢«å®è£ å DSH,çšæ¥ç®¡ç DSH èªå·± ââ DSH 管ç DSH èªå·±
è¿æ£æ¯ DeepSeek Harness ç讟计å²åŠ:Everything is a Pluginã
ðïž ç®åœç»æ
dsh-plugin-manager/
âââ index.js # Node å:å
åµå端,泚å /plugin-manager/api/* è·¯ç±
âââ client.js # æµè§åšå:è®Ÿçœ®é¢æ¿ãæä»¶ç®¡çãReact UI
âââ package.json # DSH å端æä»¶å
æ°æ®(dsh.client.inject 声æå®¿äž»äŸèµ)
âââ docs/
â âââ screenshots/ # ç颿ªåŸ
âââ legacy/
â âââ server.py # æ©æç¬ç« Python çœé¡µæå¡çæ¬(å€çš)
âââ README.md
âââ LICENSE # MIT
â åžžè§é®é¢
Q: é¡µé¢æç€ºãæä»¶å端æªååºã?
æµè§åšç«¯è¿äžäž /plugin-manager/apiãæ£æ¥å®è£
æ¥éª€ 3ã4 æ¯åŠéœå®æ,以å ~/.dsh/profiles/node_modules/dsh-plugin-manager æ¯åŠæ£ç¡®æåæä»¶ç®åœ,ç¶åéå¯ dsh webã
Q: åŒå ³/å é€åå·¥å ·å衚没å? é 眮æ¹åšæ¯ççæç,äœåœåå·²æåŒçäŒè¯ä»æææ§çå·¥å ·å衚,请æ°åŒäžäžªäŒè¯ã
Q: å æç MCP æä¹æ¢å€?
mcp-delete åªå é€é
眮æ¡ç®,äžäŒåžèœœ npm å
ãçšæè¿çå€ä»œ cordis.patch.yml.bak-* æ¢å€,ææåšææ¡ç®å å cordis.patch.yml å³å¯ã
Q: å æç Skill æä¹æ¢å€?
æ ~/.dsh/skills/.trash-<æ¶éŽæ³>-<åç§°> éåœåå ~/.dsh/skills/<åç§°> å³å¯ã
Q: æ³åœ»åºå é€ Skill?
管çåšåªåãç§»å
¥åæ¶ç«ã;圻åºå é€è¯·æåš rm -rf 对åºç .trash-* ç®åœã
Q: èœä»ç®¡çåšå级 DSH æ¬äœå?
äžèœãå
眮æä»¶å
页æ¯åªè¯»ç,DSH æ¬äœåçº§è¯·çš npm update -g @deepseek-ai/dshã
â ïž æ³šæäºé¡¹
- æäœçæ¯çå®é
眮 ââ æææ¹åšçŽæ¥å
cordis.patch.ymlãpackage.jsonäž~/.dsh/skills/ãæ¯æ¬¡ååèªåšå€ä»œ,åºé®é¢å¯çšæè¿ç.bak-*æ¢å€ã - MCP å é€ â åžèœœå ââ åªå é 眮æ¡ç®,å äœä»åš,éæ°é 眮å³å¯æ¢å€ã
- Skill å é€å¯æ¢å€ ââ æ¯ãç§»å
¥
.trash-*ãèéçå ã - æä»¶åæ¢ççæ,å é€ééå¯ ââ 忢/å¯çšéè¿ patch å±ç Cordis HMR ç«å³çæ;å é€åšéå¯ dsh web åæå®å šåžèœœ(ç®åœå·²è¿åæ¶ç«,坿åšè¿å)ã
- å«åæ¢/å é€ç®¡çäœ èªå·± ââ åæ
dsh-plugin-manageräŒè¿çé¢äžèµ·åæ;å é€å®å该çé¢åšéå¯åæ¶å€±ãæ¢å€:çŒèŸcordis.patch.ymlææ~/.dsh/.trash/plugins/<âŠ>ç§»ååäœå¹¶æ¹åpackage.jsonã - ççææèŸ¹ç ââ é çœ®å®æ¶çæ,äœå·²åŒäŒè¯çå·¥å ·å衚äžèªåšå·æ°,è¯·åŒæ°äŒè¯ã
- åªäœçšäºåœå profile ââ é»è®€ç®¡ç
~/.dsh/profiles/web/,å ¶ä» profile éçžåºè°æŽè·¯åŸã
ð 讞å¯è¯
æ¬é¡¹ç®åºäº liqichen/dsh-plugin-manager äºæ¬¡å å·¥,沿çšå ¶ MIT 讞å¯è¯,åå§çæåœ liqichen ææã
æ¬é¡¹ç®äžº liqichen/dsh-plugin-manager çäºæ¬¡å å·¥çæ¬;è§åŸå¥œçšçè¯ç¹äžª â,é®é¢æ¬¢è¿æ Issue,åäœåè§ åä»åºã



