openspec-playwright 0.3.23 → 0.3.25

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.
@@ -7,8 +7,9 @@
7
7
  */
8
8
  import { config as loadEnv } from "dotenv";
9
9
  import { createRequire } from "module";
10
- import { existsSync, readFileSync, writeFileSync } from "fs";
11
- import { join } from "path";
10
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
11
+ import { join, dirname, basename } from "path";
12
+ import { createHash } from "crypto";
12
13
  const _require = createRequire(import.meta.url);
13
14
  // ── Config loading ────────────────────────────────────────────────────────────
14
15
  /**
@@ -80,7 +81,7 @@ export async function checkOllamaHealth(config) {
80
81
  }
81
82
  }
82
83
  // ── Vision analysis ───────────────────────────────────────────────────────────
83
- const VISION_PROMPT = [
84
+ const VISION_PROMPT_ZH = [
84
85
  "你是专业的UI测试工程师,以普通用户视角审视这张截图。",
85
86
  "",
86
87
  "【检测目标】用户可感知的功能性UI问题,不包括:",
@@ -108,20 +109,116 @@ const VISION_PROMPT = [
108
109
  "",
109
110
  '如果一切正常,返回:{"anomalies":[]}',
110
111
  ].join("\n");
112
+ const VISION_PROMPT_EN = [
113
+ "You are a professional UI test engineer reviewing this screenshot from a user's perspective.",
114
+ "",
115
+ "Detect user-facing functional UI issues. Exclude:",
116
+ "- Decorative icon/logo minor offsets",
117
+ "- CSS hover/transition animation states",
118
+ "- Browser default styles (scrollbars, context menus)",
119
+ "- Dynamic ads/recommendations (if interactive, not an issue)",
120
+ "",
121
+ "Issue types:",
122
+ "1. obscured — Interactive element covered/overlapped, cannot click",
123
+ "2. crowded — Elements too close, text overlap, hard to distinguish",
124
+ "3. overflowed — Content clipped, key info not visible",
125
+ "4. missing — Element that should clearly exist is gone",
126
+ "5. incorrect — Clearly wrong text content or styling",
127
+ "",
128
+ "Severity:",
129
+ "- blocking — Core function unusable (e.g. submit button covered)",
130
+ "- warning — Affects usability (e.g. important text truncated)",
131
+ "- minor — Minor visual issue (icon slightly offset)",
132
+ "",
133
+ "Position: use screen region: top-left/top/top-right/left/center/right/bottom-left/bottom/bottom-right",
134
+ "",
135
+ 'Return JSON only, no other text:',
136
+ '{"anomalies":[]}',
137
+ "",
138
+ 'If everything looks fine: {"anomalies":[]}',
139
+ ].join("\n");
140
+ /** Check if model name indicates a Chinese-language model */
141
+ function isZhModel(model) {
142
+ const zhModels = ["qwen", "yi", "chatglm", "deepseek", "internvl"];
143
+ return zhModels.some((m) => model.toLowerCase().includes(m));
144
+ }
145
+ /** Select VISION_PROMPT based on model name (Chinese models → Chinese prompt) */
146
+ function selectVisionPrompt(model) {
147
+ return isZhModel(model) ? VISION_PROMPT_ZH : VISION_PROMPT_EN;
148
+ }
149
+ /** Select DIFF_PROMPT based on model name */
150
+ function selectDiffPrompt(model) {
151
+ return isZhModel(model) ? DIFF_PROMPT_ZH : DIFF_PROMPT_EN;
152
+ }
153
+ // ── Retry helper ──────────────────────────────────────────────────────────────
154
+ async function fetchWithRetry(url, options, maxRetries = 3) {
155
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
156
+ try {
157
+ const controller = new AbortController();
158
+ const timeout = setTimeout(() => controller.abort(), 60000);
159
+ const response = await fetch(url, { ...options, signal: controller.signal });
160
+ clearTimeout(timeout);
161
+ if (response.ok || response.status < 500)
162
+ return response;
163
+ // 5xx → retry
164
+ }
165
+ catch (err) {
166
+ if (attempt === maxRetries)
167
+ throw err;
168
+ }
169
+ // Exponential backoff: 1s, 2s, 4s
170
+ await new Promise((r) => setTimeout(r, 1000 * 2 ** (attempt - 1)));
171
+ }
172
+ throw new Error(`Ollama API: ${maxRetries} retries exhausted`);
173
+ }
174
+ // ── Result cache ──────────────────────────────────────────────────────────────
175
+ const VISION_CACHE_DIR = ".openspec-pw/vision-cache";
176
+ function screenshotHash(filePath) {
177
+ const buf = readFileSync(filePath);
178
+ return createHash("sha256").update(buf).digest("hex").slice(0, 16);
179
+ }
180
+ function getCachedResult(fileHash, model, promptHash) {
181
+ const cachePath = join(process.cwd(), VISION_CACHE_DIR, `${fileHash}_${model.replace(/[:/]/g, "_")}_${promptHash}.json`);
182
+ if (existsSync(cachePath)) {
183
+ try {
184
+ return JSON.parse(readFileSync(cachePath, "utf-8"));
185
+ }
186
+ catch {
187
+ return null;
188
+ }
189
+ }
190
+ return null;
191
+ }
192
+ function setCachedResult(fileHash, model, promptHash, anomalies) {
193
+ const cacheDir = join(process.cwd(), VISION_CACHE_DIR);
194
+ mkdirSync(cacheDir, { recursive: true });
195
+ const cachePath = join(cacheDir, `${fileHash}_${model.replace(/[:/]/g, "_")}_${promptHash}.json`);
196
+ writeFileSync(cachePath, JSON.stringify(anomalies), "utf-8");
197
+ }
111
198
  /**
112
199
  * Analyze a single screenshot with the vision model.
113
200
  */
114
- export async function analyzeScreenshot(config, screenshotPath, route) {
201
+ export async function analyzeScreenshot(config, screenshotPath, route, prompt, noCache) {
115
202
  if (!existsSync(screenshotPath)) {
116
203
  throw new Error(`Screenshot not found: ${screenshotPath}`);
117
204
  }
205
+ const effectivePrompt = prompt || selectVisionPrompt(config.model);
206
+ const promptHash = createHash("sha256").update(effectivePrompt).digest("hex").slice(0, 8);
207
+ const fileHash = screenshotHash(screenshotPath);
208
+ // Check cache
209
+ if (!noCache) {
210
+ const cached = getCachedResult(fileHash, config.model, promptHash);
211
+ if (cached) {
212
+ return cached.map((a) => ({ ...a, route, screenshot: screenshotPath }));
213
+ }
214
+ }
118
215
  const imageBase64 = readFileSync(screenshotPath).toString("base64");
119
- const response = await fetch(`${config.url}/api/generate`, {
216
+ const response = await fetchWithRetry(`${config.url}/api/generate`, {
120
217
  method: "POST",
121
218
  headers: { "Content-Type": "application/json" },
122
219
  body: JSON.stringify({
123
220
  model: config.model,
124
- prompt: VISION_PROMPT,
221
+ prompt: effectivePrompt,
125
222
  images: [imageBase64],
126
223
  stream: false,
127
224
  }),
@@ -140,6 +237,10 @@ export async function analyzeScreenshot(config, screenshotPath, route) {
140
237
  try {
141
238
  const parsed = JSON.parse(jsonStr.trim());
142
239
  const anomalies = parsed.anomalies || [];
240
+ // Cache result (without route/screenshot to keep cache portable)
241
+ if (!noCache) {
242
+ setCachedResult(fileHash, config.model, promptHash, anomalies);
243
+ }
143
244
  // Enrich with route and screenshot path
144
245
  return anomalies.map((a) => ({
145
246
  ...a,
@@ -156,7 +257,7 @@ export async function analyzeScreenshot(config, screenshotPath, route) {
156
257
  /**
157
258
  * Batch analyze multiple screenshots with concurrency control.
158
259
  */
159
- export async function batchAnalyzeScreenshots(config, screenshots, concurrency = 4) {
260
+ export async function batchAnalyzeScreenshots(config, screenshots, concurrency = 4, noCache) {
160
261
  const result = {
161
262
  processed: 0,
162
263
  anomalies: [],
@@ -169,7 +270,7 @@ export async function batchAnalyzeScreenshots(config, screenshots, concurrency =
169
270
  const batch = screenshots.slice(i, i + concurrency);
170
271
  const promises = batch.map(async ({ path, route }) => {
171
272
  try {
172
- const anomalies = await analyzeScreenshot(config, path, route);
273
+ const anomalies = await analyzeScreenshot(config, path, route, undefined, noCache);
173
274
  result.processed++;
174
275
  result.anomalies.push(...anomalies);
175
276
  }
@@ -184,33 +285,59 @@ export async function batchAnalyzeScreenshots(config, screenshots, concurrency =
184
285
  return result;
185
286
  }
186
287
  // ── Pixel diff ───────────────────────────────────────────────────────────────
187
- const DIFF_PROMPT = `你是专业的UI回归测试工程师。这张图是像素差异图,红色高亮区域表示与基准版不同。
188
-
189
- 请分析红色高亮区域,检测:
190
- 1. 哪些变化是真实的UI bug(如元素被遮挡、布局错乱、内容丢失)
191
- 2. 哪些变化是正常的(如动态内容更新、动画状态变化)
192
-
193
- 【忽略】动态广告/推荐内容、时间戳、数值变化、hover/focus状态、第三方嵌入内容的变化。
194
-
195
- 【问题类型】
196
- - obscured:可交互元素被遮挡,无法点击
197
- - crowded:元素间距错乱、文字重叠
198
- - overflowed:内容被裁剪,关键信息不可见
199
- - missing:原有元素消失
200
- - incorrect:样式/内容明显错误
201
-
202
- 【严重程度】
203
- - blocking:核心功能不可用
204
- - warning:影响使用体验
205
- - minor:细微视觉回归
206
-
207
- 返回JSON(不要包含任何其他文字):
208
- {"anomalies":[]}`;
288
+ const DIFF_PROMPT_ZH = [
289
+ "你是专业的UI回归测试工程师。这张图是像素差异图,红色高亮区域表示与基准版不同。",
290
+ "",
291
+ "请分析红色高亮区域,检测:",
292
+ "1. 哪些变化是真实的UI bug(如元素被遮挡、布局错乱、内容丢失)",
293
+ "2. 哪些变化是正常的(如动态内容更新、动画状态变化)",
294
+ "",
295
+ "【忽略】动态广告/推荐内容、时间戳、数值变化、hover/focus状态、第三方嵌入内容的变化。",
296
+ "",
297
+ "【问题类型】",
298
+ "- obscured:可交互元素被遮挡,无法点击",
299
+ "- crowded:元素间距错乱、文字重叠",
300
+ "- overflowed:内容被裁剪,关键信息不可见",
301
+ "- missing:原有元素消失",
302
+ "- incorrect:样式/内容明显错误",
303
+ "",
304
+ "【严重程度】",
305
+ "- blocking:核心功能不可用",
306
+ "- warning:影响使用体验",
307
+ "- minor:细微视觉回归",
308
+ "",
309
+ '返回JSON(不要包含任何其他文字):',
310
+ '{"anomalies":[]}',
311
+ ].join("\n");
312
+ const DIFF_PROMPT_EN = [
313
+ "You are a professional UI regression test engineer. This image is a pixel diff map where red highlighted areas differ from the baseline.",
314
+ "",
315
+ "Analyze the red highlighted areas to determine:",
316
+ "1. Which changes are real UI bugs (e.g. elements obscured, layout broken, content lost)",
317
+ "2. Which changes are normal (e.g. dynamic content updates, animation state changes)",
318
+ "",
319
+ "Ignore: Dynamic ads/recommendations, timestamps, numerical changes, hover/focus states, third-party embedded content changes.",
320
+ "",
321
+ "Issue types:",
322
+ "- obscured: Interactive element covered, cannot click",
323
+ "- crowded: Element spacing broken, text overlap",
324
+ "- overflowed: Content clipped, key info not visible",
325
+ "- missing: Previously existing element disappeared",
326
+ "- incorrect: Clearly wrong styling/content",
327
+ "",
328
+ "Severity:",
329
+ "- blocking: Core function unusable",
330
+ "- warning: Affects usability",
331
+ "- minor: Minor visual regression",
332
+ "",
333
+ 'Return JSON only, no other text:',
334
+ '{"anomalies":[]}',
335
+ ].join("\n");
209
336
  /**
210
337
  * Compare two screenshots with pixel diff.
211
338
  * Returns changed regions and optionally saves a diff image.
212
339
  */
213
- export async function compareScreenshotDiff(config, baselinePath, currentPath, diffPath, route) {
340
+ export async function compareScreenshotDiff(config, baselinePath, currentPath, diffPath, route, threshold = 0.1) {
214
341
  const pixelmatch = _require("pixelmatch");
215
342
  const { PNG } = _require("pngjs");
216
343
  if (!existsSync(baselinePath)) {
@@ -222,25 +349,27 @@ export async function compareScreenshotDiff(config, baselinePath, currentPath, d
222
349
  const img1 = PNG.sync.read(readFileSync(baselinePath));
223
350
  const img2 = PNG.sync.read(readFileSync(currentPath));
224
351
  if (img1.width !== img2.width || img1.height !== img2.height) {
225
- throw new Error(`Screenshot dimensions mismatch: ${img1.width}x${img1.height} vs ${img2.width}x${img2.height}`);
352
+ console.warn(`Warning: Dimension mismatch (${img1.width}x${img1.height} vs ${img2.width}x${img2.height}) — skipping pixel diff for ${route}`);
353
+ return { changed: true, anomalies: [] };
226
354
  }
227
355
  const diff = new PNG(img1.width, img1.height);
228
- const changedPixels = pixelmatch(img1.data, img2.data, diff.data, img1.width, img1.height, { threshold: 0.1 });
356
+ const changedPixels = pixelmatch(img1.data, img2.data, diff.data, img1.width, img1.height, { threshold });
229
357
  const changedRatio = changedPixels / (img1.width * img1.height);
230
- // Save diff image
231
- writeFileSync(diffPath, PNG.sync.write(diff));
358
+ // Save diff image + keep buffer for VLM
359
+ const diffBuf = PNG.sync.write(diff);
360
+ writeFileSync(diffPath, diffBuf);
232
361
  // If no meaningful changes, skip VLM analysis
233
362
  if (changedRatio < 0.001) {
234
363
  return { changed: false, anomalies: [] };
235
364
  }
236
- // Analyze diff image with VLM (only diff image to avoid context overflow)
237
- const diffB64 = readFileSync(diffPath).toString("base64");
238
- const response = await fetch(`${config.url}/api/generate`, {
365
+ // Analyze diff image with VLM (reuse buffer, no re-read from disk)
366
+ const diffB64 = diffBuf.toString("base64");
367
+ const response = await fetchWithRetry(`${config.url}/api/generate`, {
239
368
  method: "POST",
240
369
  headers: { "Content-Type": "application/json" },
241
370
  body: JSON.stringify({
242
371
  model: config.model,
243
- prompt: DIFF_PROMPT,
372
+ prompt: selectDiffPrompt(config.model),
244
373
  images: [diffB64],
245
374
  stream: false,
246
375
  }),
@@ -275,6 +404,9 @@ export async function compareScreenshotDiff(config, baselinePath, currentPath, d
275
404
  * Generate a self-contained HTML report with embedded screenshots and results.
276
405
  * If diffDir is provided, diff images are shown alongside current screenshots.
277
406
  */
407
+ function escapeHtml(str) {
408
+ return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
409
+ }
278
410
  export function generateHtmlReport(result, screenshots, outputPath, diffDir) {
279
411
  const timestamp = new Date().toISOString();
280
412
  // Group anomalies by severity
@@ -288,18 +420,41 @@ export function generateHtmlReport(result, screenshots, outputPath, diffDir) {
288
420
  if (bySeverity[key])
289
421
  bySeverity[key].push(a);
290
422
  }
291
- // Build screenshot cards with base64 images
423
+ // Build screenshot cards use relative file paths to keep report size manageable
424
+ const outputDir = dirname(outputPath);
425
+ const usedNames = new Set();
292
426
  const screenshotCards = screenshots
293
427
  .map((s) => {
294
- const base64 = readFileSync(s.path).toString("base64");
295
- // Check for diff image
296
- let diffBase64 = "";
428
+ // Copy screenshots next to the report for portability
429
+ const originalBasename = basename(s.path, ".png");
430
+ let imgName = basename(s.path);
431
+ // Avoid overwriting same-named files from different directories
432
+ if (usedNames.has(imgName)) {
433
+ const ext = imgName.includes(".") ? `.${imgName.split(".").pop()}` : "";
434
+ const base = ext ? imgName.slice(0, -ext.length) : imgName;
435
+ let idx = 2;
436
+ while (usedNames.has(`${base}-${idx}${ext}`))
437
+ idx++;
438
+ imgName = `${base}-${idx}${ext}`;
439
+ }
440
+ usedNames.add(imgName);
441
+ const imgDest = join(outputDir, imgName);
442
+ if (!existsSync(imgDest)) {
443
+ writeFileSync(imgDest, readFileSync(s.path));
444
+ }
445
+ const imgSrc = `./${imgName}`;
446
+ // Check for diff image — use original basename (not deduplicated imgName)
447
+ let diffSrc = "";
297
448
  let hasDiff = false;
298
449
  if (diffDir) {
299
- const baseName = s.path.split("/").pop().replace(".png", "");
300
- const diffPath = join(diffDir, `${baseName}-diff.png`);
450
+ const diffName = `${originalBasename}-diff.png`;
451
+ const diffPath = join(diffDir, diffName);
301
452
  if (existsSync(diffPath)) {
302
- diffBase64 = readFileSync(diffPath).toString("base64");
453
+ const diffDest = join(outputDir, diffName);
454
+ if (!existsSync(diffDest)) {
455
+ writeFileSync(diffDest, readFileSync(diffPath));
456
+ }
457
+ diffSrc = `./${diffName}`;
303
458
  hasDiff = true;
304
459
  }
305
460
  }
@@ -314,22 +469,22 @@ ${anomalies
314
469
  <div class="anomaly-header">
315
470
  <span class="type-badge">${a.type}</span>
316
471
  <span class="severity-badge ${a.severity}">${a.severity}</span>
317
- ${a.viewport ? `<span class="viewport-badge">${a.viewport}</span>` : ""}
472
+ ${a.viewport ? `<span class="viewport-badge">${escapeHtml(a.viewport)}</span>` : ""}
318
473
  ${a.changed ? `<span class="diff-badge">changed</span>` : ""}
319
474
  </div>
320
475
  <div class="anomaly-body">
321
- <strong>${a.element}</strong>
322
- <p>${a.description}</p>
323
- <div class="anomaly-meta">${a.position}</div>
476
+ <strong>${escapeHtml(a.element)}</strong>
477
+ <p>${escapeHtml(a.description)}</p>
478
+ <div class="anomaly-meta">${escapeHtml(a.position)}</div>
324
479
  </div>
325
480
  </div>`)
326
481
  .join("\n")}
327
482
  </div>`
328
483
  : "";
329
484
  const diffSection = hasDiff
330
- ? `<div class="card-diff"><div class="diff-label">Diff</div><img src="data:image/png;base64,${diffBase64}" alt="diff" /></div>`
485
+ ? `<div class="card-diff"><div class="diff-label">Diff</div><img src="${diffSrc}" alt="diff" /></div>`
331
486
  : "";
332
- const currentSection = `<div class="card-img"><div class="img-label">Current</div><img src="data:image/png;base64,${base64}" alt="${s.route}" /></div>`;
487
+ const currentSection = `<div class="card-img"><div class="img-label">Current</div><img src="${imgSrc}" alt="${s.route}" /></div>`;
333
488
  const comparisonSection = hasDiff
334
489
  ? `<div class="card-comparison">${currentSection}${diffSection}</div>`
335
490
  : currentSection;
@@ -444,13 +599,13 @@ ${result.anomalies.length > 0
444
599
  <div class="anomaly-header">
445
600
  <span class="type-badge">${a.type}</span>
446
601
  <span class="severity-badge ${a.severity}">${a.severity}</span>
447
- ${a.viewport ? `<span class="viewport-badge">${a.viewport}</span>` : ""}
602
+ ${a.viewport ? `<span class="viewport-badge">${escapeHtml(a.viewport)}</span>` : ""}
448
603
  ${a.changed ? `<span class="diff-indicator" title="Pixel diff detected"></span>` : ""}
449
604
  </div>
450
605
  <div class="anomaly-body">
451
- <strong>${a.element}</strong>
452
- <p>${a.description}</p>
453
- <div class="anomaly-meta">${a.route} · ${a.position}</div>
606
+ <strong>${escapeHtml(a.element)}</strong>
607
+ <p>${escapeHtml(a.description)}</p>
608
+ <div class="anomaly-meta">${escapeHtml(a.route)} · ${escapeHtml(a.position)}</div>
454
609
  </div>
455
610
  </div>`)
456
611
  .join("\n")}
@@ -1 +1 @@
1
- {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/utils/ollama.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/utils/ollama.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openspec-playwright",
3
- "version": "0.3.23",
3
+ "version": "0.3.25",
4
4
  "description": "OpenSpec + Playwright E2E verification setup tool for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,13 +1,3 @@
1
- ---
2
- name: openspec-e2e
3
- description: "Run Playwright E2E verification. ONLY invoke when user explicitly says '/opsx:e2e' or 'run E2E tests'. Do NOT auto-trigger from explore/propose/apply/verify/continue stages — E2E is a separate workflow requiring explicit user request."
4
- license: MIT
5
- compatibility: Requires openspec CLI, Playwright (with browsers installed), /browse (gstack, for exploration), and @playwright/mcp (globally installed via `claude mcp add playwright npx @playwright/mcp@latest`, for test execution + Healer).
6
- scope: This skill is designed for **Node.js + TypeScript + Playwright projects**. For other language ecosystems (Python, Go, Ruby), the workflow concepts apply but tools differ — use language-appropriate E2E frameworks and adjust accordingly.
7
- metadata:
8
- author: openspec-playwright
9
- version: "2.26"
10
- ---
11
1
 
12
2
  ## Input
13
3
 
@@ -1,23 +0,0 @@
1
- <claude-mem-context>
2
- # Recent Activity
3
-
4
- <!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
5
-
6
- ### Mar 27, 2026
7
-
8
- | ID | Time | T | Title | Read |
9
- |----|------|---|-------|------|
10
- | #5635 | 3:00 PM | ✅ | Simplified skill input instructions | ~201 |
11
- | #5634 | " | 🟣 | Improved change selection logic in openspec-e2e skill | ~200 |
12
- | #5633 | " | 🔵 | openspec-e2e SKILL.md implements three-agent Playwright pipeline | ~252 |
13
- | #5511 | 11:22 AM | ✅ | Extended guardrails to protect auth files from overwriting | ~181 |
14
- | #5510 | 11:21 AM | 🟣 | Enhanced SKILL.md with Playwright auth project configuration | ~228 |
15
- | #5427 | 10:05 AM | ✅ | Committed style fixes aligning SKILL.md with OpenSpec template standard | ~281 |
16
-
17
- ### Apr 16, 2026
18
-
19
- | ID | Time | T | Title | Read |
20
- |----|------|---|-------|------|
21
- | #5997 | 9:59 AM | 🔵 | openspec-e2e skill uses openspec-pw CLI for parallel exploration | ~279 |
22
- | #5996 | " | 🔵 | openspec-e2e skill handles missing auth gracefully | ~172 |
23
- </claude-mem-context>