← Back to home@snow-The

dsh-starter-kit

DSH 初级整合包 —— 一键基础环境。插件清单的唯一事实源是 scripts/manifest.json;install.ps1 / install.sh / README 都从它取,不再各写一份(旧版三处各写一份,结果三方都漂了,README 的安装 URL 甚至指向不存在的分支)。

Stars
0
Language
JavaScript
Created
Aug 15, 2026
Updated
Oct 1, 2026

Introduction

dsh-starter-kit — DSH 初级整合包

给新用户 / 新机器的一键基础环境:自研插件 + 精选第三方插件 + 官方文档 MCP。 一条命令装好,装完自动验证并报告问题。

世代:DSH 0.2.0+。 不兼容 0.1.x —— 见「世代与兼容性」,那不是口号,是宿主会强制执行的。

一键安装

# Windows (PowerShell)
irm https://raw.githubusercontent.com/snow-The/dsh-starter-kit/master/install.ps1 | iex
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/snow-The/dsh-starter-kit/master/install.sh | sh

⚠️ 注意 URL 里是 master,不是 main。本仓库的分支名是 master;早先 README 写 main, 那条命令直接 404(已实测)。scripts/check.mjs 会核对 README、两个安装脚本与真实分支名是否一致, 所以这个错不会再悄悄回来。

可选参数:--profile <name> 指定 profile(默认 web)、--skip-verify 跳过装机后验证。 PowerShell 版对应 -Profile / -SkipVerify。

安装脚本做什么

  1. 清单自检 —— 先验证 scripts/manifest.json 不含退役包、URL 分支名正确、脚本没有吞掉宿主输出
  2. clone 或更新 snow-The/dsh-own-plugins 到 ~/.dsh-starter/plugins
  3. 安装自研插件(file: 安装,dist 已提交,无需构建)
  4. 安装第三方插件
  5. 写入 mslearn MCP 配置(幂等,已存在则跳过)
  6. 验证 —— 用宿主自己的 dsh --profile <name> --dump-config 取实际组合结果,核对每个包是否真的加载、是否被禁用
  7. 打印结果与下一步

第 6 步是这次重写的重点。 旧版装完只打印 Done,而且把 dsh plugin 的输出丢进了 Out-Null —— 于是宿主说「这个插件会被禁用」时,用户一个字都看不到。一个"成功"但装出坏 profile 的安装,比一个明确失败的安装更糟。

包含什么

清单的单一事实源是 scripts/manifest.json,安装脚本从它读取 —— 早先这份清单在 install.ps1、install.sh、README 里各写一份,结果三方都漂了。

自研插件(github.com/snow-The/dsh-own-plugins)

包功能
@snow-the/dsh-gitkit结构化 git 工具(status/diff/log/commit/branch),无 shell 注入
@snow-the/dsh-snapshot~/.dsh 备份/恢复/轮换(sha256 + 路径穿越防护)
@snow-the/dsh-plugin-doctor插件静态体检 —— 装任何第三方插件前先扫
@snow-the/dsh-skill-pack精选跨平台技能的载体
@snow-the/dsh-search通用检索(modsearch 退役后由它补位)

入选条件(由 scripts/check.mjs 强制):dist/ 已提交(file: 安装不跑构建)、doctor 扫描 SAFE、通用而非专用。

第三方插件

包功能
dshmarket插件市场界面(浏览/搜索/一键装社区插件)
@deepseek-ai/dsh-experimental-agent-team-profile原生多 agent 团队
@linxin666/dsh-web-allUI 全家桶(文件树/预览/SCM/任务板/git 图/SSH/皮肤)
aegis软件工程方法包

官方文档 MCP(免费无 key)

mslearn —— Microsoft Learn 官方文档直达(streamable-http → learn.microsoft.com/api/mcp)。 安装脚本会自动写入 cordis.patch.yml。

已移除(不要再加回来)

scripts/check.mjs 会把它们判成失败,理由一并记在这里:

包为什么移除
@liustack/modlens作者已声明弃用 —— DSH 0.2.0 已能原生读图
@liustack/modsearch作者已声明弃用(dsh-search 补位)
@anionex/dsh-vision-toolkit作者已声明弃用 —— DSH 0.2.0 已能原生读图
@nanmicoder/dsh-agent-teams被原生 @deepseek-ai/dsh-experimental-agent-team-profile 取代
@openviking/dsh-memory-pluginpeer 是 >=0.1.0-rc.6 <0.2.0,在 0.2.0 宿主上必然 ERESOLVE
dsh-web · @linxin666/dsh-web-ui-all · @linxin666/dsh-client-ui-skin-center均被 @linxin666/dsh-web-all 收拢

世代与兼容性

本整合包面向 DSH 0.2.0+,不兼容 0.1.x。

每个自研插件在自己的 package.json 里声明:

"peerDependencies": { "@deepseek-ai/dsh": ">=0.2.0-rc.1" }

宿主启动预检时用 semver.satisfies(runtime, range, { includePrerelease: true }) 比对, 不满足就把该插件禁用(只在 stderr 留一行)。所以在 0.1.x 上装本整合包,插件一个都不会加载。

为什么下界是 >=0.2.0-rc.1 而不是字面的 >=0.2.0:宿主比对带 includePrerelease,而 0.2.0-rc.2 不满足 >=0.2.0。写 >=0.2.0 会让每个插件在 0.2.0 正式版发布前就被禁用。两者划的是同一条世代界线, 前者今天可用。

手动安装(不用脚本)

git clone --depth 1 https://github.com/snow-The/dsh-own-plugins ~/.dsh-starter/plugins

# 自研(file: 安装,dist 已提交)
for p in dsh-gitkit dsh-snapshot dsh-plugin-doctor dsh-skill-pack dsh-search; do
  dsh plugin --profile web add "file:$HOME/.dsh-starter/plugins/$p"
done

# 第三方
dsh plugin --profile web add dshmarket
dsh plugin --profile web add @deepseek-ai/dsh-experimental-agent-team-profile
dsh plugin --profile web add @linxin666/dsh-web-all
dsh plugin --profile web add github:GanyuanRan/Aegis

然后手动把这段加到 ~/.dsh/profiles/web/cordis.patch.yml:

- insert:
    - id: mcp-mslearn
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: mslearn
        transport: streamable-http
        url: https://learn.microsoft.com/api/mcp
        failOnStartupError: false

自检与验证

node scripts/check.mjs                      # 清单自检(安装前,脚本会自己调)
node scripts/verify.mjs --profile web       # 装机后验证(安装后,脚本会自己调)

check.mjs 断言:清单不含退役包、自研插件 dist/ 已提交、README 与两个安装脚本的 URL 分支名和真实分支一致、 安装脚本没有吞掉 dsh plugin 的输出。

verify.mjs 用宿主自己的组合结果(--dump-config)核对:每个包是否真的进了配置、 是否被标记 disabled、可加载入口是否就位、自研插件是否带 0.2.0 世代声明。

合规说明

  • 自研插件:doctor 静态扫描 SAFE(文档链接/示例 URL 类命中已人工核实)
  • 第三方插件:安装前建议跑 doctor_scan 再装(@snow-the/dsh-plugin-doctor 提供)
  • 本整合包不包含任何未审计的第三方插件,也不含任何 API key

故障排查

现象原因与处理
一键安装命令 404URL 里的分支名不对。本仓库是 master;若你改过分支名,同步改 README 与两个脚本(check.mjs 会核对)。
装完插件一个都没加载宿主版本低于 0.2.0。Arch 启动时的 stderr,宿主会逐个打印被禁用的插件及原因。
某个包 [失败]npm 包名已变更/下架,或 git 依赖需要能访问 GitHub,或 allowBuilds 缺条目(见上方 pnpm 提示)。
verify.mjs 报某包未出现在组合结果里该包可能未安装,或是聚合包(如 dsh-web-all)在 dump 里以内部行出现 —— 后者只提示不判失败。
想装到别的 profile--profile <name>(PowerShell:-Profile <name>)。

License

MIT