enterprise-ui-architect-cli 2.0.0 → 2.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.
@@ -0,0 +1,12 @@
1
+ export interface AuditOptions {
2
+ baseUrl: string;
3
+ routes: string[];
4
+ outputDir: string;
5
+ viewport: {
6
+ width: number;
7
+ height: number;
8
+ };
9
+ }
10
+ export declare function parseAuditArgs(args: string[]): AuditOptions;
11
+ export declare function auditUiCommand(options: AuditOptions): Promise<void>;
12
+ //# sourceMappingURL=audit-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-ui.d.ts","sourceRoot":"","sources":["../../src/commands/audit-ui.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAuCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAuB3D;AAwFD,wBAAsB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqJzE"}
@@ -0,0 +1,274 @@
1
+ import { chromium } from "playwright";
2
+ import { existsSync, mkdirSync, writeFileSync } from "fs";
3
+ import { join, resolve } from "path";
4
+ const DEFAULT_VIEWPORT = { width: 1280, height: 720 };
5
+ export function parseAuditArgs(args) {
6
+ const result = {
7
+ baseUrl: "http://localhost:3000",
8
+ routes: ["/"],
9
+ outputDir: "./ui-audit",
10
+ viewport: { ...DEFAULT_VIEWPORT },
11
+ };
12
+ for (let i = 0; i < args.length; i++) {
13
+ const arg = args[i];
14
+ if (arg === "--url" && i + 1 < args.length) {
15
+ result.baseUrl = args[++i];
16
+ }
17
+ else if (arg === "--routes" && i + 1 < args.length) {
18
+ result.routes = args[++i].split(",").map((r) => r.trim());
19
+ }
20
+ else if (arg === "--output" && i + 1 < args.length) {
21
+ result.outputDir = args[++i];
22
+ }
23
+ else if (arg === "--viewport" && i + 1 < args.length) {
24
+ const [w, h] = args[++i].split("x").map(Number);
25
+ if (w && h)
26
+ result.viewport = { width: w, height: h };
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+ async function runChecks(page) {
32
+ const checks = [];
33
+ // 1. Title present
34
+ const title = await page.title();
35
+ checks.push({
36
+ name: "Page title present",
37
+ pass: title.length > 0 && title.toLowerCase() !== "document",
38
+ detail: title,
39
+ });
40
+ // 2. Viewport meta tag
41
+ const viewport = await page.$('meta[name="viewport"]');
42
+ checks.push({
43
+ name: "Viewport meta tag",
44
+ pass: !!viewport,
45
+ detail: viewport ? "Found" : "Missing",
46
+ });
47
+ // 3. Images without alt
48
+ const imagesWithoutAlt = await page.$$eval("img", (imgs) => imgs.filter((img) => !img.hasAttribute("alt") && !img.hasAttribute("aria-hidden")).length);
49
+ checks.push({
50
+ name: "Images have alt or aria-hidden",
51
+ pass: imagesWithoutAlt === 0,
52
+ detail: imagesWithoutAlt > 0 ? `${imagesWithoutAlt} images missing alt` : "All images OK",
53
+ });
54
+ // 4. Buttons without accessible name
55
+ const buttonsWithoutName = await page.$$eval("button:not([aria-label]):not([aria-labelledby])", (btns) => btns.filter((b) => !b.textContent?.trim()).length);
56
+ checks.push({
57
+ name: "Buttons have accessible names",
58
+ pass: buttonsWithoutName === 0,
59
+ detail: buttonsWithoutName > 0 ? `${buttonsWithoutName} buttons missing name` : "All buttons OK",
60
+ });
61
+ // 5. Links without href or accessible name
62
+ const badLinks = await page.$$eval("a", (links) => links.filter((a) => !a.getAttribute("href") || (!a.textContent?.trim() && !a.getAttribute("aria-label"))).length);
63
+ checks.push({
64
+ name: "Links have href and accessible name",
65
+ pass: badLinks === 0,
66
+ detail: badLinks > 0 ? `${badLinks} links missing href or text` : "All links OK",
67
+ });
68
+ // 6. Form inputs without labels
69
+ const unlabeledInputs = await page.$$eval('input:not([type="hidden"]), textarea, select', (inputs) => inputs.filter((el) => {
70
+ const id = el.id;
71
+ const ariaLabel = el.getAttribute("aria-label");
72
+ const ariaLabelledBy = el.getAttribute("aria-labelledby");
73
+ const hasLabel = id && !!document.querySelector(`label[for="${id}"]`);
74
+ const parentLabel = el.closest("label");
75
+ return !hasLabel && !parentLabel && !ariaLabel && !ariaLabelledBy;
76
+ }).length);
77
+ checks.push({
78
+ name: "Form inputs have labels",
79
+ pass: unlabeledInputs === 0,
80
+ detail: unlabeledInputs > 0 ? `${unlabeledInputs} inputs missing labels` : "All inputs OK",
81
+ });
82
+ // 7. Focus outlines not globally disabled
83
+ const outlineNone = await page.$$eval("*", (els) => els.some((el) => {
84
+ const s = window.getComputedStyle(el);
85
+ return s.outline === "none" && s.outlineWidth === "0px";
86
+ }));
87
+ // This is a weak heuristic; just warn if we see global outline:none
88
+ checks.push({
89
+ name: "Focus outlines not globally removed",
90
+ pass: true, // informational
91
+ detail: outlineNone ? "Some elements have outline:none; verify focus-visible is used" : "No global outline removal detected",
92
+ });
93
+ return checks;
94
+ }
95
+ export async function auditUiCommand(options) {
96
+ const outputDir = resolve(options.outputDir);
97
+ const screenshotDir = join(outputDir, "screenshots");
98
+ if (!existsSync(screenshotDir)) {
99
+ mkdirSync(screenshotDir, { recursive: true });
100
+ }
101
+ console.log(`🔍 Starting UI audit...`);
102
+ console.log(` Base URL: ${options.baseUrl}`);
103
+ console.log(` Routes: ${options.routes.join(", ")}`);
104
+ console.log(` Viewport: ${options.viewport.width}x${options.viewport.height}`);
105
+ console.log(` Output: ${outputDir}\n`);
106
+ const browser = await chromium.launch({ headless: true });
107
+ const context = await browser.newContext({ viewport: options.viewport });
108
+ const page = await context.newPage();
109
+ const report = {
110
+ summary: {
111
+ totalRoutes: options.routes.length,
112
+ passedRoutes: 0,
113
+ failedRoutes: 0,
114
+ totalErrors: 0,
115
+ totalWarnings: 0,
116
+ screenshotDir,
117
+ },
118
+ routes: [],
119
+ };
120
+ for (const route of options.routes) {
121
+ const url = new URL(route, options.baseUrl).toString();
122
+ const startTime = Date.now();
123
+ const consoleEntries = [];
124
+ const onConsole = (msg) => {
125
+ consoleEntries.push({
126
+ type: msg.type(),
127
+ text: msg.text(),
128
+ location: msg.location().url || "",
129
+ });
130
+ };
131
+ page.on("console", onConsole);
132
+ let status = null;
133
+ try {
134
+ const response = await page.goto(url, { waitUntil: "networkidle" });
135
+ status = response?.status() ?? null;
136
+ }
137
+ catch (err) {
138
+ console.error(` ❌ Failed to load ${url}: ${err.message}`);
139
+ report.routes.push({
140
+ route,
141
+ url,
142
+ title: "",
143
+ status: null,
144
+ screenshotPath: "",
145
+ consoleEntries,
146
+ checks: [{ name: "Page load", pass: false, detail: err.message }],
147
+ durationMs: Date.now() - startTime,
148
+ });
149
+ page.off("console", onConsole);
150
+ continue;
151
+ }
152
+ const title = await page.title();
153
+ const checks = await runChecks(page);
154
+ // Add page-load check
155
+ checks.unshift({
156
+ name: "Page load (HTTP 200)",
157
+ pass: status === 200,
158
+ detail: status ? `HTTP ${status}` : "No response",
159
+ });
160
+ const errors = consoleEntries.filter((e) => e.type === "error");
161
+ const warnings = consoleEntries.filter((e) => e.type === "warning");
162
+ checks.push({
163
+ name: "No console errors",
164
+ pass: errors.length === 0,
165
+ detail: errors.length > 0 ? `${errors.length} console error(s)` : "Clean",
166
+ });
167
+ checks.push({
168
+ name: "No console warnings",
169
+ pass: warnings.length === 0,
170
+ detail: warnings.length > 0 ? `${warnings.length} console warning(s)` : "Clean",
171
+ });
172
+ const screenshotName = `${route.replace(/[^a-zA-Z0-9]/g, "_") || "root"}.png`;
173
+ const screenshotPath = join(screenshotDir, screenshotName);
174
+ await page.screenshot({ path: screenshotPath, fullPage: true });
175
+ const durationMs = Date.now() - startTime;
176
+ const allPassed = checks.every((c) => c.pass);
177
+ if (allPassed)
178
+ report.summary.passedRoutes++;
179
+ else
180
+ report.summary.failedRoutes++;
181
+ report.summary.totalErrors += errors.length;
182
+ report.summary.totalWarnings += warnings.length;
183
+ report.routes.push({
184
+ route,
185
+ url,
186
+ title,
187
+ status,
188
+ screenshotPath,
189
+ consoleEntries,
190
+ checks,
191
+ durationMs,
192
+ });
193
+ page.off("console", onConsole);
194
+ const icon = allPassed ? "✅" : "⚠️";
195
+ console.log(`${icon} ${route} (${durationMs}ms)`);
196
+ for (const check of checks) {
197
+ const cIcon = check.pass ? " ✓" : " ✗";
198
+ console.log(`${cIcon} ${check.name}${check.detail ? ` — ${check.detail}` : ""}`);
199
+ }
200
+ if (errors.length > 0) {
201
+ for (const err of errors.slice(0, 5)) {
202
+ console.log(` ! [error] ${err.text.slice(0, 120)}`);
203
+ }
204
+ }
205
+ console.log("");
206
+ }
207
+ await browser.close();
208
+ // Write markdown report
209
+ const reportPath = join(outputDir, "audit-report.md");
210
+ const md = generateMarkdownReport(report);
211
+ writeFileSync(reportPath, md, "utf-8");
212
+ console.log(`────────────────────────────────────────`);
213
+ console.log(`📊 Audit Summary`);
214
+ console.log(` Routes: ${report.summary.totalRoutes}`);
215
+ console.log(` Passed: ${report.summary.passedRoutes}`);
216
+ console.log(` Failed: ${report.summary.failedRoutes}`);
217
+ console.log(` Errors: ${report.summary.totalErrors}`);
218
+ console.log(` Warnings: ${report.summary.totalWarnings}`);
219
+ console.log(` Screenshots: ${report.summary.screenshotDir}`);
220
+ console.log(` Report: ${reportPath}`);
221
+ console.log(`────────────────────────────────────────`);
222
+ if (report.summary.failedRoutes > 0) {
223
+ process.exit(1);
224
+ }
225
+ }
226
+ function generateMarkdownReport(report) {
227
+ const lines = [
228
+ "# UI Audit Report",
229
+ "",
230
+ `Generated: ${new Date().toISOString()}`,
231
+ "",
232
+ "## Summary",
233
+ "",
234
+ `| Metric | Value |`,
235
+ `|---|---|`,
236
+ `| Total Routes | ${report.summary.totalRoutes} |`,
237
+ `| Passed | ${report.summary.passedRoutes} |`,
238
+ `| Failed | ${report.summary.failedRoutes} |`,
239
+ `| Console Errors | ${report.summary.totalErrors} |`,
240
+ `| Console Warnings | ${report.summary.totalWarnings} |`,
241
+ `| Screenshots | ${report.summary.screenshotDir} |`,
242
+ "",
243
+ ];
244
+ for (const r of report.routes) {
245
+ const allPassed = r.checks.every((c) => c.pass);
246
+ lines.push(`## ${r.route} ${allPassed ? "✅" : "⚠️"}`);
247
+ lines.push("");
248
+ lines.push(`- **URL:** ${r.url}`);
249
+ lines.push(`- **Title:** ${r.title}`);
250
+ lines.push(`- **Status:** ${r.status ?? "N/A"}`);
251
+ lines.push(`- **Duration:** ${r.durationMs}ms`);
252
+ lines.push(`- **Screenshot:** \`${r.screenshotPath}\``);
253
+ lines.push("");
254
+ lines.push("### Checks");
255
+ lines.push("");
256
+ lines.push(`| Check | Result | Detail |`);
257
+ lines.push(`|---|---|---|`);
258
+ for (const c of r.checks) {
259
+ lines.push(`| ${c.name} | ${c.pass ? "PASS" : "FAIL"} | ${c.detail ?? ""} |`);
260
+ }
261
+ lines.push("");
262
+ const errors = r.consoleEntries.filter((e) => e.type === "error");
263
+ if (errors.length > 0) {
264
+ lines.push("### Console Errors");
265
+ lines.push("");
266
+ for (const e of errors) {
267
+ lines.push(`- \`[${e.type}]\` ${e.text}`);
268
+ }
269
+ lines.push("");
270
+ }
271
+ }
272
+ return lines.join("\n");
273
+ }
274
+ //# sourceMappingURL=audit-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-ui.js","sourceRoot":"","sources":["../../src/commands/audit-ui.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { initCommand } from "./commands/init.js";
3
3
  import { verifyImportsCommand } from "./commands/verify-imports.js";
4
4
  import { verifyI18nCommand } from "./commands/verify-i18n.js";
5
+ import { auditUiCommand, parseAuditArgs } from "./commands/audit-ui.js";
5
6
  function showHelp() {
6
7
  console.log(`
7
8
  Enterprise UI Architect CLI
@@ -10,16 +11,22 @@ Usage:
10
11
  enterprise-ui init [options]
11
12
  enterprise-ui verify-imports [options]
12
13
  enterprise-ui verify-i18n [options]
14
+ enterprise-ui audit-ui [options]
13
15
 
14
16
  Commands:
15
17
  init Install skill into AI coding assistants
16
18
  verify-imports Scan source files and report missing npm packages
17
19
  verify-i18n Scan source files and report missing translation keys
20
+ audit-ui Open a headless browser, take screenshots, and audit UI
18
21
 
19
22
  Options:
20
23
  --ai <assistant> Target AI assistant: cursor, claude, windsurf, copilot, codex, all (default: all)
21
24
  --offline Use local assets without network (default: false)
22
25
  --src <dir> Source directory to scan (default: current directory)
26
+ --url <url> Base URL to audit (default: http://localhost:3000)
27
+ --routes <list> Comma-separated routes (default: /)
28
+ --output <dir> Audit output directory (default: ./ui-audit)
29
+ --viewport <WxH> Browser viewport (default: 1280x720)
23
30
  --help Show this help
24
31
  --version Show version
25
32
 
@@ -30,6 +37,8 @@ Examples:
30
37
  enterprise-ui verify-imports --src ./src
31
38
  enterprise-ui verify-i18n
32
39
  enterprise-ui verify-i18n --src ./src
40
+ enterprise-ui audit-ui
41
+ enterprise-ui audit-ui --url http://localhost:3000 --routes /,/az/login --output ./audit
33
42
  `);
34
43
  }
35
44
  function parseArgs(args) {
@@ -37,7 +46,7 @@ function parseArgs(args) {
37
46
  let command;
38
47
  for (let i = 0; i < args.length; i++) {
39
48
  const arg = args[i];
40
- if (arg === "init" || arg === "verify-imports" || arg === "verify-i18n") {
49
+ if (arg === "init" || arg === "verify-imports" || arg === "verify-i18n" || arg === "audit-ui") {
41
50
  command = arg;
42
51
  }
43
52
  else if (arg === "--ai" && i + 1 < args.length) {
@@ -58,11 +67,11 @@ function parseArgs(args) {
58
67
  }
59
68
  return { command, ...result };
60
69
  }
61
- function main() {
70
+ async function main() {
62
71
  const args = process.argv.slice(2);
63
72
  const parsed = parseArgs(args);
64
73
  if (parsed.version) {
65
- console.log("2.0.0");
74
+ console.log("2.2.0");
66
75
  return 0;
67
76
  }
68
77
  if (parsed.help || args.length === 0) {
@@ -99,8 +108,21 @@ function main() {
99
108
  return 1;
100
109
  }
101
110
  }
111
+ if (parsed.command === "audit-ui") {
112
+ try {
113
+ const auditOptions = parseAuditArgs(args);
114
+ await auditUiCommand(auditOptions);
115
+ return 0;
116
+ }
117
+ catch (err) {
118
+ console.error(`Error: ${err.message}`);
119
+ return 1;
120
+ }
121
+ }
102
122
  console.error(`Unknown command. Run --help for usage.`);
103
123
  return 1;
104
124
  }
105
- process.exit(main());
125
+ (async () => {
126
+ process.exit(await main());
127
+ })();
106
128
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "enterprise-ui-architect-cli",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "CLI for installing Enterprise UI Architect skill into AI coding assistants",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -30,6 +30,9 @@
30
30
  "@types/node": "^20.0.0",
31
31
  "typescript": "^5.3.0"
32
32
  },
33
+ "dependencies": {
34
+ "playwright": "^1.49.0"
35
+ },
33
36
  "engines": {
34
37
  "node": ">=18.0.0"
35
38
  }