@captain_z/zsk 1.0.2 → 1.2.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 +38 -3
- package/dist/bin.js +40 -1
- package/dist/bin.js.map +1 -1
- package/dist/commands/add-flow.d.ts +5 -2
- package/dist/commands/add-flow.js +83 -24
- package/dist/commands/add-flow.js.map +1 -1
- package/dist/commands/add.js +43 -19
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/check.d.ts +4 -0
- package/dist/commands/check.js +157 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.js +18 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/prep.d.ts +4 -0
- package/dist/commands/prep.js +27 -0
- package/dist/commands/prep.js.map +1 -0
- package/dist/commands/project-init.js +12 -11
- package/dist/commands/project-init.js.map +1 -1
- package/dist/commands/remove.js +5 -3
- package/dist/commands/remove.js.map +1 -1
- package/dist/core/config.d.ts +35 -0
- package/dist/core/config.js +191 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/raw-manifest.d.ts +21 -0
- package/dist/core/raw-manifest.js +53 -0
- package/dist/core/raw-manifest.js.map +1 -0
- package/dist/ui/prompts.d.ts +1 -0
- package/dist/ui/prompts.js +12 -1
- package/dist/ui/prompts.js.map +1 -1
- package/package.json +3 -2
- package/templates/project-init/.issues/README.md +26 -0
- package/templates/project-init/.issues/_templates/issue.md +44 -0
- package/templates/project-init/.raws/README.md +15 -12
- package/templates/project-init/.raws/api-contracts/README.md +13 -0
- package/templates/project-init/.raws/design-assets/README.md +16 -0
- package/templates/project-init/.raws/manifest.json +4 -0
- package/templates/project-init/.raws/testing/README.md +10 -0
- package/templates/project-init/.zsk/schemas/module.schema.json +203 -0
- package/templates/project-init/.zsk/schemas/zsk-config.schema.json +246 -0
- package/templates/project-init/SYSTEM-SPEC.md +55 -0
- package/templates/project-init/docs/_module-index.md +7 -0
- package/templates/project-init/docs/_module-template/module.yaml +32 -0
- package/templates/project-init/docs/system/README.md +12 -0
- package/templates/project-init/zsk.config.yaml +50 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
3
|
+
import { extname, join, resolve } from "node:path";
|
|
4
|
+
import YAML from "yaml";
|
|
5
|
+
import { resolvePath } from "../core/targets.js";
|
|
6
|
+
import { checkProjectConfig, findModuleConfigFiles, formatConfigIssues, readProjectConfig, } from "../core/config.js";
|
|
7
|
+
const RUNTIME_ARTIFACT_EXTS = new Set([
|
|
8
|
+
".log",
|
|
9
|
+
".png",
|
|
10
|
+
".jpg",
|
|
11
|
+
".jpeg",
|
|
12
|
+
".gif",
|
|
13
|
+
".webp",
|
|
14
|
+
".har",
|
|
15
|
+
".mp4",
|
|
16
|
+
".mov",
|
|
17
|
+
".zip",
|
|
18
|
+
]);
|
|
19
|
+
const STAGE_DOCS_REQUIRING_FEEDBACK = [
|
|
20
|
+
"proposal.md",
|
|
21
|
+
"spec.md",
|
|
22
|
+
"design.md",
|
|
23
|
+
"tasks.md",
|
|
24
|
+
"verification.md",
|
|
25
|
+
"review.md",
|
|
26
|
+
"archive.md",
|
|
27
|
+
];
|
|
28
|
+
export async function run(opts = {}) {
|
|
29
|
+
const target = opts.target ? resolvePath(opts.target) : process.cwd();
|
|
30
|
+
const configCheck = await checkProjectConfig(target);
|
|
31
|
+
const issues = [];
|
|
32
|
+
if (!configCheck.ok) {
|
|
33
|
+
console.error(pc.red("✗ zsk check failed: config check failed"));
|
|
34
|
+
console.error(formatConfigIssues(configCheck.issues));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
const config = await readProjectConfig(target);
|
|
38
|
+
const moduleFiles = await findModuleConfigFiles(target, config);
|
|
39
|
+
const moduleConfigs = await readModuleConfigs(moduleFiles);
|
|
40
|
+
await checkRawTestingMapped(target, config.paths?.raws ?? ".raws", moduleConfigs, issues);
|
|
41
|
+
await checkDocsArtifacts(target, config.paths?.docs ?? "docs", issues);
|
|
42
|
+
await checkDocumentationFeedback(target, moduleConfigs, issues);
|
|
43
|
+
if (issues.length > 0) {
|
|
44
|
+
console.error(pc.red("✗ zsk check failed"));
|
|
45
|
+
for (const issue of issues)
|
|
46
|
+
console.error(`${issue.file}: ${issue.message}`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
console.log(pc.green("✓ zsk check passed"));
|
|
50
|
+
console.log(pc.dim(`checked ${moduleFiles.length} module config(s)`));
|
|
51
|
+
console.log(pc.dim("Semantic checks requiring Figma, Computer Use, or cross-source reasoning are delegated to AI skills."));
|
|
52
|
+
}
|
|
53
|
+
async function readModuleConfigs(files) {
|
|
54
|
+
const result = [];
|
|
55
|
+
for (const file of files) {
|
|
56
|
+
const parsed = YAML.parse(await readFile(file, "utf8"));
|
|
57
|
+
result.push({ file, config: (parsed ?? {}) });
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
async function checkRawTestingMapped(target, rawsPath, modules, issues) {
|
|
62
|
+
const testingRoot = resolve(target, rawsPath, "testing");
|
|
63
|
+
const rawFiles = (await collectFiles(testingRoot)).filter((file) => !file.endsWith("/README.md"));
|
|
64
|
+
if (rawFiles.length === 0)
|
|
65
|
+
return;
|
|
66
|
+
const mapped = new Set();
|
|
67
|
+
for (const mod of modules) {
|
|
68
|
+
for (const p of mod.config.tests?.raw_cases ?? [])
|
|
69
|
+
mapped.add(resolve(target, p));
|
|
70
|
+
for (const p of mod.config.sources?.testing ?? [])
|
|
71
|
+
mapped.add(resolve(target, p));
|
|
72
|
+
}
|
|
73
|
+
for (const file of rawFiles) {
|
|
74
|
+
if (mapped.has(file))
|
|
75
|
+
continue;
|
|
76
|
+
issues.push({
|
|
77
|
+
file,
|
|
78
|
+
message: "raw test case is not mapped to any module.yaml tests.raw_cases or sources.testing entry",
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function checkDocsArtifacts(target, docsPath, issues) {
|
|
83
|
+
const docsRoot = resolve(target, docsPath);
|
|
84
|
+
const files = await collectFiles(docsRoot);
|
|
85
|
+
for (const file of files) {
|
|
86
|
+
const ext = extname(file).toLowerCase();
|
|
87
|
+
const name = file.toLowerCase();
|
|
88
|
+
const isEvidence = RUNTIME_ARTIFACT_EXTS.has(ext) ||
|
|
89
|
+
name.includes("debug-log") ||
|
|
90
|
+
name.includes("debug-logs") ||
|
|
91
|
+
name.includes("evidence") ||
|
|
92
|
+
name.includes("failed-verification") ||
|
|
93
|
+
name.includes("console.log") ||
|
|
94
|
+
([".txt", ".json"].includes(ext) &&
|
|
95
|
+
/debug|evidence|console|screenshot|failed-verification/.test(name));
|
|
96
|
+
if (!isEvidence)
|
|
97
|
+
continue;
|
|
98
|
+
issues.push({
|
|
99
|
+
file,
|
|
100
|
+
message: "runtime evidence belongs in .issues/, not docs/",
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function checkDocumentationFeedback(target, modules, issues) {
|
|
105
|
+
for (const mod of modules) {
|
|
106
|
+
const docsDir = mod.config.outputs?.docs ? resolve(target, mod.config.outputs.docs) : null;
|
|
107
|
+
if (!docsDir)
|
|
108
|
+
continue;
|
|
109
|
+
const candidates = STAGE_DOCS_REQUIRING_FEEDBACK.map((name) => join(docsDir, name));
|
|
110
|
+
const existing = [];
|
|
111
|
+
for (const file of candidates) {
|
|
112
|
+
try {
|
|
113
|
+
existing.push({ file, content: await readFile(file, "utf8") });
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Optional until the module exists.
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (existing.length === 0)
|
|
120
|
+
continue;
|
|
121
|
+
for (const item of existing) {
|
|
122
|
+
if (hasDocumentationFeedback(item.content))
|
|
123
|
+
continue;
|
|
124
|
+
issues.push({
|
|
125
|
+
file: item.file,
|
|
126
|
+
message: "stage doc should include Documentation Feedback with updates, or an explicit no-update rationale",
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function hasDocumentationFeedback(content) {
|
|
132
|
+
const marker = content.match(/^##+\s+Documentation Feedback\b([\s\S]*)$/im);
|
|
133
|
+
if (!marker)
|
|
134
|
+
return false;
|
|
135
|
+
const body = (marker[1] ?? "").trim();
|
|
136
|
+
if (body.length === 0)
|
|
137
|
+
return false;
|
|
138
|
+
return /no[- ]update|无需更新|无更新|not applicable|N\/A/i.test(body) || /-\s+\[[ x]\]/i.test(body) || /\|/.test(body);
|
|
139
|
+
}
|
|
140
|
+
async function collectFiles(root) {
|
|
141
|
+
try {
|
|
142
|
+
const entries = await readdir(root, { withFileTypes: true });
|
|
143
|
+
const files = [];
|
|
144
|
+
for (const entry of entries) {
|
|
145
|
+
const path = join(root, entry.name);
|
|
146
|
+
if (entry.isDirectory())
|
|
147
|
+
files.push(...(await collectFiles(path)));
|
|
148
|
+
if (entry.isFile())
|
|
149
|
+
files.push(path);
|
|
150
|
+
}
|
|
151
|
+
return files;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
import { resolvePath } from "../core/targets.js";
|
|
3
|
+
import { checkProjectConfig, formatConfigIssues } from "../core/config.js";
|
|
4
|
+
export async function check(opts = {}) {
|
|
5
|
+
const target = opts.target ? resolvePath(opts.target) : process.cwd();
|
|
6
|
+
const result = await checkProjectConfig(target);
|
|
7
|
+
if (result.ok) {
|
|
8
|
+
console.log(pc.green("✓ zsk config check passed"));
|
|
9
|
+
if (result.moduleFiles.length > 0) {
|
|
10
|
+
console.log(pc.dim(`validated ${result.moduleFiles.length} module config(s)`));
|
|
11
|
+
}
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
console.error(pc.red("✗ zsk config check failed"));
|
|
15
|
+
console.error(formatConfigIssues(result.issues));
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM3E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAA2B,EAAE;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,WAAW,CAAC,MAAM,mBAAmB,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { resolvePath } from "../core/targets.js";
|
|
4
|
+
import { checkProjectConfig, readProjectConfig } from "../core/config.js";
|
|
5
|
+
import { describeResource, updateRawManifest } from "../core/raw-manifest.js";
|
|
6
|
+
export async function run(opts = {}) {
|
|
7
|
+
const target = opts.target ? resolvePath(opts.target) : process.cwd();
|
|
8
|
+
const configCheck = await checkProjectConfig(target);
|
|
9
|
+
if (!configCheck.ok) {
|
|
10
|
+
console.error(pc.red("✗ zsk prep stopped: config check failed"));
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const config = await readProjectConfig(target);
|
|
14
|
+
const sourceEntries = Object.entries(config.sources ?? {});
|
|
15
|
+
const records = [];
|
|
16
|
+
for (const [provider, source] of sourceEntries) {
|
|
17
|
+
if (!source)
|
|
18
|
+
continue;
|
|
19
|
+
records.push(await describeResource(target, provider, source));
|
|
20
|
+
}
|
|
21
|
+
const raws = config.paths?.raws ?? ".raws";
|
|
22
|
+
await updateRawManifest(resolve(target, raws, "manifest.json"), records);
|
|
23
|
+
console.log(pc.green("✓ zsk prep completed"));
|
|
24
|
+
console.log(pc.dim(`recorded ${records.length} raw resource(s)`));
|
|
25
|
+
console.log(pc.dim("AI-assisted module discovery is handled by skills using zsk.config.yaml and docs/{module}/module.yaml."));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=prep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prep.js","sourceRoot":"","sources":["../../src/commands/prep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAY9E,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAoB,EAAE;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAExD,CAAC;IACF,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,OAAO,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC;IAC3C,MAAM,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;IAEzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAC,CAAC;AAChI,CAAC"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
// `zsk project-init` — scaffold project
|
|
1
|
+
// `zsk init` / `zsk project-init` — scaffold project knowledge files into
|
|
2
2
|
// the current (or given) project directory. Non-destructive by default:
|
|
3
3
|
// existing files are skipped.
|
|
4
4
|
//
|
|
5
|
-
// Similar to Claude Code's /init but project-level
|
|
6
|
-
// and .raws/ templates; optionally a CLAUDE.md pointer).
|
|
5
|
+
// Similar to Claude Code's /init but project-level.
|
|
7
6
|
import pc from "picocolors";
|
|
8
7
|
import { intro, outro, confirm, log, spinner, note } from "../ui/prompts.js";
|
|
9
8
|
import { resolvePath } from "../core/targets.js";
|
|
@@ -16,13 +15,15 @@ export async function run(opts = {}) {
|
|
|
16
15
|
intro(`${pc.bold("zsk")} · 项目 bootstrap`);
|
|
17
16
|
log.info(`目标:${pc.cyan(target)}`);
|
|
18
17
|
}
|
|
19
|
-
const existingConfig = await fileExists(join(target, "
|
|
18
|
+
const existingConfig = await fileExists(join(target, "zsk.config.yaml"));
|
|
20
19
|
const existingRaws = await fileExists(join(target, ".raws"));
|
|
21
|
-
const
|
|
20
|
+
const existingIssues = await fileExists(join(target, ".issues"));
|
|
21
|
+
const existingDocs = await fileExists(join(target, "docs"));
|
|
22
22
|
const summaryPre = [
|
|
23
|
-
`
|
|
24
|
-
`.raws/:
|
|
25
|
-
|
|
23
|
+
`zsk.config.yaml: ${existingConfig ? pc.yellow("已存在(跳过)") : pc.green("将创建")}`,
|
|
24
|
+
`.raws/: ${existingRaws ? pc.yellow("已存在(跳过内部文件)") : pc.green("将创建")}`,
|
|
25
|
+
`.issues/: ${existingIssues ? pc.yellow("已存在(跳过内部文件)") : pc.green("将创建")}`,
|
|
26
|
+
`docs/: ${existingDocs ? pc.yellow("已存在(跳过内部文件)") : pc.green("将创建")}`,
|
|
26
27
|
].join("\n");
|
|
27
28
|
if (interactive) {
|
|
28
29
|
note(summaryPre, "计划");
|
|
@@ -47,9 +48,9 @@ export async function run(opts = {}) {
|
|
|
47
48
|
const nextSteps = [
|
|
48
49
|
"",
|
|
49
50
|
`${pc.bold("下一步:")}`,
|
|
50
|
-
`1. 编辑 ${pc.cyan("
|
|
51
|
-
`2. 填 ${pc.cyan(".raws/SRS.md")} 与 ${pc.cyan(".raws/FIGMA-INDEX.md")}(或按需删除)`,
|
|
52
|
-
`3. 跑 ${pc.cyan("
|
|
51
|
+
`1. 编辑 ${pc.cyan("zsk.config.yaml")},把 ${pc.yellow("<project-name>")} 改成项目名`,
|
|
52
|
+
`2. 填 ${pc.cyan(".raws/SRS.md")}、${pc.cyan(".raws/testing/")} 与 ${pc.cyan(".raws/FIGMA-INDEX.md")}(或按需删除)`,
|
|
53
|
+
`3. 跑 ${pc.cyan("zsk prep")} 准备模块上下文,再跑 ${pc.cyan("zsk check")} 检查`,
|
|
53
54
|
].join("\n");
|
|
54
55
|
if (interactive) {
|
|
55
56
|
note(summary + nextSteps, "bootstrap 摘要");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-init.js","sourceRoot":"","sources":["../../src/commands/project-init.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"project-init.js","sourceRoot":"","sources":["../../src/commands/project-init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/remove.js
CHANGED
|
@@ -2,17 +2,19 @@
|
|
|
2
2
|
//
|
|
3
3
|
// ARCHITECTURE.md §6.4.2:
|
|
4
4
|
// - Target list filtered to directories with a manifest (avoids foot-guns).
|
|
5
|
-
// - Multi-select
|
|
5
|
+
// - Multi-select with domain hints; hand-modified files marked `⚠️ 手改`.
|
|
6
6
|
// - Hand-modified files are backed up before deletion.
|
|
7
7
|
// - Hard confirm step (--yes required for CI; even then, flags must be complete).
|
|
8
8
|
import pc from "picocolors";
|
|
9
9
|
import { rm, mkdir, rename } from "node:fs/promises";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
|
-
import { intro, outro, select,
|
|
11
|
+
import { intro, outro, select, multiselect, confirm, log, spinner, note, } from "../ui/prompts.js";
|
|
12
12
|
import { TARGET_OPTIONS, resolvePath } from "../core/targets.js";
|
|
13
13
|
import { loadSkill, DOMAINS } from "../core/skills.js";
|
|
14
14
|
import { readManifest, writeManifest, buildManifest, detectDrift, } from "../core/manifest.js";
|
|
15
15
|
import { expandCapabilityFilters, } from "../core/capabilities.js";
|
|
16
|
+
import { buildSkillMultiselectOptions } from "./add-flow.js";
|
|
17
|
+
const MULTISELECT_HELP = "↑/↓ 移动,空格勾选,回车继续";
|
|
16
18
|
export async function run(positional, opts, zskVersion) {
|
|
17
19
|
intro(`${pc.bold("zsk")} · remove`);
|
|
18
20
|
const isTTY = Boolean(process.stdout.isTTY);
|
|
@@ -193,7 +195,7 @@ async function pickRemovals(manifest, drift) {
|
|
|
193
195
|
if (grouped[k].length === 0)
|
|
194
196
|
delete grouped[k];
|
|
195
197
|
}
|
|
196
|
-
return
|
|
198
|
+
return multiselect(`选择要移除的 skill(${MULTISELECT_HELP})`, buildSkillMultiselectOptions(grouped), [], 12);
|
|
197
199
|
}
|
|
198
200
|
async function confirmRemoval(names, drift, targetPath, opts) {
|
|
199
201
|
const modifiedSet = new Set(drift.filter((d) => d.kind === "modified").map((d) => d.name));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,0BAA0B;AAC1B,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type ConfigCheckIssue = {
|
|
2
|
+
file: string;
|
|
3
|
+
path: string;
|
|
4
|
+
message: string;
|
|
5
|
+
};
|
|
6
|
+
export type ConfigCheckResult = {
|
|
7
|
+
ok: boolean;
|
|
8
|
+
issues: ConfigCheckIssue[];
|
|
9
|
+
project: unknown;
|
|
10
|
+
moduleFiles: string[];
|
|
11
|
+
};
|
|
12
|
+
type SourceConfig = {
|
|
13
|
+
kind?: string;
|
|
14
|
+
path?: string;
|
|
15
|
+
output?: string;
|
|
16
|
+
};
|
|
17
|
+
type ProjectConfig = {
|
|
18
|
+
paths?: {
|
|
19
|
+
raws?: string;
|
|
20
|
+
docs?: string;
|
|
21
|
+
issues?: string;
|
|
22
|
+
};
|
|
23
|
+
sources?: Record<string, SourceConfig | undefined>;
|
|
24
|
+
modules?: {
|
|
25
|
+
root?: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export declare function checkProjectConfig(target: string): Promise<ConfigCheckResult>;
|
|
29
|
+
export declare function readProjectConfig(target: string): Promise<ProjectConfig>;
|
|
30
|
+
export declare function findModuleConfigFiles(root: string, projectConfig: ProjectConfig): Promise<string[]>;
|
|
31
|
+
export declare function formatConfigIssues(issues: ConfigCheckIssue[]): string;
|
|
32
|
+
export declare function pathStat(path: string): Promise<{
|
|
33
|
+
size: number;
|
|
34
|
+
} | null>;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { Ajv } from "ajv/dist/ajv.js";
|
|
2
|
+
import { readFile, readdir, access, stat } from "node:fs/promises";
|
|
3
|
+
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
4
|
+
import YAML from "yaml";
|
|
5
|
+
import { resolveTemplatesRoot } from "./scaffolder.js";
|
|
6
|
+
const PROJECT_SCHEMA = "zsk-config.schema.json";
|
|
7
|
+
const MODULE_SCHEMA = "module.schema.json";
|
|
8
|
+
export async function checkProjectConfig(target) {
|
|
9
|
+
const root = resolve(target);
|
|
10
|
+
const issues = [];
|
|
11
|
+
const projectFile = join(root, "zsk.config.yaml");
|
|
12
|
+
const project = await readYaml(projectFile, issues);
|
|
13
|
+
const projectSchema = await readSchema(root, PROJECT_SCHEMA);
|
|
14
|
+
validateWithSchema(projectFile, project, projectSchema, issues);
|
|
15
|
+
const projectConfig = isObject(project) ? project : {};
|
|
16
|
+
const moduleFiles = await findModuleConfigFiles(root, projectConfig);
|
|
17
|
+
const moduleSchema = await readSchema(root, MODULE_SCHEMA);
|
|
18
|
+
for (const file of moduleFiles) {
|
|
19
|
+
const moduleConfig = await readYaml(file, issues);
|
|
20
|
+
validateWithSchema(file, moduleConfig, moduleSchema, issues);
|
|
21
|
+
validateModuleBoundaries(root, projectConfig, file, moduleConfig, issues);
|
|
22
|
+
}
|
|
23
|
+
validateProjectBoundaries(root, projectConfig, projectFile, issues);
|
|
24
|
+
return {
|
|
25
|
+
ok: issues.length === 0,
|
|
26
|
+
issues,
|
|
27
|
+
project,
|
|
28
|
+
moduleFiles,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export async function readProjectConfig(target) {
|
|
32
|
+
const file = join(resolve(target), "zsk.config.yaml");
|
|
33
|
+
const content = await readFile(file, "utf8");
|
|
34
|
+
const parsed = YAML.parse(content);
|
|
35
|
+
return isObject(parsed) ? parsed : {};
|
|
36
|
+
}
|
|
37
|
+
export async function findModuleConfigFiles(root, projectConfig) {
|
|
38
|
+
const docsRoot = resolvePath(root, projectConfig.modules?.root ?? "docs");
|
|
39
|
+
try {
|
|
40
|
+
const entries = await readdir(docsRoot, { withFileTypes: true });
|
|
41
|
+
const files = [];
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
if (!entry.isDirectory())
|
|
44
|
+
continue;
|
|
45
|
+
if (entry.name.startsWith("_"))
|
|
46
|
+
continue;
|
|
47
|
+
if (entry.name === "system")
|
|
48
|
+
continue;
|
|
49
|
+
const file = join(docsRoot, entry.name, "module.yaml");
|
|
50
|
+
if (await exists(file))
|
|
51
|
+
files.push(file);
|
|
52
|
+
}
|
|
53
|
+
return files.sort();
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function formatConfigIssues(issues) {
|
|
60
|
+
return issues
|
|
61
|
+
.map((issue) => `${issue.file}${issue.path ? ` ${issue.path}` : ""}: ${issue.message}`)
|
|
62
|
+
.join("\n");
|
|
63
|
+
}
|
|
64
|
+
async function readYaml(file, issues) {
|
|
65
|
+
try {
|
|
66
|
+
const content = await readFile(file, "utf8");
|
|
67
|
+
return YAML.parse(content);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
issues.push({
|
|
71
|
+
file,
|
|
72
|
+
path: "",
|
|
73
|
+
message: error instanceof Error ? error.message : String(error),
|
|
74
|
+
});
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function readSchema(root, name) {
|
|
79
|
+
const local = join(root, ".zsk", "schemas", name);
|
|
80
|
+
if (await exists(local))
|
|
81
|
+
return JSON.parse(await readFile(local, "utf8"));
|
|
82
|
+
const templatesRoot = await resolveTemplatesRoot();
|
|
83
|
+
const bundled = join(templatesRoot, "project-init", ".zsk", "schemas", name);
|
|
84
|
+
return JSON.parse(await readFile(bundled, "utf8"));
|
|
85
|
+
}
|
|
86
|
+
function validateWithSchema(file, data, schema, issues) {
|
|
87
|
+
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
88
|
+
const validate = ajv.compile(schema);
|
|
89
|
+
if (validate(data))
|
|
90
|
+
return;
|
|
91
|
+
for (const error of validate.errors ?? []) {
|
|
92
|
+
issues.push({
|
|
93
|
+
file,
|
|
94
|
+
path: formatSchemaPath(error),
|
|
95
|
+
message: error.message ?? "schema validation failed",
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function validateProjectBoundaries(root, config, file, issues) {
|
|
100
|
+
const raws = config.paths?.raws ?? ".raws";
|
|
101
|
+
const docs = config.paths?.docs ?? "docs";
|
|
102
|
+
const issueRoot = config.paths?.issues ?? ".issues";
|
|
103
|
+
validateRelativeInside(root, raws, file, "/paths/raws", issues);
|
|
104
|
+
validateRelativeInside(root, docs, file, "/paths/docs", issues);
|
|
105
|
+
validateRelativeInside(root, issueRoot, file, "/paths/issues", issues);
|
|
106
|
+
const rawRoot = resolvePath(root, raws);
|
|
107
|
+
for (const [name, source] of Object.entries(config.sources ?? {})) {
|
|
108
|
+
if (!source)
|
|
109
|
+
continue;
|
|
110
|
+
if (source.kind === "local" && source.path) {
|
|
111
|
+
validateUnder(root, source.path, rawRoot, file, `/sources/${name}/path`, issues);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if ((source.kind === "script" || source.kind === "skill") && source.output) {
|
|
115
|
+
validateUnder(root, source.output, rawRoot, file, `/sources/${name}/output`, issues);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function validateModuleBoundaries(root, projectConfig, file, moduleData, issues) {
|
|
120
|
+
if (!isObject(moduleData))
|
|
121
|
+
return;
|
|
122
|
+
const moduleConfig = moduleData;
|
|
123
|
+
const docsRoot = resolvePath(root, projectConfig.paths?.docs ?? "docs");
|
|
124
|
+
const issueRoot = resolvePath(root, projectConfig.paths?.issues ?? ".issues");
|
|
125
|
+
if (moduleConfig.outputs?.docs) {
|
|
126
|
+
validateUnder(root, moduleConfig.outputs.docs, docsRoot, file, "/outputs/docs", issues);
|
|
127
|
+
}
|
|
128
|
+
if (moduleConfig.outputs?.issues) {
|
|
129
|
+
validateUnder(root, moduleConfig.outputs.issues, issueRoot, file, "/outputs/issues", issues);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function validateRelativeInside(root, value, file, path, issues) {
|
|
133
|
+
if (isAbsolute(value))
|
|
134
|
+
return;
|
|
135
|
+
const target = resolve(root, value);
|
|
136
|
+
if (isInside(root, target))
|
|
137
|
+
return;
|
|
138
|
+
issues.push({
|
|
139
|
+
file,
|
|
140
|
+
path,
|
|
141
|
+
message: "relative path must stay inside the project root",
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function validateUnder(root, value, expectedRoot, file, path, issues) {
|
|
145
|
+
const target = resolvePath(root, value);
|
|
146
|
+
if (isInside(expectedRoot, target))
|
|
147
|
+
return;
|
|
148
|
+
issues.push({
|
|
149
|
+
file,
|
|
150
|
+
path,
|
|
151
|
+
message: `path must stay under ${expectedRoot}`,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function resolvePath(root, value) {
|
|
155
|
+
return isAbsolute(value) ? value : resolve(root, value);
|
|
156
|
+
}
|
|
157
|
+
function isInside(root, target) {
|
|
158
|
+
const rel = relative(root, target);
|
|
159
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
160
|
+
}
|
|
161
|
+
function formatSchemaPath(error) {
|
|
162
|
+
const path = error.instancePath || "/";
|
|
163
|
+
if (error.keyword === "required" && typeof error.params === "object") {
|
|
164
|
+
const missing = error.params.missingProperty;
|
|
165
|
+
if (missing)
|
|
166
|
+
return `${path === "/" ? "" : path}/${missing}`;
|
|
167
|
+
}
|
|
168
|
+
return path;
|
|
169
|
+
}
|
|
170
|
+
function isObject(value) {
|
|
171
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
172
|
+
}
|
|
173
|
+
async function exists(path) {
|
|
174
|
+
try {
|
|
175
|
+
await access(path);
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export async function pathStat(path) {
|
|
183
|
+
try {
|
|
184
|
+
const info = await stat(path);
|
|
185
|
+
return { size: info.size };
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type RawResourceRecord = {
|
|
2
|
+
provider: string;
|
|
3
|
+
kind: string;
|
|
4
|
+
path?: string;
|
|
5
|
+
output?: string;
|
|
6
|
+
exists: boolean;
|
|
7
|
+
size: number | null;
|
|
8
|
+
hash: string | null;
|
|
9
|
+
syncedAt: string;
|
|
10
|
+
method: "local" | "script" | "skill" | "manual";
|
|
11
|
+
};
|
|
12
|
+
export type RawManifest = {
|
|
13
|
+
version: number;
|
|
14
|
+
resources: RawResourceRecord[];
|
|
15
|
+
};
|
|
16
|
+
export declare function updateRawManifest(file: string, records: RawResourceRecord[]): Promise<void>;
|
|
17
|
+
export declare function describeResource(root: string, provider: string, source: {
|
|
18
|
+
kind?: string;
|
|
19
|
+
path?: string;
|
|
20
|
+
output?: string;
|
|
21
|
+
}): Promise<RawResourceRecord>;
|