@wenaixi/dsh-superpower 6.3.0-dsh.10
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/LICENSE +22 -0
- package/README.md +110 -0
- package/cordis.patch.yml +3 -0
- package/lib/superpowers.d.ts +44 -0
- package/lib/superpowers.d.ts.map +1 -0
- package/lib/superpowers.js +323 -0
- package/lib/superpowers.js.map +1 -0
- package/package.json +66 -0
- package/skills/superpower-brainstorming/SKILL.md +207 -0
- package/skills/superpower-brainstorming/scripts/frame-template.html +213 -0
- package/skills/superpower-brainstorming/scripts/helper.js +167 -0
- package/skills/superpower-brainstorming/scripts/server.cjs +723 -0
- package/skills/superpower-brainstorming/scripts/start-server.sh +209 -0
- package/skills/superpower-brainstorming/scripts/stop-server.sh +120 -0
- package/skills/superpower-brainstorming/spec-document-reviewer-prompt.md +47 -0
- package/skills/superpower-brainstorming/visual-companion.md +293 -0
- package/skills/superpower-dispatching-parallel-agents/SKILL.md +167 -0
- package/skills/superpower-executing-plans/SKILL.md +64 -0
- package/skills/superpower-finishing-a-development-branch/SKILL.md +202 -0
- package/skills/superpower-receiving-code-review/SKILL.md +205 -0
- package/skills/superpower-requesting-code-review/SKILL.md +95 -0
- package/skills/superpower-requesting-code-review/code-reviewer.md +169 -0
- package/skills/superpower-subagent-driven-development/SKILL.md +347 -0
- package/skills/superpower-subagent-driven-development/implementer-prompt.md +133 -0
- package/skills/superpower-subagent-driven-development/re-review-prompt.md +84 -0
- package/skills/superpower-subagent-driven-development/scripts/review-package +46 -0
- package/skills/superpower-subagent-driven-development/scripts/sdd-workspace +40 -0
- package/skills/superpower-subagent-driven-development/scripts/task-brief +41 -0
- package/skills/superpower-subagent-driven-development/task-reviewer-prompt.md +129 -0
- package/skills/superpower-systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/superpower-systematic-debugging/SKILL.md +283 -0
- package/skills/superpower-systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/superpower-systematic-debugging/condition-based-waiting.md +116 -0
- package/skills/superpower-systematic-debugging/defense-in-depth.md +122 -0
- package/skills/superpower-systematic-debugging/find-polluter.sh +72 -0
- package/skills/superpower-systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/superpower-systematic-debugging/test-academic.md +14 -0
- package/skills/superpower-systematic-debugging/test-pressure-1.md +58 -0
- package/skills/superpower-systematic-debugging/test-pressure-2.md +68 -0
- package/skills/superpower-systematic-debugging/test-pressure-3.md +69 -0
- package/skills/superpower-test-driven-development/SKILL.md +322 -0
- package/skills/superpower-test-driven-development/writing-good-tests.md +145 -0
- package/skills/superpower-using-git-worktrees/SKILL.md +167 -0
- package/skills/superpower-using-superpowers/SKILL.md +64 -0
- package/skills/superpower-using-superpowers/references/antigravity-tools.md +23 -0
- package/skills/superpower-using-superpowers/references/codex-tools.md +108 -0
- package/skills/superpower-using-superpowers/references/dsh-tools.md +47 -0
- package/skills/superpower-using-superpowers/references/gemini-tools.md +63 -0
- package/skills/superpower-using-superpowers/references/hermes-tools.md +56 -0
- package/skills/superpower-using-superpowers/references/pi-tools.md +16 -0
- package/skills/superpower-verification-before-completion/SKILL.md +120 -0
- package/skills/superpower-writing-plans/SKILL.md +160 -0
- package/skills/superpower-writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/skills/superpower-writing-skills/SKILL.md +679 -0
- package/skills/superpower-writing-skills/anthropic-best-practices.md +1146 -0
- package/skills/superpower-writing-skills/examples/CLAUDE_MD_TESTING.md +188 -0
- package/skills/superpower-writing-skills/graphviz-conventions.dot +172 -0
- package/skills/superpower-writing-skills/persuasion-principles.md +187 -0
- package/skills/superpower-writing-skills/render-graphs.js +169 -0
- package/skills/superpower-writing-skills/testing-skills-with-subagents.md +384 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 obra/superpowers contributors
|
|
4
|
+
Copyright (c) 2026 dsh-superpower contributors
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# dsh-superpower
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@wenaixi/dsh-superpower)
|
|
4
|
+
[](./LICENSE)
|
|
5
|
+
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
6
|
+
|
|
7
|
+
[obra/superpowers](https://github.com/obra/superpowers) 的 DSH 完整移植 — 14 个技能注入 `ctx.skills`,开箱即用,全中文。
|
|
8
|
+
|
|
9
|
+
## 安装
|
|
10
|
+
|
|
11
|
+
> 以主工作台 `web` 为例,其它 profile 改 `--profile` 后名字即可。均走 `dsh.bundle`,零构建、零白名单。
|
|
12
|
+
|
|
13
|
+
**前置**:`Node >=20`、`pnpm >=9`、`dsh`(`npm i -g @deepseek-ai/dsh`)。
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# A — npm(推荐,自动安装最新)
|
|
17
|
+
dsh plugin --profile web add @wenaixi/dsh-superpower
|
|
18
|
+
|
|
19
|
+
# B — GitHub 直装(无视镜像延迟)
|
|
20
|
+
dsh plugin --profile web add github:Wenaixi/dsh-superpower
|
|
21
|
+
|
|
22
|
+
# 验证
|
|
23
|
+
dsh --profile web --dump-config | grep -A2 "@wenaixi/dsh-superpower"
|
|
24
|
+
# # == @wenaixi/dsh-superpower / - id: superpowers
|
|
25
|
+
|
|
26
|
+
dsh --profile web # 进会话,技能自动可用
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
> 如需锁定版本,在包名后追加 `@<version>`(如 `@wenaixi/dsh-superpower@<version>`)或 `#v<version>`(GitHub 形式)。
|
|
30
|
+
>
|
|
31
|
+
> > ⚠️ 旧名 `dsh-superpower`(无 scope)已废弃并 `npm deprecate`,请改用 `@wenaixi/dsh-superpower`。
|
|
32
|
+
|
|
33
|
+
其它:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git clone https://github.com/Wenaixi/dsh-superpower.git && cd dsh-superpower
|
|
37
|
+
pnpm install && pnpm build && node scripts/verify.mjs # 14/14 PASS
|
|
38
|
+
dsh plugin --profile web add ./ # 本地路径安装
|
|
39
|
+
pnpm pack && dsh plugin --profile web add ./wenaixi-dsh-superpower-*.tgz # 离线 tarball
|
|
40
|
+
|
|
41
|
+
# 更新 / 卸载(同样自动取最新)
|
|
42
|
+
dsh plugin --profile web add @wenaixi/dsh-superpower
|
|
43
|
+
dsh plugin --profile web remove @wenaixi/dsh-superpower
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 是什么
|
|
47
|
+
|
|
48
|
+
强制性方法论而非可选建议:先设计 → 计划切片 → TDD → 系统化调试 → 评审集成。随 `dsh.bundle` 安装/卸载,不污染用户目录,HMR 自动重建。
|
|
49
|
+
|
|
50
|
+
## 包含技能
|
|
51
|
+
|
|
52
|
+
| 技能 | 触发时机 |
|
|
53
|
+
|---|---|
|
|
54
|
+
| `superpower-using-superpowers` | 任意会话起点(1% 原则) |
|
|
55
|
+
| `superpower-brainstorming` | 新功能前,Spike / Bounded / Architectural 分级 |
|
|
56
|
+
| `superpower-writing-plans` | 设计获批后,切 2–5 分钟任务 |
|
|
57
|
+
| `superpower-using-git-worktrees` | 隔离分支 |
|
|
58
|
+
| `superpower-executing-plans` / `superpower-subagent-driven-development` | 按计划执行,后者每任务一子智能体 + 两阶段评审 |
|
|
59
|
+
| `superpower-dispatching-parallel-agents` | 并行分发 |
|
|
60
|
+
| `superpower-test-driven-development` | RED-GREEN-REFACTOR |
|
|
61
|
+
| `superpower-systematic-debugging` / `superpower-verification-before-completion` | 调试闭环 |
|
|
62
|
+
| `superpower-requesting` / `superpower-receiving-code-review` | 评审 |
|
|
63
|
+
| `superpower-finishing-a-development-branch` | 集成 |
|
|
64
|
+
| `superpower-writing-skills` | 写新技能 |
|
|
65
|
+
|
|
66
|
+
映射:`Bash→pwsh`、`Read/Write→fs` 等见 `skills/superpower-using-superpowers/references/dsh-tools.md`。
|
|
67
|
+
|
|
68
|
+
## 使用
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
“帮我做 XXX” → superpower-brainstorming → superpower-writing-plans → superpower-subagent-driven-development
|
|
72
|
+
“修这个缺陷” → superpower-systematic-debugging
|
|
73
|
+
“帮我评审” → superpower-requesting-code-review
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
校验:`await ctx.skills.list({cwd})` 应有 14 条 `provider: superpowers`。
|
|
77
|
+
|
|
78
|
+
## 开发
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pnpm install && pnpm build && pnpm typecheck && node scripts/verify.mjs
|
|
82
|
+
dsh --profile web --dump-config # 断言 "# == @wenaixi/dsh-superpower"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 目录
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
src/superpowers.ts # SkillProvider rank 550
|
|
89
|
+
skills/ # 14 技能(中文化)
|
|
90
|
+
lib/ # 已提交,GitHub 直装零构建
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
版本:基线与上游 `obra/superpowers` 严格同步,本包以 `-dsh.N` 在基线上演进;`tag v*` 触发发布,`push` 仅跑 CI。详见 `CHANGELOG.md`。
|
|
94
|
+
|
|
95
|
+
## 常见问题
|
|
96
|
+
|
|
97
|
+
404/镜像延迟请改用 GitHub 形式;白名单不需要;`latest` 可用 `npm view @wenaixi/dsh-superpower --registry https://registry.npmjs.org` 查看。
|
|
98
|
+
|
|
99
|
+
## 协议
|
|
100
|
+
|
|
101
|
+
MIT,与上游 [obra/superpowers](https://github.com/obra/superpowers) 保持一致。详见 [`LICENSE`](./LICENSE)。
|
|
102
|
+
|
|
103
|
+
## 贡献
|
|
104
|
+
|
|
105
|
+
欢迎提交 Issue / PR。详见 [`CONTRIBUTING.md`](./CONTRIBUTING.md)。
|
|
106
|
+
|
|
107
|
+
## 致谢
|
|
108
|
+
|
|
109
|
+
- 上游作者 [Jesse Vincent](https://blog.fsck.com) 与 [Prime Radiant](https://primeradiant.com)
|
|
110
|
+
- [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 的 `dsh-skill` 三角色架构
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @wenaixi/dsh-superpower — DSH 移植版 Superpowers
|
|
3
|
+
*
|
|
4
|
+
* 将 obra/superpowers 的 14 个 skill 以 DSH 原生 SkillProvider 形式暴露,
|
|
5
|
+
* 通过 ctx.skills.registerProvider 注入全局层,rank 550 使 project 级 skill 可覆盖。
|
|
6
|
+
*/
|
|
7
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
8
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
9
|
+
export declare const Config: Schema<Schemastery.ObjectS<{
|
|
10
|
+
/** 注册到 ctx.skills 的 provider 名称,默认为 superpowers;不可为保留名 runtime */
|
|
11
|
+
providerName: Schema<string, string>;
|
|
12
|
+
/** skill 目录绝对路径,默认取包内 skills/;便于本地调试指向其他目录 */
|
|
13
|
+
skillDir: Schema<string, string>;
|
|
14
|
+
}>, Schemastery.ObjectT<{
|
|
15
|
+
/** 注册到 ctx.skills 的 provider 名称,默认为 superpowers;不可为保留名 runtime */
|
|
16
|
+
providerName: Schema<string, string>;
|
|
17
|
+
/** skill 目录绝对路径,默认取包内 skills/;便于本地调试指向其他目录 */
|
|
18
|
+
skillDir: Schema<string, string>;
|
|
19
|
+
}>>;
|
|
20
|
+
export interface Config {
|
|
21
|
+
providerName: string;
|
|
22
|
+
skillDir?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const name = "superpowers";
|
|
25
|
+
export declare const inject: readonly ["skills"];
|
|
26
|
+
export declare function apply(ctx: Context, config: Config): void;
|
|
27
|
+
declare const _default: {
|
|
28
|
+
name: string;
|
|
29
|
+
inject: readonly ["skills"];
|
|
30
|
+
Config: Schema<Schemastery.ObjectS<{
|
|
31
|
+
/** 注册到 ctx.skills 的 provider 名称,默认为 superpowers;不可为保留名 runtime */
|
|
32
|
+
providerName: Schema<string, string>;
|
|
33
|
+
/** skill 目录绝对路径,默认取包内 skills/;便于本地调试指向其他目录 */
|
|
34
|
+
skillDir: Schema<string, string>;
|
|
35
|
+
}>, Schemastery.ObjectT<{
|
|
36
|
+
/** 注册到 ctx.skills 的 provider 名称,默认为 superpowers;不可为保留名 runtime */
|
|
37
|
+
providerName: Schema<string, string>;
|
|
38
|
+
/** skill 目录绝对路径,默认取包内 skills/;便于本地调试指向其他目录 */
|
|
39
|
+
skillDir: Schema<string, string>;
|
|
40
|
+
}>>;
|
|
41
|
+
apply: typeof apply;
|
|
42
|
+
};
|
|
43
|
+
export default _default;
|
|
44
|
+
//# sourceMappingURL=superpowers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../src/superpowers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AASlD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAM7C,eAAO,MAAM,MAAM;IACjB,kEAAkE;;IAElE,8CAA8C;;;IAF9C,kEAAkE;;IAElE,8CAA8C;;GAEF,CAAA;AAE9C,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAMD,eAAO,MAAM,IAAI,gBAAgB,CAAA;AACjC,eAAO,MAAM,MAAM,qBAAsB,CAAA;AA0RzC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAqBxD;;;;;QA/TC,kEAAkE;;QAElE,8CAA8C;;;QAF9C,kEAAkE;;QAElE,8CAA8C;;;;;AA+ThD,wBAA8C"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @wenaixi/dsh-superpower — DSH 移植版 Superpowers
|
|
3
|
+
*
|
|
4
|
+
* 将 obra/superpowers 的 14 个 skill 以 DSH 原生 SkillProvider 形式暴露,
|
|
5
|
+
* 通过 ctx.skills.registerProvider 注入全局层,rank 550 使 project 级 skill 可覆盖。
|
|
6
|
+
*/
|
|
7
|
+
import { readdir, readFile, stat } from 'node:fs/promises';
|
|
8
|
+
import { dirname, join, resolve } from 'node:path';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
|
+
import { parse } from 'yaml';
|
|
11
|
+
import { isSkillName } from '@deepseek-ai/dsh-skill';
|
|
12
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Config — 默认值写在 schema 里;可选字段用可选属性声明
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
export const Config = Schema.object({
|
|
17
|
+
/** 注册到 ctx.skills 的 provider 名称,默认为 superpowers;不可为保留名 runtime */
|
|
18
|
+
providerName: Schema.string().default('superpowers'),
|
|
19
|
+
/** skill 目录绝对路径,默认取包内 skills/;便于本地调试指向其他目录 */
|
|
20
|
+
skillDir: Schema.string(),
|
|
21
|
+
}).description('@wenaixi/dsh-superpower 插件配置');
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// 插件元信息
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
export const name = 'superpowers';
|
|
26
|
+
export const inject = ['skills'];
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// 工具函数
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
const SUPERPOWERS_RANK = 550;
|
|
31
|
+
const RUNTIME_PROVIDER = 'runtime';
|
|
32
|
+
function assertNotRuntimeProvider(providerName) {
|
|
33
|
+
if (providerName === RUNTIME_PROVIDER) {
|
|
34
|
+
throw new Error(`[superpowers] providerName "${RUNTIME_PROVIDER}" 为保留名,不可用`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function stringField(data, key) {
|
|
38
|
+
const v = data[key];
|
|
39
|
+
return typeof v === 'string' && v.length > 0 ? v : undefined;
|
|
40
|
+
}
|
|
41
|
+
function optionalString(data, key) {
|
|
42
|
+
const v = data[key];
|
|
43
|
+
return typeof v === 'string' && v.length > 0 ? { [key]: v } : {};
|
|
44
|
+
}
|
|
45
|
+
function frontmatterBoolean(data, key) {
|
|
46
|
+
if (!Object.hasOwn(data, key))
|
|
47
|
+
return undefined;
|
|
48
|
+
const v = data[key];
|
|
49
|
+
if (typeof v === 'boolean')
|
|
50
|
+
return v;
|
|
51
|
+
if (v === 1 || v === '1')
|
|
52
|
+
return true;
|
|
53
|
+
if (v === 0 || v === '0')
|
|
54
|
+
return false;
|
|
55
|
+
if (typeof v === 'string') {
|
|
56
|
+
switch (v.toLowerCase()) {
|
|
57
|
+
case 'true':
|
|
58
|
+
case 'yes':
|
|
59
|
+
case 'on':
|
|
60
|
+
return true;
|
|
61
|
+
case 'false':
|
|
62
|
+
case 'no':
|
|
63
|
+
case 'off':
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
throw new TypeError(`frontmatter field "${key}" must be a boolean`);
|
|
68
|
+
}
|
|
69
|
+
function rejectLegacyKey(data, legacy, canonical) {
|
|
70
|
+
if (Object.hasOwn(data, legacy)) {
|
|
71
|
+
throw new Error(`frontmatter field "${legacy}" is unsupported; use "${canonical}"`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function parseInvocationPolicy(data) {
|
|
75
|
+
rejectLegacyKey(data, 'disableModelInvocation', 'disable-model-invocation');
|
|
76
|
+
rejectLegacyKey(data, 'modelInvocable', 'disable-model-invocation');
|
|
77
|
+
rejectLegacyKey(data, 'userInvocable', 'user-invocable');
|
|
78
|
+
const disableModelInvocation = frontmatterBoolean(data, 'disable-model-invocation');
|
|
79
|
+
const userInvocable = frontmatterBoolean(data, 'user-invocable');
|
|
80
|
+
return {
|
|
81
|
+
modelInvocable: disableModelInvocation !== true,
|
|
82
|
+
userInvocable: userInvocable !== false,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function optionalMetadata(data) {
|
|
86
|
+
const v = data['metadata'];
|
|
87
|
+
if (typeof v === 'object' && v !== null && !Array.isArray(v))
|
|
88
|
+
return { metadata: v };
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
function findClosingFrontmatter(raw, start) {
|
|
92
|
+
let lineStart = start;
|
|
93
|
+
while (lineStart <= raw.length) {
|
|
94
|
+
const nl = raw.indexOf('\n', lineStart);
|
|
95
|
+
const lineEnd = nl < 0 ? raw.length : nl;
|
|
96
|
+
if (raw.slice(lineStart, lineEnd).replace(/\r$/, '') === '---') {
|
|
97
|
+
return { start: lineStart, bodyStart: nl < 0 ? raw.length : nl + 1 };
|
|
98
|
+
}
|
|
99
|
+
if (nl < 0)
|
|
100
|
+
return undefined;
|
|
101
|
+
lineStart = nl + 1;
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
function parseFrontmatter(raw) {
|
|
106
|
+
// 去 BOM:Windows 编辑器易带 \uFEFF,导致首行非 --- 而被静默跳过
|
|
107
|
+
if (raw.charCodeAt(0) === 0xfeff)
|
|
108
|
+
raw = raw.slice(1);
|
|
109
|
+
const firstNl = raw.indexOf('\n');
|
|
110
|
+
if (firstNl < 0)
|
|
111
|
+
return undefined;
|
|
112
|
+
if (raw.slice(0, firstNl).replace(/\r$/, '') !== '---')
|
|
113
|
+
return undefined;
|
|
114
|
+
const start = firstNl + 1;
|
|
115
|
+
const closing = findClosingFrontmatter(raw, start);
|
|
116
|
+
if (!closing)
|
|
117
|
+
return undefined;
|
|
118
|
+
const parsed = parse(raw.slice(start, closing.start));
|
|
119
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
120
|
+
return undefined;
|
|
121
|
+
return { data: parsed, body: raw.slice(closing.bodyStart) };
|
|
122
|
+
}
|
|
123
|
+
function resolveDefaultSkillDir(configSkillDir) {
|
|
124
|
+
if (configSkillDir)
|
|
125
|
+
return resolve(configSkillDir);
|
|
126
|
+
// 包内 skills/ 目录:相对于本文件 lib/superpowers.js -> ../skills
|
|
127
|
+
// ESM 产物下 import.meta.url 始终可用,不做静默降级;解析失败则让调用方感知
|
|
128
|
+
const here = fileURLToPath(import.meta.url);
|
|
129
|
+
return resolve(dirname(here), '..', 'skills');
|
|
130
|
+
}
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
// Provider
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
class SuperpowersProvider {
|
|
135
|
+
name;
|
|
136
|
+
skillDir;
|
|
137
|
+
ctx;
|
|
138
|
+
constructor(ctx, _control, config) {
|
|
139
|
+
assertNotRuntimeProvider(config.providerName);
|
|
140
|
+
this.ctx = ctx;
|
|
141
|
+
this.name = config.providerName;
|
|
142
|
+
this.skillDir = resolveDefaultSkillDir(config.skillDir);
|
|
143
|
+
}
|
|
144
|
+
async list(options) {
|
|
145
|
+
options.signal?.throwIfAborted();
|
|
146
|
+
const candidates = [];
|
|
147
|
+
const seen = new Set();
|
|
148
|
+
let entries;
|
|
149
|
+
try {
|
|
150
|
+
entries = await readdir(this.skillDir, { withFileTypes: true, signal: options.signal });
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
const code = err?.code;
|
|
154
|
+
if (code === 'ENOENT' || code === 'ENOTDIR') {
|
|
155
|
+
this.ctx.logger.warn(`[superpowers] skillDir not found: ${this.skillDir}`);
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
161
|
+
options.signal?.throwIfAborted();
|
|
162
|
+
if (!entry.isDirectory())
|
|
163
|
+
continue;
|
|
164
|
+
if (entry.name.startsWith('.'))
|
|
165
|
+
continue;
|
|
166
|
+
const skillPath = join(this.skillDir, entry.name, 'SKILL.md');
|
|
167
|
+
try {
|
|
168
|
+
await stat(skillPath);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
const code = err?.code;
|
|
172
|
+
this.ctx.logger.debug(`[superpowers] skip ${entry.name}: no SKILL.md (${code ?? String(err)})`);
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
let parsed;
|
|
176
|
+
try {
|
|
177
|
+
parsed = await parseSkillFile(skillPath);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
this.ctx.logger.warn(`[superpowers] skip ${skillPath}: YAML 解析失败 — ${String(err)}`);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (!parsed) {
|
|
184
|
+
this.ctx.logger.warn(`[superpowers] skip ${entry.name}: missing or invalid frontmatter`);
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const { data } = parsed;
|
|
188
|
+
const skillName = stringField(data, 'name');
|
|
189
|
+
const description = stringField(data, 'description');
|
|
190
|
+
if (!skillName || !description) {
|
|
191
|
+
this.ctx.logger.warn(`[superpowers] skip ${skillPath}: frontmatter requires name and description`);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (!isSkillName(skillName)) {
|
|
195
|
+
this.ctx.logger.warn(`[superpowers] skip ${skillPath}: invalid skill name "${skillName}"`);
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (seen.has(skillName)) {
|
|
199
|
+
this.ctx.logger.warn(`[superpowers] skip ${skillPath}: duplicate skill name "${skillName}"`);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
// 目录名与 skill name 不一致时以 frontmatter 为准,但打印提示
|
|
203
|
+
if (skillName !== entry.name) {
|
|
204
|
+
this.ctx.logger.warn(`[superpowers] skill name "${skillName}" != directory "${entry.name}" (using frontmatter)`);
|
|
205
|
+
}
|
|
206
|
+
let invocation;
|
|
207
|
+
try {
|
|
208
|
+
invocation = parseInvocationPolicy(data);
|
|
209
|
+
}
|
|
210
|
+
catch (e) {
|
|
211
|
+
this.ctx.logger.warn(`[superpowers] skip ${skillPath}: ${String(e)}`);
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
seen.add(skillName);
|
|
215
|
+
candidates.push({
|
|
216
|
+
name: skillName,
|
|
217
|
+
description,
|
|
218
|
+
...optionalString(data, 'whenToUse'),
|
|
219
|
+
invocation,
|
|
220
|
+
source: 'bundled',
|
|
221
|
+
provider: this.name,
|
|
222
|
+
rank: SUPERPOWERS_RANK,
|
|
223
|
+
locator: { path: skillPath, directory: dirname(skillPath) },
|
|
224
|
+
resourceBase: { kind: 'directory', path: dirname(skillPath) },
|
|
225
|
+
path: skillPath,
|
|
226
|
+
...optionalMetadata(data),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return candidates;
|
|
230
|
+
}
|
|
231
|
+
async get(candidate, options) {
|
|
232
|
+
options.signal?.throwIfAborted();
|
|
233
|
+
const locator = candidate.locator;
|
|
234
|
+
if (!locator?.path || !locator?.directory)
|
|
235
|
+
return undefined;
|
|
236
|
+
let raw;
|
|
237
|
+
try {
|
|
238
|
+
raw = await readFile(locator.path, {
|
|
239
|
+
encoding: 'utf8',
|
|
240
|
+
signal: options.signal,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
if (err?.name === 'AbortError')
|
|
245
|
+
throw err;
|
|
246
|
+
const code = err?.code;
|
|
247
|
+
if (code === 'ENOENT')
|
|
248
|
+
return undefined;
|
|
249
|
+
this.ctx.logger.warn(`[superpowers] get ${candidate.name}: read failed (${code ?? String(err)})`);
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
if (raw === undefined)
|
|
253
|
+
return undefined;
|
|
254
|
+
options.signal?.throwIfAborted();
|
|
255
|
+
const parsed = parseFrontmatter(raw);
|
|
256
|
+
if (!parsed) {
|
|
257
|
+
this.ctx.logger.warn(`[superpowers] get ${candidate.name}: missing or invalid frontmatter`);
|
|
258
|
+
return undefined;
|
|
259
|
+
}
|
|
260
|
+
const data = parsed.data;
|
|
261
|
+
const skillName = stringField(data, 'name');
|
|
262
|
+
const description = stringField(data, 'description');
|
|
263
|
+
if (!skillName || !description) {
|
|
264
|
+
this.ctx.logger.warn(`[superpowers] get ${candidate.name}: frontmatter requires name and description`);
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
if (skillName !== candidate.name) {
|
|
268
|
+
// 名称漂移视为失效,触发上层 invalidate
|
|
269
|
+
this.ctx.logger.warn(`[superpowers] get ${candidate.name}: name drift "${skillName}" != "${candidate.name}"`);
|
|
270
|
+
return undefined;
|
|
271
|
+
}
|
|
272
|
+
let invocation;
|
|
273
|
+
try {
|
|
274
|
+
invocation = parseInvocationPolicy(data);
|
|
275
|
+
}
|
|
276
|
+
catch (e) {
|
|
277
|
+
this.ctx.logger.warn(`[superpowers] get ${candidate.name}: ${String(e)}`);
|
|
278
|
+
return undefined;
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
name: skillName,
|
|
282
|
+
description,
|
|
283
|
+
...optionalString(data, 'whenToUse'),
|
|
284
|
+
invocation,
|
|
285
|
+
source: 'bundled',
|
|
286
|
+
provider: this.name,
|
|
287
|
+
resourceBase: { kind: 'directory', path: locator.directory },
|
|
288
|
+
path: locator.path,
|
|
289
|
+
...optionalMetadata(data),
|
|
290
|
+
content: parsed.body.trim(),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
async function parseSkillFile(path) {
|
|
295
|
+
const raw = await readFile(path, 'utf8');
|
|
296
|
+
const parsed = parseFrontmatter(raw);
|
|
297
|
+
if (!parsed)
|
|
298
|
+
return undefined;
|
|
299
|
+
return parsed;
|
|
300
|
+
}
|
|
301
|
+
// ---------------------------------------------------------------------------
|
|
302
|
+
// 插件入口 — 所有副作用走 ctx 注册,随 fiber 卸载自动清理
|
|
303
|
+
// ---------------------------------------------------------------------------
|
|
304
|
+
export function apply(ctx, config) {
|
|
305
|
+
assertNotRuntimeProvider(config.providerName);
|
|
306
|
+
ctx.logger.info(`[superpowers] registering provider "${config.providerName}"`);
|
|
307
|
+
// 将 provider 注册与事件监听放入同一个 effect,保证卸载时的清理顺序可控
|
|
308
|
+
ctx.effect(() => {
|
|
309
|
+
const disposeProvider = ctx.skills.registerProvider((control) => {
|
|
310
|
+
return new SuperpowersProvider(ctx, control, config);
|
|
311
|
+
});
|
|
312
|
+
// skills/change 为 emit 模式(见 @deepseek-ai/dsh-skill Events 定义:@mode emit),非 waterfall,无需 next()
|
|
313
|
+
const disposeListener = ctx.on('skills/change', () => {
|
|
314
|
+
ctx.logger.debug('[superpowers] skills catalog changed');
|
|
315
|
+
});
|
|
316
|
+
return () => {
|
|
317
|
+
disposeListener();
|
|
318
|
+
disposeProvider();
|
|
319
|
+
};
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
export default { name, inject, Config, apply };
|
|
323
|
+
//# sourceMappingURL=superpowers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../src/superpowers.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wenaixi/dsh-superpower",
|
|
3
|
+
"version": "6.3.0-dsh.10",
|
|
4
|
+
"description": "obra/superpowers 的 DSH 移植版 — 将完整的多智能体开发方法论以原生 DSH 技能开箱即用",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "lib/superpowers.js",
|
|
7
|
+
"types": "lib/superpowers.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"lib/",
|
|
10
|
+
"skills/",
|
|
11
|
+
"cordis.patch.yml",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc -p tsconfig.build.json",
|
|
17
|
+
"typecheck": "tsc --noEmit",
|
|
18
|
+
"lint": "eslint src --ext .ts 2>&1 || echo \"(no eslint config — skipped)\"",
|
|
19
|
+
"prepare": "npm run build",
|
|
20
|
+
"prepack": "npm run build",
|
|
21
|
+
"verify": "node scripts/verify.mjs"
|
|
22
|
+
},
|
|
23
|
+
"dsh": {
|
|
24
|
+
"bundle": {
|
|
25
|
+
"patch": "./cordis.patch.yml"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"yaml": "^2.4.2"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
33
|
+
"@deepseek-ai/dsh-skill": ">=0.0.1-rc.1 <0.1.0 || >=0.1.0-rc.1 <0.2.0-0",
|
|
34
|
+
"@deepseek-ai/schemastery": "^3.18.1"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
38
|
+
"@deepseek-ai/dsh-skill": "0.1.1-rc.2",
|
|
39
|
+
"@deepseek-ai/schemastery": "^3.18.1",
|
|
40
|
+
"typescript": "^5.6.0",
|
|
41
|
+
"@types/node": "^22.0.0"
|
|
42
|
+
},
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"repository": {
|
|
45
|
+
"type": "git",
|
|
46
|
+
"url": "https://github.com/Wenaixi/dsh-superpower"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://github.com/Wenaixi/dsh-superpower",
|
|
49
|
+
"bugs": {
|
|
50
|
+
"url": "https://github.com/Wenaixi/dsh-superpower/issues"
|
|
51
|
+
},
|
|
52
|
+
"keywords": [
|
|
53
|
+
"dsh",
|
|
54
|
+
"dsh-plugin",
|
|
55
|
+
"superpowers",
|
|
56
|
+
"skills",
|
|
57
|
+
"agent",
|
|
58
|
+
"methodology"
|
|
59
|
+
],
|
|
60
|
+
"engines": {
|
|
61
|
+
"node": ">=20"
|
|
62
|
+
},
|
|
63
|
+
"publishConfig": {
|
|
64
|
+
"access": "public"
|
|
65
|
+
}
|
|
66
|
+
}
|