@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
package/dist/ui/banner.js CHANGED
@@ -3,10 +3,17 @@
3
3
  *
4
4
  * Displays a compact arrow wedge in teal/mint gradient.
5
5
  * Can be suppressed via --quiet, --no-banner, or non-TTY environments.
6
+ *
7
+ * animateBanner() plays a 3-frame entrance animation in TTY+color mode:
8
+ * Frame 1: dim ghost outline (75ms)
9
+ * Frame 2: normal teal/mint colors (75ms)
10
+ * Frame 3: full lime→cyan gradient (100ms hold)
11
+ * Falls back to static showBanner() when --no-color, NO_COLOR, TERM=dumb,
12
+ * or non-TTY.
6
13
  */
7
- import chalk from "chalk";
14
+ import { colorize, bold, dim, applyGradient, isColorEnabled, isTTY, supportsUnicode, cursor, screen, physicalRows, } from "@vertaaux/tui";
8
15
  import { createRequire } from "module";
9
- import { isTTY, shouldUseColor } from "../utils/detect-env.js";
16
+ import { shouldUseColor } from "../utils/detect-env.js";
10
17
  // For JSON imports in ESM
11
18
  const require = createRequire(import.meta.url);
12
19
  // Arrow-mark ASCII art (compact 5-line wedge matching brand)
@@ -19,6 +26,90 @@ const ARROW_MARK = [
19
26
  ];
20
27
  const TEAL = "#5EE4C4";
21
28
  const MINT = "#90EECE";
29
+ /** Simple sleep helper for animation timing */
30
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
31
+ // ── Frame builders (exported for testability) ────────────────────
32
+ /**
33
+ * Frame 1: ghost/dim outline — all lines wrapped in dim().
34
+ * Structure: 5 content lines + "\n\n"
35
+ */
36
+ export function buildFrame1(version, cwd) {
37
+ const lines = [
38
+ `${dim(ARROW_MARK[0])} ${dim(`VertaaUX v${version}`)}`,
39
+ `${dim(ARROW_MARK[1])} ${dim(cwd)}`,
40
+ `${dim(ARROW_MARK[2])}`,
41
+ `${dim(ARROW_MARK[3])}`,
42
+ `${dim(ARROW_MARK[4])}`,
43
+ ];
44
+ return lines.join("\n") + "\n\n";
45
+ }
46
+ /**
47
+ * Frame 2: normal colors — identical to current showBanner() color branch.
48
+ * TEAL art, MINT bold VertaaUX, dim cwd.
49
+ * Structure: 5 content lines + "\n\n"
50
+ */
51
+ export function buildFrame2(version, cwd) {
52
+ const logo = ARROW_MARK.map((line) => colorize(line, TEAL));
53
+ const lines = [
54
+ `${logo[0]} ${bold(colorize("VertaaUX", MINT))} v${version}`,
55
+ `${logo[1]} ${dim(cwd)}`,
56
+ `${logo[2]}`,
57
+ `${logo[3]}`,
58
+ `${logo[4]}`,
59
+ ];
60
+ return lines.join("\n") + "\n\n";
61
+ }
62
+ /**
63
+ * Frame 3: full gradient — ARROW_MARK + "VertaaUX" with applyGradient(), dim cwd.
64
+ * Structure: 5 content lines + "\n\n"
65
+ */
66
+ export function buildFrame3(version, cwd) {
67
+ const logo = ARROW_MARK.map((line) => applyGradient(line));
68
+ const lines = [
69
+ `${logo[0]} ${bold(applyGradient("VertaaUX"))} v${version}`,
70
+ `${logo[1]} ${dim(cwd)}`,
71
+ `${logo[2]}`,
72
+ `${logo[3]}`,
73
+ `${logo[4]}`,
74
+ ];
75
+ return lines.join("\n") + "\n\n";
76
+ }
77
+ // ── Animated banner ──────────────────────────────────────────────
78
+ /**
79
+ * Show the arrow-mark banner with a 3-frame entrance animation.
80
+ *
81
+ * Animation plays only in TTY + color + unicode environments.
82
+ * Falls back to static showBanner() otherwise.
83
+ *
84
+ * All output goes to process.stderr (stdout reserved for --format json).
85
+ *
86
+ * @param options - Banner display options
87
+ */
88
+ export async function animateBanner(options) {
89
+ const { version, quiet = false, noBanner = false } = options;
90
+ // Static fallback: suppressed modes, non-TTY, no-color, dumb terminal
91
+ if (quiet || noBanner || !isTTY() || !isColorEnabled() || !supportsUnicode()) {
92
+ showBanner(options);
93
+ return;
94
+ }
95
+ const cwd = process.cwd();
96
+ const termWidth = process.stderr.columns || 80;
97
+ // Frame 1: dim ghost
98
+ const f1 = buildFrame1(version, cwd);
99
+ process.stderr.write(f1);
100
+ await sleep(75);
101
+ // Frame 2: normal colors (overwrite in-place)
102
+ const rows1 = physicalRows(f1, termWidth);
103
+ const f2 = buildFrame2(version, cwd);
104
+ process.stderr.write(cursor.up(rows1) + screen.clearDown + f2);
105
+ await sleep(75);
106
+ // Frame 3: full gradient (overwrite in-place, hold 100ms)
107
+ const rows2 = physicalRows(f2, termWidth);
108
+ const f3 = buildFrame3(version, cwd);
109
+ process.stderr.write(cursor.up(rows2) + screen.clearDown + f3);
110
+ await sleep(100);
111
+ }
112
+ // ── Static banner ────────────────────────────────────────────────
22
113
  /**
23
114
  * Show the arrow-mark banner with version and working directory.
24
115
  *
@@ -38,10 +129,10 @@ export function showBanner(options) {
38
129
  const useColor = shouldUseColor();
39
130
  const cwd = process.cwd();
40
131
  if (useColor) {
41
- const logo = ARROW_MARK.map((line) => chalk.hex(TEAL)(line));
132
+ const logo = ARROW_MARK.map((line) => colorize(line, TEAL));
42
133
  const lines = [
43
- `${logo[0]} ${chalk.hex(MINT).bold("VertaaUX")} v${version}`,
44
- `${logo[1]} ${chalk.dim(cwd)}`,
134
+ `${logo[0]} ${bold(colorize("VertaaUX", MINT))} v${version}`,
135
+ `${logo[1]} ${dim(cwd)}`,
45
136
  `${logo[2]}`,
46
137
  `${logo[3]}`,
47
138
  `${logo[4]}`,
@@ -59,6 +150,7 @@ export function showBanner(options) {
59
150
  process.stderr.write(lines.join("\n") + "\n\n");
60
151
  }
61
152
  }
153
+ // ── Version helper ───────────────────────────────────────────────
62
154
  /**
63
155
  * Get version from package.json.
64
156
  * Falls back to "0.0.0" if unable to read.
@@ -6,6 +6,9 @@
6
6
  *
7
7
  * Integrates with Commander's configureOutput({ outputError }) hook
8
8
  * to intercept and restyle all validation and argument errors.
9
+ *
10
+ * Delegates to renderError/renderWarning from @vertaaux/tui for
11
+ * consistent branded output across all error surfaces.
9
12
  */
10
13
  export interface ValidationErrorOptions {
11
14
  flag: string;
@@ -19,8 +22,10 @@ export interface ValidationErrorOptions {
19
22
  /**
20
23
  * Format a validation error with branded styling.
21
24
  *
22
- * Rich mode (TTY + color): Box-drawn frame with Unicode chars, brand colors.
23
- * Plain mode (non-TTY/NO_COLOR/CI): Structured indented text, no decorations.
25
+ * Delegates to renderError() from @vertaaux/tui for the box border,
26
+ * then appends flag/value details as context lines.
27
+ *
28
+ * Plain mode is evaluated at call time (isPlainMode() inside renderError).
24
29
  */
25
30
  export declare function formatValidationError(opts: ValidationErrorOptions): string;
26
31
  /**
@@ -28,12 +33,12 @@ export declare function formatValidationError(opts: ValidationErrorOptions): str
28
33
  *
29
34
  * Commander passes raw error strings to configureOutput({ outputError }).
30
35
  * This function parses them to extract flag/value information and applies
31
- * branded formatting.
36
+ * branded formatting via renderError().
32
37
  *
33
38
  * InvalidArgumentError pattern:
34
39
  * "error: option '--flag <arg>' argument 'value' is invalid. Detail"
35
40
  *
36
- * Other Commander errors (missing required, etc.) get branded prefix.
41
+ * Other Commander errors (missing required, etc.) get renderError treatment.
37
42
  */
38
43
  export declare function formatCommanderError(rawMessage: string): string;
39
44
  //# sourceMappingURL=diagnostics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/ui/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoCH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAK1E;AA8ED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA+C/D"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/ui/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAgC1E;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAsC/D"}
@@ -6,96 +6,54 @@
6
6
  *
7
7
  * Integrates with Commander's configureOutput({ outputError }) hook
8
8
  * to intercept and restyle all validation and argument errors.
9
+ *
10
+ * Delegates to renderError/renderWarning from @vertaaux/tui for
11
+ * consistent branded output across all error surfaces.
9
12
  */
10
- import chalk from "chalk";
11
- import { shouldUseColor, isTTY, getTerminalWidth, } from "../utils/detect-env.js";
12
- // ---------------------------------------------------------------------------
13
- // Brand colors (matching banner.ts gradient)
14
- // ---------------------------------------------------------------------------
15
- const BRAND_ACCENT = "#78FFB4"; // Lime
16
- const ERROR_COLOR = "#FF6B6B"; // Red
17
- const HINT_COLOR = "#78FFB4"; // Brand lime for hints/suggestions
13
+ import { dim, isPlainMode, renderError, } from "@vertaaux/tui";
18
14
  // ---------------------------------------------------------------------------
19
15
  // Terminal capability detection
20
16
  // ---------------------------------------------------------------------------
21
17
  /**
22
18
  * Determine if box-drawing characters and colors can be used.
23
- * Returns false for dumb terminals, NO_COLOR, non-TTY, and CI.
19
+ * Returns false in plain mode (ASCII-only output).
24
20
  */
25
21
  function canUseBoxDrawing() {
26
- if (process.env.TERM === "dumb")
27
- return false;
28
- if (!shouldUseColor())
29
- return false;
30
- if (!isTTY())
31
- return false;
32
- return true;
22
+ return !isPlainMode();
33
23
  }
34
24
  /**
35
25
  * Format a validation error with branded styling.
36
26
  *
37
- * Rich mode (TTY + color): Box-drawn frame with Unicode chars, brand colors.
38
- * Plain mode (non-TTY/NO_COLOR/CI): Structured indented text, no decorations.
27
+ * Delegates to renderError() from @vertaaux/tui for the box border,
28
+ * then appends flag/value details as context lines.
29
+ *
30
+ * Plain mode is evaluated at call time (isPlainMode() inside renderError).
39
31
  */
40
32
  export function formatValidationError(opts) {
41
- if (canUseBoxDrawing()) {
42
- return boxDrawnError(opts);
43
- }
44
- return plainTextError(opts);
45
- }
46
- /**
47
- * Rich box-drawn error frame for TTY terminals with color support.
48
- */
49
- function boxDrawnError(opts) {
50
- const width = Math.min(getTerminalWidth(), 72);
51
- const prefix = chalk.hex(BRAND_ACCENT).bold("vertaa");
52
- const border = chalk.dim(" " + "\u2500".repeat(width - 4));
53
- const pipe = chalk.dim(" \u2502");
54
- const lines = [
55
- `${prefix} ${chalk.hex(ERROR_COLOR).bold("error")}: ${opts.message}`,
56
- border,
57
- `${pipe} ${chalk.dim("flag:")} --${opts.flag}`,
58
- `${pipe} ${chalk.dim("value:")} ${chalk.yellow(opts.value)}`,
33
+ // Build a rich context string with flag + value details
34
+ const contextParts = [
35
+ `flag: --${opts.flag}`,
36
+ `value: ${opts.value}`,
59
37
  ];
60
38
  if (opts.suggestion) {
61
- lines.push(pipe);
62
- lines.push(`${pipe} ${chalk.hex(HINT_COLOR)("hint:")} Did you mean "${opts.suggestion}"?`);
39
+ contextParts.push(`hint: Did you mean "${opts.suggestion}"?`);
63
40
  }
64
41
  if (opts.validValues && opts.validValues.length > 0) {
65
- lines.push(`${pipe} ${chalk.dim("valid:")} ${chalk.dim(opts.validValues.join(", "))}`);
42
+ contextParts.push(`valid: ${opts.validValues.join(", ")}`);
66
43
  }
67
44
  if (opts.hint) {
68
- lines.push(pipe);
69
- lines.push(`${pipe} ${chalk.dim(opts.hint)}`);
45
+ contextParts.push(opts.hint);
70
46
  }
71
- lines.push(border);
47
+ const context = contextParts.join("\n");
48
+ const base = renderError({
49
+ message: opts.message,
50
+ context,
51
+ suggestion: "vertaa <command> --help for all options",
52
+ });
72
53
  if (opts.moreIssues && opts.moreIssues > 0) {
73
- lines.push(chalk.dim(` ...and ${opts.moreIssues} more issues`));
54
+ return base + "\n" + dim(` ...and ${opts.moreIssues} more issues`);
74
55
  }
75
- return lines.join("\n");
76
- }
77
- /**
78
- * Plain text error for non-TTY, NO_COLOR, CI, or TERM=dumb environments.
79
- */
80
- function plainTextError(opts) {
81
- const lines = [
82
- `error: ${opts.message}`,
83
- ` flag: --${opts.flag}`,
84
- ` value: ${opts.value}`,
85
- ];
86
- if (opts.suggestion) {
87
- lines.push(` hint: Did you mean "${opts.suggestion}"?`);
88
- }
89
- if (opts.validValues && opts.validValues.length > 0) {
90
- lines.push(` valid: ${opts.validValues.join(", ")}`);
91
- }
92
- if (opts.hint) {
93
- lines.push(` ${opts.hint}`);
94
- }
95
- if (opts.moreIssues && opts.moreIssues > 0) {
96
- lines.push(` ...and ${opts.moreIssues} more issues`);
97
- }
98
- return lines.join("\n");
56
+ return base;
99
57
  }
100
58
  // ---------------------------------------------------------------------------
101
59
  // Commander error formatting
@@ -105,12 +63,12 @@ function plainTextError(opts) {
105
63
  *
106
64
  * Commander passes raw error strings to configureOutput({ outputError }).
107
65
  * This function parses them to extract flag/value information and applies
108
- * branded formatting.
66
+ * branded formatting via renderError().
109
67
  *
110
68
  * InvalidArgumentError pattern:
111
69
  * "error: option '--flag <arg>' argument 'value' is invalid. Detail"
112
70
  *
113
- * Other Commander errors (missing required, etc.) get branded prefix.
71
+ * Other Commander errors (missing required, etc.) get renderError treatment.
114
72
  */
115
73
  export function formatCommanderError(rawMessage) {
116
74
  // Strip leading "error: " prefix that Commander adds
@@ -137,17 +95,9 @@ export function formatCommanderError(rawMessage) {
137
95
  hint: "Run vertaa <command> --help for all options",
138
96
  });
139
97
  }
140
- // For other Commander errors: branded prefix with help hint
141
- if (canUseBoxDrawing()) {
142
- const prefix = chalk.hex(BRAND_ACCENT).bold("vertaa");
143
- const errorLabel = chalk.hex(ERROR_COLOR).bold("error");
144
- return [
145
- `${prefix} ${errorLabel}: ${msg}`,
146
- chalk.dim(" Run vertaa <command> --help for all options"),
147
- ].join("\n");
148
- }
149
- return [
150
- `vertaa error: ${msg}`,
151
- " Run vertaa <command> --help for all options",
152
- ].join("\n");
98
+ // For other Commander errors: use renderError with a help suggestion
99
+ return renderError({
100
+ message: msg,
101
+ suggestion: "vertaa <command> --help for all options",
102
+ });
153
103
  }