@empline/preflight 1.1.48 → 1.1.49

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.
Files changed (35) hide show
  1. package/dist/bin/init.d.ts +18 -0
  2. package/dist/bin/init.d.ts.map +1 -0
  3. package/dist/bin/init.js +369 -0
  4. package/dist/bin/init.js.map +1 -0
  5. package/dist/bin/preflight.js +201 -0
  6. package/dist/bin/preflight.js.map +1 -1
  7. package/dist/bin/preinstall.js +7 -0
  8. package/dist/bin/preinstall.js.map +1 -1
  9. package/dist/checks/react/vercel-react-best-practices.d.ts +38 -0
  10. package/dist/checks/react/vercel-react-best-practices.d.ts.map +1 -0
  11. package/dist/checks/react/vercel-react-best-practices.js +547 -0
  12. package/dist/checks/react/vercel-react-best-practices.js.map +1 -0
  13. package/dist/checks/system/preflight-actionable-output.d.ts +18 -0
  14. package/dist/checks/system/preflight-actionable-output.d.ts.map +1 -0
  15. package/dist/checks/system/preflight-actionable-output.js +216 -0
  16. package/dist/checks/system/preflight-actionable-output.js.map +1 -0
  17. package/dist/checks/ui/web-design-guidelines.d.ts +37 -0
  18. package/dist/checks/ui/web-design-guidelines.d.ts.map +1 -0
  19. package/dist/checks/ui/web-design-guidelines.js +545 -0
  20. package/dist/checks/ui/web-design-guidelines.js.map +1 -0
  21. package/dist/lib/activation.d.ts +18 -0
  22. package/dist/lib/activation.d.ts.map +1 -0
  23. package/dist/lib/activation.js +283 -0
  24. package/dist/lib/activation.js.map +1 -0
  25. package/dist/lib/ai-commands.d.ts +72 -0
  26. package/dist/lib/ai-commands.d.ts.map +1 -0
  27. package/dist/lib/ai-commands.js +393 -0
  28. package/dist/lib/ai-commands.js.map +1 -0
  29. package/dist/runner.d.ts +18 -0
  30. package/dist/runner.d.ts.map +1 -1
  31. package/dist/runner.js +66 -8
  32. package/dist/runner.js.map +1 -1
  33. package/dist/utils/console-chars.d.ts +6 -6
  34. package/package.json +2 -1
  35. package/templates/domain-specific/trading-card-system/missing-page-layout.ts +377 -0
@@ -0,0 +1,393 @@
1
+ "use strict";
2
+ /**
3
+ * AI-Friendly Commands for Preflight
4
+ *
5
+ * Provides commands optimized for AI consumption:
6
+ * - --list-categories: List all available categories
7
+ * - --list-checks: List all available checks
8
+ * - --check <name>: Run a single check by name
9
+ * - --explain <name>: Get detailed info about a check
10
+ * - --recheck <name>: Re-run a single check for verification
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.discoverAllChecks = discoverAllChecks;
47
+ exports.groupByCategory = groupByCategory;
48
+ exports.findCheck = findCheck;
49
+ exports.findChecksByCategory = findChecksByCategory;
50
+ exports.formatCheckListHuman = formatCheckListHuman;
51
+ exports.formatCheckListAI = formatCheckListAI;
52
+ exports.formatCategoryListHuman = formatCategoryListHuman;
53
+ exports.formatCategoryListAI = formatCategoryListAI;
54
+ exports.formatExplainHuman = formatExplainHuman;
55
+ exports.formatExplainAI = formatExplainAI;
56
+ const path = __importStar(require("node:path"));
57
+ const fs = __importStar(require("node:fs"));
58
+ const glob_1 = require("glob");
59
+ /**
60
+ * Parse check metadata from a compiled JS file
61
+ */
62
+ function parseCheckMetadata(filePath) {
63
+ try {
64
+ const content = fs.readFileSync(filePath, "utf-8");
65
+ const extractExport = (key) => {
66
+ const patterns = [
67
+ new RegExp(`exports\\.${key}\\s*=\\s*["']([^"']+)["']`),
68
+ new RegExp(`module\\.exports\\.${key}\\s*=\\s*["']([^"']+)["']`),
69
+ ];
70
+ for (const pattern of patterns) {
71
+ const match = content.match(pattern);
72
+ if (match)
73
+ return match[1];
74
+ }
75
+ return undefined;
76
+ };
77
+ const extractBoolExport = (key) => {
78
+ const patterns = [
79
+ new RegExp(`exports\\.${key}\\s*=\\s*(true|false)`),
80
+ new RegExp(`module\\.exports\\.${key}\\s*=\\s*(true|false)`),
81
+ ];
82
+ for (const pattern of patterns) {
83
+ const match = content.match(pattern);
84
+ if (match)
85
+ return match[1] === "true";
86
+ }
87
+ return undefined;
88
+ };
89
+ const extractArrayExport = (key) => {
90
+ const patterns = [
91
+ new RegExp(`exports\\.${key}\\s*=\\s*\\[([^\\]]*?)\\]`),
92
+ new RegExp(`module\\.exports\\.${key}\\s*=\\s*\\[([^\\]]*?)\\]`),
93
+ ];
94
+ for (const pattern of patterns) {
95
+ const match = content.match(pattern);
96
+ if (match) {
97
+ const arrayContent = match[1].trim();
98
+ if (!arrayContent)
99
+ return [];
100
+ const strings = arrayContent.match(/["']([^"']+)["']/g);
101
+ if (strings) {
102
+ return strings.map(s => s.replace(/["']/g, ""));
103
+ }
104
+ return [];
105
+ }
106
+ }
107
+ return undefined;
108
+ };
109
+ const extractNumberExport = (key) => {
110
+ const patterns = [
111
+ new RegExp(`exports\\.${key}\\s*=\\s*(\\d+)`),
112
+ new RegExp(`module\\.exports\\.${key}\\s*=\\s*(\\d+)`),
113
+ ];
114
+ for (const pattern of patterns) {
115
+ const match = content.match(pattern);
116
+ if (match)
117
+ return parseInt(match[1], 10);
118
+ }
119
+ return undefined;
120
+ };
121
+ const id = extractExport("id");
122
+ const name = extractExport("name");
123
+ if (!id || !name)
124
+ return null;
125
+ return {
126
+ id,
127
+ name,
128
+ category: extractExport("category") || path.dirname(filePath).split(path.sep).pop() || "general",
129
+ blocking: extractBoolExport("blocking") ?? false,
130
+ description: extractExport("description") || "",
131
+ source: "core",
132
+ filePath,
133
+ requires: extractArrayExport("requires"),
134
+ priority: extractNumberExport("priority"),
135
+ complexity: extractExport("complexity"),
136
+ estimatedFixTime: extractExport("estimatedFixTime"),
137
+ commonFixes: extractArrayExport("commonFixes"),
138
+ };
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ /**
145
+ * Discover all available checks
146
+ */
147
+ async function discoverAllChecks(checksRoot, appRoot) {
148
+ const checks = [];
149
+ // Discover core checks
150
+ const coreChecksDir = path.join(checksRoot, "checks");
151
+ if (fs.existsSync(coreChecksDir)) {
152
+ const coreFiles = await (0, glob_1.glob)("**/*.js", {
153
+ cwd: coreChecksDir,
154
+ ignore: ["**/*.test.js", "**/*.spec.js"],
155
+ nodir: true,
156
+ });
157
+ for (const file of coreFiles) {
158
+ const filePath = path.join(coreChecksDir, file);
159
+ const metadata = parseCheckMetadata(filePath);
160
+ if (metadata) {
161
+ metadata.source = "core";
162
+ checks.push(metadata);
163
+ }
164
+ }
165
+ }
166
+ // Discover app-specific checks
167
+ if (appRoot) {
168
+ const appChecksDir = path.join(appRoot, "scripts", "active", "preflights");
169
+ if (fs.existsSync(appChecksDir)) {
170
+ const appFiles = await (0, glob_1.glob)("**/*.{ts,js}", {
171
+ cwd: appChecksDir,
172
+ ignore: ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"],
173
+ nodir: true,
174
+ });
175
+ for (const file of appFiles) {
176
+ const filePath = path.join(appChecksDir, file);
177
+ const metadata = parseCheckMetadata(filePath);
178
+ if (metadata) {
179
+ metadata.source = "app";
180
+ checks.push(metadata);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ return checks;
186
+ }
187
+ /**
188
+ * Group checks by category
189
+ */
190
+ function groupByCategory(checks) {
191
+ const categoryMap = new Map();
192
+ for (const check of checks) {
193
+ const cat = check.category || "general";
194
+ if (!categoryMap.has(cat)) {
195
+ categoryMap.set(cat, []);
196
+ }
197
+ categoryMap.get(cat).push(check);
198
+ }
199
+ return Array.from(categoryMap.entries())
200
+ .map(([name, categoryChecks]) => ({
201
+ name,
202
+ checkCount: categoryChecks.length,
203
+ blockingCount: categoryChecks.filter(c => c.blocking).length,
204
+ checks: categoryChecks.map(c => c.name),
205
+ }))
206
+ .sort((a, b) => b.checkCount - a.checkCount);
207
+ }
208
+ /**
209
+ * Find a check by name (fuzzy match)
210
+ */
211
+ function findCheck(checks, searchName) {
212
+ const searchLower = searchName.toLowerCase().trim();
213
+ // Exact match first
214
+ const exact = checks.find(c => c.name.toLowerCase() === searchLower);
215
+ if (exact)
216
+ return exact;
217
+ // Exact ID match
218
+ const idMatch = checks.find(c => c.id.toLowerCase() === searchLower);
219
+ if (idMatch)
220
+ return idMatch;
221
+ // Partial name match
222
+ const partial = checks.find(c => c.name.toLowerCase().includes(searchLower));
223
+ if (partial)
224
+ return partial;
225
+ // Partial ID match
226
+ const partialId = checks.find(c => c.id.toLowerCase().includes(searchLower));
227
+ if (partialId)
228
+ return partialId;
229
+ return undefined;
230
+ }
231
+ /**
232
+ * Find checks by category
233
+ */
234
+ function findChecksByCategory(checks, category) {
235
+ const catLower = category.toLowerCase().trim();
236
+ return checks.filter(c => c.category.toLowerCase() === catLower);
237
+ }
238
+ /**
239
+ * Format check list for human output
240
+ */
241
+ function formatCheckListHuman(checks) {
242
+ const lines = [];
243
+ const categories = groupByCategory(checks);
244
+ for (const cat of categories) {
245
+ lines.push(`\n📁 ${cat.name.toUpperCase()} (${cat.checkCount} checks, ${cat.blockingCount} blocking)`);
246
+ lines.push("─".repeat(60));
247
+ const categoryChecks = checks.filter(c => c.category === cat.name);
248
+ for (const check of categoryChecks) {
249
+ const blocking = check.blocking ? "🔴" : "🟢";
250
+ const source = check.source === "app" ? " [app]" : "";
251
+ lines.push(` ${blocking} ${check.name}${source}`);
252
+ if (check.description) {
253
+ lines.push(` ${check.description}`);
254
+ }
255
+ }
256
+ }
257
+ return lines.join("\n");
258
+ }
259
+ /**
260
+ * Format check list for AI/JSON output
261
+ */
262
+ function formatCheckListAI(checks) {
263
+ const categories = groupByCategory(checks);
264
+ return {
265
+ totalChecks: checks.length,
266
+ totalBlocking: checks.filter(c => c.blocking).length,
267
+ categories: categories.map(cat => ({
268
+ name: cat.name,
269
+ checkCount: cat.checkCount,
270
+ blockingCount: cat.blockingCount,
271
+ })),
272
+ checks: checks.map(c => ({
273
+ id: c.id,
274
+ name: c.name,
275
+ category: c.category,
276
+ blocking: c.blocking,
277
+ source: c.source,
278
+ description: c.description || undefined,
279
+ requires: c.requires?.length ? c.requires : undefined,
280
+ priority: c.priority,
281
+ complexity: c.complexity,
282
+ })),
283
+ };
284
+ }
285
+ /**
286
+ * Format category list for human output
287
+ */
288
+ function formatCategoryListHuman(categories) {
289
+ const lines = [
290
+ "",
291
+ "📋 AVAILABLE CATEGORIES",
292
+ "═".repeat(60),
293
+ "",
294
+ ];
295
+ for (const cat of categories) {
296
+ const blockingPct = cat.checkCount > 0
297
+ ? Math.round((cat.blockingCount / cat.checkCount) * 100)
298
+ : 0;
299
+ lines.push(` 📁 ${cat.name.padEnd(25)} ${String(cat.checkCount).padStart(3)} checks (${blockingPct}% blocking)`);
300
+ }
301
+ lines.push("");
302
+ lines.push("Usage: npx preflight --category <name> [--category <name2>]");
303
+ lines.push("");
304
+ return lines.join("\n");
305
+ }
306
+ /**
307
+ * Format category list for AI/JSON output
308
+ */
309
+ function formatCategoryListAI(categories) {
310
+ return {
311
+ totalCategories: categories.length,
312
+ categories: categories.map(cat => ({
313
+ name: cat.name,
314
+ checkCount: cat.checkCount,
315
+ blockingCount: cat.blockingCount,
316
+ checks: cat.checks,
317
+ })),
318
+ usage: {
319
+ runSingleCategory: "npx preflight --category <name>",
320
+ runMultipleCategories: "npx preflight --category <name1> --category <name2>",
321
+ runSingleCheck: "npx preflight --check '<check name>'",
322
+ },
323
+ };
324
+ }
325
+ /**
326
+ * Format check explanation for human output
327
+ */
328
+ function formatExplainHuman(check) {
329
+ const lines = [
330
+ "",
331
+ `📋 CHECK: ${check.name}`,
332
+ "═".repeat(60),
333
+ "",
334
+ `ID: ${check.id}`,
335
+ `Category: ${check.category}`,
336
+ `Blocking: ${check.blocking ? "Yes (deployment blocked if fails)" : "No (warning only)"}`,
337
+ `Source: ${check.source === "app" ? "App-specific" : "Core"}`,
338
+ `File: ${check.filePath}`,
339
+ ];
340
+ if (check.description) {
341
+ lines.push(`Description: ${check.description}`);
342
+ }
343
+ if (check.requires?.length) {
344
+ lines.push(`Requires: ${check.requires.join(", ")}`);
345
+ }
346
+ if (check.priority) {
347
+ lines.push(`Priority: ${check.priority} (lower = fix first)`);
348
+ }
349
+ if (check.complexity) {
350
+ lines.push(`Complexity: ${check.complexity}`);
351
+ }
352
+ if (check.estimatedFixTime) {
353
+ lines.push(`Est. Fix: ${check.estimatedFixTime}`);
354
+ }
355
+ if (check.commonFixes?.length) {
356
+ lines.push("");
357
+ lines.push("Common Fixes:");
358
+ for (const fix of check.commonFixes) {
359
+ lines.push(` • ${fix}`);
360
+ }
361
+ }
362
+ lines.push("");
363
+ lines.push("To run this check:");
364
+ lines.push(` npx preflight --check "${check.name}"`);
365
+ lines.push("");
366
+ return lines.join("\n");
367
+ }
368
+ /**
369
+ * Format check explanation for AI/JSON output
370
+ */
371
+ function formatExplainAI(check) {
372
+ return {
373
+ check: {
374
+ id: check.id,
375
+ name: check.name,
376
+ category: check.category,
377
+ blocking: check.blocking,
378
+ source: check.source,
379
+ filePath: check.filePath,
380
+ description: check.description || null,
381
+ requires: check.requires || [],
382
+ priority: check.priority || null,
383
+ complexity: check.complexity || null,
384
+ estimatedFixTime: check.estimatedFixTime || null,
385
+ commonFixes: check.commonFixes || [],
386
+ },
387
+ commands: {
388
+ run: `npx preflight --check "${check.name}"`,
389
+ runCategory: `npx preflight --category ${check.category}`,
390
+ },
391
+ };
392
+ }
393
+ //# sourceMappingURL=ai-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-commands.js","sourceRoot":"","sources":["../../src/lib/ai-commands.ts"],"names":[],"mappings":"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"}
package/dist/runner.d.ts CHANGED
@@ -34,6 +34,24 @@ export declare function runPreflights(options?: {
34
34
  segmented?: boolean;
35
35
  segmentSize?: number;
36
36
  }): Promise<PreflightReport>;
37
+ /**
38
+ * Run a single check by file path (for --check and --recheck commands)
39
+ * Returns a result object with pass/fail status and findings
40
+ */
41
+ export declare function runSingleCheck(filePath: string, checkName: string, blocking: boolean, timeout?: number): Promise<{
42
+ name: string;
43
+ passed: boolean;
44
+ duration: number;
45
+ blocking: boolean;
46
+ findings?: Array<{
47
+ severity: "error" | "warning" | "info";
48
+ message: string;
49
+ file?: string;
50
+ line?: number;
51
+ suggestion?: string;
52
+ }>;
53
+ error?: string;
54
+ }>;
37
55
  /**
38
56
  * CLI entry point
39
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAEL,eAAe,EAGhB,MAAM,cAAc,CAAC;AAYtB,OAAO,EAIL,UAAU,EACX,MAAM,6BAA6B,CAAC;AA0XrC;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmUhC;AAwJD;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAoF1C"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAEL,eAAe,EAGhB,MAAM,cAAc,CAAC;AAYtB,OAAO,EAIL,UAAU,EACX,MAAM,6BAA6B,CAAC;AA0XrC;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmUhC;AAwJD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;QACvC,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAgDD;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA2F1C"}
package/dist/runner.js CHANGED
@@ -51,6 +51,7 @@ var __importStar = (this && this.__importStar) || (function () {
51
51
  })();
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
53
  exports.runPreflights = runPreflights;
54
+ exports.runSingleCheck = runSingleCheck;
54
55
  exports.main = main;
55
56
  const path = __importStar(require("node:path"));
56
57
  const fs = __importStar(require("node:fs"));
@@ -768,6 +769,56 @@ function printAiOutput(report, failedBlocking) {
768
769
  process.exitCode = 1;
769
770
  }
770
771
  }
772
+ /**
773
+ * Run a single check by file path (for --check and --recheck commands)
774
+ * Returns a result object with pass/fail status and findings
775
+ */
776
+ async function runSingleCheck(filePath, checkName, blocking, timeout = 30000) {
777
+ const startTime = Date.now();
778
+ try {
779
+ // Try in-process execution first
780
+ if ((0, in_process_runner_1.canRunInProcess)(filePath)) {
781
+ const result = await (0, in_process_runner_1.runCheckInProcess)(filePath, timeout);
782
+ const duration = (Date.now() - startTime) / 1000;
783
+ return {
784
+ name: checkName,
785
+ passed: result.passed,
786
+ duration,
787
+ blocking,
788
+ findings: result.findings?.map(f => ({
789
+ severity: f.level || "error",
790
+ message: f.message,
791
+ file: f.file,
792
+ line: f.startLine,
793
+ suggestion: f.suggestion,
794
+ })),
795
+ };
796
+ }
797
+ // Fallback to subprocess
798
+ const { exitCode, output } = await runCheckAsSubprocess(filePath, timeout);
799
+ const duration = (Date.now() - startTime) / 1000;
800
+ return {
801
+ name: checkName,
802
+ passed: exitCode === 0,
803
+ duration,
804
+ blocking,
805
+ findings: exitCode !== 0 ? [{
806
+ severity: "error",
807
+ message: output.trim().slice(0, 500) || "Check failed",
808
+ }] : undefined,
809
+ };
810
+ }
811
+ catch (error) {
812
+ const duration = (Date.now() - startTime) / 1000;
813
+ return {
814
+ name: checkName,
815
+ passed: false,
816
+ duration,
817
+ blocking,
818
+ error: error instanceof Error ? error.message : String(error),
819
+ };
820
+ }
821
+ }
771
822
  /**
772
823
  * CLI entry point
773
824
  */
@@ -804,10 +855,21 @@ Environment Variables:
804
855
  PREFLIGHT_MAX_CONCURRENCY=N Set maximum concurrency cap
805
856
  PREFLIGHT_SEQUENTIAL=1 Force sequential execution
806
857
 
807
- AI Assistant Usage:
808
- For AI to debug preflight failures, use --ai flag:
809
- npx preflight --ai
810
- npx preflight security --ai
858
+ AI Assistant Commands:
859
+ npx preflight list-categories List all available categories
860
+ npx preflight list-checks List all available checks
861
+ npx preflight list-checks --category=cart List checks in a category
862
+ npx preflight --check "Check Name" Run a single check by name
863
+ npx preflight --recheck "Check Name" Re-verify a single check after fix
864
+ npx preflight explain "Check Name" Get detailed info about a check
865
+
866
+ Add --ai to any command for JSON output (e.g., list-categories --ai)
867
+
868
+ AI Debugging Workflow:
869
+ 1. npx preflight --category cart --ai # Run specific category, get JSON
870
+ 2. Fix the issues shown
871
+ 3. npx preflight --recheck "Check" # Verify single check passes
872
+ 4. npx preflight --category cart # Confirm all fixed
811
873
 
812
874
  The --ai flag provides:
813
875
  - Compact JSON with only failures (minimal tokens)
@@ -815,12 +877,8 @@ AI Assistant Usage:
815
877
  - Suggested fixes when available
816
878
  - No per-check progress output (cleaner)
817
879
 
818
- For human-readable but concise output, use --errors-only:
819
- npx preflight --errors-only
820
-
821
880
  For segmented output (easier for AI to process in chunks):
822
881
  npx preflight --segmented # Groups by category
823
- npx preflight --segment-size=10 # 10 checks per segment
824
882
  npx preflight --segmented --errors-only # Only show failures, grouped
825
883
 
826
884
  Performance & Debugging: