@captain_z/zsk 1.4.3 → 1.5.1
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 +21 -10
- package/dist/bin.js +174 -1
- package/dist/bin.js.map +1 -1
- package/dist/commands/add-flow.js +3 -8
- package/dist/commands/add-flow.js.map +1 -1
- package/dist/commands/add.d.ts +1 -0
- package/dist/commands/add.js +22 -6
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/check.js +10 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/demo.d.ts +31 -0
- package/dist/commands/demo.js +533 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/issue.d.ts +8 -0
- package/dist/commands/issue.js +170 -6
- package/dist/commands/issue.js.map +1 -1
- package/dist/commands/module.js +23 -2
- package/dist/commands/module.js.map +1 -1
- package/dist/commands/project-init.js +1 -0
- package/dist/commands/project-init.js.map +1 -1
- package/dist/commands/remove.js +1 -1
- package/dist/commands/remove.js.map +1 -1
- package/dist/core/config.d.ts +14 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/installer.d.ts +5 -0
- package/dist/core/installer.js +50 -6
- package/dist/core/installer.js.map +1 -1
- package/dist/core/skills.d.ts +3 -4
- package/dist/core/skills.js +34 -43
- package/dist/core/skills.js.map +1 -1
- package/dist/core/targets.js +1 -1
- package/dist/core/targets.js.map +1 -1
- package/package.json +2 -2
- package/schemas/module.schema.json +1 -1
- package/schemas/zsk-config.schema.json +122 -2
- package/templates/issue/default/issue.md +35 -2
- package/templates/module/frontend-module/acceptance.md +18 -0
- package/templates/module/frontend-module/archive.md +17 -0
- package/templates/module/frontend-module/commit.md +15 -0
- package/templates/module/frontend-module/demo-outline.md +59 -0
- package/templates/module/frontend-module/demo-report.md +23 -0
- package/templates/module/frontend-module/deploy.md +18 -0
- package/templates/module/frontend-module/design.md +12 -0
- package/templates/module/frontend-module/module.yaml +4 -1
- package/templates/module/frontend-module/proposal.md +7 -0
- package/templates/module/frontend-module/ready.md +12 -0
- package/templates/module/frontend-module/review.md +12 -0
- package/templates/module/frontend-module/scenarios/index.md +13 -0
- package/templates/module/frontend-module/scenarios/p0-happy-path.spec.ts +13 -0
- package/templates/module/frontend-module/smoke.md +21 -0
- package/templates/module/frontend-module/spec.md +14 -0
- package/templates/module/frontend-module/tasks.md +13 -0
- package/templates/module/frontend-module/verify.md +12 -0
- package/templates/project-init/.issues/README.md +17 -1
- package/templates/project-init/.issues/_taxonomy.md +35 -0
- package/templates/project-init/.issues/index.md +7 -0
- package/templates/project-init/.raws/README.md +2 -1
- package/templates/project-init/.raws/backend-repositories/index.md +12 -0
- package/templates/project-init/.raws/index.md +3 -0
- package/templates/project-init/.raws/issues/index.md +4 -0
- package/templates/project-init/.zsk/checkpoints/index.md +4 -0
- package/templates/project-init/.zsk/config.yaml +56 -1
- package/templates/project-init/.zsk/learning/index.md +14 -0
- package/templates/project-init/.zsk/learning/proposals/.gitkeep +1 -0
- package/templates/project-init/.zsk/resource-manifest.json +55 -0
- package/templates/project-init/.zsk/workflow-state.json +6 -0
- package/templates/project-init/project-config.md +5 -3
package/dist/commands/check.js
CHANGED
|
@@ -21,8 +21,16 @@ const STAGE_DOCS_REQUIRING_FEEDBACK = [
|
|
|
21
21
|
"spec.md",
|
|
22
22
|
"design.md",
|
|
23
23
|
"tasks.md",
|
|
24
|
-
"
|
|
24
|
+
"smoke.md",
|
|
25
25
|
"review.md",
|
|
26
|
+
"commit.md",
|
|
27
|
+
"deploy.md",
|
|
28
|
+
"demo-outline.md",
|
|
29
|
+
"demo-report.md",
|
|
30
|
+
"ready.md",
|
|
31
|
+
"verify.md",
|
|
32
|
+
"verification.md",
|
|
33
|
+
"acceptance.md",
|
|
26
34
|
"archive.md",
|
|
27
35
|
];
|
|
28
36
|
export async function run(opts = {}) {
|
|
@@ -51,7 +59,7 @@ export async function run(opts = {}) {
|
|
|
51
59
|
}
|
|
52
60
|
console.log(pc.green("✓ zsk check passed"));
|
|
53
61
|
console.log(pc.dim(`checked ${moduleFiles.length} module config(s)`));
|
|
54
|
-
console.log(pc.dim("Semantic checks requiring Figma, Computer Use, or cross-source reasoning are delegated to AI skills."));
|
|
62
|
+
console.log(pc.dim("Semantic checks requiring Figma, Browser Use, Computer Use, or cross-source reasoning are delegated to AI skills."));
|
|
55
63
|
}
|
|
56
64
|
async function readModuleConfigs(files) {
|
|
57
65
|
const result = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type DemoOptions = {
|
|
2
|
+
target?: string;
|
|
3
|
+
module?: string;
|
|
4
|
+
note?: string;
|
|
5
|
+
};
|
|
6
|
+
export type ScenarioGenerateOptions = DemoOptions & {
|
|
7
|
+
testCase?: string;
|
|
8
|
+
snapshot?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
};
|
|
11
|
+
export type McpConfigOptions = {
|
|
12
|
+
target?: string;
|
|
13
|
+
write?: boolean;
|
|
14
|
+
};
|
|
15
|
+
export type DemoRunOptions = DemoOptions & {
|
|
16
|
+
playwright?: boolean;
|
|
17
|
+
computerUse?: boolean;
|
|
18
|
+
hybrid?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export declare function start(opts?: DemoOptions): Promise<void>;
|
|
21
|
+
export declare function pause(opts?: DemoOptions): Promise<void>;
|
|
22
|
+
export declare function resume(opts?: DemoOptions): Promise<void>;
|
|
23
|
+
export declare function terminate(opts?: DemoOptions): Promise<void>;
|
|
24
|
+
export declare function complete(opts?: DemoOptions): Promise<void>;
|
|
25
|
+
export declare function run(opts?: DemoRunOptions): Promise<void>;
|
|
26
|
+
export declare function capture(opts?: DemoOptions): Promise<void>;
|
|
27
|
+
export declare function scenarioList(opts?: DemoOptions): Promise<void>;
|
|
28
|
+
export declare function scenarioRecord(opts?: DemoOptions): Promise<void>;
|
|
29
|
+
export declare function scenarioPromote(opts?: DemoOptions): Promise<void>;
|
|
30
|
+
export declare function scenarioGenerate(opts?: ScenarioGenerateOptions): Promise<void>;
|
|
31
|
+
export declare function mcpConfig(opts?: McpConfigOptions): Promise<void>;
|
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { resolvePath } from "../core/targets.js";
|
|
5
|
+
import { checkProjectConfig, readProjectConfig } from "../core/config.js";
|
|
6
|
+
export async function start(opts = {}) {
|
|
7
|
+
const ctx = await prepare(opts);
|
|
8
|
+
const now = new Date().toISOString();
|
|
9
|
+
const session = {
|
|
10
|
+
version: 1,
|
|
11
|
+
id: createSessionId(now),
|
|
12
|
+
module: ctx.moduleId,
|
|
13
|
+
status: "running",
|
|
14
|
+
mode: ctx.defaultMode,
|
|
15
|
+
cursor: null,
|
|
16
|
+
evidenceDir: ctx.evidenceDir,
|
|
17
|
+
scenarioDir: ctx.scenarioDir,
|
|
18
|
+
bridge: ctx.bridge,
|
|
19
|
+
startedAt: now,
|
|
20
|
+
updatedAt: now,
|
|
21
|
+
note: opts.note,
|
|
22
|
+
events: [{ at: now, type: "start", note: opts.note }],
|
|
23
|
+
};
|
|
24
|
+
await persistSession(ctx, session);
|
|
25
|
+
console.log(pc.green("✓ zsk demo start completed"));
|
|
26
|
+
printSession(session);
|
|
27
|
+
}
|
|
28
|
+
export async function pause(opts = {}) {
|
|
29
|
+
await updateExisting(opts, "paused", "pause");
|
|
30
|
+
}
|
|
31
|
+
export async function resume(opts = {}) {
|
|
32
|
+
await updateExisting(opts, "running", "resume");
|
|
33
|
+
}
|
|
34
|
+
export async function terminate(opts = {}) {
|
|
35
|
+
await updateExisting(opts, "terminated", "terminate", true);
|
|
36
|
+
}
|
|
37
|
+
export async function complete(opts = {}) {
|
|
38
|
+
await updateExisting(opts, "completed", "complete", true);
|
|
39
|
+
}
|
|
40
|
+
export async function run(opts = {}) {
|
|
41
|
+
const mode = opts.hybrid || (opts.computerUse && opts.playwright)
|
|
42
|
+
? "hybrid"
|
|
43
|
+
: opts.computerUse
|
|
44
|
+
? "computer-use"
|
|
45
|
+
: opts.playwright
|
|
46
|
+
? "playwright"
|
|
47
|
+
: "script";
|
|
48
|
+
const ctx = await prepare(opts);
|
|
49
|
+
const existing = await readSession(ctx);
|
|
50
|
+
const now = new Date().toISOString();
|
|
51
|
+
const session = existing ?? {
|
|
52
|
+
version: 1,
|
|
53
|
+
id: createSessionId(now),
|
|
54
|
+
module: ctx.moduleId,
|
|
55
|
+
status: "running",
|
|
56
|
+
mode,
|
|
57
|
+
cursor: null,
|
|
58
|
+
evidenceDir: ctx.evidenceDir,
|
|
59
|
+
scenarioDir: ctx.scenarioDir,
|
|
60
|
+
bridge: ctx.bridge,
|
|
61
|
+
startedAt: now,
|
|
62
|
+
updatedAt: now,
|
|
63
|
+
events: [],
|
|
64
|
+
};
|
|
65
|
+
session.status = "running";
|
|
66
|
+
session.mode = mode;
|
|
67
|
+
session.bridge = ctx.bridge;
|
|
68
|
+
session.updatedAt = now;
|
|
69
|
+
session.note = opts.note ?? session.note;
|
|
70
|
+
session.events.push({
|
|
71
|
+
at: now,
|
|
72
|
+
type: `run:${mode}`,
|
|
73
|
+
note: opts.note ?? automationNote(mode),
|
|
74
|
+
});
|
|
75
|
+
await persistSession(ctx, session);
|
|
76
|
+
if (mode === "hybrid")
|
|
77
|
+
await ensureBridgeArtifacts(ctx, session);
|
|
78
|
+
console.log(pc.green(`✓ zsk demo run prepared (${mode})`));
|
|
79
|
+
if (mode === "computer-use") {
|
|
80
|
+
console.log(pc.yellow("! Computer Use is an explicit visual/system fallback; record why Playwright or Browser Use was insufficient."));
|
|
81
|
+
}
|
|
82
|
+
if (mode === "hybrid") {
|
|
83
|
+
console.log(pc.dim("bridge: configured decision tool understands/chooses operations; Playwright executes and records when feasible."));
|
|
84
|
+
if (session.bridge) {
|
|
85
|
+
console.log(pc.dim(`decision tool: ${session.bridge.decisionTool}`));
|
|
86
|
+
console.log(pc.dim(`execution tool: ${session.bridge.executionTool}`));
|
|
87
|
+
console.log(pc.dim(`plan: ${session.bridge.planFile}`));
|
|
88
|
+
console.log(pc.dim(`execution: ${session.bridge.executionFile}`));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (mode === "playwright" || mode === "hybrid") {
|
|
92
|
+
console.log(pc.dim(`scenario dir: ${session.scenarioDir}`));
|
|
93
|
+
}
|
|
94
|
+
printSession(session);
|
|
95
|
+
}
|
|
96
|
+
export async function capture(opts = {}) {
|
|
97
|
+
const ctx = await prepare(opts);
|
|
98
|
+
const session = await requireSession(ctx);
|
|
99
|
+
const now = new Date().toISOString();
|
|
100
|
+
const file = join(ctx.evidenceDirAbs, `capture-${now.replace(/[:.]/g, "-")}.md`);
|
|
101
|
+
await writeFile(file, [
|
|
102
|
+
`# Demo Capture`,
|
|
103
|
+
``,
|
|
104
|
+
`- Session: ${session.id}`,
|
|
105
|
+
`- Module: ${session.module}`,
|
|
106
|
+
`- Captured at: ${now}`,
|
|
107
|
+
`- Note: ${opts.note ?? ""}`,
|
|
108
|
+
``,
|
|
109
|
+
].join("\n"), "utf8");
|
|
110
|
+
session.updatedAt = now;
|
|
111
|
+
session.events.push({ at: now, type: "capture", note: file });
|
|
112
|
+
await persistSession(ctx, session);
|
|
113
|
+
console.log(pc.green("✓ zsk demo capture completed"));
|
|
114
|
+
console.log(pc.dim(`capture: ${file}`));
|
|
115
|
+
}
|
|
116
|
+
export async function scenarioList(opts = {}) {
|
|
117
|
+
const ctx = await prepare(opts);
|
|
118
|
+
console.log(pc.bold(`${ctx.moduleId} demo scenarios`));
|
|
119
|
+
console.log(pc.dim(ctx.scenarioDirAbs));
|
|
120
|
+
}
|
|
121
|
+
export async function scenarioRecord(opts = {}) {
|
|
122
|
+
const ctx = await prepare(opts);
|
|
123
|
+
await mkdir(ctx.scenarioDirAbs, { recursive: true });
|
|
124
|
+
const file = join(ctx.scenarioDirAbs, "recorded-scenario.md");
|
|
125
|
+
await writeFile(file, `# Recorded Scenario\n\n- Module: ${ctx.moduleId}\n- Source: demo\n- Note: ${opts.note ?? ""}\n`, { flag: "w" });
|
|
126
|
+
console.log(pc.green("✓ zsk demo scenario record completed"));
|
|
127
|
+
console.log(pc.dim(`scenario: ${file}`));
|
|
128
|
+
}
|
|
129
|
+
export async function scenarioPromote(opts = {}) {
|
|
130
|
+
const ctx = await prepare(opts);
|
|
131
|
+
const session = await readSession(ctx);
|
|
132
|
+
await mkdir(ctx.scenarioDirAbs, { recursive: true });
|
|
133
|
+
const file = join(ctx.scenarioDirAbs, "promoted-from-demo.md");
|
|
134
|
+
await writeFile(file, [
|
|
135
|
+
`# Promoted Demo Scenario`,
|
|
136
|
+
``,
|
|
137
|
+
`- Module: ${ctx.moduleId}`,
|
|
138
|
+
`- Session: ${session?.id ?? "unknown"}`,
|
|
139
|
+
`- Reuse targets: smoke, verify, regression`,
|
|
140
|
+
`- Note: ${opts.note ?? ""}`,
|
|
141
|
+
``,
|
|
142
|
+
].join("\n"), "utf8");
|
|
143
|
+
console.log(pc.green("✓ zsk demo scenario promote completed"));
|
|
144
|
+
console.log(pc.dim(`scenario: ${file}`));
|
|
145
|
+
}
|
|
146
|
+
export async function scenarioGenerate(opts = {}) {
|
|
147
|
+
const ctx = await prepare(opts);
|
|
148
|
+
await mkdir(ctx.scenarioDirAbs, { recursive: true });
|
|
149
|
+
const testCasePath = opts.testCase ? resolve(ctx.target, opts.testCase) : null;
|
|
150
|
+
const snapshotPath = opts.snapshot ? resolve(ctx.target, opts.snapshot) : null;
|
|
151
|
+
const testCase = testCasePath ? await readOptional(testCasePath) : "";
|
|
152
|
+
const snapshot = snapshotPath ? await readOptional(snapshotPath) : "";
|
|
153
|
+
const generatedName = slugify(opts.name ?? inferScenarioName(testCase) ?? "generated-from-test-case");
|
|
154
|
+
const synthesisFile = join(ctx.scenarioDirAbs, "scenario-synthesis.json");
|
|
155
|
+
const specFile = join(ctx.scenarioDirAbs, `${generatedName}.spec.ts`);
|
|
156
|
+
const roleTargets = parseRoleTargets(snapshot);
|
|
157
|
+
const generatedSteps = synthesizePlaywrightSteps(roleTargets, testCase);
|
|
158
|
+
await writeJson(synthesisFile, {
|
|
159
|
+
version: 1,
|
|
160
|
+
module: ctx.moduleId,
|
|
161
|
+
inputs: {
|
|
162
|
+
testCase: opts.testCase ?? "TODO: map .raws/testing test case",
|
|
163
|
+
prdRefs: [],
|
|
164
|
+
specRefs: [],
|
|
165
|
+
designRefs: [],
|
|
166
|
+
taskRefs: [],
|
|
167
|
+
pageStructure: {
|
|
168
|
+
kind: snapshot ? "aria_snapshot" : "playwright_mcp",
|
|
169
|
+
source: opts.snapshot ?? "TODO: Playwright MCP observation id, Browser Use handoff, or snapshot path",
|
|
170
|
+
},
|
|
171
|
+
browserUseHandoff: "TODO: optional Browser Use handoff path",
|
|
172
|
+
},
|
|
173
|
+
output: {
|
|
174
|
+
playwrightSpec: `${ctx.scenarioDir}/${generatedName}.spec.ts`,
|
|
175
|
+
tags: ["demo", "verify"],
|
|
176
|
+
reuseTargets: ["smoke", "demo", "verify", "regression"],
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
await writeFile(specFile, [
|
|
180
|
+
`import { test, expect } from "@playwright/test";`,
|
|
181
|
+
``,
|
|
182
|
+
`test.describe("${ctx.moduleId} synthesized scenarios", () => {`,
|
|
183
|
+
` test("${escapeForDoubleQuotedString(opts.name ?? "generated from test case and aria snapshot")}", async ({ page }) => {`,
|
|
184
|
+
` test.skip(!process.env.ZSK_DEMO_BASE_URL, "Set ZSK_DEMO_BASE_URL to run this scenario.");`,
|
|
185
|
+
` await page.goto(process.env.ZSK_DEMO_BASE_URL);`,
|
|
186
|
+
``,
|
|
187
|
+
...generatedSteps.map((step) => ` ${step}`),
|
|
188
|
+
` });`,
|
|
189
|
+
`});`,
|
|
190
|
+
``,
|
|
191
|
+
].join("\n"), "utf8");
|
|
192
|
+
console.log(pc.green("✓ zsk demo scenario generate completed"));
|
|
193
|
+
console.log(pc.dim(`synthesis: ${synthesisFile}`));
|
|
194
|
+
console.log(pc.dim(`spec: ${specFile}`));
|
|
195
|
+
if (!snapshot)
|
|
196
|
+
console.log(pc.yellow("! no snapshot provided; generated a conservative skeleton"));
|
|
197
|
+
}
|
|
198
|
+
export async function mcpConfig(opts = {}) {
|
|
199
|
+
const target = opts.target ? resolvePath(opts.target) : process.cwd();
|
|
200
|
+
const config = {
|
|
201
|
+
mcpServers: {
|
|
202
|
+
playwright: {
|
|
203
|
+
command: "npx",
|
|
204
|
+
args: ["@playwright/mcp@latest"],
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
const content = `${JSON.stringify(config, null, 2)}\n`;
|
|
209
|
+
if (opts.write) {
|
|
210
|
+
const file = resolve(target, ".zsk", "mcp", "playwright.json");
|
|
211
|
+
await mkdir(resolve(file, ".."), { recursive: true });
|
|
212
|
+
await writeFile(file, content, "utf8");
|
|
213
|
+
console.log(pc.green("✓ zsk demo mcp config written"));
|
|
214
|
+
console.log(pc.dim(`config: ${file}`));
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
console.log(content);
|
|
218
|
+
}
|
|
219
|
+
async function updateExisting(opts, status, eventType, terminal = false) {
|
|
220
|
+
const ctx = await prepare(opts);
|
|
221
|
+
const session = await requireSession(ctx);
|
|
222
|
+
const now = new Date().toISOString();
|
|
223
|
+
session.status = status;
|
|
224
|
+
session.updatedAt = now;
|
|
225
|
+
session.note = opts.note ?? session.note;
|
|
226
|
+
if (terminal)
|
|
227
|
+
session.completedAt = now;
|
|
228
|
+
session.events.push({ at: now, type: eventType, note: opts.note });
|
|
229
|
+
await persistSession(ctx, session);
|
|
230
|
+
console.log(pc.green(`✓ zsk demo ${eventType} completed`));
|
|
231
|
+
printSession(session);
|
|
232
|
+
}
|
|
233
|
+
async function prepare(opts) {
|
|
234
|
+
const target = opts.target ? resolvePath(opts.target) : process.cwd();
|
|
235
|
+
const moduleId = opts.module;
|
|
236
|
+
if (!moduleId) {
|
|
237
|
+
console.error(pc.red("✗ missing module id; pass -m <module-id>"));
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
const configCheck = await checkProjectConfig(target);
|
|
241
|
+
for (const warning of configCheck.warnings) {
|
|
242
|
+
console.warn(pc.yellow(`! ${warning.file}: ${warning.message}`));
|
|
243
|
+
}
|
|
244
|
+
if (!configCheck.ok) {
|
|
245
|
+
console.error(pc.red("✗ zsk demo stopped: config check failed"));
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
const config = await readProjectConfig(target);
|
|
249
|
+
const demoConfig = config.automation?.demo;
|
|
250
|
+
const issueRoot = config.paths?.issues ?? ".issues";
|
|
251
|
+
const docsRoot = config.paths?.docs ?? "docs";
|
|
252
|
+
const evidenceDir = interpolate(demoConfig?.evidenceDir ?? `${issueRoot}/{module}/demo/_evidence`, moduleId);
|
|
253
|
+
const scenarioDir = interpolate(demoConfig?.scenarioDir ?? `${docsRoot}/{module}/scenarios`, moduleId);
|
|
254
|
+
const bridgePlan = interpolate(demoConfig?.bridge?.planFile ?? `.zsk/demo-sessions/{module}/operation-plan.json`, moduleId);
|
|
255
|
+
const bridgeExecution = interpolate(demoConfig?.bridge?.executionFile ?? `.zsk/demo-sessions/{module}/playwright-execution.json`, moduleId);
|
|
256
|
+
const sessionRoot = resolve(target, ".zsk", "demo-sessions", moduleId);
|
|
257
|
+
await mkdir(sessionRoot, { recursive: true });
|
|
258
|
+
await mkdir(resolve(target, evidenceDir), { recursive: true });
|
|
259
|
+
await mkdir(resolve(target, scenarioDir), { recursive: true });
|
|
260
|
+
await mkdir(resolve(target, bridgePlan, ".."), { recursive: true });
|
|
261
|
+
await mkdir(resolve(target, bridgeExecution, ".."), { recursive: true });
|
|
262
|
+
return {
|
|
263
|
+
target,
|
|
264
|
+
moduleId,
|
|
265
|
+
config,
|
|
266
|
+
sessionFile: join(sessionRoot, "current.json"),
|
|
267
|
+
workflowStateFile: resolve(target, ".zsk", "workflow-state.json"),
|
|
268
|
+
evidenceDir,
|
|
269
|
+
evidenceDirAbs: resolve(target, evidenceDir),
|
|
270
|
+
scenarioDir,
|
|
271
|
+
scenarioDirAbs: resolve(target, scenarioDir),
|
|
272
|
+
defaultMode: normalizeMode(demoConfig?.defaultMode),
|
|
273
|
+
bridge: {
|
|
274
|
+
decisionTool: demoConfig?.bridge?.decisionTool ?? "playwright_mcp",
|
|
275
|
+
executionTool: demoConfig?.bridge?.executionTool ?? "playwright",
|
|
276
|
+
planFile: bridgePlan,
|
|
277
|
+
executionFile: bridgeExecution,
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
async function requireSession(ctx) {
|
|
282
|
+
const session = await readSession(ctx);
|
|
283
|
+
if (!session) {
|
|
284
|
+
console.error(pc.red("✗ no active demo session; run zsk demo start first"));
|
|
285
|
+
process.exit(1);
|
|
286
|
+
}
|
|
287
|
+
return session;
|
|
288
|
+
}
|
|
289
|
+
async function readSession(ctx) {
|
|
290
|
+
try {
|
|
291
|
+
return JSON.parse(await readFile(ctx.sessionFile, "utf8"));
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
async function persistSession(ctx, session) {
|
|
298
|
+
await writeJson(ctx.sessionFile, session);
|
|
299
|
+
await updateWorkflowState(ctx.workflowStateFile, ctx.moduleId, session);
|
|
300
|
+
}
|
|
301
|
+
async function ensureBridgeArtifacts(ctx, session) {
|
|
302
|
+
if (!session.bridge)
|
|
303
|
+
return;
|
|
304
|
+
const planPath = resolve(ctx.target, session.bridge.planFile);
|
|
305
|
+
const executionPath = resolve(ctx.target, session.bridge.executionFile);
|
|
306
|
+
const now = new Date().toISOString();
|
|
307
|
+
await writeJson(planPath, {
|
|
308
|
+
version: 1,
|
|
309
|
+
producer: session.bridge.decisionTool,
|
|
310
|
+
module: ctx.moduleId,
|
|
311
|
+
functionPoint: session.cursor ?? "next-demo-function-point",
|
|
312
|
+
observation: {
|
|
313
|
+
source: observationSourceForDecisionTool(session.bridge.decisionTool),
|
|
314
|
+
summary: "TODO: fill from Playwright MCP aria snapshot, Browser Use session note, or Computer Use observation.",
|
|
315
|
+
rawRef: "",
|
|
316
|
+
},
|
|
317
|
+
operation: {
|
|
318
|
+
intent: "TODO: describe next demo operation.",
|
|
319
|
+
locator: {
|
|
320
|
+
kind: "role",
|
|
321
|
+
role: "button",
|
|
322
|
+
name: "TODO",
|
|
323
|
+
},
|
|
324
|
+
action: {
|
|
325
|
+
type: "click",
|
|
326
|
+
},
|
|
327
|
+
confidence: 0,
|
|
328
|
+
fallback: "Pause the demo session and record a recoverable blocker if the locator is not present.",
|
|
329
|
+
},
|
|
330
|
+
updatedAt: now,
|
|
331
|
+
});
|
|
332
|
+
await writeJson(executionPath, {
|
|
333
|
+
version: 1,
|
|
334
|
+
consumer: session.bridge.executionTool,
|
|
335
|
+
module: ctx.moduleId,
|
|
336
|
+
status: "pending",
|
|
337
|
+
attemptedOperation: {
|
|
338
|
+
intent: "",
|
|
339
|
+
locator: {
|
|
340
|
+
kind: "role",
|
|
341
|
+
},
|
|
342
|
+
action: {
|
|
343
|
+
type: "click",
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
evidence: {
|
|
347
|
+
screenshot: "",
|
|
348
|
+
trace: "",
|
|
349
|
+
video: "",
|
|
350
|
+
scenario: "",
|
|
351
|
+
issue: "",
|
|
352
|
+
},
|
|
353
|
+
updatedAt: now,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
async function updateWorkflowState(file, moduleId, session) {
|
|
357
|
+
let state = { version: 1, modules: {} };
|
|
358
|
+
try {
|
|
359
|
+
state = JSON.parse(await readFile(file, "utf8"));
|
|
360
|
+
}
|
|
361
|
+
catch {
|
|
362
|
+
// Create a minimal state file when init did not create one.
|
|
363
|
+
}
|
|
364
|
+
const modules = typeof state.modules === "object" && state.modules !== null
|
|
365
|
+
? state.modules
|
|
366
|
+
: {};
|
|
367
|
+
modules[moduleId] = {
|
|
368
|
+
stage: "demo",
|
|
369
|
+
status: mapWorkflowStatus(session.status),
|
|
370
|
+
session: {
|
|
371
|
+
id: session.id,
|
|
372
|
+
mode: session.mode,
|
|
373
|
+
bridge: session.bridge,
|
|
374
|
+
evidenceDir: session.evidenceDir,
|
|
375
|
+
scenarioDir: session.scenarioDir,
|
|
376
|
+
updatedAt: session.updatedAt,
|
|
377
|
+
},
|
|
378
|
+
};
|
|
379
|
+
state.version = state.version ?? 1;
|
|
380
|
+
state.modules = modules;
|
|
381
|
+
state.updatedAt = session.updatedAt;
|
|
382
|
+
await writeJson(file, state);
|
|
383
|
+
}
|
|
384
|
+
async function writeJson(file, data) {
|
|
385
|
+
await mkdir(resolve(file, ".."), { recursive: true });
|
|
386
|
+
await writeFile(file, `${JSON.stringify(data, null, 2)}\n`, "utf8");
|
|
387
|
+
}
|
|
388
|
+
function createSessionId(now) {
|
|
389
|
+
return `demo-${now.replace(/[-:.TZ]/g, "").slice(0, 14)}`;
|
|
390
|
+
}
|
|
391
|
+
function interpolate(value, moduleId) {
|
|
392
|
+
return value.split("{module}").join(moduleId);
|
|
393
|
+
}
|
|
394
|
+
function normalizeMode(value) {
|
|
395
|
+
if (value === "manual" ||
|
|
396
|
+
value === "script" ||
|
|
397
|
+
value === "playwright" ||
|
|
398
|
+
value === "computer-use" ||
|
|
399
|
+
value === "hybrid") {
|
|
400
|
+
return value;
|
|
401
|
+
}
|
|
402
|
+
return "hybrid";
|
|
403
|
+
}
|
|
404
|
+
function mapWorkflowStatus(status) {
|
|
405
|
+
if (status === "completed")
|
|
406
|
+
return "passed";
|
|
407
|
+
return status;
|
|
408
|
+
}
|
|
409
|
+
function automationNote(mode) {
|
|
410
|
+
if (mode === "playwright")
|
|
411
|
+
return "Prepared Playwright demo run and scenario preservation paths.";
|
|
412
|
+
if (mode === "hybrid")
|
|
413
|
+
return "Prepared decision-tool -> Playwright bridge run.";
|
|
414
|
+
if (mode === "computer-use")
|
|
415
|
+
return "Prepared explicit computer-use fallback run.";
|
|
416
|
+
return "Prepared scripted demo run.";
|
|
417
|
+
}
|
|
418
|
+
function observationSourceForDecisionTool(decisionTool) {
|
|
419
|
+
if (decisionTool === "playwright_mcp")
|
|
420
|
+
return "aria_snapshot";
|
|
421
|
+
if (decisionTool === "browser_use")
|
|
422
|
+
return "browser_session";
|
|
423
|
+
if (decisionTool === "computer_use")
|
|
424
|
+
return "screenshot";
|
|
425
|
+
return "manual";
|
|
426
|
+
}
|
|
427
|
+
function printSession(session) {
|
|
428
|
+
console.log(pc.dim(`session: ${session.id}`));
|
|
429
|
+
console.log(pc.dim(`module: ${session.module}`));
|
|
430
|
+
console.log(pc.dim(`status: ${session.status}`));
|
|
431
|
+
console.log(pc.dim(`mode: ${session.mode}`));
|
|
432
|
+
console.log(pc.dim(`evidence: ${session.evidenceDir}`));
|
|
433
|
+
console.log(pc.dim(`scenarios: ${session.scenarioDir}`));
|
|
434
|
+
if (session.bridge) {
|
|
435
|
+
console.log(pc.dim(`bridge decision: ${session.bridge.decisionTool}`));
|
|
436
|
+
console.log(pc.dim(`bridge execution: ${session.bridge.executionTool}`));
|
|
437
|
+
console.log(pc.dim(`bridge plan: ${session.bridge.planFile}`));
|
|
438
|
+
console.log(pc.dim(`bridge execution: ${session.bridge.executionFile}`));
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
async function readOptional(file) {
|
|
442
|
+
try {
|
|
443
|
+
return await readFile(file, "utf8");
|
|
444
|
+
}
|
|
445
|
+
catch {
|
|
446
|
+
return "";
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
function parseRoleTargets(snapshot) {
|
|
450
|
+
const targets = [];
|
|
451
|
+
const rolePattern = /(?:^|\n)\s*-\s*(button|link|textbox|checkbox|heading|combobox|radio|menuitem)\s+"([^"]+)"/gi;
|
|
452
|
+
for (const match of snapshot.matchAll(rolePattern)) {
|
|
453
|
+
const role = normalizeRole(match[1] ?? "");
|
|
454
|
+
const name = (match[2] ?? "").trim();
|
|
455
|
+
if (!role || !name)
|
|
456
|
+
continue;
|
|
457
|
+
targets.push({ role, name });
|
|
458
|
+
}
|
|
459
|
+
return targets;
|
|
460
|
+
}
|
|
461
|
+
function synthesizePlaywrightSteps(targets, testCase) {
|
|
462
|
+
const steps = [];
|
|
463
|
+
const textbox = targets.find((target) => target.role === "textbox");
|
|
464
|
+
const button = targets.find((target) => target.role === "button");
|
|
465
|
+
const link = targets.find((target) => target.role === "link");
|
|
466
|
+
const checkbox = targets.find((target) => target.role === "checkbox");
|
|
467
|
+
const heading = targets.find((target) => target.role === "heading");
|
|
468
|
+
const fillValue = inferFillValue(testCase);
|
|
469
|
+
steps.push(`// Generated from test case and structured aria/accessibility snapshot.`);
|
|
470
|
+
if (textbox) {
|
|
471
|
+
steps.push(`await page.getByRole("textbox", { name: ${quote(textbox.name)} }).fill(${quote(fillValue)});`);
|
|
472
|
+
}
|
|
473
|
+
if (checkbox && shouldCheck(testCase)) {
|
|
474
|
+
steps.push(`await page.getByRole("checkbox", { name: ${quote(checkbox.name)} }).check();`);
|
|
475
|
+
}
|
|
476
|
+
if (button) {
|
|
477
|
+
steps.push(`await page.getByRole("button", { name: ${quote(button.name)} }).click();`);
|
|
478
|
+
}
|
|
479
|
+
else if (link) {
|
|
480
|
+
steps.push(`await page.getByRole("link", { name: ${quote(link.name)} }).click();`);
|
|
481
|
+
}
|
|
482
|
+
if (heading) {
|
|
483
|
+
steps.push(`await expect(page.getByRole("heading", { name: ${quote(heading.name)} })).toBeVisible();`);
|
|
484
|
+
}
|
|
485
|
+
else if (textbox || button || link || checkbox) {
|
|
486
|
+
steps.push(`await expect(page).toHaveURL(/.+/);`);
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
steps.push(`// TODO: Provide a Playwright MCP aria snapshot to synthesize role-first locators.`);
|
|
490
|
+
steps.push(`await expect(page).toHaveURL(/.+/);`);
|
|
491
|
+
}
|
|
492
|
+
return steps;
|
|
493
|
+
}
|
|
494
|
+
function normalizeRole(role) {
|
|
495
|
+
if (role === "textbox")
|
|
496
|
+
return "textbox";
|
|
497
|
+
return role.toLowerCase();
|
|
498
|
+
}
|
|
499
|
+
function inferFillValue(testCase) {
|
|
500
|
+
const quoted = testCase.match(/["“”']([^"“”']{2,80})["“”']/);
|
|
501
|
+
if (quoted?.[1])
|
|
502
|
+
return quoted[1];
|
|
503
|
+
const afterInput = testCase.match(/(?:输入|type|fill|enter)\s*[::]?\s*([^\n,,。]{2,80})/i);
|
|
504
|
+
if (afterInput?.[1])
|
|
505
|
+
return afterInput[1].trim();
|
|
506
|
+
return "demo value";
|
|
507
|
+
}
|
|
508
|
+
function shouldCheck(testCase) {
|
|
509
|
+
return /check|toggle|勾选|选中|切换/i.test(testCase);
|
|
510
|
+
}
|
|
511
|
+
function inferScenarioName(testCase) {
|
|
512
|
+
const heading = testCase.match(/^#\s+(.+)$/m);
|
|
513
|
+
if (heading?.[1])
|
|
514
|
+
return heading[1];
|
|
515
|
+
const title = testCase.match(/(?:title|标题|用例)[::]\s*(.+)/i);
|
|
516
|
+
if (title?.[1])
|
|
517
|
+
return title[1];
|
|
518
|
+
return null;
|
|
519
|
+
}
|
|
520
|
+
function slugify(value) {
|
|
521
|
+
const slug = value
|
|
522
|
+
.toLowerCase()
|
|
523
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
524
|
+
.replace(/^-+|-+$/g, "");
|
|
525
|
+
return slug || "generated-from-test-case";
|
|
526
|
+
}
|
|
527
|
+
function quote(value) {
|
|
528
|
+
return JSON.stringify(value);
|
|
529
|
+
}
|
|
530
|
+
function escapeForDoubleQuotedString(value) {
|
|
531
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, "\\\"");
|
|
532
|
+
}
|
|
533
|
+
//# sourceMappingURL=demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"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"}
|