Skip to main content
W

dsh-superpower

wenaixi/dsh-superpower

Complete port of obra/superpowers for DeepSeek Harness: 14 methodology skills via a native SkillProvider (rank 550), covering brainstorming, planning, TDD, debugging, parallel agents and more, with Chinese-localized docs and zero-build install.

Install

dsh plugin --profile web add github:wenaixi/dsh-superpower

README

dsh-superpower

npm License: MIT DSH

@wenaixi/dsh-superpower

obra/superpowers 的 DSH 移植版。15 个技能注入 ctx.skills,装上就能用,正文全中文。

安装

需要 Node 20 以上、pnpm 11 以上,以及 dsh 本体(npm i -g @deepseek-ai/dsh)。下面以 web profile 为例,换个 profile 名字即可。

# A — npm(推荐,自动装最新)
dsh plugin --profile web add @wenaixi/dsh-superpower

# B — GitHub 直装(绕过镜像延迟)
dsh plugin --profile web add github:Wenaixi/dsh-superpower

# 验证
dsh --profile web --dump-config | grep -A2 "@wenaixi/dsh-superpower"
# # == @wenaixi/dsh-superpower / - id: superpowers

dsh --profile web  # 进会话,技能自动可用

要锁版本就在包名后加 @<version>(@wenaixi/dsh-superpower@7.2.0)或 #v7.2.0。

旧包名 dsh-superpower(不带 scope)已经废弃并 npm deprecate,请换成带 scope 的。

本地开发或离线安装:

git clone https://github.com/Wenaixi/dsh-superpower && cd dsh-superpower
pnpm install && pnpm build && node scripts/verify.mjs   # 15/15 PASS
dsh plugin --profile web add ./                           # 本地路径安装
pnpm pack && dsh plugin --profile web add ./wenaixi-dsh-superpower-*.tgz

# 更新 / 卸载
dsh plugin --profile web add @wenaixi/dsh-superpower
dsh plugin --profile web remove @wenaixi/dsh-superpower

是什么

一套强制的工程方法论,模型不按顺序走就会做错:先设计,再把计划切成可校验的小步,然后测试驱动,调试时先找根因,收尾前必须跑验证命令。装在 dsh.bundle 里,不往用户目录里写东西,卸载干净,HMR 会自动重建。

包含技能

技能什么时候用
using-superpowers每次会话开头,先查有没有该用的技能
brainstorming新功能动手前,把需求和设计问清楚
writing-plans设计定了,拆成一项一项能验证的任务
using-git-worktrees需要和当前工作区隔离
executing-plans在当前会话里亲自把计划跑完
subagent-driven-development计划里有多件独立的事,交给 subagent 分头做
dispatching-parallel-agents两件以上互不依赖的事并行分发
test-driven-development先写测试再写实现
systematic-debugging出了 bug,先定位根因再改
verification-before-completion说「完成」之前必须跑验证命令
requesting-code-review任务做完、发 PR 前求评审
receiving-code-review收到评审意见,先技术核实再改
diagnosing-superpowers会话出问题或成本异常时定位原因
finishing-a-development-branch决定合并、发 PR 还是留着分支
writing-skills新建或改技能

工具映射(Bash 到 pwsh、Read/Write 到 fs 等)在 skills/using-superpowers/references/dsh-tools.md。

同名技能谁生效

官方注册表在同层重名时按 rank 从小到大裁决。本包 rank 是 10,比 dsh-skill-filesystem 的项目级和用户级(100–500)以及官方内置 bundled(600)都小,所以只要有同名技能,本包这份生效,不会有两套规则打架。

技能开关

插件管理页里点开 @wenaixi/dsh-superpower 卡片,详情页底部就是开关面板。每个技能一个开关,关掉即两侧同时不可见:

  • 模型不再在可用技能目录里看到它,skill 工具调用也会被拒;
  • 你也没法再从斜杠命令补全或命令行技能清单里调它。

面板上方还有全部开启、全部关闭、恢复默认三个批量操作和一个搜索框。页头标着本包的 provider、rank、source,排查同名覆盖时用得上。

  • 拨动后立即生效,模型的下一轮对话就能看到新目录;当前这一轮不受影响。
  • 状态写在 profile 的 cordis.patch.yml 的 disabled 字段里,跟着 profile 一起备份迁移,重装插件不丢。
  • 只影响本包这 15 个技能,不碰官方和第三方插件提供的技能。
  • 语言边界:技能名与描述固定中文;面板 UI 文案跟随宿主界面语言(设置里切换语言即生效)。

7.3.0 及更早版本用过两个开关(模型可调用 / 用户可调用),对应 modelDisabled 与 userDisabled 两张表。这两个字段已废弃:升级后旧值继续生效,你第一次拨动开关时它们会被清空,配置收敛到 disabled 一张表。

使用

「帮我做 XXX」  → brainstorming → writing-plans → subagent-driven-development
「修这个缺陷」  → systematic-debugging
「帮我评审」    → requesting-code-review
「刚才会话出问题了」 → diagnosing-superpowers

校验:await ctx.skills.list({cwd}) 应该返回 15 条 provider: superpowers。

开发

pnpm install && pnpm build && pnpm typecheck && node scripts/verify.mjs

# 同名优先实测一:自研桩对照,无外部依赖,任何环境可跑
node scripts/check-same-name-priority.mjs

# 同名优先实测二:加载官方 @deepseek-ai/dsh-skill-filesystem 做同层实测
#   该包不在 profile 的直接依赖里,脚本会依次尝试 profile 入口、pnpm store
#   内 .pnpm 真实目录、全局 dsh 本体三处候选路径。
#   本机没装 dsh(比如纯 CI)就用上面的自研桩脚本做等价验证。
node scripts/check-same-name-priority-fs.mjs

# 技能开关端到端实测:真实 SkillRegistry 上验证默认全开、禁言生效、热失效闭环
node scripts/check-skill-switches.mjs

# 上游同步全量复核(deep + tokens 双绿)
node scripts/review-sync.mjs

dsh --profile web --dump-config  # 断言 "# == @wenaixi/dsh-superpower"

浏览器端验证

可选,需要本机装好 dsh 和 Python 的 playwright。两个脚本只做验证,地址和路径都从命令行传:

脚本验什么
scripts/browser/verify-switch-ui.py真机 Web UI 里点开插件卡片,逐个拨开关、点批量按钮、搜索过滤,再回读 cordis.patch.yml 确认落盘
scripts/browser/verify-model-perception.py四阶段闭环:UI 写完用宿主真实 SkillRegistry 复核两侧可见性,并逐行比对 UI 显示与宿主目录
# 1. 起一个装了本插件的 profile 的 Web 服务,记下启动日志里的 token
dsh --profile <profile> --no-open --port 3199

# 2. 面板全量操作
python scripts/browser/verify-switch-ui.py \
  http://127.0.0.1:3199 <token> .verify-shots <profile>/cordis.patch.yml .verify-shots/expected.json

# 3. UI 与宿主的四阶段闭环
python scripts/browser/verify-model-perception.py \
  http://127.0.0.1:3199 <token> <profile 目录> <profile>/cordis.patch.yml .verify-shots

expected.json 是 15 个技能名的数组,用来断言 UI 行序和 skills/ 目录一致:

node -e "import('./lib/superpowers.js').then(async m=>{const c=await m.SkillCatalog.fromDirectory('skills');require('fs').writeFileSync('expected.json',JSON.stringify(c.verifyIntegrity().entries.map(e=>e.document.name)))})"

截图落在 .verify-shots/,已在 .gitignore 里。

目录

src/superpowers.ts  # 插件入口,SkillProvider rank 10
src/catalog.ts      # SkillCatalog:技能编目、三键聚合指纹探测、快照复用、规范自检
src/document.ts     # SkillDocument:frontmatter 解析、契约转换、内建 selfTest
src/switches.ts     # 技能开关:禁言表解包与 invocation 覆盖,内建 selfTest
src/client.js       # 浏览器半侧:插件卡片详情页的单开关面板,手写 CJS factory
skills/             # 15 个技能正文与资源
lib/                # 已提交的构建产物,GitHub 直装免构建
locale/             # 插件卡片的标题与描述(中英);面板 UI 经官方 locale 注册表双语切换
icon.png            # 插件卡片、README 顶部、GitHub 头像共用
scripts/            # 门禁、同名裁决实测、开关实测、上游同步复核、浏览器验证
scripts/build-client.mjs      # 复制客户端产物后校验内联清单与 skills/ 目录一致

版本沿革

v7.0.0 起技能名回归上游命名(去掉 superpower- 前缀)并整批同步上游 obra/superpowers v6.4.2;插件变成 DSH 专属,移除了 Claude Code、Codex、Gemini CLI 等其它宿主的兼容层。npm 上的 7.0.0 发布在专属化改造之前,已废弃。

v7.1.0 提炼 SkillCatalog 与 SkillDocument 两个深度模块,把边界自检下沉进模块自身。

v7.1.1 修复官方 filesystem 同名实测脚本在 pnpm isolated 布局下定位不到 @deepseek-ai/dsh-skill-filesystem 的问题。

v7.2.0 加入技能开关面板,插件升级为双面形态(宿主侧注册技能,浏览器侧渲染开关面板),并补上图标与插件卡片元数据。

v7.3.0 技能快照失效判据升级为三键聚合指纹(目录 mtime + 根级目录名集合 + 各 SKILL.md mtime),消除内容编辑与增量新建两类失明窗口;技能总数魔法数收敛为导出常量;裸调用守卫正则按真实数据域修正并补全自检盲区;客户端清单比对改按技能名建 Map。

v7.2.1 固化面板语言边界:技能内容(名称与描述)固定中文不做技能级翻译;面板 UI 文案(标题、按钮、提示、meta 标签)全部并入 zh/en 词典、经官方 locale 注册表随宿主界面语言切换。底部 provider/rank/source 三个标注不再硬编码英文。

v7.4.0 每个技能从两个开关合并为一个,配置收敛到单张 disabled 表;brainstorming 的可视化协作改用 DSH 官方文档预览,不再随包附带 HTTP 服务脚本。

v7.4.1 修复开关保存失败:dsh-settings 的写入闸门逐条校验 op.path 是否落在 volatile 节点下,两个旧字段去掉 .volatile() 会让整批 mutate 被拒,恢复标注即可;面板页头补「面板版本」标注。

完整变更见 CHANGELOG.md。

常见问题

装完 404 或者版本不对? 换 GitHub 形式安装,或者加 --registry https://registry.npmjs.org 走官方源。不需要配置白名单。查最新版本用 npm view @wenaixi/dsh-superpower --registry https://registry.npmjs.org。

卡片标题、描述或图标是空的? 根因通常是 package.json 的 exports 没放行 ./package.json 和 ./locale/*.json,或者 icon 指向了包外的绝对路径。node scripts/verify.mjs 会把这两类问题连同 files 是否放行图标一起断言掉。

协议

MIT,与上游 obra/superpowers 一致。详见 LICENSE。

贡献

Issue 和 PR 都欢迎。详见 CONTRIBUTING.md。

致谢

Related plugins