@chenmk/superflow 0.5.12 → 0.5.13
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 +26 -0
- package/README.zh-CN.md +8 -0
- package/assets/manifest.json +33 -7
- package/assets/review-rules.json +24 -0
- package/assets/scripts/superflow-dependency-update-hook.sh +29 -0
- package/assets/scripts/superflow-doc-placement-hook.py +38 -0
- package/assets/scripts/superflow-java-build-hook.py +178 -0
- package/assets/scripts/superflow-java-stop-hook.sh +3 -0
- package/assets/scripts/superflow-loop-end-hook.sh +3 -0
- package/assets/scripts/superflow-loop-failure-hook.sh +3 -0
- package/assets/scripts/superflow-loop-observer.py +149 -0
- package/assets/scripts/superflow-sql-sync-hook.py +141 -3
- package/assets/skill-registry.json +229 -0
- package/assets/skills/openspec-propose/SKILL.md +14 -0
- package/assets/skills/superflow-clarify/SKILL.md +23 -1
- package/assets/skills/superflow-design/SKILL.md +6 -1
- package/assets/skills/superflow-docs/SKILL.md +12 -0
- package/assets/skills/superflow-implement/SKILL.md +8 -0
- package/assets/skills/superflow-pipeline/SKILL.md +28 -1
- package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +17 -0
- package/assets/skills/superflow-quick-dev/SKILL.md +44 -0
- package/assets/skills/superflow-verify/SKILL.md +41 -0
- package/assets/skills-en/openspec-propose/SKILL.md +14 -0
- package/assets/skills-en/superflow-clarify/SKILL.md +23 -1
- package/assets/skills-en/superflow-design/SKILL.md +6 -1
- package/assets/skills-en/superflow-docs/SKILL.md +12 -0
- package/assets/skills-en/superflow-implement/SKILL.md +9 -0
- package/assets/skills-en/superflow-pipeline/SKILL.md +30 -0
- package/assets/skills-en/superflow-quick-dev/SKILL.md +43 -0
- package/assets/skills-en/superflow-verify/SKILL.md +46 -0
- package/dist/app/cli.js +98 -0
- package/dist/app/cli.js.map +1 -1
- package/dist/app/commands/check.js +7 -3
- package/dist/app/commands/check.js.map +1 -1
- package/dist/app/commands/cleanup-audit.js +13 -0
- package/dist/app/commands/cleanup-audit.js.map +1 -0
- package/dist/app/commands/context-audit.js +43 -0
- package/dist/app/commands/context-audit.js.map +1 -0
- package/dist/app/commands/docs-audit.js +11 -0
- package/dist/app/commands/docs-audit.js.map +1 -0
- package/dist/app/commands/doctor.js +10 -0
- package/dist/app/commands/doctor.js.map +1 -1
- package/dist/app/commands/hook-migrate.js +25 -0
- package/dist/app/commands/hook-migrate.js.map +1 -0
- package/dist/app/commands/init.js +9 -19
- package/dist/app/commands/init.js.map +1 -1
- package/dist/app/commands/map-audit.js +10 -0
- package/dist/app/commands/map-audit.js.map +1 -0
- package/dist/app/commands/pipeline.js +13 -1
- package/dist/app/commands/pipeline.js.map +1 -1
- package/dist/app/commands/quick.js +136 -0
- package/dist/app/commands/quick.js.map +1 -0
- package/dist/app/commands/review-coverage.js +84 -0
- package/dist/app/commands/review-coverage.js.map +1 -0
- package/dist/app/commands/skill-audit.js +36 -0
- package/dist/app/commands/skill-audit.js.map +1 -0
- package/dist/app/commands/status.js +108 -7
- package/dist/app/commands/status.js.map +1 -1
- package/dist/app/commands/update.js +9 -12
- package/dist/app/commands/update.js.map +1 -1
- package/dist/domains/cleanup-audit.js +38 -0
- package/dist/domains/cleanup-audit.js.map +1 -0
- package/dist/domains/config/cli-help.js +14 -0
- package/dist/domains/config/cli-help.js.map +1 -1
- package/dist/domains/config/context.js +13 -10
- package/dist/domains/config/context.js.map +1 -1
- package/dist/domains/context-audit.js +39 -0
- package/dist/domains/context-audit.js.map +1 -0
- package/dist/domains/deps.js +18 -8
- package/dist/domains/deps.js.map +1 -1
- package/dist/domains/docs-audit.js +34 -0
- package/dist/domains/docs-audit.js.map +1 -0
- package/dist/domains/hook-migration.js +127 -0
- package/dist/domains/hook-migration.js.map +1 -0
- package/dist/domains/hook.js +76 -2
- package/dist/domains/hook.js.map +1 -1
- package/dist/domains/managed-work/control.js +56 -2
- package/dist/domains/managed-work/control.js.map +1 -1
- package/dist/domains/map-audit.js +23 -0
- package/dist/domains/map-audit.js.map +1 -0
- package/dist/domains/quick-dev/gate.js +91 -0
- package/dist/domains/quick-dev/gate.js.map +1 -0
- package/dist/domains/review/coverage.js +119 -0
- package/dist/domains/review/coverage.js.map +1 -0
- package/dist/domains/review/report.js +62 -0
- package/dist/domains/review/report.js.map +1 -0
- package/dist/domains/skill/registry.js +87 -0
- package/dist/domains/skill/registry.js.map +1 -0
- package/package.json +1 -1
- package/scripts/check-design-principles.mjs +4 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const STATES = new Set([
|
|
4
|
+
"DONE", "DONE_WITH_CONCERNS", "BLOCKED", "NEEDS_CONTEXT",
|
|
5
|
+
]);
|
|
6
|
+
export function auditReviewReport(content, projectRoot) {
|
|
7
|
+
const lines = content.split(/\r?\n/);
|
|
8
|
+
const first = lines.find((line) => line.trim())?.trim() ?? "";
|
|
9
|
+
const state = STATES.has(first)
|
|
10
|
+
? first
|
|
11
|
+
: null;
|
|
12
|
+
const issues = [];
|
|
13
|
+
if (!state)
|
|
14
|
+
issues.push("reviewer report must start with a four-state marker");
|
|
15
|
+
if (state === "DONE_WITH_CONCERNS" && !/^## Concerns\b/m.test(content)) {
|
|
16
|
+
issues.push("DONE_WITH_CONCERNS requires a Concerns section");
|
|
17
|
+
}
|
|
18
|
+
let findings = 0;
|
|
19
|
+
let inFindings = false;
|
|
20
|
+
for (const line of lines) {
|
|
21
|
+
if (/^## Findings\s*$/.test(line)) {
|
|
22
|
+
inFindings = true;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (/^## /.test(line))
|
|
26
|
+
inFindings = false;
|
|
27
|
+
if (!inFindings)
|
|
28
|
+
continue;
|
|
29
|
+
if (!/^\s*-\s+/.test(line))
|
|
30
|
+
continue;
|
|
31
|
+
findings += 1;
|
|
32
|
+
const anchor = /(?:^|\s)([^\s:]+):([1-9]\d*)\b/.exec(line);
|
|
33
|
+
if (!anchor || !validAnchor(projectRoot, anchor[1], Number(anchor[2]))) {
|
|
34
|
+
issues.push(`invalid finding anchor: ${line.trim()}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
state,
|
|
39
|
+
eligibleForTriage: state === "DONE" && issues.length === 0,
|
|
40
|
+
findings,
|
|
41
|
+
issues,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function validAnchor(root, candidate, line) {
|
|
45
|
+
const absolute = path.resolve(root, candidate);
|
|
46
|
+
const relative = path.relative(root, absolute);
|
|
47
|
+
if (relative.startsWith("..") || path.isAbsolute(relative))
|
|
48
|
+
return false;
|
|
49
|
+
try {
|
|
50
|
+
const realRoot = fs.realpathSync(root);
|
|
51
|
+
const realFile = fs.realpathSync(absolute);
|
|
52
|
+
const realRelative = path.relative(realRoot, realFile);
|
|
53
|
+
if (realRelative.startsWith("..") || path.isAbsolute(realRelative))
|
|
54
|
+
return false;
|
|
55
|
+
const content = fs.readFileSync(realFile, "utf8");
|
|
56
|
+
return line <= content.split(/\r?\n/).length;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/domains/review/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
const OWNER_PATTERN = /^[a-z][a-z0-9-]{1,31}$/;
|
|
2
|
+
export function auditSkillRegistry(registry, assets) {
|
|
3
|
+
const errors = [];
|
|
4
|
+
const manifestSkills = unique(registry.skills);
|
|
5
|
+
const contracts = registry.contracts ?? [];
|
|
6
|
+
const byName = new Map();
|
|
7
|
+
for (const contract of contracts) {
|
|
8
|
+
if (!contract || typeof contract.name !== "string") {
|
|
9
|
+
errors.push("contract name is missing");
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
if (byName.has(contract.name)) {
|
|
13
|
+
errors.push(`duplicate contract: ${contract.name}`);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
byName.set(contract.name, contract);
|
|
17
|
+
if (!OWNER_PATTERN.test(contract.owner)) {
|
|
18
|
+
errors.push(`invalid owner for ${contract.name}: ${contract.owner}`);
|
|
19
|
+
}
|
|
20
|
+
if (!nonEmptyList(contract.triggers)) {
|
|
21
|
+
errors.push(`triggers must not be empty: ${contract.name}`);
|
|
22
|
+
}
|
|
23
|
+
if (!nonEmptyList(contract.outputs)) {
|
|
24
|
+
errors.push(`outputs must not be empty: ${contract.name}`);
|
|
25
|
+
}
|
|
26
|
+
if (!Array.isArray(contract.excludes)) {
|
|
27
|
+
errors.push(`excludes must be an array: ${contract.name}`);
|
|
28
|
+
}
|
|
29
|
+
if (!Array.isArray(contract.neighbors)) {
|
|
30
|
+
errors.push(`neighbors must be an array: ${contract.name}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const missingContracts = manifestSkills.filter((name) => !byName.has(name));
|
|
34
|
+
for (const name of missingContracts) {
|
|
35
|
+
errors.push(`missing contract: ${name}`);
|
|
36
|
+
}
|
|
37
|
+
for (const name of byName.keys()) {
|
|
38
|
+
if (!manifestSkills.includes(name)) {
|
|
39
|
+
errors.push(`contract is not in manifest: ${name}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const mirrors = new Set(assets.en ?? []);
|
|
43
|
+
const missingMirrors = manifestSkills.filter((name) => !mirrors.has(name));
|
|
44
|
+
for (const name of missingMirrors) {
|
|
45
|
+
errors.push(`missing English mirror: ${name}`);
|
|
46
|
+
}
|
|
47
|
+
const known = new Set(manifestSkills);
|
|
48
|
+
for (const contract of contracts) {
|
|
49
|
+
for (const neighbor of contract.neighbors ?? []) {
|
|
50
|
+
if (!known.has(neighbor)) {
|
|
51
|
+
errors.push(`${contract.name} references unknown neighbor: ${neighbor}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const triggerOwners = new Map();
|
|
56
|
+
for (const contract of contracts) {
|
|
57
|
+
for (const trigger of contract.triggers ?? []) {
|
|
58
|
+
const normalized = trigger.trim().toLowerCase();
|
|
59
|
+
if (!normalized)
|
|
60
|
+
continue;
|
|
61
|
+
const previous = triggerOwners.get(normalized);
|
|
62
|
+
if (previous && previous !== contract.name) {
|
|
63
|
+
errors.push(`duplicate trigger '${trigger}' shared by ${previous} and ${contract.name}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
triggerOwners.set(normalized, contract.name);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
ok: errors.length === 0,
|
|
72
|
+
errors,
|
|
73
|
+
stats: {
|
|
74
|
+
manifestSkills: manifestSkills.length,
|
|
75
|
+
contracts: byName.size,
|
|
76
|
+
missingContracts: missingContracts.length,
|
|
77
|
+
missingMirrors: missingMirrors.length,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function unique(values) {
|
|
82
|
+
return [...new Set(Array.isArray(values) ? values : [])];
|
|
83
|
+
}
|
|
84
|
+
function nonEmptyList(values) {
|
|
85
|
+
return Array.isArray(values) && values.length > 0 && values.every((value) => typeof value === "string" && value.trim().length > 0);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/domains/skill/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,6 +10,7 @@ const requirements = new Map([
|
|
|
10
10
|
"docs/superflow-cli-design-principles.md",
|
|
11
11
|
"docs/superflow-cli-evaluation-framework.md",
|
|
12
12
|
"Codex、Claude",
|
|
13
|
+
"默认采用 ECC 治理",
|
|
13
14
|
],
|
|
14
15
|
],
|
|
15
16
|
[
|
|
@@ -18,6 +19,7 @@ const requirements = new Map([
|
|
|
18
19
|
"docs/superflow-cli-design-principles.md",
|
|
19
20
|
"docs/superflow-cli-evaluation-framework.md",
|
|
20
21
|
"docs/managed-work-design-principles.md",
|
|
22
|
+
"默认采用 ECC 治理",
|
|
21
23
|
],
|
|
22
24
|
],
|
|
23
25
|
[
|
|
@@ -48,6 +50,7 @@ const requirements = new Map([
|
|
|
48
50
|
"评价驱动维护",
|
|
49
51
|
"Codex、Claude",
|
|
50
52
|
"三个彼此独立但可衔接的入口",
|
|
53
|
+
"ECC 式能力治理",
|
|
51
54
|
],
|
|
52
55
|
],
|
|
53
56
|
[
|
|
@@ -60,6 +63,7 @@ const requirements = new Map([
|
|
|
60
63
|
"Evaluation-Driven Maintenance",
|
|
61
64
|
"Codex and Claude",
|
|
62
65
|
"three independent but composable entries",
|
|
66
|
+
"ECC-style capability governance",
|
|
63
67
|
],
|
|
64
68
|
],
|
|
65
69
|
[
|