@vertaaux/cli 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/MIGRATION.md +239 -0
  3. package/README.md +62 -17
  4. package/dist/app/interactive-app.d.ts +103 -0
  5. package/dist/app/interactive-app.d.ts.map +1 -0
  6. package/dist/app/interactive-app.js +328 -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 +166 -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 +415 -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 +46 -0
  37. package/dist/auth/ci-token.d.ts +8 -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 +11 -0
  49. package/dist/commands/a11y.d.ts.map +1 -0
  50. package/dist/commands/a11y.js +149 -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 +589 -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 +129 -0
  69. package/dist/commands/audit/policy.d.ts +27 -0
  70. package/dist/commands/audit/policy.d.ts.map +1 -0
  71. package/dist/commands/audit/policy.js +147 -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 +89 -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 -1097
  81. package/dist/commands/baseline.d.ts +2 -0
  82. package/dist/commands/baseline.d.ts.map +1 -1
  83. package/dist/commands/baseline.js +221 -123
  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 +127 -62
  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 +288 -181
  90. package/dist/commands/diff.d.ts +7 -0
  91. package/dist/commands/diff.d.ts.map +1 -1
  92. package/dist/commands/diff.js +181 -143
  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 +135 -77
  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 +166 -19
  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 +242 -156
  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 +154 -90
  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 +263 -92
  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 +160 -98
  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 +270 -125
  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 +128 -74
  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 +180 -83
  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 +207 -82
  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/config/schema.d.ts +4 -0
  148. package/dist/config/schema.d.ts.map +1 -1
  149. package/dist/index.d.ts +3 -2
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +127 -991
  152. package/dist/interactive/fix-wizard.d.ts +3 -0
  153. package/dist/interactive/fix-wizard.d.ts.map +1 -1
  154. package/dist/interactive/fix-wizard.js +130 -112
  155. package/dist/interactive/init-wizard.d.ts +3 -1
  156. package/dist/interactive/init-wizard.d.ts.map +1 -1
  157. package/dist/interactive/init-wizard.js +207 -138
  158. package/dist/interactive/prompts.d.ts +7 -3
  159. package/dist/interactive/prompts.d.ts.map +1 -1
  160. package/dist/interactive/prompts.js +44 -23
  161. package/dist/output/envelope.d.ts +9 -0
  162. package/dist/output/envelope.d.ts.map +1 -1
  163. package/dist/output/envelope.js +37 -3
  164. package/dist/output/factory.d.ts +2 -1
  165. package/dist/output/factory.d.ts.map +1 -1
  166. package/dist/output/html.d.ts +2 -1
  167. package/dist/output/html.d.ts.map +1 -1
  168. package/dist/output/html.js +3 -2
  169. package/dist/output/human.d.ts +2 -1
  170. package/dist/output/human.d.ts.map +1 -1
  171. package/dist/output/human.js +3 -2
  172. package/dist/output/json.d.ts +2 -1
  173. package/dist/output/json.d.ts.map +1 -1
  174. package/dist/output/junit.d.ts +2 -1
  175. package/dist/output/junit.d.ts.map +1 -1
  176. package/dist/output/sarif.d.ts +2 -1
  177. package/dist/output/sarif.d.ts.map +1 -1
  178. package/dist/policy/schema.d.ts +137 -0
  179. package/dist/policy/schema.d.ts.map +1 -1
  180. package/dist/policy/schema.js +107 -0
  181. package/dist/prompts/command-catalog.js +9 -9
  182. package/dist/types.d.ts +74 -0
  183. package/dist/types.d.ts.map +1 -0
  184. package/dist/types.js +5 -0
  185. package/dist/ui/banner.d.ts +34 -0
  186. package/dist/ui/banner.d.ts.map +1 -1
  187. package/dist/ui/banner.js +97 -5
  188. package/dist/ui/diagnostics.d.ts +9 -4
  189. package/dist/ui/diagnostics.d.ts.map +1 -1
  190. package/dist/ui/diagnostics.js +32 -82
  191. package/dist/ui/strings.d.ts +373 -0
  192. package/dist/ui/strings.d.ts.map +1 -0
  193. package/dist/ui/strings.js +499 -0
  194. package/dist/ui/table.d.ts +0 -2
  195. package/dist/ui/table.d.ts.map +1 -1
  196. package/dist/ui/table.js +3 -4
  197. package/dist/utils/api-client.d.ts +46 -0
  198. package/dist/utils/api-client.d.ts.map +1 -0
  199. package/dist/utils/api-client.js +170 -0
  200. package/dist/utils/client.d.ts +29 -18
  201. package/dist/utils/client.d.ts.map +1 -1
  202. package/dist/utils/client.js +104 -12
  203. package/dist/utils/formatters.d.ts +38 -0
  204. package/dist/utils/formatters.d.ts.map +1 -0
  205. package/dist/utils/formatters.js +277 -0
  206. package/dist/utils/root-args.d.ts +12 -0
  207. package/dist/utils/root-args.d.ts.map +1 -0
  208. package/dist/utils/root-args.js +44 -0
  209. package/dist/utils/stdin.d.ts +7 -0
  210. package/dist/utils/stdin.d.ts.map +1 -1
  211. package/dist/utils/stdin.js +32 -2
  212. package/dist/utils/url-classify.d.ts.map +1 -1
  213. package/dist/utils/url-classify.js +24 -3
  214. package/node_modules/@vertaaux/tui/dist/index.cjs +1216 -27
  215. package/node_modules/@vertaaux/tui/dist/index.cjs.map +1 -1
  216. package/node_modules/@vertaaux/tui/dist/index.d.cts +361 -4
  217. package/node_modules/@vertaaux/tui/dist/index.d.ts +361 -4
  218. package/node_modules/@vertaaux/tui/dist/index.js +1189 -27
  219. package/node_modules/@vertaaux/tui/dist/index.js.map +1 -1
  220. package/node_modules/@vertaaux/tui/package.json +2 -3
  221. package/node_modules/chalk/license +9 -0
  222. package/node_modules/chalk/package.json +83 -0
  223. package/node_modules/chalk/readme.md +297 -0
  224. package/node_modules/chalk/source/index.d.ts +325 -0
  225. package/node_modules/chalk/source/index.js +225 -0
  226. package/node_modules/chalk/source/utilities.js +33 -0
  227. package/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
  228. package/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
  229. package/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
  230. package/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
  231. package/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
  232. package/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
  233. package/package.json +20 -5
  234. package/dist/commands/client.d.ts +0 -14
  235. package/dist/commands/client.d.ts.map +0 -1
  236. package/dist/commands/client.js +0 -362
  237. package/dist/commands/drift.d.ts +0 -15
  238. package/dist/commands/drift.d.ts.map +0 -1
  239. package/dist/commands/drift.js +0 -309
  240. package/dist/commands/protect.d.ts +0 -16
  241. package/dist/commands/protect.d.ts.map +0 -1
  242. package/dist/commands/protect.js +0 -323
  243. package/dist/commands/report.d.ts +0 -15
  244. package/dist/commands/report.d.ts.map +0 -1
  245. package/dist/commands/report.js +0 -214
  246. package/dist/policy/sync.d.ts +0 -67
  247. package/dist/policy/sync.d.ts.map +0 -1
  248. package/dist/policy/sync.js +0 -147
@@ -4,181 +4,250 @@
4
4
  * Guides users through project setup with sensible defaults.
5
5
  */
6
6
  import { select, confirm, input } from "@inquirer/prompts";
7
+ import { writeOutput } from "../output/envelope.js";
7
8
  /**
8
9
  * Run the interactive init wizard.
9
10
  *
10
11
  * Guides user through configuration options and returns the chosen settings.
11
12
  *
13
+ * @param renderer - Optional renderer to suspend/resume during prompts
12
14
  * @returns Configuration object for writing to file
13
15
  */
14
- export async function runInitWizard() {
15
- console.log("\n Welcome to VertaaUX!\n");
16
- console.log(" This wizard will help you configure VertaaUX for your project.\n");
16
+ export async function runInitWizard(renderer) {
17
+ writeOutput("\n Welcome to VertaaUX!\n\n");
18
+ writeOutput(" This wizard will help you configure VertaaUX for your project.\n\n");
17
19
  // Step 1: Default URL
18
- const defaultUrl = await input({
19
- message: "What URL would you like to audit? (optional)",
20
- default: "",
21
- validate: (value) => {
22
- if (!value)
23
- return true; // Optional
24
- try {
25
- new URL(value);
26
- return true;
27
- }
28
- catch {
29
- return "Please enter a valid URL (e.g., https://example.com)";
30
- }
31
- },
32
- });
33
- // Step 2: Audit mode
34
- const mode = await select({
35
- message: "Select audit mode:",
36
- choices: [
37
- {
38
- name: "Basic - Quick scan for common issues",
39
- value: "basic",
40
- description: "Fastest, covers essential accessibility and UX checks",
41
- },
42
- {
43
- name: "Standard - Comprehensive analysis",
44
- value: "standard",
45
- description: "Balanced depth and speed, recommended for most projects",
46
- },
47
- {
48
- name: "Deep - Thorough multi-page audit",
49
- value: "deep",
50
- description: "Most thorough, includes page flow and cross-page issues",
20
+ renderer?.suspend();
21
+ let defaultUrl;
22
+ try {
23
+ defaultUrl = await input({
24
+ message: "What URL would you like to audit? (optional)",
25
+ default: "",
26
+ validate: (value) => {
27
+ if (!value)
28
+ return true; // Optional
29
+ try {
30
+ new URL(value);
31
+ return true;
32
+ }
33
+ catch {
34
+ return "Please enter a valid URL (e.g., https://example.com)";
35
+ }
51
36
  },
52
- ],
53
- default: "standard",
54
- });
55
- // Step 3: Configure baseline rules
56
- const configureBaseline = await confirm({
57
- message: "Configure baseline rules? (controls CI failure conditions)",
58
- default: true,
59
- });
60
- let failOn = "error";
61
- let threshold = 0;
62
- let autoUpdateBaseline = false;
63
- if (configureBaseline) {
64
- // Step 3a: Fail-on severity
65
- failOn = await select({
66
- message: "Fail CI build when issues of this severity are found:",
37
+ }, { output: process.stderr });
38
+ }
39
+ finally {
40
+ renderer?.resume();
41
+ }
42
+ // Step 2: Audit mode
43
+ renderer?.suspend();
44
+ let mode;
45
+ try {
46
+ mode = await select({
47
+ message: "Select audit mode:",
67
48
  choices: [
68
49
  {
69
- name: "Error - Only critical/error severity",
70
- value: "error",
71
- description: "Strictest, blocks on critical issues only",
72
- },
73
- {
74
- name: "Warning - Warnings and above",
75
- value: "warning",
76
- description: "Blocks on warning and error severity",
50
+ name: "Basic - Quick scan for common issues",
51
+ value: "basic",
52
+ description: "Fastest, covers essential accessibility and UX checks",
77
53
  },
78
54
  {
79
- name: "Info - Any issues",
80
- value: "info",
81
- description: "Most strict, blocks on all issues",
55
+ name: "Standard - Comprehensive analysis",
56
+ value: "standard",
57
+ description: "Balanced depth and speed, recommended for most projects",
82
58
  },
83
59
  {
84
- name: "None - Never fail on issues",
85
- value: "none",
86
- description: "Report only, never fail CI",
60
+ name: "Deep - Thorough multi-page audit",
61
+ value: "deep",
62
+ description: "Most thorough, includes page flow and cross-page issues",
87
63
  },
88
64
  ],
89
- default: "error",
90
- });
65
+ default: "standard",
66
+ }, { output: process.stderr });
67
+ }
68
+ finally {
69
+ renderer?.resume();
70
+ }
71
+ // Step 3: Configure baseline rules
72
+ renderer?.suspend();
73
+ let configureBaseline;
74
+ try {
75
+ configureBaseline = await confirm({
76
+ message: "Configure baseline rules? (controls CI failure conditions)",
77
+ default: true,
78
+ }, { output: process.stderr });
79
+ }
80
+ finally {
81
+ renderer?.resume();
82
+ }
83
+ let failOn = "error";
84
+ let threshold = 0;
85
+ let autoUpdateBaseline = false;
86
+ if (configureBaseline) {
87
+ // Step 3a: Fail-on severity
88
+ renderer?.suspend();
89
+ try {
90
+ failOn = await select({
91
+ message: "Fail CI build when issues of this severity are found:",
92
+ choices: [
93
+ {
94
+ name: "Error - Only critical/error severity",
95
+ value: "error",
96
+ description: "Strictest, blocks on critical issues only",
97
+ },
98
+ {
99
+ name: "Warning - Warnings and above",
100
+ value: "warning",
101
+ description: "Blocks on warning and error severity",
102
+ },
103
+ {
104
+ name: "Info - Any issues",
105
+ value: "info",
106
+ description: "Most strict, blocks on all issues",
107
+ },
108
+ {
109
+ name: "None - Never fail on issues",
110
+ value: "none",
111
+ description: "Report only, never fail CI",
112
+ },
113
+ ],
114
+ default: "error",
115
+ }, { output: process.stderr });
116
+ }
117
+ finally {
118
+ renderer?.resume();
119
+ }
91
120
  // Step 3b: Score threshold
92
- const setThreshold = await confirm({
93
- message: "Set a minimum score threshold?",
94
- default: false,
95
- });
121
+ renderer?.suspend();
122
+ let setThreshold;
123
+ try {
124
+ setThreshold = await confirm({
125
+ message: "Set a minimum score threshold?",
126
+ default: false,
127
+ }, { output: process.stderr });
128
+ }
129
+ finally {
130
+ renderer?.resume();
131
+ }
96
132
  if (setThreshold) {
97
- const thresholdStr = await input({
98
- message: "Minimum passing score (0-100):",
99
- default: "70",
100
- validate: (value) => {
101
- const num = parseInt(value, 10);
102
- if (isNaN(num) || num < 0 || num > 100) {
103
- return "Please enter a number between 0 and 100";
104
- }
105
- return true;
106
- },
107
- });
133
+ renderer?.suspend();
134
+ let thresholdStr;
135
+ try {
136
+ thresholdStr = await input({
137
+ message: "Minimum passing score (0-100):",
138
+ default: "70",
139
+ validate: (value) => {
140
+ const num = parseInt(value, 10);
141
+ if (isNaN(num) || num < 0 || num > 100) {
142
+ return "Please enter a number between 0 and 100";
143
+ }
144
+ return true;
145
+ },
146
+ }, { output: process.stderr });
147
+ }
148
+ finally {
149
+ renderer?.resume();
150
+ }
108
151
  threshold = parseInt(thresholdStr, 10);
109
152
  }
110
153
  // Step 3c: Auto-update baseline
111
- autoUpdateBaseline = await confirm({
112
- message: "Auto-update baseline when issues are fixed on main branch?",
113
- default: false,
114
- });
154
+ renderer?.suspend();
155
+ try {
156
+ autoUpdateBaseline = await confirm({
157
+ message: "Auto-update baseline when issues are fixed on main branch?",
158
+ default: false,
159
+ }, { output: process.stderr });
160
+ }
161
+ finally {
162
+ renderer?.resume();
163
+ }
115
164
  }
116
165
  // Step 4: CI integration
117
- const configureCI = await confirm({
118
- message: "Configure CI integration?",
119
- default: true,
120
- });
166
+ renderer?.suspend();
167
+ let configureCI;
168
+ try {
169
+ configureCI = await confirm({
170
+ message: "Configure CI integration?",
171
+ default: true,
172
+ }, { output: process.stderr });
173
+ }
174
+ finally {
175
+ renderer?.resume();
176
+ }
121
177
  let ciProvider = "none";
122
178
  if (configureCI) {
123
- ciProvider = await select({
124
- message: "Which CI provider?",
125
- choices: [
126
- {
127
- name: "GitHub Actions",
128
- value: "github",
129
- description: "Creates .github/workflows/vertaa.yml with SARIF upload",
130
- },
131
- {
132
- name: "GitLab CI",
133
- value: "gitlab",
134
- description: "Creates .gitlab-ci-vertaa.yml with JUnit and Code Quality reports",
135
- },
136
- {
137
- name: "CircleCI",
138
- value: "circleci",
139
- description: "Creates .circleci/config-vertaa.yml with test results",
140
- },
141
- {
142
- name: "Azure DevOps",
143
- value: "azure",
144
- description: "Creates azure-pipelines-vertaa.yml with Advanced Security",
145
- },
146
- {
147
- name: "Jenkins",
148
- value: "jenkins",
149
- description: "Creates Jenkinsfile-vertaa with Warnings NG plugin",
150
- },
151
- {
152
- name: "None - Skip CI setup",
153
- value: "none",
154
- },
155
- ],
156
- default: "github",
157
- });
179
+ renderer?.suspend();
180
+ try {
181
+ ciProvider = await select({
182
+ message: "Which CI provider?",
183
+ choices: [
184
+ {
185
+ name: "GitHub Actions",
186
+ value: "github",
187
+ description: "Creates .github/workflows/vertaa.yml with SARIF upload",
188
+ },
189
+ {
190
+ name: "GitLab CI",
191
+ value: "gitlab",
192
+ description: "Creates .gitlab-ci-vertaa.yml with JUnit and Code Quality reports",
193
+ },
194
+ {
195
+ name: "CircleCI",
196
+ value: "circleci",
197
+ description: "Creates .circleci/config-vertaa.yml with test results",
198
+ },
199
+ {
200
+ name: "Azure DevOps",
201
+ value: "azure",
202
+ description: "Creates azure-pipelines-vertaa.yml with Advanced Security",
203
+ },
204
+ {
205
+ name: "Jenkins",
206
+ value: "jenkins",
207
+ description: "Creates Jenkinsfile-vertaa with Warnings NG plugin",
208
+ },
209
+ {
210
+ name: "None - Skip CI setup",
211
+ value: "none",
212
+ },
213
+ ],
214
+ default: "github",
215
+ }, { output: process.stderr });
216
+ }
217
+ finally {
218
+ renderer?.resume();
219
+ }
158
220
  }
159
221
  // Step 5: Summary
160
- console.log("\n Configuration Summary:");
161
- console.log(" ----------------------");
222
+ writeOutput("\n Configuration Summary:\n");
223
+ writeOutput(" ----------------------\n");
162
224
  if (defaultUrl) {
163
- console.log(` URL: ${defaultUrl}`);
225
+ writeOutput(` URL: ${defaultUrl}\n`);
164
226
  }
165
- console.log(` Mode: ${mode}`);
166
- console.log(` Fail on: ${failOn}`);
227
+ writeOutput(` Mode: ${mode}\n`);
228
+ writeOutput(` Fail on: ${failOn}\n`);
167
229
  if (threshold > 0) {
168
- console.log(` Threshold: ${threshold}`);
230
+ writeOutput(` Threshold: ${threshold}\n`);
169
231
  }
170
232
  if (autoUpdateBaseline) {
171
- console.log(` Auto-update: enabled`);
233
+ writeOutput(` Auto-update: enabled\n`);
172
234
  }
173
235
  if (ciProvider !== "none") {
174
- console.log(` CI: ${ciProvider}`);
236
+ writeOutput(` CI: ${ciProvider}\n`);
175
237
  }
176
- console.log("");
238
+ writeOutput("\n");
177
239
  // Step 6: Confirm
178
- const create = await confirm({
179
- message: "Create configuration?",
180
- default: true,
181
- });
240
+ renderer?.suspend();
241
+ let create;
242
+ try {
243
+ create = await confirm({
244
+ message: "Create configuration?",
245
+ default: true,
246
+ }, { output: process.stderr });
247
+ }
248
+ finally {
249
+ renderer?.resume();
250
+ }
182
251
  if (!create) {
183
252
  throw new Error("Configuration cancelled by user");
184
253
  }
@@ -7,6 +7,7 @@
7
7
  * - Enter to confirm
8
8
  * - Space to select (multi-select)
9
9
  */
10
+ import type { Renderer } from "@vertaaux/tui";
10
11
  /**
11
12
  * Choice option for select prompts.
12
13
  */
@@ -27,26 +28,29 @@ export interface SelectChoice<T = string> {
27
28
  *
28
29
  * @param message - Prompt message
29
30
  * @param choices - List of options
31
+ * @param renderer - Optional renderer to suspend during prompt
30
32
  * @returns Selected value
31
33
  */
32
- export declare function selectAction<T = string>(message: string, choices: SelectChoice<T>[]): Promise<T>;
34
+ export declare function selectAction<T = string>(message: string, choices: SelectChoice<T>[], renderer?: Renderer): Promise<T>;
33
35
  /**
34
36
  * Prompt user for yes/no confirmation.
35
37
  *
36
38
  * @param message - Question to confirm
37
39
  * @param defaultValue - Default value if user just presses Enter
40
+ * @param renderer - Optional renderer to suspend during prompt
38
41
  * @returns true for yes, false for no
39
42
  */
40
- export declare function confirmAction(message: string, defaultValue?: boolean): Promise<boolean>;
43
+ export declare function confirmAction(message: string, defaultValue?: boolean, renderer?: Renderer): Promise<boolean>;
41
44
  /**
42
45
  * Prompt user for text input.
43
46
  *
44
47
  * @param message - Prompt message
45
48
  * @param defaultValue - Optional default value
46
49
  * @param required - Whether input is required (default: false)
50
+ * @param renderer - Optional renderer to suspend during prompt
47
51
  * @returns User input string
48
52
  */
49
- export declare function inputText(message: string, defaultValue?: string, required?: boolean): Promise<string>;
53
+ export declare function inputText(message: string, defaultValue?: string, required?: boolean, renderer?: Renderer): Promise<string>;
50
54
  /**
51
55
  * Check if running in an interactive TTY environment.
52
56
  *
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/interactive/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM;IACtC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,KAAK,EAAE,CAAC,CAAC;IACT,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,MAAM,EAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GACzB,OAAO,CAAC,CAAC,CAAC,CAUZ;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,OAAc,GAC3B,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/interactive/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM;IACtC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,KAAK,EAAE,CAAC,CAAC;IACT,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,MAAM,EAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAC1B,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,OAAc,EAC5B,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,GAAE,OAAe,EACzB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC"}
@@ -15,31 +15,45 @@ import { select, confirm, input } from "@inquirer/prompts";
15
15
  *
16
16
  * @param message - Prompt message
17
17
  * @param choices - List of options
18
+ * @param renderer - Optional renderer to suspend during prompt
18
19
  * @returns Selected value
19
20
  */
20
- export async function selectAction(message, choices) {
21
- return select({
22
- message,
23
- choices: choices.map((c) => ({
24
- name: c.name,
25
- value: c.value,
26
- description: c.description,
27
- disabled: c.disabled,
28
- })),
29
- });
21
+ export async function selectAction(message, choices, renderer) {
22
+ renderer?.suspend();
23
+ try {
24
+ return await select({
25
+ message,
26
+ choices: choices.map((c) => ({
27
+ name: c.name,
28
+ value: c.value,
29
+ description: c.description,
30
+ disabled: c.disabled,
31
+ })),
32
+ }, { output: process.stderr });
33
+ }
34
+ finally {
35
+ renderer?.resume();
36
+ }
30
37
  }
31
38
  /**
32
39
  * Prompt user for yes/no confirmation.
33
40
  *
34
41
  * @param message - Question to confirm
35
42
  * @param defaultValue - Default value if user just presses Enter
43
+ * @param renderer - Optional renderer to suspend during prompt
36
44
  * @returns true for yes, false for no
37
45
  */
38
- export async function confirmAction(message, defaultValue = true) {
39
- return confirm({
40
- message,
41
- default: defaultValue,
42
- });
46
+ export async function confirmAction(message, defaultValue = true, renderer) {
47
+ renderer?.suspend();
48
+ try {
49
+ return await confirm({
50
+ message,
51
+ default: defaultValue,
52
+ }, { output: process.stderr });
53
+ }
54
+ finally {
55
+ renderer?.resume();
56
+ }
43
57
  }
44
58
  /**
45
59
  * Prompt user for text input.
@@ -47,16 +61,23 @@ export async function confirmAction(message, defaultValue = true) {
47
61
  * @param message - Prompt message
48
62
  * @param defaultValue - Optional default value
49
63
  * @param required - Whether input is required (default: false)
64
+ * @param renderer - Optional renderer to suspend during prompt
50
65
  * @returns User input string
51
66
  */
52
- export async function inputText(message, defaultValue, required = false) {
53
- return input({
54
- message,
55
- default: defaultValue,
56
- validate: required
57
- ? (value) => (value.trim() ? true : "This field is required")
58
- : undefined,
59
- });
67
+ export async function inputText(message, defaultValue, required = false, renderer) {
68
+ renderer?.suspend();
69
+ try {
70
+ return await input({
71
+ message,
72
+ default: defaultValue,
73
+ validate: required
74
+ ? (value) => (value.trim() ? true : "This field is required")
75
+ : undefined,
76
+ }, { output: process.stderr });
77
+ }
78
+ finally {
79
+ renderer?.resume();
80
+ }
60
81
  }
61
82
  /**
62
83
  * Check if running in an interactive TTY environment.
@@ -17,5 +17,14 @@ export interface OutputEnvelope<T = unknown> {
17
17
  }
18
18
  export declare function createEnvelope<T>(data: T, command: string): OutputEnvelope<T>;
19
19
  export declare function writeJsonOutput<T>(data: T, command: string): void;
20
+ /** Redirect output helpers to a buffer. Pass null to restore direct terminal writes. */
21
+ export declare function setOutputBuffer(buffer: string[] | null): void;
22
+ /**
23
+ * Write command payloads to stdout so they remain pipeable.
24
+ */
25
+ export declare function writeDataOutput(content: string): void;
26
+ /**
27
+ * Write diagnostics and notices to stderr.
28
+ */
20
29
  export declare function writeOutput(content: string): void;
21
30
  //# sourceMappingURL=envelope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/output/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,CAAC,CAAC;CACT;AA0DD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAU7E;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/output/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,CAAC,CAAC;CACT;AA2DD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAU7E;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQjE;AASD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAE7D;AAUD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
@@ -45,7 +45,8 @@ function redactArgs(argv) {
45
45
  }
46
46
  }
47
47
  if (isSecretArg(arg)) {
48
- continue; // drop entirely (env var leaks like VERTAAUX_API_KEY=...)
48
+ result.push("[REDACTED]");
49
+ continue;
49
50
  }
50
51
  result.push(arg);
51
52
  }
@@ -64,8 +65,41 @@ export function createEnvelope(data, command) {
64
65
  }
65
66
  export function writeJsonOutput(data, command) {
66
67
  const envelope = createEnvelope(data, command);
67
- process.stdout.write(JSON.stringify(envelope, null, 2) + "\n");
68
+ const content = JSON.stringify(envelope, null, 2);
69
+ if (_outputBuffer) {
70
+ _outputBuffer.push(...content.split("\n"));
71
+ }
72
+ else {
73
+ process.stdout.write(content + "\n");
74
+ }
68
75
  }
76
+ /**
77
+ * Output buffer for interactive mode. When set, output helpers append
78
+ * to this buffer instead of writing to the terminal (to avoid garbling
79
+ * the InteractiveApp's alt screen).
80
+ */
81
+ let _outputBuffer = null;
82
+ /** Redirect output helpers to a buffer. Pass null to restore direct terminal writes. */
83
+ export function setOutputBuffer(buffer) {
84
+ _outputBuffer = buffer;
85
+ }
86
+ function writeBuffered(content, writer) {
87
+ if (_outputBuffer) {
88
+ _outputBuffer.push(...content.split("\n"));
89
+ }
90
+ else {
91
+ writer(content + "\n");
92
+ }
93
+ }
94
+ /**
95
+ * Write command payloads to stdout so they remain pipeable.
96
+ */
97
+ export function writeDataOutput(content) {
98
+ writeBuffered(content, (payload) => process.stdout.write(payload));
99
+ }
100
+ /**
101
+ * Write diagnostics and notices to stderr.
102
+ */
69
103
  export function writeOutput(content) {
70
- process.stdout.write(content + "\n");
104
+ writeBuffered(content, (payload) => process.stderr.write(payload));
71
105
  }
@@ -10,6 +10,7 @@ import { type FormatHtmlOptions } from "./html.js";
10
10
  import { type SarifOptions } from "./sarif.js";
11
11
  import { type JunitOptions } from "./junit.js";
12
12
  import { type OutputFormat } from "../utils/detect-env.js";
13
+ import type { AuditScores } from "@vertaaux/sdk";
13
14
  export interface AuditResult {
14
15
  job_id?: string;
15
16
  status?: string;
@@ -19,7 +20,7 @@ export interface AuditResult {
19
20
  created_at?: string;
20
21
  started_at?: string;
21
22
  completed_at?: string;
22
- scores?: Record<string, unknown>;
23
+ scores?: AuditScores | Record<string, unknown>;
23
24
  issues?: unknown;
24
25
  error?: string;
25
26
  analysis_type?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/output/factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE/E,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CACpE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAY,GAAG,MAAe,GAAG,SAAS,CA4B9E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,cAAc,CAAC,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAIR;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/output/factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CACpE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAY,GAAG,MAAe,GAAG,SAAS,CA4B9E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,cAAc,CAAC,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAIR;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -4,6 +4,7 @@
4
4
  * Generates standalone HTML reports with embedded CSS and JS.
5
5
  * Reports are print-friendly and don't require external dependencies.
6
6
  */
7
+ import type { AuditScores } from "@vertaaux/sdk";
7
8
  export interface Issue {
8
9
  id?: string;
9
10
  severity?: string;
@@ -24,7 +25,7 @@ export interface AuditResult {
24
25
  created_at?: string;
25
26
  started_at?: string;
26
27
  completed_at?: string;
27
- scores?: Record<string, unknown>;
28
+ scores?: AuditScores | Record<string, unknown>;
28
29
  issues?: unknown;
29
30
  error?: string;
30
31
  }