@chenmk/superflow 0.2.5 → 0.3.0
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/README.md +4 -1
- package/README.zh-CN.md +1 -0
- package/assets/manifest.json +3 -1
- package/assets/prompts/superflow-clarify.md +6 -0
- package/assets/prompts/superflow-pipeline.md +8 -0
- package/assets/scripts/superflow-archive-command-hook.sh +80 -0
- package/assets/scripts/superflow-delivery-check.sh +23 -4
- package/assets/skills/superflow-archive/SKILL.md +5 -0
- package/assets/skills/superflow-clarify/SKILL.md +26 -7
- package/assets/skills/superflow-design/SKILL.md +28 -6
- package/assets/skills/superflow-docs/SKILL.md +11 -0
- package/assets/skills/superflow-pipeline/SKILL.md +29 -0
- package/assets/skills/superflow-pipeline/references/api-design-template.md +11 -0
- package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +27 -0
- package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +29 -1
- package/assets/skills/superflow-pipeline/references/quality-gate.md +2 -0
- package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +41 -0
- package/assets/skills/superflow-pipeline/references/test-execution-template.md +10 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +143 -0
- package/assets/skills/superflow-verify/SKILL.md +7 -0
- package/assets/skills-en/superflow-archive/SKILL.md +6 -0
- package/assets/skills-en/superflow-clarify/SKILL.md +26 -7
- package/assets/skills-en/superflow-design/SKILL.md +27 -5
- package/assets/skills-en/superflow-docs/SKILL.md +11 -0
- package/assets/skills-en/superflow-pipeline/SKILL.md +28 -0
- package/assets/skills-en/superflow-pipeline/references/api-design-template.md +13 -0
- package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +16 -0
- package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +17 -0
- package/assets/skills-en/superflow-pipeline/references/quality-gate.md +17 -0
- package/assets/skills-en/superflow-pipeline/references/superpower-technical-design-template.md +46 -0
- package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +12 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +143 -0
- package/assets/skills-en/superflow-verify/SKILL.md +8 -0
- package/dist/app/commands/archive.js +7 -3
- package/dist/app/commands/archive.js.map +1 -1
- package/dist/app/commands/change-guard.js +27 -0
- package/dist/app/commands/change-guard.js.map +1 -0
- package/dist/app/commands/design.js +2 -20
- package/dist/app/commands/design.js.map +1 -1
- package/dist/app/commands/init.js +1 -5
- package/dist/app/commands/init.js.map +1 -1
- package/dist/app/commands/update.js +2 -5
- package/dist/app/commands/update.js.map +1 -1
- package/dist/app/commands/verify.js +7 -3
- package/dist/app/commands/verify.js.map +1 -1
- package/dist/domains/config/context.js +1 -5
- package/dist/domains/config/context.js.map +1 -1
- package/dist/domains/deps.js +1 -5
- package/dist/domains/deps.js.map +1 -1
- package/dist/domains/hook.js +1 -0
- package/dist/domains/hook.js.map +1 -1
- package/dist/platform/assets.js +9 -0
- package/dist/platform/assets.js.map +1 -0
- package/package.json +3 -2
- package/scripts/release-notes-check.js +102 -0
package/dist/domains/hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/domains/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/domains/hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = path.dirname(__filename);
|
|
5
|
+
// src/platform/assets.ts and dist/platform/assets.js are both two levels
|
|
6
|
+
// below the package root.
|
|
7
|
+
export const PACKAGE_ROOT = path.resolve(__dirname, '..', '..');
|
|
8
|
+
export const ASSETS_DIR = path.join(PACKAGE_ROOT, 'assets');
|
|
9
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/platform/assets.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,yEAAyE;AACzE,0BAA0B;AAC1B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chenmk/superflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "SuperBridge Flow workflow CLI for Claude Code, Codex, and OpenCode",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
"dev": "tsx watch src/cli/index.ts",
|
|
40
40
|
"postinstall": "node scripts/postinstall.js",
|
|
41
41
|
"prepack": "npm run build",
|
|
42
|
-
"prepublishOnly": "npm test && npm run build",
|
|
42
|
+
"prepublishOnly": "npm run release:check && npm test && npm run build",
|
|
43
|
+
"release:check": "node scripts/release-notes-check.js",
|
|
43
44
|
"test": "vitest run",
|
|
44
45
|
"test:watch": "vitest",
|
|
45
46
|
"lint": "eslint src/ test/",
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
|
|
6
|
+
function runGit(args, cwd) {
|
|
7
|
+
return execFileSync("git", args, {
|
|
8
|
+
cwd,
|
|
9
|
+
encoding: "utf8",
|
|
10
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
11
|
+
}).trim();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function findPreviousTag(tag, cwd) {
|
|
15
|
+
try {
|
|
16
|
+
return runGit(["describe", "--tags", "--abbrev=0", `${tag}^`], cwd);
|
|
17
|
+
} catch {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function validateReleaseMetadata(metadata) {
|
|
23
|
+
const { tag, objectType, subject, body, previousTag } = metadata;
|
|
24
|
+
if (!/^v\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(tag)) {
|
|
25
|
+
throw new Error(`版本标签格式错误:${tag},应使用 vX.Y.Z`);
|
|
26
|
+
}
|
|
27
|
+
if (objectType !== "tag") {
|
|
28
|
+
throw new Error(`版本标签 ${tag} 必须是 annotated tag,不能是轻量标签`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const version = tag.slice(1);
|
|
32
|
+
if (!subject.includes(version)) {
|
|
33
|
+
throw new Error(`标签标题必须包含当前版本 ${version}`);
|
|
34
|
+
}
|
|
35
|
+
if (!body) {
|
|
36
|
+
throw new Error(`标签 ${tag} 缺少版本升级说明`);
|
|
37
|
+
}
|
|
38
|
+
if (!/(升级内容|upgrade from|changes since)/i.test(body)) {
|
|
39
|
+
throw new Error("版本说明必须明确标注“升级内容”或对应英文表述");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const requiredSections = [
|
|
43
|
+
["升级摘要", /^## (升级摘要|Upgrade Summary)$/im],
|
|
44
|
+
["主要更新", /^## (主要更新|Highlights|What's Changed)$/im],
|
|
45
|
+
["验证结果", /^## (验证结果|Quality Verification|Validation)$/im],
|
|
46
|
+
["升级方式", /^## (升级方式|Upgrade)$/im],
|
|
47
|
+
];
|
|
48
|
+
for (const [label, pattern] of requiredSections) {
|
|
49
|
+
if (!pattern.test(body)) {
|
|
50
|
+
throw new Error(`版本说明缺少“## ${label}”章节`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const bulletCount = body.match(/^[-*] .+/gm)?.length ?? 0;
|
|
54
|
+
if (bulletCount < 3) {
|
|
55
|
+
throw new Error("版本说明的主要更新和验证结果至少需要 3 条清晰条目");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (previousTag) {
|
|
59
|
+
const previousVersion = previousTag.replace(/^v/, "");
|
|
60
|
+
if (!body.includes(previousVersion)) {
|
|
61
|
+
throw new Error(`版本说明必须包含上一版本 ${previousVersion}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function inspectReleaseTag(tag, cwd = process.cwd()) {
|
|
67
|
+
const ref = `refs/tags/${tag}`;
|
|
68
|
+
const metadata = {
|
|
69
|
+
tag,
|
|
70
|
+
objectType: runGit(["cat-file", "-t", ref], cwd),
|
|
71
|
+
subject: runGit(["for-each-ref", ref, "--format=%(contents:subject)"], cwd),
|
|
72
|
+
body: runGit(["for-each-ref", ref, "--format=%(contents:body)"], cwd),
|
|
73
|
+
previousTag: findPreviousTag(tag, cwd),
|
|
74
|
+
};
|
|
75
|
+
validateReleaseMetadata(metadata);
|
|
76
|
+
return metadata;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function currentPackageTag() {
|
|
80
|
+
const packageJson = JSON.parse(
|
|
81
|
+
readFileSync(new URL("../package.json", import.meta.url), "utf8"),
|
|
82
|
+
);
|
|
83
|
+
return `v${packageJson.version}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function main() {
|
|
87
|
+
const tag = process.argv[2] ?? currentPackageTag();
|
|
88
|
+
const metadata = inspectReleaseTag(tag);
|
|
89
|
+
const from = metadata.previousTag || "首个版本";
|
|
90
|
+
process.stdout.write(`版本发布说明校验通过:${from} → ${tag}\n`);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const entryPath = process.argv[1] ? path.resolve(process.argv[1]) : "";
|
|
94
|
+
if (entryPath === fileURLToPath(import.meta.url)) {
|
|
95
|
+
try {
|
|
96
|
+
main();
|
|
97
|
+
} catch (error) {
|
|
98
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
99
|
+
process.stderr.write(`版本发布说明校验失败:${message}\n`);
|
|
100
|
+
process.exitCode = 1;
|
|
101
|
+
}
|
|
102
|
+
}
|