@captain_z/zsk 1.7.0 → 1.8.2
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/dist/bin.js +196 -12
- package/dist/bin.js.map +1 -1
- package/dist/commands/check.js +107 -16
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/config.d.ts +11 -0
- package/dist/commands/config.js +132 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/demo.js +2 -2
- package/dist/commands/demo.js.map +1 -1
- package/dist/commands/dispatch.d.ts +11 -0
- package/dist/commands/dispatch.js +69 -0
- package/dist/commands/dispatch.js.map +1 -0
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.js +102 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/gate.d.ts +9 -0
- package/dist/commands/gate.js +48 -0
- package/dist/commands/gate.js.map +1 -0
- package/dist/commands/issue.d.ts +2 -1
- package/dist/commands/issue.js +72 -27
- package/dist/commands/issue.js.map +1 -1
- package/dist/commands/module.js +32 -0
- package/dist/commands/module.js.map +1 -1
- package/dist/commands/prep.d.ts +2 -4
- package/dist/commands/prep.js +1 -37
- package/dist/commands/prep.js.map +1 -1
- package/dist/commands/prepare.d.ts +17 -0
- package/dist/commands/prepare.js +259 -0
- package/dist/commands/prepare.js.map +1 -0
- package/dist/commands/project-init.d.ts +1 -0
- package/dist/commands/project-init.js +28 -24
- package/dist/commands/project-init.js.map +1 -1
- package/dist/commands/template.d.ts +2 -0
- package/dist/commands/template.js +34 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/core/config.d.ts +86 -1
- package/dist/core/config.js +181 -21
- package/dist/core/config.js.map +1 -1
- package/dist/core/origin-detection.d.ts +10 -0
- package/dist/core/origin-detection.js +135 -0
- package/dist/core/origin-detection.js.map +1 -0
- package/dist/core/prepare-lifecycle.d.ts +54 -0
- package/dist/core/prepare-lifecycle.js +302 -0
- package/dist/core/prepare-lifecycle.js.map +1 -0
- package/dist/core/prepare-sync.d.ts +82 -0
- package/dist/core/prepare-sync.js +1499 -0
- package/dist/core/prepare-sync.js.map +1 -0
- package/dist/core/raw-manifest.d.ts +20 -0
- package/dist/core/raw-manifest.js +105 -4
- package/dist/core/raw-manifest.js.map +1 -1
- package/dist/core/source-draft.d.ts +14 -0
- package/dist/core/source-draft.js +251 -0
- package/dist/core/source-draft.js.map +1 -0
- package/dist/core/staffing-plan.d.ts +206 -0
- package/dist/core/staffing-plan.js +1115 -0
- package/dist/core/staffing-plan.js.map +1 -0
- package/dist/core/stage-quality.d.ts +56 -0
- package/dist/core/stage-quality.js +487 -0
- package/dist/core/stage-quality.js.map +1 -0
- package/dist/core/template-registry.d.ts +29 -0
- package/dist/core/template-registry.js +289 -0
- package/dist/core/template-registry.js.map +1 -0
- package/dist/core/workspace-layout.d.ts +5 -3
- package/dist/core/workspace-layout.js +34 -20
- package/dist/core/workspace-layout.js.map +1 -1
- package/package.json +2 -2
- package/schemas/zsk-config.schema.json +257 -111
- package/templates/issue/default/issue.md +5 -1
- package/templates/module/frontend-module/design.md +93 -0
- package/templates/module/frontend-module/proposal.md +43 -1
- package/templates/module/frontend-module/spec.md +30 -0
- package/templates/module/frontend-module/tasks.md +43 -0
- package/templates/project-init/.zsk/config.yaml +8 -94
- package/templates/project-init/.zsk/docs/PROJECT-CONFIG.md +34 -11
- package/templates/project-init/.zsk/docs/SYSTEM-SPEC.md +37 -5
- package/templates/project-init/.zsk/modules/index.md +7 -0
- package/templates/project-init/.zsk/raws/index.md +15 -0
- package/templates/project-init/.zsk/raws/manifest.json +4 -0
- package/templates/project-init/.zsk/raws/prepare/backend/index.md +4 -0
- package/templates/project-init/.zsk/raws/prepare/design/index.md +3 -0
- package/templates/project-init/.zsk/raws/prepare/index.md +4 -0
- package/templates/project-init/.zsk/raws/prepare/product/index.md +4 -0
- package/templates/project-init/.zsk/raws/prepare/qa/index.md +4 -0
- package/templates/project-init/.zsk/raws/prepare/ux/index.md +3 -0
- package/templates/project-init/.zsk/roles.yaml +129 -0
- package/templates/project-init/.zsk/evidence/.gitkeep +0 -1
- package/templates/project-init/.zsk/issues/README.md +0 -58
- package/templates/project-init/.zsk/issues/_taxonomy.md +0 -35
- package/templates/project-init/.zsk/issues/index.md +0 -7
- package/templates/project-init/.zsk/modules/.gitkeep +0 -1
- package/templates/project-init/.zsk/plans/.gitkeep +0 -1
- package/templates/project-init/.zsk/playwright/.gitkeep +0 -1
- package/templates/project-init/.zsk/resources/.gitkeep +0 -1
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import pc from "picocolors";
|
|
4
|
+
import { resolvePath } from "../core/targets.js";
|
|
5
|
+
import { checkProjectConfig, flattenProjectSources, formatConfigIssues, readProjectConfig, resolveSourceSnapshot } from "../core/config.js";
|
|
6
|
+
import { buildPrepareArtifactBundle, writePrepareArtifactBundle, } from "../core/prepare-lifecycle.js";
|
|
7
|
+
import { buildRawMigrationPlan, checkPrepareAuth, syncPrepareSources, writeAuthLoginHelper, } from "../core/prepare-sync.js";
|
|
8
|
+
import { describeDiscoveredResource, describeResource, projectRelative, updateRawIndexes, updateRawManifest, } from "../core/raw-manifest.js";
|
|
9
|
+
import { writeStaffingPlan } from "../core/staffing-plan.js";
|
|
10
|
+
import { getWorkspacePath } from "../core/workspace-layout.js";
|
|
11
|
+
import { access, readdir } from "node:fs/promises";
|
|
12
|
+
import { basename, extname, join } from "node:path";
|
|
13
|
+
export async function inventory(opts = {}) {
|
|
14
|
+
const { target, config, bundle, configFile } = await prepareBundle(opts);
|
|
15
|
+
await writeJsonArtifact(bundle.artifacts.inventoryPath, bundle.inventory);
|
|
16
|
+
console.log(pc.green("✓ zsk prepare inventory completed"));
|
|
17
|
+
console.log(pc.dim(`config: ${configFile}`));
|
|
18
|
+
console.log(pc.dim(`inventory: ${bundle.artifacts.inventoryPath}`));
|
|
19
|
+
console.log(pc.dim(`scanned ${bundle.inventory.records.length} repository source candidate(s)`));
|
|
20
|
+
console.log(pc.dim(`evidence root: ${resolve(target, getWorkspacePath(config, "evidenceRoot"))}`));
|
|
21
|
+
}
|
|
22
|
+
export async function draft(opts = {}) {
|
|
23
|
+
const { bundle, configFile } = await prepareBundle(opts);
|
|
24
|
+
await writeTextArtifact(bundle.artifacts.draftPath, bundle.draftContent);
|
|
25
|
+
console.log(pc.green("✓ zsk prepare draft completed"));
|
|
26
|
+
console.log(pc.dim(`config: ${configFile}`));
|
|
27
|
+
console.log(pc.dim(`draft: ${bundle.artifacts.draftPath}`));
|
|
28
|
+
console.log(pc.dim(`matched ${bundle.inventory.records.length} repository source candidate(s)`));
|
|
29
|
+
}
|
|
30
|
+
export async function plan(opts = {}) {
|
|
31
|
+
const { bundle, configFile } = await prepareBundle(opts);
|
|
32
|
+
await writeJsonArtifact(bundle.artifacts.acquisitionPlanPath, bundle.acquisitionPlan);
|
|
33
|
+
await writeTextArtifact(bundle.artifacts.blockedSourcesPath, bundle.blockedSources);
|
|
34
|
+
await writeTextArtifact(bundle.artifacts.correspondenceQuestionsPath, bundle.correspondenceQuestions);
|
|
35
|
+
const blocked = bundle.acquisitionPlan.records.filter((record) => record.status !== "ready").length;
|
|
36
|
+
console.log(pc.green("✓ zsk prepare plan completed"));
|
|
37
|
+
console.log(pc.dim(`config: ${configFile}`));
|
|
38
|
+
console.log(pc.dim(`plan: ${bundle.artifacts.acquisitionPlanPath}`));
|
|
39
|
+
console.log(pc.dim(`blocked-sources: ${bundle.artifacts.blockedSourcesPath}`));
|
|
40
|
+
console.log(pc.dim(`questions: ${bundle.artifacts.correspondenceQuestionsPath}`));
|
|
41
|
+
console.log(pc.dim(`planned ${bundle.acquisitionPlan.records.length} prepare source(s); ${blocked} need follow-up`));
|
|
42
|
+
}
|
|
43
|
+
export async function run(opts = {}) {
|
|
44
|
+
const { target, config, bundle, configFile } = await prepareBundle(opts);
|
|
45
|
+
const records = [];
|
|
46
|
+
for (const entry of flattenProjectSources(config.sources)) {
|
|
47
|
+
records.push(await describeResource(target, entry.provider, { ...entry.source, snapshot: resolveSourceSnapshot(config, entry) }, { role: entry.rawLane, sourcePath: entry.path }));
|
|
48
|
+
}
|
|
49
|
+
records.push(...(await discoverProjectSources(target)));
|
|
50
|
+
const manifestPath = resolve(target, getWorkspacePath(config, "resourcesManifest"));
|
|
51
|
+
const rawRoot = getWorkspacePath(config, "resourcesRoot");
|
|
52
|
+
const indexPath = resolve(target, rawRoot, "index.md");
|
|
53
|
+
await updateRawManifest(manifestPath, records);
|
|
54
|
+
await updateRawIndexes(target, rawRoot, records);
|
|
55
|
+
await writePrepareArtifactBundle(bundle);
|
|
56
|
+
const staffing = await writePrepareRuntimeEvidence(target, config);
|
|
57
|
+
const unsynced = records.filter((record) => record.method === "unsynced").length;
|
|
58
|
+
const blocked = bundle.acquisitionPlan.records.filter((record) => record.status !== "ready").length;
|
|
59
|
+
const modulesRoot = getWorkspacePath(config, "modulesRoot");
|
|
60
|
+
console.log(pc.green("✓ zsk prep completed"));
|
|
61
|
+
console.log(pc.dim(`config: ${configFile}`));
|
|
62
|
+
console.log(pc.dim(`manifest: ${manifestPath}`));
|
|
63
|
+
console.log(pc.dim(`index: ${indexPath}`));
|
|
64
|
+
console.log(pc.dim(`inventory: ${bundle.artifacts.inventoryPath}`));
|
|
65
|
+
console.log(pc.dim(`draft: ${bundle.artifacts.draftPath}`));
|
|
66
|
+
console.log(pc.dim(`plan: ${bundle.artifacts.acquisitionPlanPath}`));
|
|
67
|
+
console.log(pc.dim(`blocked-sources: ${bundle.artifacts.blockedSourcesPath}`));
|
|
68
|
+
console.log(pc.dim(`questions: ${bundle.artifacts.correspondenceQuestionsPath}`));
|
|
69
|
+
console.log(pc.dim(`runtime-staffing: ${staffing.artifacts.markdownPath}`));
|
|
70
|
+
console.log(pc.dim(`recorded ${records.length} raw source(s)`));
|
|
71
|
+
if (unsynced > 0) {
|
|
72
|
+
console.log(pc.yellow(`! ${unsynced} source origin(s) have no materialized snapshot yet`));
|
|
73
|
+
}
|
|
74
|
+
if (blocked > 0) {
|
|
75
|
+
console.log(pc.yellow(`! ${blocked} prepare source(s) need follow-up before acquisition can proceed`));
|
|
76
|
+
}
|
|
77
|
+
console.log(pc.dim(`AI-assisted module discovery uses .zsk/config.yaml plus ${modulesRoot}/{module}/module.yaml outputs. Create a module with zsk module init -m <module-id>.`));
|
|
78
|
+
}
|
|
79
|
+
export async function sync(opts = {}) {
|
|
80
|
+
const { target, config, configFile } = await prepareBundle(opts);
|
|
81
|
+
const bundle = await runPrepareAction("sync", () => syncPrepareSources(target, config, opts));
|
|
82
|
+
const staffing = await writePrepareRuntimeEvidence(target, config);
|
|
83
|
+
const materialized = bundle.results.filter((record) => record.status === "materialized").length;
|
|
84
|
+
const blocked = bundle.results.filter((record) => ["blocked-auth", "source-gap", "failed"].includes(record.status)).length;
|
|
85
|
+
console.log(pc.green("✓ zsk prepare sync completed"));
|
|
86
|
+
console.log(pc.dim(`config: ${configFile}`));
|
|
87
|
+
console.log(pc.dim(`adapter-results: ${bundle.artifacts.adapterResultsDir}`));
|
|
88
|
+
console.log(pc.dim(`downstream-impact: ${bundle.artifacts.downstreamImpactPath}`));
|
|
89
|
+
console.log(pc.dim(`runtime-staffing: ${staffing.artifacts.markdownPath}`));
|
|
90
|
+
console.log(pc.dim(`synced ${bundle.results.length} source(s); ${materialized} materialized; ${blocked} blocked`));
|
|
91
|
+
if (blocked > 0) {
|
|
92
|
+
console.log(pc.yellow("! blocked sources preserved prior snapshots where present; inspect adapter-results before retrying"));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export async function auth(opts = {}) {
|
|
96
|
+
const { target, config } = await prepareBundle(opts);
|
|
97
|
+
const artifacts = await runPrepareAction("auth", () => writeAuthLoginHelper(target, config, opts));
|
|
98
|
+
console.log(pc.green("✓ zsk prepare auth helper written"));
|
|
99
|
+
console.log(pc.dim(`script: ${artifacts.authScriptPath}`));
|
|
100
|
+
console.log(pc.dim(`storageState: ${opts.out ? resolve(target, opts.out) : artifacts.authStatePath}`));
|
|
101
|
+
console.log(pc.dim("Run with Playwright installed, complete login once, then reuse the storageState path with prepare sync --auth-state or --auth-profile."));
|
|
102
|
+
}
|
|
103
|
+
export async function authCheck(opts = {}) {
|
|
104
|
+
const { target, config, configFile } = await prepareBundle(opts);
|
|
105
|
+
const bundle = await runPrepareAction("auth-check", () => checkPrepareAuth(target, config, opts));
|
|
106
|
+
const ready = bundle.results.filter((result) => ["ready", "reachable"].includes(result.status)).length;
|
|
107
|
+
const blocked = bundle.results.filter((result) => ["missing-auth", "blocked-auth", "source-gap", "failed"].includes(result.status)).length;
|
|
108
|
+
console.log(pc.green("✓ zsk prepare auth-check completed"));
|
|
109
|
+
console.log(pc.dim(`config: ${configFile}`));
|
|
110
|
+
console.log(pc.dim(`auth-check: ${bundle.artifacts.authCheckPath}`));
|
|
111
|
+
console.log(pc.dim(`checked ${bundle.results.length} source(s); ${ready} ready/reachable; ${blocked} blocked`));
|
|
112
|
+
for (const result of bundle.results) {
|
|
113
|
+
const sources = result.authSources.length > 0 ? result.authSources.join(", ") : "none";
|
|
114
|
+
const color = ["ready", "reachable"].includes(result.status) ? pc.green : pc.yellow;
|
|
115
|
+
console.log(color(`- ${result.sourcePath} [${result.status}] auth=${sources}; ${result.reason}`));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export async function migrateRaws(opts = {}) {
|
|
119
|
+
const { target, config, configFile } = await prepareBundle(opts);
|
|
120
|
+
const result = await buildRawMigrationPlan(target, config);
|
|
121
|
+
console.log(pc.green("✓ zsk prepare migrate-raws dry-run completed"));
|
|
122
|
+
console.log(pc.dim(`config: ${configFile}`));
|
|
123
|
+
console.log(pc.dim(`plan: ${result.artifacts.migrationPlanPath}`));
|
|
124
|
+
}
|
|
125
|
+
async function prepareBundle(opts) {
|
|
126
|
+
const target = opts.target ? resolvePath(opts.target) : process.cwd();
|
|
127
|
+
const configCheck = await checkProjectConfig(target);
|
|
128
|
+
for (const warning of configCheck.warnings) {
|
|
129
|
+
console.warn(pc.yellow(`! ${warning.file}: ${warning.message}`));
|
|
130
|
+
}
|
|
131
|
+
if (!configCheck.ok) {
|
|
132
|
+
console.error(pc.red("✗ zsk prepare stopped: config check failed"));
|
|
133
|
+
console.error(formatConfigIssues(configCheck.issues));
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
const config = await readProjectConfig(target);
|
|
137
|
+
const bundle = await buildPrepareArtifactBundle(target, config);
|
|
138
|
+
return {
|
|
139
|
+
target,
|
|
140
|
+
config,
|
|
141
|
+
bundle,
|
|
142
|
+
configFile: configCheck.configFile,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
async function writeJsonArtifact(path, value) {
|
|
146
|
+
await mkdir(dirname(path), { recursive: true });
|
|
147
|
+
await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
148
|
+
}
|
|
149
|
+
async function writeTextArtifact(path, value) {
|
|
150
|
+
await mkdir(dirname(path), { recursive: true });
|
|
151
|
+
await writeFile(path, value, "utf8");
|
|
152
|
+
}
|
|
153
|
+
async function runPrepareAction(name, action) {
|
|
154
|
+
try {
|
|
155
|
+
return await action();
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error(pc.red(`✗ zsk prepare ${name} failed`));
|
|
159
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function writePrepareRuntimeEvidence(target, config) {
|
|
164
|
+
return writeStaffingPlan(target, config, {
|
|
165
|
+
stage: "prepare",
|
|
166
|
+
skill: "prepare",
|
|
167
|
+
surface: "auto",
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
async function discoverProjectSources(target) {
|
|
171
|
+
const candidates = [
|
|
172
|
+
{ provider: "root-system-spec", type: "manual", path: "SYSTEM-SPEC.md", note: "root legacy/system spec candidate" },
|
|
173
|
+
{ provider: "root-project-config", type: "manual", path: "project-config.md", note: "root legacy project config candidate" },
|
|
174
|
+
{ provider: "root-docs", type: "manual", path: "docs", note: "root docs scanned as index-only source material" },
|
|
175
|
+
{ provider: "legacy-raws", type: "manual", path: ".raws", note: "legacy root raw source directory" },
|
|
176
|
+
{ provider: "legacy-issues", type: "manual", path: ".issues", note: "legacy root issue origin; default migration mode is index-only" },
|
|
177
|
+
{ provider: "legacy-playwright", type: "test_case", path: ".playwright", note: "legacy root Playwright origin; default migration mode is index-only" },
|
|
178
|
+
{ provider: "package", type: "manual", path: "package.json", note: "project package metadata" },
|
|
179
|
+
{ provider: "readme", type: "manual", path: "README.md", note: "project readme source" },
|
|
180
|
+
];
|
|
181
|
+
const sourceFiles = await discoverSourceFiles(target);
|
|
182
|
+
candidates.push(...sourceFiles);
|
|
183
|
+
const records = [];
|
|
184
|
+
const seen = new Set();
|
|
185
|
+
for (const candidate of candidates) {
|
|
186
|
+
if (seen.has(candidate.path))
|
|
187
|
+
continue;
|
|
188
|
+
seen.add(candidate.path);
|
|
189
|
+
if (!(await exists(resolve(target, candidate.path))))
|
|
190
|
+
continue;
|
|
191
|
+
records.push(await describeDiscoveredResource(target, candidate.provider, candidate.type, candidate.path, "index-only", candidate.note));
|
|
192
|
+
}
|
|
193
|
+
return records;
|
|
194
|
+
}
|
|
195
|
+
async function discoverSourceFiles(target) {
|
|
196
|
+
const roots = ["src", "test", "tests", "packages"];
|
|
197
|
+
const result = [];
|
|
198
|
+
for (const root of roots) {
|
|
199
|
+
const abs = resolve(target, root);
|
|
200
|
+
if (!(await exists(abs)))
|
|
201
|
+
continue;
|
|
202
|
+
for (const file of await collectFiles(abs, 80)) {
|
|
203
|
+
const name = basename(file).toLowerCase();
|
|
204
|
+
const ext = extname(file).toLowerCase();
|
|
205
|
+
const rel = projectRelative(target, file);
|
|
206
|
+
if (/^(openapi|swagger)\.(ya?ml|json)$/.test(name) || name.includes("api-contract")) {
|
|
207
|
+
result.push({ provider: `discovered-${slug(rel)}`, type: "api_contract", path: rel, note: "discovered API contract candidate" });
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
if (/\.(spec|test)\.[cm]?[jt]sx?$/.test(name) || name.includes("case")) {
|
|
211
|
+
result.push({ provider: `discovered-${slug(rel)}`, type: "test_case", path: rel, note: "discovered test/case candidate" });
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if ([".md", ".yaml", ".yml", ".json"].includes(ext) && isSourceLikePath(rel)) {
|
|
215
|
+
result.push({ provider: `discovered-${slug(rel)}`, type: inferType(rel), path: rel, note: "discovered project source candidate" });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
async function collectFiles(root, limit) {
|
|
222
|
+
const entries = await readdir(root, { withFileTypes: true });
|
|
223
|
+
const files = [];
|
|
224
|
+
for (const entry of entries) {
|
|
225
|
+
if (files.length >= limit)
|
|
226
|
+
break;
|
|
227
|
+
if (["node_modules", "dist", ".git"].includes(entry.name))
|
|
228
|
+
continue;
|
|
229
|
+
const path = join(root, entry.name);
|
|
230
|
+
if (entry.isDirectory())
|
|
231
|
+
files.push(...(await collectFiles(path, limit - files.length)));
|
|
232
|
+
if (entry.isFile())
|
|
233
|
+
files.push(path);
|
|
234
|
+
}
|
|
235
|
+
return files;
|
|
236
|
+
}
|
|
237
|
+
function inferType(path) {
|
|
238
|
+
if (/srs|prd|requirement/i.test(path))
|
|
239
|
+
return "prd";
|
|
240
|
+
if (/design|ui|ux|wireframe|prototype|mockup|visual|asset|sketch|figma|modao|mastergo/i.test(path))
|
|
241
|
+
return "design";
|
|
242
|
+
return "manual";
|
|
243
|
+
}
|
|
244
|
+
function isSourceLikePath(path) {
|
|
245
|
+
return /srs|prd|requirement|design|ui|ux|wireframe|prototype|mockup|visual|asset|sketch|figma|modao|mastergo/i.test(path);
|
|
246
|
+
}
|
|
247
|
+
function slug(value) {
|
|
248
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 64) || "source";
|
|
249
|
+
}
|
|
250
|
+
async function exists(path) {
|
|
251
|
+
try {
|
|
252
|
+
await access(path);
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=prepare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,31 +8,34 @@ import { intro, outro, confirm, log, spinner, note } from "../ui/prompts.js";
|
|
|
8
8
|
import { resolvePath } from "../core/targets.js";
|
|
9
9
|
import { scaffoldTemplate, fileExists } from "../core/scaffolder.js";
|
|
10
10
|
import { readPackageVersion, schemaUrl } from "../core/version.js";
|
|
11
|
-
import { DEFAULT_WORKSPACE_PATHS, getWorkspacePath } from "../core/workspace-layout.js";
|
|
11
|
+
import { CORE_PREPARE_RAW_LANES, DEFAULT_WORKSPACE_PATHS, getWorkspacePath } from "../core/workspace-layout.js";
|
|
12
|
+
import { getTemplate, resolveTemplateId } from "../core/template-registry.js";
|
|
12
13
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
13
14
|
import { join } from "node:path";
|
|
14
15
|
const ZSK_GITIGNORE_MARKER = "# ZSK runtime and sensitive artifacts";
|
|
15
16
|
const ZSK_GITIGNORE_BLOCK = [
|
|
16
17
|
ZSK_GITIGNORE_MARKER,
|
|
17
|
-
"# Keep .zsk docs, modules,
|
|
18
|
+
"# Keep .zsk docs, modules, raws, issues, Playwright specs, and test plans versionable.",
|
|
18
19
|
"!.zsk/",
|
|
19
20
|
"!.zsk/**",
|
|
20
|
-
".zsk/playwright
|
|
21
|
-
".zsk/
|
|
22
|
-
".zsk/
|
|
23
|
-
".zsk/playwright
|
|
24
|
-
".zsk/
|
|
25
|
-
".zsk/
|
|
26
|
-
".zsk/
|
|
27
|
-
".zsk/
|
|
28
|
-
".zsk/
|
|
29
|
-
".zsk/
|
|
30
|
-
".zsk/
|
|
31
|
-
".zsk/
|
|
21
|
+
".zsk/playwright/.auth/",
|
|
22
|
+
".zsk/modules/**/_playwright/.auth/",
|
|
23
|
+
".zsk/modules/**/_playwright/test-results/",
|
|
24
|
+
".zsk/modules/**/_playwright/playwright-report/",
|
|
25
|
+
".zsk/modules/**/_playwright/report/",
|
|
26
|
+
".zsk/modules/**/_playwright/**/*.trace.zip",
|
|
27
|
+
".zsk/modules/**/_playwright/**/*.webm",
|
|
28
|
+
".zsk/modules/**/_playwright/**/*.mp4",
|
|
29
|
+
".zsk/modules/**/_playwright/**/*.har",
|
|
30
|
+
".zsk/modules/**/_evidence/**/*.trace.zip",
|
|
31
|
+
".zsk/modules/**/_evidence/**/*.webm",
|
|
32
|
+
".zsk/modules/**/_evidence/**/*.mp4",
|
|
33
|
+
".zsk/modules/**/_evidence/**/*.har",
|
|
32
34
|
].join("\n");
|
|
33
35
|
export async function run(opts = {}) {
|
|
34
36
|
const target = opts.target ? resolvePath(opts.target) : process.cwd();
|
|
35
37
|
const interactive = !opts.yes;
|
|
38
|
+
const template = getTemplate(resolveTemplateId(opts.template));
|
|
36
39
|
if (interactive) {
|
|
37
40
|
intro(`${pc.bold("zsk")} · 项目 bootstrap`);
|
|
38
41
|
log.info(`目标:${pc.cyan(target)}`);
|
|
@@ -42,11 +45,12 @@ export async function run(opts = {}) {
|
|
|
42
45
|
const existingSystemSpec = await fileExists(join(target, getWorkspacePath({}, "systemSpec")));
|
|
43
46
|
const existingGitignore = await fileExists(join(target, ".gitignore"));
|
|
44
47
|
const summaryPre = [
|
|
48
|
+
`template: ${pc.cyan(template.name)} (${template.id})`,
|
|
45
49
|
`.zsk/config.yaml: ${existingConfig ? pc.yellow("已存在(跳过)") : pc.green("将创建")}`,
|
|
46
50
|
`.zsk/docs/PROJECT-CONFIG.md: ${existingProjectConfig ? pc.yellow("已存在(跳过)") : pc.green("将创建")}`,
|
|
47
51
|
`.zsk/docs/SYSTEM-SPEC.md: ${existingSystemSpec ? pc.yellow("已存在(跳过)") : pc.green("将创建")}`,
|
|
48
52
|
`.gitignore: ${existingGitignore ? pc.yellow("将确保包含 ZSK runtime ignore") : pc.green("将创建 ZSK runtime ignore")}`,
|
|
49
|
-
`.zsk/{docs,modules,
|
|
53
|
+
`.zsk/{docs,modules,raws}: ${pc.green("将按 IA 初始化规范确保存在")}`,
|
|
50
54
|
].join("\n");
|
|
51
55
|
if (interactive) {
|
|
52
56
|
note(summaryPre, "计划");
|
|
@@ -65,6 +69,8 @@ export async function run(opts = {}) {
|
|
|
65
69
|
ZSK_VERSION: packageVersion,
|
|
66
70
|
ZSK_CONFIG_SCHEMA_URL: schemaUrl(packageVersion, "zsk-config.schema.json"),
|
|
67
71
|
ZSK_MODULE_SCHEMA_URL: schemaUrl(packageVersion, "module.schema.json"),
|
|
72
|
+
ZSK_TEMPLATE_ID: template.id,
|
|
73
|
+
ZSK_TEMPLATE_VERSION: String(template.version),
|
|
68
74
|
INIT_TIMESTAMP: new Date().toISOString(),
|
|
69
75
|
},
|
|
70
76
|
});
|
|
@@ -81,10 +87,10 @@ export async function run(opts = {}) {
|
|
|
81
87
|
const nextSteps = [
|
|
82
88
|
"",
|
|
83
89
|
`${pc.bold("下一步:")}`,
|
|
84
|
-
`1. 编辑 ${pc.cyan(".zsk/config.yaml")},把 ${pc.yellow("<project-name>")}
|
|
85
|
-
`2.
|
|
86
|
-
`3. 把 SRS / PRD /
|
|
87
|
-
`4.
|
|
90
|
+
`1. 编辑 ${pc.cyan(".zsk/config.yaml")},把 ${pc.yellow("<project-name>")} 改成项目名;默认模板是 ${pc.cyan(template.id)}`,
|
|
91
|
+
`2. 运行 ${pc.cyan("zsk config explain")} 查看模板补齐后的完整有效配置`,
|
|
92
|
+
`3. 把 SRS / PRD / 设计资产 / API / 测试用例来源交给 AI,或运行 ${pc.cyan("zsk config setup")} 辅助填写 sources`,
|
|
93
|
+
`4. 需要显式改默认模板时运行 ${pc.cyan("zsk config eject roles|workflow|providers|gates|all")}`,
|
|
88
94
|
].join("\n");
|
|
89
95
|
if (interactive) {
|
|
90
96
|
note(summary + nextSteps, "bootstrap 摘要");
|
|
@@ -99,11 +105,9 @@ async function ensureWorkspaceDirectories(target) {
|
|
|
99
105
|
await Promise.all([
|
|
100
106
|
DEFAULT_WORKSPACE_PATHS.docs,
|
|
101
107
|
DEFAULT_WORKSPACE_PATHS.modules,
|
|
102
|
-
DEFAULT_WORKSPACE_PATHS.
|
|
103
|
-
DEFAULT_WORKSPACE_PATHS.
|
|
104
|
-
DEFAULT_WORKSPACE_PATHS.
|
|
105
|
-
DEFAULT_WORKSPACE_PATHS.playwright,
|
|
106
|
-
DEFAULT_WORKSPACE_PATHS.plans,
|
|
108
|
+
DEFAULT_WORKSPACE_PATHS.raws,
|
|
109
|
+
join(DEFAULT_WORKSPACE_PATHS.raws, "prepare"),
|
|
110
|
+
...CORE_PREPARE_RAW_LANES.map((lane) => join(DEFAULT_WORKSPACE_PATHS.raws, "prepare", lane)),
|
|
107
111
|
].map((path) => mkdir(join(target, path), { recursive: true })));
|
|
108
112
|
}
|
|
109
113
|
async function ensureZskGitignore(target) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-init.js","sourceRoot":"","sources":["../../src/commands/project-init.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,wEAAwE;AACxE,8BAA8B;AAC9B,EAAE;AACF,oDAAoD;AAEpD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"project-init.js","sourceRoot":"","sources":["../../src/commands/project-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
import YAML from "yaml";
|
|
3
|
+
import { getTemplate, listTemplates } from "../core/template-registry.js";
|
|
4
|
+
export async function list() {
|
|
5
|
+
const templates = listTemplates();
|
|
6
|
+
console.log(pc.green("✓ zsk templates"));
|
|
7
|
+
for (const template of templates) {
|
|
8
|
+
console.log([
|
|
9
|
+
`- ${template.id}`,
|
|
10
|
+
` name: ${template.name}`,
|
|
11
|
+
` version: ${template.version}`,
|
|
12
|
+
` defaultMode: ${template.defaultMode}`,
|
|
13
|
+
` defaultScale: ${template.defaultScale}`,
|
|
14
|
+
` description: ${template.description}`,
|
|
15
|
+
].join("\n"));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function show(name = "founder-os") {
|
|
19
|
+
const template = getTemplate(name);
|
|
20
|
+
const view = {
|
|
21
|
+
id: template.id,
|
|
22
|
+
name: template.name,
|
|
23
|
+
version: template.version,
|
|
24
|
+
defaultMode: template.defaultMode,
|
|
25
|
+
defaultScale: template.defaultScale,
|
|
26
|
+
aliases: template.aliases,
|
|
27
|
+
defaults: template.defaults,
|
|
28
|
+
ejectedFiles: template.ejectedFiles,
|
|
29
|
+
stages: template.stages,
|
|
30
|
+
};
|
|
31
|
+
console.log(pc.green(`✓ zsk template ${template.id}`));
|
|
32
|
+
process.stdout.write(`${YAML.stringify(view)}\n`);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CACT;YACE,KAAK,QAAQ,CAAC,EAAE,EAAE;YAClB,WAAW,QAAQ,CAAC,IAAI,EAAE;YAC1B,cAAc,QAAQ,CAAC,OAAO,EAAE;YAChC,kBAAkB,QAAQ,CAAC,WAAW,EAAE;YACxC,mBAAmB,QAAQ,CAAC,YAAY,EAAE;YAC1C,kBAAkB,QAAQ,CAAC,WAAW,EAAE;SACzC,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,YAAY;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG;QACX,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -19,15 +19,49 @@ export type SourceConfig = {
|
|
|
19
19
|
path?: string;
|
|
20
20
|
output?: string;
|
|
21
21
|
snapshot?: string;
|
|
22
|
+
metadata?: Record<string, unknown>;
|
|
22
23
|
origin?: {
|
|
23
24
|
kind?: string;
|
|
24
25
|
path?: string;
|
|
25
26
|
url?: string;
|
|
26
27
|
repository?: string;
|
|
28
|
+
ref?: string;
|
|
29
|
+
query?: string;
|
|
30
|
+
jql?: string;
|
|
31
|
+
provider?: string;
|
|
32
|
+
id?: string;
|
|
33
|
+
note?: string;
|
|
34
|
+
[key: string]: unknown;
|
|
27
35
|
};
|
|
28
36
|
};
|
|
37
|
+
export declare const JIRA_LOCAL_FILE_ORIGIN_KEYS: readonly ["csvPath", "csv", "exportPath"];
|
|
38
|
+
export declare const DESIGN_LOCAL_FILE_ORIGIN_KEYS: readonly ["exportPath", "assetPath", "filePath"];
|
|
39
|
+
export declare const ADAPTER_LOCAL_FILE_ORIGIN_KEYS: ("csvPath" | "csv" | "exportPath" | "assetPath" | "filePath")[];
|
|
29
40
|
export type ProjectConfig = WorkspaceLayoutConfig & {
|
|
30
41
|
layoutVersion?: number;
|
|
42
|
+
project?: {
|
|
43
|
+
name?: string;
|
|
44
|
+
display_name?: string;
|
|
45
|
+
metadata?: Record<string, unknown>;
|
|
46
|
+
};
|
|
47
|
+
template?: string | {
|
|
48
|
+
id?: string;
|
|
49
|
+
version?: number;
|
|
50
|
+
metadata?: Record<string, unknown>;
|
|
51
|
+
};
|
|
52
|
+
mode?: string;
|
|
53
|
+
scale?: string;
|
|
54
|
+
workflow?: {
|
|
55
|
+
profile?: string;
|
|
56
|
+
metadata?: Record<string, unknown>;
|
|
57
|
+
};
|
|
58
|
+
customize?: {
|
|
59
|
+
roles?: string;
|
|
60
|
+
workflow?: string;
|
|
61
|
+
providers?: string;
|
|
62
|
+
gates?: string;
|
|
63
|
+
[key: string]: unknown;
|
|
64
|
+
};
|
|
31
65
|
paths?: {
|
|
32
66
|
raws?: string;
|
|
33
67
|
docs?: string;
|
|
@@ -39,6 +73,16 @@ export type ProjectConfig = WorkspaceLayoutConfig & {
|
|
|
39
73
|
plans?: string;
|
|
40
74
|
};
|
|
41
75
|
automation?: {
|
|
76
|
+
smoke?: {
|
|
77
|
+
command?: string;
|
|
78
|
+
commands?: string[];
|
|
79
|
+
metadata?: Record<string, unknown>;
|
|
80
|
+
};
|
|
81
|
+
deploy?: {
|
|
82
|
+
command?: string;
|
|
83
|
+
commands?: string[];
|
|
84
|
+
metadata?: Record<string, unknown>;
|
|
85
|
+
};
|
|
42
86
|
demo?: {
|
|
43
87
|
defaultMode?: "manual" | "script" | "optimized" | "playwright" | "computer-use" | "hybrid";
|
|
44
88
|
evidenceDir?: string;
|
|
@@ -55,22 +99,63 @@ export type ProjectConfig = WorkspaceLayoutConfig & {
|
|
|
55
99
|
role?: string;
|
|
56
100
|
};
|
|
57
101
|
};
|
|
102
|
+
verify?: {
|
|
103
|
+
command?: string;
|
|
104
|
+
commands?: string[];
|
|
105
|
+
metadata?: Record<string, unknown>;
|
|
106
|
+
};
|
|
58
107
|
};
|
|
59
|
-
|
|
108
|
+
tools?: {
|
|
109
|
+
runtime_ui?: string[];
|
|
110
|
+
design?: string[];
|
|
111
|
+
metadata?: Record<string, unknown>;
|
|
112
|
+
};
|
|
113
|
+
staffing?: {
|
|
114
|
+
rolePool?: string;
|
|
115
|
+
roles?: Record<string, Record<string, unknown> | undefined>;
|
|
116
|
+
timeoutPolicy?: {
|
|
117
|
+
heartbeatIntervalMs?: number;
|
|
118
|
+
staleAfterMs?: number;
|
|
119
|
+
maxAttempts?: number;
|
|
120
|
+
onTimeout?: "fallback-to-leader-sequential";
|
|
121
|
+
metadata?: Record<string, unknown>;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
gates?: {
|
|
125
|
+
defaultThreshold?: number;
|
|
126
|
+
thresholds?: Record<string, number | undefined>;
|
|
127
|
+
metadata?: Record<string, unknown>;
|
|
128
|
+
};
|
|
129
|
+
sources?: SourceTreeConfig;
|
|
60
130
|
sync?: Record<string, SourceConfig | undefined>;
|
|
61
131
|
modules?: {
|
|
62
132
|
index?: string;
|
|
63
133
|
root?: string;
|
|
64
134
|
};
|
|
65
135
|
};
|
|
136
|
+
export interface SourceTreeConfig {
|
|
137
|
+
[key: string]: SourceConfig | SourceTreeConfig | undefined;
|
|
138
|
+
}
|
|
139
|
+
export type SourceEntry = {
|
|
140
|
+
id: string;
|
|
141
|
+
provider: string;
|
|
142
|
+
path: string;
|
|
143
|
+
rawLane?: string;
|
|
144
|
+
segments: string[];
|
|
145
|
+
source: SourceConfig;
|
|
146
|
+
};
|
|
66
147
|
export declare function checkProjectConfig(target: string): Promise<ConfigCheckResult>;
|
|
67
148
|
export declare function readProjectConfig(target: string): Promise<ProjectConfig>;
|
|
149
|
+
export declare function readRawProjectConfig(target: string): Promise<ProjectConfig>;
|
|
68
150
|
export declare function resolveProjectConfigFile(target: string): Promise<{
|
|
69
151
|
file: string;
|
|
70
152
|
usedLegacy: boolean;
|
|
71
153
|
}>;
|
|
72
154
|
export declare function findModuleConfigFiles(root: string, projectConfig: ProjectConfig): Promise<string[]>;
|
|
73
155
|
export declare function formatConfigIssues(issues: ConfigCheckIssue[]): string;
|
|
156
|
+
export declare function flattenProjectSources(sources: SourceTreeConfig | undefined): SourceEntry[];
|
|
157
|
+
export declare function resolveSourceSnapshot(config: ProjectConfig, entry: SourceEntry): string;
|
|
158
|
+
export declare function resolveSourceIndex(config: ProjectConfig, entry: SourceEntry): string;
|
|
74
159
|
export declare function pathStat(path: string): Promise<{
|
|
75
160
|
size: number;
|
|
76
161
|
} | null>;
|