@vertaaux/cli 0.3.3 → 0.5.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.
Files changed (227) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/MIGRATION.md +239 -0
  3. package/README.md +34 -16
  4. package/dist/app/interactive-app.d.ts +101 -0
  5. package/dist/app/interactive-app.d.ts.map +1 -0
  6. package/dist/app/interactive-app.js +309 -0
  7. package/dist/app/layout/canvas.d.ts +23 -0
  8. package/dist/app/layout/canvas.d.ts.map +1 -0
  9. package/dist/app/layout/canvas.js +36 -0
  10. package/dist/app/layout/footer.d.ts +31 -0
  11. package/dist/app/layout/footer.d.ts.map +1 -0
  12. package/dist/app/layout/footer.js +41 -0
  13. package/dist/app/layout/header.d.ts +20 -0
  14. package/dist/app/layout/header.d.ts.map +1 -0
  15. package/dist/app/layout/header.js +27 -0
  16. package/dist/app/menu/categories.d.ts +20 -0
  17. package/dist/app/menu/categories.d.ts.map +1 -0
  18. package/dist/app/menu/categories.js +181 -0
  19. package/dist/app/menu/filter.d.ts +17 -0
  20. package/dist/app/menu/filter.d.ts.map +1 -0
  21. package/dist/app/menu/filter.js +33 -0
  22. package/dist/app/menu/menu-view.d.ts +35 -0
  23. package/dist/app/menu/menu-view.d.ts.map +1 -0
  24. package/dist/app/menu/menu-view.js +230 -0
  25. package/dist/app/menu/recent.d.ts +24 -0
  26. package/dist/app/menu/recent.d.ts.map +1 -0
  27. package/dist/app/menu/recent.js +49 -0
  28. package/dist/app/types.d.ts +43 -0
  29. package/dist/app/types.d.ts.map +1 -0
  30. package/dist/app/types.js +7 -0
  31. package/dist/app/views/command-runner.d.ts +36 -0
  32. package/dist/app/views/command-runner.d.ts.map +1 -0
  33. package/dist/app/views/command-runner.js +372 -0
  34. package/dist/app/views/help-overlay.d.ts +21 -0
  35. package/dist/app/views/help-overlay.d.ts.map +1 -0
  36. package/dist/app/views/help-overlay.js +45 -0
  37. package/dist/auth/ci-token.d.ts +14 -2
  38. package/dist/auth/ci-token.d.ts.map +1 -1
  39. package/dist/auth/ci-token.js +15 -30
  40. package/dist/auth/device-flow.d.ts +2 -1
  41. package/dist/auth/device-flow.d.ts.map +1 -1
  42. package/dist/auth/device-flow.js +13 -10
  43. package/dist/auth/token-store.d.ts.map +1 -1
  44. package/dist/auth/token-store.js +12 -2
  45. package/dist/baseline/diff.d.ts +2 -2
  46. package/dist/baseline/diff.d.ts.map +1 -1
  47. package/dist/baseline/diff.js +15 -34
  48. package/dist/commands/a11y.d.ts +9 -0
  49. package/dist/commands/a11y.d.ts.map +1 -0
  50. package/dist/commands/a11y.js +76 -0
  51. package/dist/commands/audit/artifacts.d.ts +27 -0
  52. package/dist/commands/audit/artifacts.d.ts.map +1 -0
  53. package/dist/commands/audit/artifacts.js +158 -0
  54. package/dist/commands/audit/ci-detection.d.ts +18 -0
  55. package/dist/commands/audit/ci-detection.d.ts.map +1 -0
  56. package/dist/commands/audit/ci-detection.js +71 -0
  57. package/dist/commands/audit/explain.d.ts +11 -0
  58. package/dist/commands/audit/explain.d.ts.map +1 -0
  59. package/dist/commands/audit/explain.js +45 -0
  60. package/dist/commands/audit/filters.d.ts +17 -0
  61. package/dist/commands/audit/filters.d.ts.map +1 -0
  62. package/dist/commands/audit/filters.js +40 -0
  63. package/dist/commands/audit/index.d.ts +18 -0
  64. package/dist/commands/audit/index.d.ts.map +1 -0
  65. package/dist/commands/audit/index.js +564 -0
  66. package/dist/commands/audit/output.d.ts +32 -0
  67. package/dist/commands/audit/output.d.ts.map +1 -0
  68. package/dist/commands/audit/output.js +130 -0
  69. package/dist/commands/audit/policy.d.ts +19 -0
  70. package/dist/commands/audit/policy.d.ts.map +1 -0
  71. package/dist/commands/audit/policy.js +102 -0
  72. package/dist/commands/audit/scoring.d.ts +23 -0
  73. package/dist/commands/audit/scoring.d.ts.map +1 -0
  74. package/dist/commands/audit/scoring.js +70 -0
  75. package/dist/commands/audit/types.d.ts +88 -0
  76. package/dist/commands/audit/types.d.ts.map +1 -0
  77. package/dist/commands/audit/types.js +8 -0
  78. package/dist/commands/audit.d.ts +2 -60
  79. package/dist/commands/audit.d.ts.map +1 -1
  80. package/dist/commands/audit.js +2 -1038
  81. package/dist/commands/baseline.d.ts +1 -0
  82. package/dist/commands/baseline.d.ts.map +1 -1
  83. package/dist/commands/baseline.js +205 -121
  84. package/dist/commands/comment.d.ts +22 -0
  85. package/dist/commands/comment.d.ts.map +1 -1
  86. package/dist/commands/comment.js +122 -58
  87. package/dist/commands/compare.d.ts +17 -0
  88. package/dist/commands/compare.d.ts.map +1 -1
  89. package/dist/commands/compare.js +287 -180
  90. package/dist/commands/diff.d.ts +5 -0
  91. package/dist/commands/diff.d.ts.map +1 -1
  92. package/dist/commands/diff.js +168 -141
  93. package/dist/commands/doc.d.ts +10 -0
  94. package/dist/commands/doc.d.ts.map +1 -1
  95. package/dist/commands/doc.js +134 -76
  96. package/dist/commands/doctor.d.ts +2 -0
  97. package/dist/commands/doctor.d.ts.map +1 -1
  98. package/dist/commands/doctor.js +164 -17
  99. package/dist/commands/download.d.ts +10 -0
  100. package/dist/commands/download.d.ts.map +1 -1
  101. package/dist/commands/download.js +169 -112
  102. package/dist/commands/explain.d.ts +5 -0
  103. package/dist/commands/explain.d.ts.map +1 -1
  104. package/dist/commands/explain.js +241 -155
  105. package/dist/commands/fix-all.d.ts +25 -0
  106. package/dist/commands/fix-all.d.ts.map +1 -0
  107. package/dist/commands/fix-all.js +206 -0
  108. package/dist/commands/fix-plan.d.ts +9 -0
  109. package/dist/commands/fix-plan.d.ts.map +1 -1
  110. package/dist/commands/fix-plan.js +152 -89
  111. package/dist/commands/fix.d.ts +17 -0
  112. package/dist/commands/fix.d.ts.map +1 -0
  113. package/dist/commands/fix.js +111 -0
  114. package/dist/commands/init.d.ts +11 -0
  115. package/dist/commands/init.d.ts.map +1 -1
  116. package/dist/commands/init.js +94 -42
  117. package/dist/commands/login.d.ts +18 -0
  118. package/dist/commands/login.d.ts.map +1 -1
  119. package/dist/commands/login.js +268 -95
  120. package/dist/commands/patch-review.d.ts +11 -0
  121. package/dist/commands/patch-review.d.ts.map +1 -1
  122. package/dist/commands/patch-review.js +159 -97
  123. package/dist/commands/policy.d.ts +31 -0
  124. package/dist/commands/policy.d.ts.map +1 -1
  125. package/dist/commands/policy.js +269 -124
  126. package/dist/commands/release-notes.d.ts +10 -0
  127. package/dist/commands/release-notes.d.ts.map +1 -1
  128. package/dist/commands/release-notes.js +127 -73
  129. package/dist/commands/scan.d.ts +13 -0
  130. package/dist/commands/scan.d.ts.map +1 -0
  131. package/dist/commands/scan.js +133 -0
  132. package/dist/commands/status.d.ts +9 -0
  133. package/dist/commands/status.d.ts.map +1 -0
  134. package/dist/commands/status.js +81 -0
  135. package/dist/commands/suggest.d.ts +10 -0
  136. package/dist/commands/suggest.d.ts.map +1 -1
  137. package/dist/commands/suggest.js +153 -82
  138. package/dist/commands/triage.d.ts +35 -0
  139. package/dist/commands/triage.d.ts.map +1 -1
  140. package/dist/commands/triage.js +206 -81
  141. package/dist/commands/upload.d.ts +9 -0
  142. package/dist/commands/upload.d.ts.map +1 -1
  143. package/dist/commands/upload.js +140 -101
  144. package/dist/commands/verify.d.ts +13 -0
  145. package/dist/commands/verify.d.ts.map +1 -0
  146. package/dist/commands/verify.js +118 -0
  147. package/dist/index.d.ts +3 -2
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +125 -990
  150. package/dist/interactive/fix-wizard.d.ts +3 -0
  151. package/dist/interactive/fix-wizard.d.ts.map +1 -1
  152. package/dist/interactive/fix-wizard.js +130 -112
  153. package/dist/interactive/init-wizard.d.ts +3 -1
  154. package/dist/interactive/init-wizard.d.ts.map +1 -1
  155. package/dist/interactive/init-wizard.js +207 -138
  156. package/dist/interactive/prompts.d.ts +7 -3
  157. package/dist/interactive/prompts.d.ts.map +1 -1
  158. package/dist/interactive/prompts.js +44 -23
  159. package/dist/output/envelope.d.ts +2 -0
  160. package/dist/output/envelope.d.ts.map +1 -1
  161. package/dist/output/envelope.js +18 -2
  162. package/dist/output/factory.d.ts +9 -1
  163. package/dist/output/factory.d.ts.map +1 -1
  164. package/dist/output/html.d.ts +2 -1
  165. package/dist/output/html.d.ts.map +1 -1
  166. package/dist/output/html.js +3 -2
  167. package/dist/output/human.d.ts +9 -1
  168. package/dist/output/human.d.ts.map +1 -1
  169. package/dist/output/human.js +17 -2
  170. package/dist/output/json.d.ts +2 -1
  171. package/dist/output/json.d.ts.map +1 -1
  172. package/dist/output/junit.d.ts +2 -1
  173. package/dist/output/junit.d.ts.map +1 -1
  174. package/dist/output/sarif.d.ts +2 -1
  175. package/dist/output/sarif.d.ts.map +1 -1
  176. package/dist/types.d.ts +74 -0
  177. package/dist/types.d.ts.map +1 -0
  178. package/dist/types.js +5 -0
  179. package/dist/ui/banner.d.ts +34 -0
  180. package/dist/ui/banner.d.ts.map +1 -1
  181. package/dist/ui/banner.js +97 -5
  182. package/dist/ui/diagnostics.d.ts +9 -4
  183. package/dist/ui/diagnostics.d.ts.map +1 -1
  184. package/dist/ui/diagnostics.js +32 -82
  185. package/dist/ui/strings.d.ts +373 -0
  186. package/dist/ui/strings.d.ts.map +1 -0
  187. package/dist/ui/strings.js +499 -0
  188. package/dist/ui/table.d.ts +0 -2
  189. package/dist/ui/table.d.ts.map +1 -1
  190. package/dist/ui/table.js +3 -4
  191. package/dist/utils/api-client.d.ts +46 -0
  192. package/dist/utils/api-client.d.ts.map +1 -0
  193. package/dist/utils/api-client.js +170 -0
  194. package/dist/utils/client.d.ts +29 -18
  195. package/dist/utils/client.d.ts.map +1 -1
  196. package/dist/utils/client.js +102 -12
  197. package/dist/utils/formatters.d.ts +38 -0
  198. package/dist/utils/formatters.d.ts.map +1 -0
  199. package/dist/utils/formatters.js +277 -0
  200. package/dist/utils/local-capture.d.ts +25 -0
  201. package/dist/utils/local-capture.d.ts.map +1 -0
  202. package/dist/utils/local-capture.js +57 -0
  203. package/dist/utils/url-classify.d.ts +18 -0
  204. package/dist/utils/url-classify.d.ts.map +1 -0
  205. package/dist/utils/url-classify.js +106 -0
  206. package/node_modules/@vertaaux/tui/dist/index.cjs +713 -20
  207. package/node_modules/@vertaaux/tui/dist/index.cjs.map +1 -1
  208. package/node_modules/@vertaaux/tui/dist/index.d.cts +361 -4
  209. package/node_modules/@vertaaux/tui/dist/index.d.ts +361 -4
  210. package/node_modules/@vertaaux/tui/dist/index.js +689 -21
  211. package/node_modules/@vertaaux/tui/dist/index.js.map +1 -1
  212. package/package.json +13 -5
  213. package/dist/commands/client.d.ts +0 -14
  214. package/dist/commands/client.d.ts.map +0 -1
  215. package/dist/commands/client.js +0 -362
  216. package/dist/commands/drift.d.ts +0 -15
  217. package/dist/commands/drift.d.ts.map +0 -1
  218. package/dist/commands/drift.js +0 -309
  219. package/dist/commands/protect.d.ts +0 -16
  220. package/dist/commands/protect.d.ts.map +0 -1
  221. package/dist/commands/protect.js +0 -323
  222. package/dist/commands/report.d.ts +0 -15
  223. package/dist/commands/report.d.ts.map +0 -1
  224. package/dist/commands/report.js +0 -214
  225. package/dist/policy/sync.d.ts +0 -67
  226. package/dist/policy/sync.d.ts.map +0 -1
  227. package/dist/policy/sync.js +0 -147
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Output formatting helpers for the audit command.
3
+ */
4
+ import fs from "fs";
5
+ import path from "path";
6
+ import { colorize, dim, brand, severity as severityPalette } from "@vertaaux/tui";
7
+ import { createEnvelope, writeJsonOutput, writeOutput } from "../../output/envelope.js";
8
+ const writeStdout = writeOutput;
9
+ /**
10
+ * Write output to file. Returns the resolved path if written to file, undefined otherwise.
11
+ */
12
+ export function writeOutputToFile(content, outputPath, defaultPath) {
13
+ // Determine the final output path
14
+ const finalPath = outputPath || defaultPath;
15
+ if (finalPath) {
16
+ // Write to file
17
+ const resolvedPath = path.resolve(process.cwd(), finalPath);
18
+ // Ensure directory exists
19
+ const dir = path.dirname(resolvedPath);
20
+ if (!fs.existsSync(dir)) {
21
+ fs.mkdirSync(dir, { recursive: true });
22
+ }
23
+ fs.writeFileSync(resolvedPath, content, "utf-8");
24
+ return resolvedPath;
25
+ }
26
+ return undefined;
27
+ }
28
+ /**
29
+ * Get default output path based on format.
30
+ * Returns undefined for formats that should go to stdout by default.
31
+ */
32
+ export function getDefaultOutputPath(format) {
33
+ switch (format) {
34
+ case "html":
35
+ return "vertaaux-report.html";
36
+ default:
37
+ return undefined;
38
+ }
39
+ }
40
+ /**
41
+ * Output results in fire-and-forget mode (--no-wait).
42
+ */
43
+ export function outputFireAndForget(created, format, formatter, options, quiet) {
44
+ if (format === "json") {
45
+ if (options.output) {
46
+ const output = JSON.stringify(createEnvelope(created, "audit"), null, 2);
47
+ const filePath = writeOutputToFile(output, options.output);
48
+ if (filePath && !quiet) {
49
+ writeOutput(`Report written to: ${filePath}\n`);
50
+ }
51
+ }
52
+ else {
53
+ writeJsonOutput(created, "audit");
54
+ }
55
+ }
56
+ else {
57
+ const output = formatter.formatResult(created);
58
+ const defaultPath = getDefaultOutputPath(format);
59
+ const filePath = writeOutputToFile(output, options.output, defaultPath);
60
+ if (filePath && !quiet) {
61
+ writeOutput(`Report written to: ${filePath}\n`);
62
+ }
63
+ else if (!filePath) {
64
+ writeStdout(output);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Print quality gate result to stderr.
70
+ */
71
+ export function outputQualityGateResult(gateResult) {
72
+ writeOutput("\n");
73
+ if (gateResult.bypassed) {
74
+ writeOutput(colorize(`Quality gate bypassed: ${gateResult.bypassReason}`, severityPalette.warning) + "\n");
75
+ }
76
+ else if (gateResult.passed) {
77
+ writeOutput(colorize("Quality gate: PASSED", brand.lime) + "\n");
78
+ }
79
+ else {
80
+ writeOutput(colorize("Quality gate: FAILED", severityPalette.error) + "\n");
81
+ for (const violation of gateResult.violations) {
82
+ writeOutput(colorize(` - ${violation.message}`, severityPalette.error) + "\n");
83
+ }
84
+ }
85
+ writeOutput("\n");
86
+ writeOutput(`New issues: ${gateResult.summary.newIssues.error} errors, ` +
87
+ `${gateResult.summary.newIssues.warning} warnings, ` +
88
+ `${gateResult.summary.newIssues.info} info\n`);
89
+ if (gateResult.summary.fixedIssues > 0) {
90
+ writeOutput(colorize(`Fixed: ${gateResult.summary.fixedIssues} issues`, brand.lime) + "\n");
91
+ }
92
+ if (gateResult.summary.existingIssues > 0) {
93
+ writeOutput(dim(`Existing (baselined): ${gateResult.summary.existingIssues} issues`) + "\n");
94
+ }
95
+ }
96
+ /**
97
+ * Write formatted audit results to output or stdout.
98
+ */
99
+ export function outputFormattedResults(filteredResult, format, formatter, groupBy, options, quiet) {
100
+ const formatOptions = {
101
+ human: {
102
+ groupBy,
103
+ showScores: true,
104
+ showSummary: true,
105
+ },
106
+ };
107
+ if (format === "json") {
108
+ if (options.output) {
109
+ const jsonStr = JSON.stringify(createEnvelope(filteredResult, "audit"), null, 2);
110
+ const filePath = writeOutputToFile(jsonStr, options.output);
111
+ if (filePath && !quiet) {
112
+ writeOutput(`Report written to: ${filePath}\n`);
113
+ }
114
+ }
115
+ else {
116
+ writeJsonOutput(filteredResult, "audit");
117
+ }
118
+ }
119
+ else {
120
+ const output = formatter.formatResult(filteredResult, formatOptions);
121
+ const defaultPath = getDefaultOutputPath(format);
122
+ const filePath = writeOutputToFile(output, options.output, defaultPath);
123
+ if (filePath && !quiet) {
124
+ writeOutput(`Report written to: ${filePath}\n`);
125
+ }
126
+ else if (!filePath) {
127
+ writeStdout(output);
128
+ }
129
+ }
130
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Policy loading and quality gate configuration for the audit command.
3
+ */
4
+ import type { VertaauxConfig } from "../../config/schema.js";
5
+ import { type PolicyFile } from "../../policy/index.js";
6
+ import { type QualityGateConfig } from "../../quality-gate/index.js";
7
+ import type { AuditCommandOptions } from "./types.js";
8
+ /**
9
+ * Build quality gate configuration from options and config.
10
+ */
11
+ export declare function buildQualityGateConfig(config: VertaauxConfig, options: AuditCommandOptions): QualityGateConfig;
12
+ /**
13
+ * Load and resolve a policy file with branch-specific overrides.
14
+ */
15
+ export declare function loadAndResolvePolicy(options: AuditCommandOptions, quiet: boolean): Promise<{
16
+ policy: PolicyFile | null;
17
+ path: string | null;
18
+ }>;
19
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/commands/audit/policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKtD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,mBAAmB,GAC3B,iBAAiB,CA6CnB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAwD7D"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Policy loading and quality gate configuration for the audit command.
3
+ */
4
+ import path from "path";
5
+ import { colorize, dim, severity as severityPalette } from "@vertaaux/tui";
6
+ import { writeOutput } from "../../output/envelope.js";
7
+ import semver from "semver";
8
+ import { ExitCode } from "../../utils/exit-codes.js";
9
+ import { loadPolicy, resolveBranchPolicy, } from "../../policy/index.js";
10
+ import { DEFAULT_QUALITY_GATE_CONFIG, } from "../../quality-gate/index.js";
11
+ import { CLI_VERSION } from "./types.js";
12
+ import { detectCurrentBranch } from "./ci-detection.js";
13
+ import { strings } from "../../ui/strings.js";
14
+ /**
15
+ * Build quality gate configuration from options and config.
16
+ */
17
+ export function buildQualityGateConfig(config, options) {
18
+ // Start with defaults
19
+ const gateConfig = { ...DEFAULT_QUALITY_GATE_CONFIG };
20
+ // Apply config file settings
21
+ const configGate = config.qualityGate;
22
+ if (configGate) {
23
+ if (configGate.failOn)
24
+ gateConfig.failOn = configGate.failOn;
25
+ if (configGate.thresholds) {
26
+ gateConfig.thresholds = { ...gateConfig.thresholds, ...configGate.thresholds };
27
+ }
28
+ if (configGate.maxNew) {
29
+ gateConfig.maxNew = { ...gateConfig.maxNew, ...configGate.maxNew };
30
+ }
31
+ if (configGate.failOnExisting !== undefined) {
32
+ gateConfig.failOnExisting = configGate.failOnExisting;
33
+ }
34
+ if (configGate.bypassLabels) {
35
+ gateConfig.bypassLabels = configGate.bypassLabels;
36
+ }
37
+ }
38
+ // Apply CLI flags (highest precedence)
39
+ if (options.failOn) {
40
+ gateConfig.failOn = options.failOn;
41
+ }
42
+ if (options.threshold !== undefined) {
43
+ gateConfig.thresholds.overall = options.threshold;
44
+ }
45
+ if (options.maxNewErrors !== undefined) {
46
+ gateConfig.maxNew.error = options.maxNewErrors;
47
+ }
48
+ if (options.maxNewWarnings !== undefined) {
49
+ gateConfig.maxNew.warning = options.maxNewWarnings;
50
+ }
51
+ if (options.failOnExisting !== undefined) {
52
+ gateConfig.failOnExisting = options.failOnExisting;
53
+ }
54
+ if (options.bypassLabels) {
55
+ gateConfig.bypassLabels = options.bypassLabels.split(",").map((l) => l.trim());
56
+ }
57
+ return gateConfig;
58
+ }
59
+ /**
60
+ * Load and resolve a policy file with branch-specific overrides.
61
+ */
62
+ export async function loadAndResolvePolicy(options, quiet) {
63
+ let resolvedPolicy = null;
64
+ let policyPath = null;
65
+ try {
66
+ const policyResult = await loadPolicy(options.policy ? path.dirname(options.policy) : undefined);
67
+ if (options.policy) {
68
+ const { loadPolicyFile } = await import("../../policy/index.js");
69
+ resolvedPolicy = await loadPolicyFile(options.policy);
70
+ policyPath = options.policy;
71
+ }
72
+ else if (policyResult.path) {
73
+ resolvedPolicy = policyResult.policy;
74
+ policyPath = policyResult.path;
75
+ }
76
+ if (resolvedPolicy) {
77
+ const currentBranch = detectCurrentBranch();
78
+ if (currentBranch) {
79
+ resolvedPolicy = resolveBranchPolicy(resolvedPolicy, currentBranch);
80
+ }
81
+ if (!quiet && policyPath) {
82
+ writeOutput(dim(strings.policy.usingPolicy(policyPath, currentBranch ? ` (branch: ${currentBranch})` : "")) + "\n");
83
+ }
84
+ if (resolvedPolicy.required_version) {
85
+ if (!semver.satisfies(CLI_VERSION, resolvedPolicy.required_version)) {
86
+ writeOutput(colorize(`Policy requires CLI version ${resolvedPolicy.required_version}, ` +
87
+ `but current version is ${CLI_VERSION}`, severityPalette.error) + "\n");
88
+ process.exit(ExitCode.ERROR);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ catch (error) {
94
+ if (options.policy) {
95
+ throw error;
96
+ }
97
+ if (!quiet) {
98
+ writeOutput(colorize(`Warning: Failed to load policy: ${error instanceof Error ? error.message : String(error)}`, severityPalette.warning) + "\n");
99
+ }
100
+ }
101
+ return { policy: resolvedPolicy, path: policyPath };
102
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Score computation helpers for the audit command.
3
+ */
4
+ import type { AuditScores } from "@vertaaux/sdk";
5
+ /**
6
+ * Map API audit status to TUI phase name.
7
+ */
8
+ export declare function mapStatusToPhase(status: string): string;
9
+ /**
10
+ * Extract overall score from audit result.
11
+ */
12
+ export declare function getOverallScoreFromResult(result: {
13
+ scores?: unknown;
14
+ }): number | null;
15
+ /**
16
+ * Extract numeric scores from result scores object.
17
+ */
18
+ export declare function extractNumericScores(scores?: AuditScores | Record<string, unknown>): Record<string, number>;
19
+ /**
20
+ * Count total issues from various result formats.
21
+ */
22
+ export declare function countTotalIssues(issues: unknown): number;
23
+ //# sourceMappingURL=scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../../src/commands/audit/scoring.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmBvD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CASrF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS3G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAQxD"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Score computation helpers for the audit command.
3
+ */
4
+ import { AuditPhase } from "@vertaaux/tui";
5
+ /**
6
+ * Map API audit status to TUI phase name.
7
+ */
8
+ export function mapStatusToPhase(status) {
9
+ switch (status) {
10
+ case "queued":
11
+ case "pending":
12
+ return AuditPhase.Connecting;
13
+ case "crawling":
14
+ return AuditPhase.Crawling;
15
+ case "running":
16
+ case "analyzing":
17
+ return AuditPhase.Analyzing;
18
+ case "scoring":
19
+ return AuditPhase.Scoring;
20
+ case "completed":
21
+ return AuditPhase.Done;
22
+ case "failed":
23
+ return AuditPhase.Failed;
24
+ default:
25
+ return AuditPhase.Analyzing;
26
+ }
27
+ }
28
+ /**
29
+ * Extract overall score from audit result.
30
+ */
31
+ export function getOverallScoreFromResult(result) {
32
+ if (!result.scores)
33
+ return null;
34
+ const scores = result.scores;
35
+ const direct = scores.overall ?? scores.ux ?? scores.total;
36
+ if (typeof direct === "number" && Number.isFinite(direct))
37
+ return direct;
38
+ const numeric = Object.values(scores)
39
+ .filter((v) => typeof v === "number" && Number.isFinite(v));
40
+ if (numeric.length === 0)
41
+ return null;
42
+ return Math.round(numeric.reduce((a, b) => a + b, 0) / numeric.length);
43
+ }
44
+ /**
45
+ * Extract numeric scores from result scores object.
46
+ */
47
+ export function extractNumericScores(scores) {
48
+ if (!scores)
49
+ return {};
50
+ const result = {};
51
+ for (const [key, value] of Object.entries(scores)) {
52
+ if (typeof value === "number" && key !== "overall") {
53
+ result[key] = value;
54
+ }
55
+ }
56
+ return result;
57
+ }
58
+ /**
59
+ * Count total issues from various result formats.
60
+ */
61
+ export function countTotalIssues(issues) {
62
+ if (Array.isArray(issues))
63
+ return issues.length;
64
+ if (issues && typeof issues === "object") {
65
+ return Object.values(issues)
66
+ .flatMap((v) => (Array.isArray(v) ? v : []))
67
+ .length;
68
+ }
69
+ return 0;
70
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Types and constants for the audit command.
3
+ */
4
+ /**
5
+ * Issue type for filtering.
6
+ */
7
+ export interface IssueLike {
8
+ id?: string;
9
+ title?: string;
10
+ severity?: string;
11
+ category?: string;
12
+ description?: string;
13
+ recommendation?: string;
14
+ recommended_fix?: string;
15
+ wcag_reference?: string;
16
+ selector?: string;
17
+ }
18
+ export interface AuditCommandOptions {
19
+ url?: string;
20
+ repo?: string;
21
+ storybook?: string;
22
+ routes?: string;
23
+ authProfile?: string;
24
+ mode?: "basic" | "standard" | "deep";
25
+ wait?: boolean;
26
+ timeout?: number;
27
+ interval?: number;
28
+ format?: string;
29
+ json?: boolean;
30
+ output?: string;
31
+ groupBy?: "severity" | "category" | "route";
32
+ severity?: string;
33
+ category?: string;
34
+ failOn?: "error" | "warning" | "info" | "none";
35
+ threshold?: number;
36
+ maxNewErrors?: number;
37
+ maxNewWarnings?: number;
38
+ failOnExisting?: boolean;
39
+ bypassLabels?: string;
40
+ baseline?: string;
41
+ interactive?: boolean;
42
+ saveTrace?: boolean;
43
+ saveHar?: boolean;
44
+ screenshots?: boolean;
45
+ domSnapshots?: boolean;
46
+ concurrency?: number;
47
+ cache?: boolean;
48
+ uploadArtifacts?: boolean;
49
+ jobId?: string;
50
+ incremental?: boolean;
51
+ baseBranch?: string;
52
+ budget?: "quick" | "standard" | "full";
53
+ policy?: string;
54
+ workspace?: string;
55
+ allWorkspaces?: boolean;
56
+ parallel?: boolean;
57
+ detectMatrix?: boolean;
58
+ noCache?: boolean;
59
+ cacheDir?: string;
60
+ jsonLogs?: boolean;
61
+ explain?: boolean;
62
+ strict?: boolean;
63
+ continueOnError?: boolean;
64
+ base?: string;
65
+ quiet?: boolean;
66
+ machine?: boolean;
67
+ dashboard?: boolean;
68
+ }
69
+ /**
70
+ * Artifact manifest structure.
71
+ */
72
+ export interface ArtifactManifest {
73
+ job_id: string;
74
+ timestamp: string;
75
+ files: string[];
76
+ audit_url?: string;
77
+ issue_count: {
78
+ error: number;
79
+ warning: number;
80
+ info: number;
81
+ };
82
+ exit_code: number;
83
+ }
84
+ /** Artifact directory */
85
+ export declare const ARTIFACTS_DIR = ".vertaaux/artifacts";
86
+ /** CLI version for policy version requirements (read from package.json) */
87
+ export declare const CLI_VERSION: string;
88
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/audit/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAElC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAG5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IAGvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yBAAyB;AACzB,eAAO,MAAM,aAAa,wBAAwB,CAAC;AAEnD,2EAA2E;AAC3E,eAAO,MAAM,WAAW,QAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Types and constants for the audit command.
3
+ */
4
+ import { getVersion } from "../../ui/banner.js";
5
+ /** Artifact directory */
6
+ export const ARTIFACTS_DIR = ".vertaaux/artifacts";
7
+ /** CLI version for policy version requirements (read from package.json) */
8
+ export const CLI_VERSION = getVersion();
@@ -1,61 +1,3 @@
1
- /**
2
- * Audit command for VertaaUX CLI.
3
- *
4
- * Runs UX and accessibility audits on web pages.
5
- * Supports various targets, output formats, and CI integration.
6
- */
7
- import { Command } from "commander";
8
- export interface AuditCommandOptions {
9
- url?: string;
10
- repo?: string;
11
- storybook?: string;
12
- routes?: string;
13
- authProfile?: string;
14
- mode?: "basic" | "standard" | "deep";
15
- wait?: boolean;
16
- timeout?: number;
17
- interval?: number;
18
- format?: string;
19
- json?: boolean;
20
- output?: string;
21
- groupBy?: "severity" | "category" | "route";
22
- severity?: string;
23
- category?: string;
24
- failOn?: "error" | "warning" | "info" | "none";
25
- threshold?: number;
26
- maxNewErrors?: number;
27
- maxNewWarnings?: number;
28
- failOnExisting?: boolean;
29
- bypassLabels?: string;
30
- baseline?: string;
31
- interactive?: boolean;
32
- saveTrace?: boolean;
33
- saveHar?: boolean;
34
- screenshots?: boolean;
35
- domSnapshots?: boolean;
36
- concurrency?: number;
37
- cache?: boolean;
38
- uploadArtifacts?: boolean;
39
- jobId?: string;
40
- incremental?: boolean;
41
- baseBranch?: string;
42
- budget?: "quick" | "standard" | "full";
43
- policy?: string;
44
- workspace?: string;
45
- allWorkspaces?: boolean;
46
- parallel?: boolean;
47
- detectMatrix?: boolean;
48
- noCache?: boolean;
49
- cacheDir?: string;
50
- jsonLogs?: boolean;
51
- explain?: boolean;
52
- base?: string;
53
- quiet?: boolean;
54
- machine?: boolean;
55
- dashboard?: boolean;
56
- }
57
- /**
58
- * Register the audit command with the Commander program.
59
- */
60
- export declare function registerAuditCommand(program: Command): void;
1
+ export { registerAuditCommand } from "./audit/index.js";
2
+ export type { AuditCommandOptions } from "./audit/types.js";
61
3
  //# sourceMappingURL=audit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,MAAM,WAAW,mBAAmB;IAElC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAG5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IAGvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAw5BD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmT3D"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}