@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ansi.ts","../src/theme.ts","../src/detect.ts","../src/primitives/text.ts","../src/primitives/box.ts","../src/primitives/table.ts","../src/primitives/spinner.ts","../src/primitives/progress.ts","../src/primitives/list.ts","../src/primitives/diff.ts","../src/dashboard/state.ts","../src/dashboard/frame.ts","../src/layout/alternate.ts","../src/layout/inline.ts","../src/layout/renderer.ts","../src/dashboard/keyboard.ts"],"names":["bold","dim","text","label","formatElapsed"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Raw ANSI escape sequences for terminal control.\n *\n * No dependencies — pure string constants and functions.\n * Used by renderers and primitives for direct terminal manipulation.\n */\n\nconst ESC = \"\\x1b\";\nconst CSI = `${ESC}[`;\n\n// ── Cursor movement ──────────────────────────────────────────────\n\nexport const cursor = {\n /** Move cursor to row, col (1-indexed) */\n to: (row: number, col: number) => `${CSI}${row};${col}H`,\n /** Move cursor to top-left */\n home: `${CSI}H`,\n /** Move cursor up N lines */\n up: (n = 1) => `${CSI}${n}A`,\n /** Move cursor down N lines */\n down: (n = 1) => `${CSI}${n}B`,\n /** Move cursor to column N (1-indexed) */\n column: (n: number) => `${CSI}${n}G`,\n /** Hide cursor */\n hide: `${CSI}?25l`,\n /** Show cursor */\n show: `${CSI}?25h`,\n /** Save cursor position */\n save: `${ESC}7`,\n /** Restore cursor position */\n restore: `${ESC}8`,\n} as const;\n\n// ── Screen control ───────────────────────────────────────────────\n\nexport const screen = {\n /** Clear entire screen */\n clear: `${CSI}2J`,\n /** Clear from cursor to end of screen */\n clearDown: `${CSI}J`,\n /** Clear from cursor to end of line */\n clearLine: `${CSI}K`,\n /** Clear entire line */\n clearFullLine: `${CSI}2K`,\n /** Enter alternate screen buffer (preserves scrollback) */\n altEnter: `${CSI}?1049h`,\n /** Exit alternate screen buffer */\n altExit: `${CSI}?1049l`,\n} as const;\n\n// ── Style reset ──────────────────────────────────────────────────\n\nexport const style = {\n /** Reset all attributes */\n reset: `${CSI}0m`,\n} as const;\n\n// ── Box drawing characters ───────────────────────────────────────\n\nexport const borders = {\n single: {\n topLeft: \"\\u250C\", // ┌\n topRight: \"\\u2510\", // ┐\n bottomLeft: \"\\u2514\", // └\n bottomRight: \"\\u2518\", // ┘\n horizontal: \"\\u2500\", // ─\n vertical: \"\\u2502\", // │\n },\n double: {\n topLeft: \"\\u2554\", // ╔\n topRight: \"\\u2557\", // ╗\n bottomLeft: \"\\u255A\", // ╚\n bottomRight: \"\\u255D\", // ╝\n horizontal: \"\\u2550\", // ═\n vertical: \"\\u2551\", // ║\n },\n rounded: {\n topLeft: \"\\u256D\", // ╭\n topRight: \"\\u256E\", // ╮\n bottomLeft: \"\\u2570\", // ╰\n bottomRight: \"\\u256F\", // ╯\n horizontal: \"\\u2500\", // ─\n vertical: \"\\u2502\", // │\n },\n heavy: {\n topLeft: \"\\u250F\", // ┏\n topRight: \"\\u2513\", // ┓\n bottomLeft: \"\\u2517\", // ┗\n bottomRight: \"\\u251B\", // ┛\n horizontal: \"\\u2501\", // ━\n vertical: \"\\u2503\", // ┃\n },\n} as const;\n\nexport type BorderStyle = keyof typeof borders;\n\n/** Common type for any border character set */\nexport interface BorderChars {\n readonly topLeft: string;\n readonly topRight: string;\n readonly bottomLeft: string;\n readonly bottomRight: string;\n readonly horizontal: string;\n readonly vertical: string;\n}\n\n// ── Utility ──────────────────────────────────────────────────────\n\n/** Strip all ANSI escape sequences from a string */\nexport function stripAnsi(str: string): string {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\x1b\\[[0-9;]*[A-Za-z]|\\x1b[78]/g, \"\");\n}\n\n/** Get visible character width of a string (excluding ANSI codes) */\nexport function visibleLength(str: string): number {\n return stripAnsi(str).length;\n}\n\n/** Pad string to visible width, accounting for ANSI codes */\nexport function padEnd(str: string, width: number): string {\n const visible = visibleLength(str);\n if (visible >= width) return str;\n return str + \" \".repeat(width - visible);\n}\n\n/** Pad string to visible width from left */\nexport function padStart(str: string, width: number): string {\n const visible = visibleLength(str);\n if (visible >= width) return str;\n return \" \".repeat(width - visible) + str;\n}\n\n/** Center string within width, accounting for ANSI codes */\nexport function center(str: string, width: number): string {\n const visible = visibleLength(str);\n if (visible >= width) return str;\n const left = Math.floor((width - visible) / 2);\n const right = width - visible - left;\n return \" \".repeat(left) + str + \" \".repeat(right);\n}\n\n/** Truncate string to visible width, adding ellipsis */\nexport function truncate(str: string, maxWidth: number): string {\n if (maxWidth <= 0) return \"\";\n const stripped = stripAnsi(str);\n if (stripped.length <= maxWidth) return str;\n if (maxWidth <= 3) return stripped.slice(0, maxWidth);\n return stripped.slice(0, maxWidth - 1) + \"\\u2026\"; // …\n}\n","/**\n * VertaaUX brand theme for terminal output.\n *\n * Defines the color palette, severity colors, score gradients,\n * and semantic tokens used across all TUI primitives.\n */\n\nimport chalk from \"chalk\";\n\n// ── Brand palette ────────────────────────────────────────────────\n\nexport const brand = {\n lime: \"#78FFB4\",\n tealLight: \"#6BEEBD\",\n teal: \"#5EDDC6\",\n cyan: \"#51CCCE\",\n dark: \"#0A0F1A\",\n} as const;\n\n/** Gradient stops from lime → cyan (for banner, headers, accents) */\nexport const gradient = [brand.lime, brand.tealLight, brand.teal, brand.cyan] as const;\n\n// ── Severity palette ─────────────────────────────────────────────\n\nexport const severity = {\n critical: \"#FF6B6B\",\n error: \"#FF6B6B\",\n serious: \"#FFD93D\",\n warning: \"#FFD93D\",\n moderate: \"#6BCEFF\",\n minor: \"#6BCEFF\",\n info: \"#888888\",\n} as const;\n\nexport type SeverityLevel = keyof typeof severity;\n\n/** Severity display labels */\nexport const severityLabels: Record<string, string> = {\n critical: \"CRITICAL\",\n error: \"ERROR\",\n serious: \"SERIOUS\",\n warning: \"WARNING\",\n moderate: \"MODERATE\",\n minor: \"MINOR\",\n info: \"INFO\",\n};\n\n/** Severity sort order (highest first) */\nexport const severityOrder: Record<string, number> = {\n critical: 0,\n error: 1,\n serious: 2,\n warning: 3,\n minor: 4,\n moderate: 5,\n info: 6,\n};\n\n// ── Score colors ─────────────────────────────────────────────────\n\n/** Score thresholds and their corresponding colors */\nconst SCORE_THRESHOLDS = [\n { min: 90, color: \"#4ADE80\" }, // Green — excellent\n { min: 70, color: \"#FACC15\" }, // Yellow — needs work\n { min: 0, color: \"#F87171\" }, // Red — poor\n] as const;\n\n/**\n * Get hex color for a score value (0-100).\n */\nexport function scoreColor(score: number): string {\n for (const { min, color } of SCORE_THRESHOLDS) {\n if (score >= min) return color;\n }\n return SCORE_THRESHOLDS[SCORE_THRESHOLDS.length - 1].color;\n}\n\n// ── Semantic tokens ──────────────────────────────────────────────\n\nexport const tokens = {\n success: \"#4ADE80\",\n error: \"#F87171\",\n warning: \"#FACC15\",\n info: \"#6BCEFF\",\n muted: \"#6B7280\",\n accent: brand.lime,\n} as const;\n\n// ── Color application helpers ────────────────────────────────────\n\nlet _colorEnabled = true;\n\n/** Set whether color output is enabled (call early, based on detect.ts) */\nexport function setColorEnabled(enabled: boolean): void {\n _colorEnabled = enabled;\n}\n\n/** Check if color is currently enabled */\nexport function isColorEnabled(): boolean {\n return _colorEnabled;\n}\n\n/** Apply hex color to text (respects color-enabled state) */\nexport function colorize(text: string, hex: string): string {\n if (!_colorEnabled) return text;\n return chalk.hex(hex)(text);\n}\n\n/** Apply bold + hex color */\nexport function boldColor(text: string, hex: string): string {\n if (!_colorEnabled) return text;\n return chalk.hex(hex).bold(text);\n}\n\n/** Apply dim styling */\nexport function dim(text: string): string {\n if (!_colorEnabled) return text;\n return chalk.dim(text);\n}\n\n/** Apply bold styling */\nexport function bold(text: string): string {\n if (!_colorEnabled) return text;\n return chalk.bold(text);\n}\n\n/** Apply gradient across text characters */\nexport function applyGradient(text: string, colors: readonly string[] = gradient): string {\n if (!_colorEnabled) return text;\n const colorCount = colors.length;\n let result = \"\";\n let idx = 0;\n\n for (const char of text) {\n if (char !== \" \" && char !== \"\\n\") {\n result += chalk.hex(colors[idx % colorCount])(char);\n idx++;\n } else {\n result += char;\n }\n }\n\n return result;\n}\n","/**\n * Environment detection for terminal capabilities.\n *\n * Standalone implementations (no CLI dependency) that detect\n * TTY, CI, color support, and terminal dimensions.\n */\n\n/** Check if running in a CI environment. */\nexport function isCI(): boolean {\n return Boolean(\n process.env.CI ||\n process.env.CONTINUOUS_INTEGRATION ||\n process.env.BUILD_NUMBER ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.CIRCLECI ||\n process.env.JENKINS_URL ||\n process.env.TRAVIS ||\n process.env.BUILDKITE\n );\n}\n\n/** Check if stderr is a TTY (used for UI output). */\nexport function isTTY(): boolean {\n return Boolean(process.stderr.isTTY);\n}\n\n/** Check if stdout is a TTY (used for data output detection). */\nexport function isStdoutTTY(): boolean {\n return Boolean(process.stdout.isTTY);\n}\n\n/** Check if stdin is a TTY (used for keyboard input detection). */\nexport function isStdinTTY(): boolean {\n return Boolean(process.stdin.isTTY);\n}\n\n/**\n * Determine if colors should be used.\n *\n * Priority: NO_COLOR > FORCE_COLOR > CI (off) > TTY detection\n */\nexport function shouldUseColor(): boolean {\n if (process.env.NO_COLOR !== undefined) return false;\n if (process.env.FORCE_COLOR !== undefined) return true;\n if (isCI()) return false;\n return isTTY();\n}\n\n/** Get terminal width from stderr (where UI renders). Falls back to 80. */\nexport function getTerminalWidth(): number {\n return process.stderr.columns || 80;\n}\n\n/** Get terminal height from stderr. Falls back to 24. */\nexport function getTerminalHeight(): number {\n return process.stderr.rows || 24;\n}\n\n/** Check if terminal supports Unicode (not dumb terminal). */\nexport function supportsUnicode(): boolean {\n if (process.env.TERM === \"dumb\") return false;\n if (process.platform === \"win32\") {\n return Boolean(process.env.WT_SESSION || process.env.TERM_PROGRAM);\n }\n return true;\n}\n","/**\n * Text styling primitives for terminal output.\n *\n * Semantic text functions for headings, labels, badges, and emphasis.\n * All respect the color-enabled state from theme.ts.\n */\n\nimport {\n colorize,\n boldColor,\n dim as dimColor,\n bold as boldStyle,\n isColorEnabled,\n severity as severityPalette,\n severityLabels,\n scoreColor,\n brand,\n tokens,\n} from \"../theme.js\";\n\n/** Render a section heading with brand accent */\nexport function heading(text: string): string {\n return boldColor(text, brand.lime);\n}\n\n/** Render a sub-heading */\nexport function subheading(text: string): string {\n return boldColor(text, brand.teal);\n}\n\n/** Render a label (key in key-value pairs) */\nexport function label(text: string): string {\n return boldStyle(text);\n}\n\n/** Render dimmed/muted text */\nexport function dim(text: string): string {\n return dimColor(text);\n}\n\n/** Render bold text */\nexport function bold(text: string): string {\n return boldStyle(text);\n}\n\n/** Render a clickable-looking link (underlined cyan) */\nexport function link(text: string): string {\n if (!isColorEnabled()) return text;\n return colorize(`\\x1b[4m${text}\\x1b[24m`, tokens.info);\n}\n\n/** Render severity badge: colored, bold, uppercase label */\nexport function severityBadge(level: string): string {\n const normalized = level.toLowerCase();\n const displayLabel = severityLabels[normalized] || level.toUpperCase();\n const hex = severityPalette[normalized as keyof typeof severityPalette] || tokens.muted;\n return boldColor(displayLabel, hex);\n}\n\n/** Render score badge: color-coded number */\nexport function scoreBadge(score: number): string {\n const hex = scoreColor(score);\n return boldColor(String(score), hex);\n}\n\n/** Render success text */\nexport function success(text: string): string {\n return colorize(text, tokens.success);\n}\n\n/** Render error text */\nexport function error(text: string): string {\n return colorize(text, tokens.error);\n}\n\n/** Render warning text */\nexport function warning(text: string): string {\n return colorize(text, tokens.warning);\n}\n\n/** Render info text */\nexport function info(text: string): string {\n return colorize(text, tokens.info);\n}\n\n/** Render a key: value pair with styled label */\nexport function keyValue(key: string, value: string): string {\n return `${boldStyle(key)}: ${value}`;\n}\n\n/** Render a horizontal rule that spans the terminal width */\nexport function hr(width: number, char = \"\\u2500\"): string {\n const line = char.repeat(width);\n return dimColor(line);\n}\n\n/** Render a status indicator dot */\nexport function statusDot(status: \"pass\" | \"fail\" | \"warn\" | \"skip\" | \"active\"): string {\n const map: Record<string, { symbol: string; hex: string }> = {\n pass: { symbol: \"\\u25CF\", hex: tokens.success }, // ●\n fail: { symbol: \"\\u25CF\", hex: tokens.error }, // ●\n warn: { symbol: \"\\u25CF\", hex: tokens.warning }, // ●\n skip: { symbol: \"\\u25CB\", hex: tokens.muted }, // ○\n active: { symbol: \"\\u25CF\", hex: brand.lime }, // ●\n };\n const { symbol, hex } = map[status] || map.skip;\n return colorize(symbol, hex);\n}\n","/**\n * Box primitive for bordered terminal output.\n *\n * Renders content inside a Unicode box with optional title, subtitle,\n * padding, and multiple border styles.\n */\n\nimport { borders, type BorderStyle, type BorderChars, padEnd, visibleLength } from \"../ansi.js\";\nimport { colorize, dim, brand, isColorEnabled } from \"../theme.js\";\nimport { getTerminalWidth } from \"../detect.js\";\n\nexport interface BoxOptions {\n /** Border style: single, double, rounded, heavy, none */\n border?: BorderStyle | \"none\";\n /** Inner padding (number of spaces on each side) */\n padding?: number;\n /** Vertical padding (blank lines above/below content) */\n paddingY?: number;\n /** Title displayed on the top border */\n title?: string;\n /** Subtitle displayed on the bottom border */\n subtitle?: string;\n /** Fixed width (defaults to terminal width - 2) */\n width?: number;\n /** Border color hex (defaults to brand.teal) */\n borderColor?: string;\n /** Title color hex (defaults to brand.lime) */\n titleColor?: string;\n}\n\n/**\n * Render content inside a bordered box.\n *\n * @param content - Text content (can be multi-line)\n * @param opts - Box options\n * @returns Rendered box string\n */\nexport function box(content: string, opts: BoxOptions = {}): string {\n const {\n border = \"rounded\",\n padding = 1,\n paddingY = 0,\n title,\n subtitle,\n width: fixedWidth,\n borderColor = brand.teal,\n titleColor = brand.lime,\n } = opts;\n\n if (border === \"none\") {\n return renderNoBorder(content, padding);\n }\n\n const chars = borders[border];\n const termWidth = fixedWidth || Math.min(getTerminalWidth(), 100);\n // Inner width = total - 2 borders - 2*padding\n const innerWidth = termWidth - 2 - padding * 2;\n\n const bc = (ch: string) => colorize(ch, borderColor);\n const lines = wrapLines(content, innerWidth);\n const pad = \" \".repeat(padding);\n const result: string[] = [];\n\n // Top border\n result.push(renderTopBorder(chars, termWidth, title, titleColor, borderColor));\n\n // Vertical padding\n for (let i = 0; i < paddingY; i++) {\n result.push(bc(chars.vertical) + \" \".repeat(termWidth - 2) + bc(chars.vertical));\n }\n\n // Content lines\n for (const line of lines) {\n const padded = pad + padEnd(line, innerWidth) + pad;\n result.push(bc(chars.vertical) + padded + bc(chars.vertical));\n }\n\n // Vertical padding\n for (let i = 0; i < paddingY; i++) {\n result.push(bc(chars.vertical) + \" \".repeat(termWidth - 2) + bc(chars.vertical));\n }\n\n // Bottom border\n result.push(renderBottomBorder(chars, termWidth, subtitle, borderColor));\n\n return result.join(\"\\n\");\n}\n\nfunction renderNoBorder(content: string, padding: number): string {\n const pad = \" \".repeat(padding);\n return content\n .split(\"\\n\")\n .map((line) => pad + line + pad)\n .join(\"\\n\");\n}\n\nfunction renderTopBorder(\n chars: BorderChars,\n width: number,\n title: string | undefined,\n titleColor: string,\n borderColor: string,\n): string {\n const bc = (ch: string) => colorize(ch, borderColor);\n const hLen = width - 2; // Total horizontal chars\n\n if (title) {\n const titleStr = isColorEnabled()\n ? ` ${colorize(title, titleColor)} `\n : ` ${title} `;\n const titleVisible = visibleLength(titleStr);\n const leftDash = 1; // One dash after corner\n const rightDash = Math.max(0, hLen - leftDash - titleVisible);\n return (\n bc(chars.topLeft) +\n bc(chars.horizontal.repeat(leftDash)) +\n titleStr +\n bc(chars.horizontal.repeat(rightDash)) +\n bc(chars.topRight)\n );\n }\n\n return bc(chars.topLeft) + bc(chars.horizontal.repeat(hLen)) + bc(chars.topRight);\n}\n\nfunction renderBottomBorder(\n chars: BorderChars,\n width: number,\n subtitle: string | undefined,\n borderColor: string,\n): string {\n const bc = (ch: string) => colorize(ch, borderColor);\n const hLen = width - 2;\n\n if (subtitle) {\n const subStr = ` ${dim(subtitle)} `;\n const subVisible = visibleLength(subStr);\n const rightDash = 1;\n const leftDash = Math.max(0, hLen - rightDash - subVisible);\n return (\n bc(chars.bottomLeft) +\n bc(chars.horizontal.repeat(leftDash)) +\n subStr +\n bc(chars.horizontal.repeat(rightDash)) +\n bc(chars.bottomRight)\n );\n }\n\n return bc(chars.bottomLeft) + bc(chars.horizontal.repeat(hLen)) + bc(chars.bottomRight);\n}\n\n/** Wrap text into lines that fit within maxWidth */\nfunction wrapLines(text: string, maxWidth: number): string[] {\n const result: string[] = [];\n\n for (const rawLine of text.split(\"\\n\")) {\n if (rawLine.length <= maxWidth) {\n result.push(rawLine);\n continue;\n }\n\n // Word-wrap long lines\n const words = rawLine.split(\" \");\n let current = \"\";\n\n for (const word of words) {\n if (current.length === 0) {\n current = word;\n } else if (current.length + 1 + word.length <= maxWidth) {\n current += \" \" + word;\n } else {\n result.push(current);\n current = word;\n }\n }\n\n if (current.length > 0) {\n result.push(current);\n }\n }\n\n return result;\n}\n","/**\n * Table primitive for terminal output.\n *\n * Renders aligned, color-coded tables with auto-width,\n * group headers, and terminal-width-aware truncation.\n * No external table library — pure string rendering.\n */\n\nimport { padEnd, padStart, visibleLength, truncate as truncateStr } from \"../ansi.js\";\nimport { dim, bold } from \"../theme.js\";\nimport { getTerminalWidth } from \"../detect.js\";\n\nexport interface Column {\n /** Data key to read from row objects */\n key: string;\n /** Column header label */\n label: string;\n /** Fixed width (characters). If omitted, auto-calculated. */\n width?: number;\n /** Text alignment */\n align?: \"left\" | \"right\" | \"center\";\n /** Custom color function for cell values */\n color?: (value: string) => string;\n}\n\nexport interface TableOptions {\n /** Maximum total width (defaults to terminal width) */\n maxWidth?: number;\n /** Show borders between rows */\n rowBorders?: boolean;\n /** Group header styling */\n groupLabel?: string;\n}\n\n/**\n * Render a data table from rows and column definitions.\n */\nexport function renderTable(\n rows: Record<string, string>[],\n columns: Column[],\n opts: TableOptions = {},\n): string {\n if (rows.length === 0) return \"\";\n\n const maxWidth = opts.maxWidth || getTerminalWidth();\n const colWidths = calculateColumnWidths(rows, columns, maxWidth);\n const lines: string[] = [];\n\n // Group header\n if (opts.groupLabel) {\n lines.push(dim(`── ${opts.groupLabel} ${\"─\".repeat(Math.max(0, maxWidth - opts.groupLabel.length - 4))}`));\n }\n\n // Header\n lines.push(renderHeaderRow(columns, colWidths));\n lines.push(renderSeparator(colWidths));\n\n // Data rows\n for (const row of rows) {\n lines.push(renderDataRow(row, columns, colWidths));\n if (opts.rowBorders) {\n lines.push(renderSeparator(colWidths));\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction calculateColumnWidths(\n rows: Record<string, string>[],\n columns: Column[],\n maxWidth: number,\n): number[] {\n const GAP = 2; // Space between columns\n const widths: number[] = [];\n let fixedTotal = 0;\n let autoCount = 0;\n\n // First pass: fixed widths and content-based maximums\n for (const col of columns) {\n if (col.width) {\n widths.push(col.width);\n fixedTotal += col.width;\n } else {\n // Calculate based on content\n const headerLen = col.label.length;\n const maxContent = rows.reduce((max, row) => {\n const val = row[col.key] || \"\";\n return Math.max(max, val.length);\n }, headerLen);\n widths.push(maxContent);\n autoCount++;\n }\n }\n\n // Total with gaps\n const gaps = (columns.length - 1) * GAP;\n const totalNeeded = widths.reduce((s, w) => s + w, 0) + gaps;\n\n // Shrink auto columns if over budget\n if (totalNeeded > maxWidth && autoCount > 0) {\n const available = maxWidth - fixedTotal - gaps;\n const autoWidths = widths.filter((_, i) => !columns[i].width);\n const autoTotal = autoWidths.reduce((s, w) => s + w, 0);\n\n for (let i = 0; i < widths.length; i++) {\n if (!columns[i].width) {\n widths[i] = Math.max(8, Math.floor((widths[i] / autoTotal) * available));\n }\n }\n }\n\n return widths;\n}\n\nfunction renderHeaderRow(columns: Column[], widths: number[]): string {\n const cells = columns.map((col, i) =>\n bold(alignCell(col.label, widths[i], col.align || \"left\"))\n );\n return cells.join(\" \");\n}\n\nfunction renderSeparator(widths: number[]): string {\n return dim(widths.map((w) => \"─\".repeat(w)).join(\"──\"));\n}\n\nfunction renderDataRow(\n row: Record<string, string>,\n columns: Column[],\n widths: number[],\n): string {\n const cells = columns.map((col, i) => {\n const raw = row[col.key] || \"\";\n const truncated = truncateStr(raw, widths[i]);\n const aligned = alignCell(truncated, widths[i], col.align || \"left\");\n return col.color ? col.color(aligned) : aligned;\n });\n return cells.join(\" \");\n}\n\nfunction alignCell(text: string, width: number, align: \"left\" | \"right\" | \"center\"): string {\n switch (align) {\n case \"right\":\n return padStart(text, width);\n case \"center\": {\n const visible = visibleLength(text);\n if (visible >= width) return text;\n const left = Math.floor((width - visible) / 2);\n const right = width - visible - left;\n return \" \".repeat(left) + text + \" \".repeat(right);\n }\n default:\n return padEnd(text, width);\n }\n}\n","/**\n * Spinner primitive for terminal progress indication.\n *\n * Renders an animated spinner with text to stderr.\n * Writes ONLY to stderr — never pollutes stdout.\n */\n\nimport { screen } from \"../ansi.js\";\nimport { colorize, dim, brand, isColorEnabled } from \"../theme.js\";\nimport { isTTY } from \"../detect.js\";\n\nconst BRAILLE_FRAMES = [\"⡿\", \"⣟\", \"⣯\", \"⣷\", \"⣾\", \"⣽\", \"⣻\", \"⢿\"];\nconst FRAME_INTERVAL = 80;\n\nexport interface SpinnerInstance {\n /** Start the spinner animation */\n start(): void;\n /** Stop the spinner and clear the line */\n stop(): void;\n /** Update the display text */\n setText(text: string): void;\n /** Show phase label alongside text */\n setPhase(phase: string): void;\n /** Stop with success indicator */\n succeed(text: string): void;\n /** Stop with failure indicator */\n fail(text: string): void;\n /** Stop with warning indicator */\n warn(text: string): void;\n /** Stop with info indicator */\n info(text: string): void;\n /** Whether the spinner is currently running */\n isRunning: boolean;\n}\n\n/**\n * Create a new spinner instance.\n *\n * @param text - Initial text to display\n * @param output - Writable stream (defaults to process.stderr)\n */\nexport function createSpinner(\n text: string,\n output: NodeJS.WritableStream = process.stderr,\n): SpinnerInstance {\n let frameIndex = 0;\n let currentText = text;\n let currentPhase = \"\";\n let timer: ReturnType<typeof setInterval> | null = null;\n let running = false;\n const enabled = isTTY();\n\n function render(): void {\n if (!enabled) return;\n\n const frame = isColorEnabled()\n ? colorize(BRAILLE_FRAMES[frameIndex], brand.lime)\n : BRAILLE_FRAMES[frameIndex];\n\n const phaseStr = currentPhase ? dim(` [${currentPhase}]`) : \"\";\n const line = `${frame} ${currentText}${phaseStr}`;\n\n output.write(screen.clearLine + \"\\r\" + line);\n frameIndex = (frameIndex + 1) % BRAILLE_FRAMES.length;\n }\n\n function clearLine(): void {\n if (!enabled) return;\n output.write(screen.clearLine + \"\\r\");\n }\n\n function writeFinalLine(symbol: string, text: string): void {\n clearLine();\n output.write(`${symbol} ${text}\\n`);\n }\n\n const instance: SpinnerInstance = {\n get isRunning() {\n return running;\n },\n\n start() {\n if (running) return;\n running = true;\n frameIndex = 0;\n if (enabled) {\n render();\n timer = setInterval(render, FRAME_INTERVAL);\n }\n },\n\n stop() {\n running = false;\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n clearLine();\n },\n\n setText(text: string) {\n currentText = text;\n },\n\n setPhase(phase: string) {\n currentPhase = phase;\n },\n\n succeed(text: string) {\n instance.stop();\n const sym = isColorEnabled() ? colorize(\"✓\", \"#4ADE80\") : \"✓\";\n writeFinalLine(sym, text);\n },\n\n fail(text: string) {\n instance.stop();\n const sym = isColorEnabled() ? colorize(\"✗\", \"#F87171\") : \"✗\";\n writeFinalLine(sym, text);\n },\n\n warn(text: string) {\n instance.stop();\n const sym = isColorEnabled() ? colorize(\"⚠\", \"#FACC15\") : \"⚠\";\n writeFinalLine(sym, text);\n },\n\n info(text: string) {\n instance.stop();\n const sym = isColorEnabled() ? colorize(\"ℹ\", \"#6BCEFF\") : \"ℹ\";\n writeFinalLine(sym, text);\n },\n };\n\n return instance;\n}\n","/**\n * Progress bar primitive for terminal output.\n *\n * Single bars and multi-bar stacks with percentage, ETA,\n * and brand-colored fill. Writes to stderr only.\n */\n\nimport { cursor, screen, padEnd } from \"../ansi.js\";\nimport { colorize, dim, brand, isColorEnabled } from \"../theme.js\";\nimport { isTTY, getTerminalWidth } from \"../detect.js\";\n\nconst FILL_CHAR = \"█\";\nconst EMPTY_CHAR = \"░\";\n\nexport interface ProgressBarOptions {\n /** Total number of steps */\n total: number;\n /** Label displayed before the bar */\n label?: string;\n /** Bar width in characters (defaults to auto) */\n width?: number;\n /** Color hex for the filled portion */\n color?: string;\n /** Writable stream (defaults to stderr) */\n output?: NodeJS.WritableStream;\n}\n\nexport interface ProgressBar {\n /** Update progress to a new value */\n update(current: number): void;\n /** Complete the bar at 100% */\n complete(message?: string): void;\n /** Fail the bar with error indicator */\n fail(message?: string): void;\n /** Get the current rendered bar string (for embedding in frames) */\n render(current: number, barWidth?: number): string;\n}\n\n/**\n * Create a progress bar.\n */\nexport function createProgressBar(opts: ProgressBarOptions): ProgressBar {\n const {\n total,\n label = \"\",\n width: fixedWidth,\n color = brand.lime,\n output = process.stderr,\n } = opts;\n\n const enabled = isTTY();\n let startTime = Date.now();\n\n function renderBar(current: number, barWidth?: number): string {\n const pct = total > 0 ? Math.min(current / total, 1) : 0;\n const pctStr = `${Math.round(pct * 100)}%`;\n\n const termWidth = barWidth || fixedWidth || Math.max(20, getTerminalWidth() - (label.length + 12));\n const filled = Math.round(pct * termWidth);\n const empty = termWidth - filled;\n\n const bar = isColorEnabled()\n ? colorize(FILL_CHAR.repeat(filled), color) + dim(EMPTY_CHAR.repeat(empty))\n : FILL_CHAR.repeat(filled) + EMPTY_CHAR.repeat(empty);\n\n const eta = formatETA(current, total, startTime);\n const labelStr = label ? padEnd(label, 16) : \"\";\n\n return `${labelStr}${bar} ${pctStr}${eta ? ` ${dim(eta)}` : \"\"}`;\n }\n\n return {\n update(current: number) {\n if (!enabled) return;\n const line = renderBar(current);\n output.write(screen.clearLine + \"\\r\" + line);\n },\n\n complete(message?: string) {\n if (!enabled) return;\n output.write(screen.clearLine + \"\\r\");\n if (message) {\n const sym = isColorEnabled() ? colorize(\"✓\", \"#4ADE80\") : \"✓\";\n output.write(`${sym} ${message}\\n`);\n }\n },\n\n fail(message?: string) {\n if (!enabled) return;\n output.write(screen.clearLine + \"\\r\");\n if (message) {\n const sym = isColorEnabled() ? colorize(\"✗\", \"#F87171\") : \"✗\";\n output.write(`${sym} ${message}\\n`);\n }\n },\n\n render(current: number, barWidth?: number): string {\n return renderBar(current, barWidth);\n },\n };\n}\n\nfunction formatETA(current: number, total: number, startTime: number): string {\n if (current <= 0 || total <= 0) return \"\";\n const elapsed = (Date.now() - startTime) / 1000;\n const rate = current / elapsed;\n const remaining = (total - current) / rate;\n if (remaining <= 0 || !isFinite(remaining)) return \"\";\n if (remaining < 60) return `~${Math.ceil(remaining)}s`;\n return `~${Math.ceil(remaining / 60)}m`;\n}\n\n// ── Multi-progress ───────────────────────────────────────────────\n\nexport interface MultiProgressOptions {\n /** Writable stream (defaults to stderr) */\n output?: NodeJS.WritableStream;\n}\n\nexport interface MultiProgress {\n /** Add a named progress bar */\n add(id: string, opts: Omit<ProgressBarOptions, \"output\">): void;\n /** Update a specific bar */\n update(id: string, current: number): void;\n /** Mark a bar as complete */\n complete(id: string): void;\n /** Render all bars (returns multi-line string for dashboard embedding) */\n renderAll(): string;\n /** Write all bars to output (in-place update) */\n draw(): void;\n /** Clear all bar lines from terminal */\n clear(): void;\n}\n\n/**\n * Create a multi-progress bar stack.\n */\nexport function createMultiProgress(opts: MultiProgressOptions = {}): MultiProgress {\n const output = opts.output || process.stderr;\n const bars: Map<string, { bar: ProgressBar; current: number; total: number; completed: boolean }> = new Map();\n let drawnLines = 0;\n\n return {\n add(id: string, barOpts: Omit<ProgressBarOptions, \"output\">) {\n const bar = createProgressBar({ ...barOpts, output });\n bars.set(id, { bar, current: 0, total: barOpts.total, completed: false });\n },\n\n update(id: string, current: number) {\n const entry = bars.get(id);\n if (entry) {\n entry.current = current;\n }\n },\n\n complete(id: string) {\n const entry = bars.get(id);\n if (entry) {\n entry.current = entry.total;\n entry.completed = true;\n }\n },\n\n renderAll(): string {\n const lines: string[] = [];\n for (const [, entry] of bars) {\n lines.push(entry.bar.render(entry.current));\n }\n return lines.join(\"\\n\");\n },\n\n draw() {\n if (!isTTY()) return;\n // Move cursor up to overwrite previous render\n if (drawnLines > 0) {\n output.write(cursor.up(drawnLines));\n }\n const lines: string[] = [];\n for (const [, entry] of bars) {\n lines.push(screen.clearLine + entry.bar.render(entry.current));\n }\n output.write(lines.join(\"\\n\") + \"\\n\");\n drawnLines = lines.length;\n },\n\n clear() {\n if (!isTTY() || drawnLines === 0) return;\n output.write(cursor.up(drawnLines));\n for (let i = 0; i < drawnLines; i++) {\n output.write(screen.clearLine + \"\\n\");\n }\n output.write(cursor.up(drawnLines));\n drawnLines = 0;\n },\n };\n}\n","/**\n * List and tree primitive for terminal output.\n *\n * Renders ordered/unordered lists and tree structures\n * with Unicode connectors and configurable indentation.\n */\n\nimport { dim } from \"../theme.js\";\n\nexport interface ListOptions {\n /** Ordered (numbered) or unordered (bullet) */\n ordered?: boolean;\n /** Indentation level (for nesting) */\n indent?: number;\n /** Bullet character for unordered lists */\n bullet?: string;\n}\n\n/**\n * Render a flat list of items.\n */\nexport function renderList(items: string[], opts: ListOptions = {}): string {\n const { ordered = false, indent = 0, bullet = \"•\" } = opts;\n const pad = \" \".repeat(indent);\n\n return items\n .map((item, i) => {\n const prefix = ordered ? `${pad}${i + 1}.` : `${pad}${bullet}`;\n return `${prefix} ${item}`;\n })\n .join(\"\\n\");\n}\n\n// ── Tree rendering ───────────────────────────────────────────────\n\nexport interface TreeNode {\n label: string;\n children?: TreeNode[];\n /** Whether this node's children should be collapsed (hidden) */\n collapsed?: boolean;\n}\n\n/**\n * Render a tree structure with Unicode box-drawing connectors.\n *\n * ```\n * Root\n * ├── Child 1\n * │ ├── Grandchild A\n * │ └── Grandchild B\n * └── Child 2\n * ```\n */\nexport function renderTree(node: TreeNode, prefix = \"\", isLast = true, isRoot = true): string {\n const lines: string[] = [];\n\n if (isRoot) {\n lines.push(node.label);\n } else {\n const connector = isLast ? \"└── \" : \"├── \";\n lines.push(prefix + dim(connector) + node.label);\n }\n\n if (node.children && !node.collapsed) {\n const childPrefix = isRoot ? \"\" : prefix + (isLast ? \" \" : dim(\"│ \"));\n\n node.children.forEach((child, index) => {\n const childIsLast = index === node.children!.length - 1;\n lines.push(renderTree(child, childPrefix, childIsLast, false));\n });\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Render a grouped list with section headers.\n *\n * ```\n * ── Critical (3) ──────────\n * • Issue 1\n * • Issue 2\n * • Issue 3\n *\n * ── Warning (5) ───────────\n * • Issue 4\n * ...\n * ```\n */\nexport function renderGroupedList(\n groups: Map<string, string[]> | Record<string, string[]>,\n opts: ListOptions = {},\n): string {\n const entries = groups instanceof Map ? [...groups.entries()] : Object.entries(groups);\n const sections: string[] = [];\n\n for (const [groupLabel, items] of entries) {\n if (items.length === 0) continue;\n\n const header = dim(`── ${groupLabel} (${items.length}) ${\"─\".repeat(20)}`);\n const list = renderList(items, { ...opts, indent: (opts.indent || 0) + 1 });\n sections.push(`${header}\\n${list}`);\n }\n\n return sections.join(\"\\n\\n\");\n}\n","/**\n * Diff rendering primitive for terminal output.\n *\n * Displays unified or side-by-side diffs with\n * colored additions/deletions.\n */\n\nimport { colorize, dim, tokens } from \"../theme.js\";\nimport { padEnd } from \"../ansi.js\";\nimport { getTerminalWidth } from \"../detect.js\";\n\nexport type DiffMode = \"unified\" | \"side-by-side\";\n\nexport interface DiffLine {\n type: \"add\" | \"remove\" | \"context\" | \"header\";\n content: string;\n lineNum?: number;\n}\n\nexport interface DiffOptions {\n mode?: DiffMode;\n context?: number;\n maxWidth?: number;\n}\n\n/**\n * Render a unified diff from structured diff lines.\n */\nexport function renderDiff(lines: DiffLine[], opts: DiffOptions = {}): string {\n const { mode = \"unified\" } = opts;\n\n if (mode === \"side-by-side\") {\n return renderSideBySide(lines, opts);\n }\n\n return renderUnified(lines);\n}\n\nfunction renderUnified(lines: DiffLine[]): string {\n return lines\n .map((line) => {\n switch (line.type) {\n case \"header\":\n return dim(line.content);\n case \"add\":\n return colorize(`+ ${line.content}`, tokens.success);\n case \"remove\":\n return colorize(`- ${line.content}`, tokens.error);\n case \"context\":\n return dim(` ${line.content}`);\n }\n })\n .join(\"\\n\");\n}\n\nfunction renderSideBySide(lines: DiffLine[], opts: DiffOptions): string {\n const maxWidth = opts.maxWidth || getTerminalWidth();\n const halfWidth = Math.floor((maxWidth - 3) / 2); // 3 for separator \" │ \"\n\n const left: string[] = [];\n const right: string[] = [];\n\n for (const line of lines) {\n if (line.type === \"header\") {\n left.push(dim(line.content));\n right.push(\"\");\n } else if (line.type === \"remove\") {\n left.push(colorize(truncateLine(line.content, halfWidth), tokens.error));\n right.push(\"\");\n } else if (line.type === \"add\") {\n left.push(\"\");\n right.push(colorize(truncateLine(line.content, halfWidth), tokens.success));\n } else {\n const ctx = dim(truncateLine(line.content, halfWidth));\n left.push(ctx);\n right.push(ctx);\n }\n }\n\n // Pair up: merge empty entries\n const merged = mergeSideBySide(left, right, halfWidth);\n\n return merged.join(\"\\n\");\n}\n\nfunction mergeSideBySide(left: string[], right: string[], halfWidth: number): string[] {\n const result: string[] = [];\n const sep = dim(\" │ \");\n let li = 0;\n let ri = 0;\n\n while (li < left.length || ri < right.length) {\n const l = li < left.length ? left[li] : \"\";\n const r = ri < right.length ? right[ri] : \"\";\n\n // Skip if both empty\n if (l === \"\" && r === \"\") {\n li++;\n ri++;\n continue;\n }\n\n // If left has content and right is empty, pair with next right that has content\n if (l !== \"\" && r === \"\") {\n result.push(padEnd(l, halfWidth) + sep + padEnd(\"\", halfWidth));\n li++;\n ri++;\n continue;\n }\n\n if (l === \"\" && r !== \"\") {\n result.push(padEnd(\"\", halfWidth) + sep + padEnd(r, halfWidth));\n li++;\n ri++;\n continue;\n }\n\n result.push(padEnd(l, halfWidth) + sep + padEnd(r, halfWidth));\n li++;\n ri++;\n }\n\n return result;\n}\n\nfunction truncateLine(text: string, maxWidth: number): string {\n if (text.length <= maxWidth) return text;\n return text.slice(0, maxWidth - 1) + \"…\";\n}\n\n/**\n * Parse a unified diff string into structured DiffLine array.\n */\nexport function parseDiff(diffText: string): DiffLine[] {\n const lines: DiffLine[] = [];\n\n for (const raw of diffText.split(\"\\n\")) {\n if (raw.startsWith(\"@@\") || raw.startsWith(\"---\") || raw.startsWith(\"+++\") || raw.startsWith(\"diff \")) {\n lines.push({ type: \"header\", content: raw });\n } else if (raw.startsWith(\"+\")) {\n lines.push({ type: \"add\", content: raw.slice(1) });\n } else if (raw.startsWith(\"-\")) {\n lines.push({ type: \"remove\", content: raw.slice(1) });\n } else {\n lines.push({ type: \"context\", content: raw.startsWith(\" \") ? raw.slice(1) : raw });\n }\n }\n\n return lines;\n}\n","/**\n * Dashboard state types and phase definitions.\n */\n\nexport const AuditPhase = {\n Connecting: \"Connecting\",\n Crawling: \"Crawling\",\n Analyzing: \"Analyzing\",\n Scoring: \"Scoring\",\n Done: \"Done\",\n Failed: \"Failed\",\n} as const;\n\nexport type AuditPhaseName = (typeof AuditPhase)[keyof typeof AuditPhase];\n\n/** Ordered phases for progress indication */\nexport const PHASE_ORDER: AuditPhaseName[] = [\n AuditPhase.Connecting,\n AuditPhase.Crawling,\n AuditPhase.Analyzing,\n AuditPhase.Scoring,\n AuditPhase.Done,\n];\n\n/** Get the index of a phase in the ordered sequence */\nexport function phaseIndex(phase: string): number {\n const idx = PHASE_ORDER.indexOf(phase as AuditPhaseName);\n return idx >= 0 ? idx : 0;\n}\n\n/** Get the total number of actionable phases (excluding Done) */\nexport function phaseTotal(): number {\n return PHASE_ORDER.length - 1; // Exclude \"Done\"\n}\n","/**\n * Dashboard frame renderer — pure function.\n *\n * Takes dashboard state + terminal dimensions, returns a string\n * representing the full screen content. No side effects.\n */\n\nimport type { DashboardState } from \"../layout/renderer.js\";\nimport { padEnd, visibleLength } from \"../ansi.js\";\nimport { box } from \"../primitives/box.js\";\nimport { colorize, dim, bold, brand, isColorEnabled, scoreColor } from \"../theme.js\";\nimport { statusDot } from \"../primitives/text.js\";\nimport { PHASE_ORDER, phaseIndex as getPhaseIndex } from \"./state.js\";\n\n/**\n * Render a complete dashboard frame.\n *\n * Pure function — no I/O, no side effects, fully testable.\n */\nexport function renderFrame(state: DashboardState, width: number, _height: number): string {\n const sections: string[] = [];\n const innerWidth = Math.min(width - 4, 96); // Constrain for readability\n\n // ── Header box ─────────────────────────────────────────────\n const time = formatTime(new Date());\n\n sections.push(\n box(padEnd(state.url, innerWidth - state.mode.length - 14) + `${dim(\"mode:\")} ${state.mode}`, {\n border: \"rounded\",\n title: `VertaaUX Audit`,\n subtitle: time,\n width: innerWidth + 4,\n borderColor: brand.teal,\n titleColor: brand.lime,\n })\n );\n\n // ── Phase indicator ────────────────────────────────────────\n const currentPhaseIdx = getPhaseIndex(state.phase);\n const phaseDots = PHASE_ORDER.slice(0, -1) // Exclude Done from dots\n .map((_, i) => {\n if (i < currentPhaseIdx) return statusDot(\"pass\");\n if (i === currentPhaseIdx) return statusDot(\"active\");\n return statusDot(\"skip\");\n })\n .join(\"\");\n\n const phaseLabel = bold(state.phase);\n const phasePct = state.phaseTotal > 0 ? dim(` (${state.phaseIndex}/${state.phaseTotal})`) : \"\";\n sections.push(` Phase: ${phaseLabel} ${phaseDots}${phasePct}`);\n\n // ── Progress bars ──────────────────────────────────────────\n sections.push(\"\");\n const barWidth = innerWidth - 22; // Label(16) + pct(6)\n const analyzerNames = Object.keys(state.progress);\n\n if (analyzerNames.length > 0) {\n for (const name of analyzerNames) {\n const current = state.progress[name] || 0;\n const total = state.totals[name] || 100;\n const pct = total > 0 ? Math.min(current / total, 1) : 0;\n const filled = Math.round(pct * barWidth);\n const empty = barWidth - filled;\n\n const fillStr = isColorEnabled()\n ? colorize(\"█\".repeat(filled), brand.lime) + dim(\"░\".repeat(empty))\n : \"█\".repeat(filled) + \"░\".repeat(empty);\n\n const pctStr = `${Math.round(pct * 100)}%`;\n const label = padEnd(capitalize(name), 16);\n sections.push(` ${label}${fillStr} ${pctStr}`);\n }\n } else {\n sections.push(dim(\" Waiting for analyzers...\"));\n }\n\n // ── Stats ──────────────────────────────────────────────────\n sections.push(\"\");\n const issueStr = `Issues found: ${bold(String(state.issueCount))}`;\n const scoreStr = state.scorePreview !== null\n ? `Score preview: ${colorize(String(state.scorePreview), scoreColor(state.scorePreview))}`\n : dim(\"Score: --\");\n sections.push(` ${issueStr} ${scoreStr}`);\n\n // ── Footer ─────────────────────────────────────────────────\n sections.push(\"\");\n const keys = dim(\"[q] abort [v] verbose\");\n const elapsed = dim(formatElapsed(state.elapsed));\n const footerPad = Math.max(0, innerWidth - visibleLength(keys) - visibleLength(elapsed));\n sections.push(` ${keys}${\" \".repeat(footerPad)}${elapsed}`);\n\n return sections.join(\"\\n\");\n}\n\nfunction formatTime(date: Date): string {\n const h = String(date.getHours()).padStart(2, \"0\");\n const m = String(date.getMinutes()).padStart(2, \"0\");\n const s = String(date.getSeconds()).padStart(2, \"0\");\n return `${h}:${m}:${s}`;\n}\n\nfunction formatElapsed(ms: number): string {\n const totalSecs = Math.floor(ms / 1000);\n const mins = Math.floor(totalSecs / 60);\n const secs = totalSecs % 60;\n return `${String(mins).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")} elapsed`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n","/**\n * Alternate screen renderer for interactive TTY.\n *\n * Takes over the terminal with a full-screen dashboard.\n * Uses the alternate screen buffer to preserve scrollback.\n * On dispose, restores the original terminal.\n */\n\nimport { cursor, screen } from \"../ansi.js\";\nimport { renderFrame } from \"../dashboard/frame.js\";\nimport type { Renderer, DashboardState, SummaryResult } from \"./renderer.js\";\nimport { getTerminalWidth, getTerminalHeight } from \"../detect.js\";\nimport { bold, dim, colorize } from \"../theme.js\";\nimport { box } from \"../primitives/box.js\";\n\nexport class AlternateScreenRenderer implements Renderer {\n private output: NodeJS.WritableStream;\n private entered = false;\n\n constructor(output: NodeJS.WritableStream = process.stderr) {\n this.output = output;\n }\n\n update(state: DashboardState): void {\n if (!this.entered) {\n this.output.write(screen.altEnter + cursor.hide);\n this.entered = true;\n }\n\n const width = getTerminalWidth();\n const height = getTerminalHeight();\n const frame = renderFrame(state, width, height);\n\n this.output.write(cursor.home + screen.clear + frame);\n }\n\n finish(result: SummaryResult): void {\n this.dispose();\n\n // Write summary to stderr after exiting alternate screen\n const summary = this.renderSummary(result);\n this.output.write(summary + \"\\n\");\n }\n\n dispose(): void {\n if (this.entered) {\n this.output.write(cursor.show + screen.altExit);\n this.entered = false;\n }\n }\n\n private renderSummary(result: SummaryResult): string {\n const status = result.passed\n ? colorize(\"PASSED\", \"#4ADE80\")\n : colorize(\"FAILED\", \"#F87171\");\n\n const scoreStr = colorize(String(result.overallScore), result.overallScore >= 70 ? \"#4ADE80\" : \"#F87171\");\n\n const lines = [\n `${bold(\"Audit Complete\")} — ${status}`,\n `${dim(\"URL:\")} ${result.url}`,\n `${dim(\"Score:\")} ${scoreStr} ${dim(`| ${result.issueCount} issues | ${formatElapsed(result.elapsed)}`)}`,\n ];\n\n const categories = Object.entries(result.scores)\n .map(([cat, score]) => ` ${cat}: ${score}`)\n .join(\"\\n\");\n\n if (categories) {\n lines.push(dim(categories));\n }\n\n return box(lines.join(\"\\n\"), { border: \"rounded\", title: \"VertaaUX\", width: Math.min(getTerminalWidth(), 80) });\n }\n}\n\nfunction formatElapsed(ms: number): string {\n const secs = Math.round(ms / 1000);\n if (secs < 60) return `${secs}s`;\n return `${Math.floor(secs / 60)}m ${secs % 60}s`;\n}\n","/**\n * Inline renderer for CI/piped environments.\n *\n * Writes timestamped, non-interactive log lines to stderr.\n * No cursor movement, no ANSI escape sequences beyond color.\n * Compatible with log aggregation tools.\n */\n\nimport type { Renderer, DashboardState, SummaryResult } from \"./renderer.js\";\nimport { dim, colorize, bold, isColorEnabled } from \"../theme.js\";\n\nexport class InlineRenderer implements Renderer {\n private output: NodeJS.WritableStream;\n private lastPhase = \"\";\n\n constructor(output: NodeJS.WritableStream = process.stderr) {\n this.output = output;\n }\n\n update(state: DashboardState): void {\n // Only write when phase changes to avoid log spam\n if (state.phase !== this.lastPhase) {\n this.lastPhase = state.phase;\n const ts = timestamp();\n const phasePct = state.phaseTotal > 0\n ? ` (${state.phaseIndex}/${state.phaseTotal})`\n : \"\";\n\n this.output.write(\n `${dim(ts)} ${bold(state.phase)}${dim(phasePct)} ${dim(`| ${state.issueCount} issues`)}\\n`\n );\n }\n }\n\n finish(result: SummaryResult): void {\n const ts = timestamp();\n const status = result.passed\n ? isColorEnabled() ? colorize(\"PASSED\", \"#4ADE80\") : \"PASSED\"\n : isColorEnabled() ? colorize(\"FAILED\", \"#F87171\") : \"FAILED\";\n\n const elapsed = formatElapsed(result.elapsed);\n\n this.output.write(\n `${dim(ts)} ${bold(\"Audit Complete\")} ${status} ` +\n `score=${result.overallScore} issues=${result.issueCount} ${dim(elapsed)}\\n`\n );\n }\n\n dispose(): void {\n // No cleanup needed for inline renderer\n }\n}\n\nfunction timestamp(): string {\n const now = new Date();\n return `[${pad2(now.getHours())}:${pad2(now.getMinutes())}:${pad2(now.getSeconds())}]`;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n\nfunction formatElapsed(ms: number): string {\n const secs = Math.round(ms / 1000);\n if (secs < 60) return `(${secs}s)`;\n return `(${Math.floor(secs / 60)}m ${secs % 60}s)`;\n}\n","/**\n * Renderer interface and factory for terminal output.\n *\n * Two rendering modes:\n * - AlternateScreenRenderer: Full terminal takeover (TTY)\n * - InlineRenderer: Timestamped log lines (CI/piped)\n */\n\nimport { isCI, isTTY } from \"../detect.js\";\nimport { AlternateScreenRenderer } from \"./alternate.js\";\nimport { InlineRenderer } from \"./inline.js\";\n\nexport interface DashboardState {\n phase: string;\n phaseIndex: number;\n phaseTotal: number;\n url: string;\n mode: string;\n progress: Record<string, number>;\n totals: Record<string, number>;\n issueCount: number;\n scorePreview: number | null;\n verbose: boolean;\n elapsed: number;\n}\n\nexport interface SummaryResult {\n url: string;\n mode: string;\n overallScore: number;\n scores: Record<string, number>;\n issueCount: number;\n passed: boolean;\n elapsed: number;\n}\n\nexport interface Renderer {\n /** Update the display with new state */\n update(state: DashboardState): void;\n /** Show final summary and clean up */\n finish(result: SummaryResult): void;\n /** Clean up resources (keyboard, alternate screen, etc.) */\n dispose(): void;\n}\n\nexport type RendererMode = \"alternate\" | \"inline\" | \"auto\";\n\n/**\n * Create a renderer based on mode or auto-detection.\n *\n * auto: alternate in interactive TTY, inline in CI/piped\n */\nexport function createRenderer(\n mode: RendererMode = \"auto\",\n output: NodeJS.WritableStream = process.stderr,\n): Renderer {\n if (mode === \"auto\") {\n mode = isTTY() && !isCI() ? \"alternate\" : \"inline\";\n }\n\n if (mode === \"alternate\") {\n return new AlternateScreenRenderer(output);\n }\n\n return new InlineRenderer(output);\n}\n","/**\n * Keyboard handler for dashboard interaction.\n *\n * Listens for keypresses in raw mode and emits semantic events.\n * Only works in TTY — gracefully no-ops in non-TTY environments.\n */\n\nimport { EventEmitter } from \"node:events\";\n\nexport type KeyboardEvent = \"quit\" | \"verbose\";\n\nexport interface KeyboardHandler {\n /** Start listening for keypresses */\n start(): void;\n /** Stop listening and restore terminal state */\n dispose(): void;\n /** Register an event handler */\n on(event: KeyboardEvent, handler: () => void): void;\n}\n\n/**\n * Create a keyboard handler.\n *\n * @param stdin - Input stream (defaults to process.stdin, injectable for testing)\n */\nexport function createKeyboardHandler(\n stdin: NodeJS.ReadStream = process.stdin,\n): KeyboardHandler {\n const emitter = new EventEmitter();\n let started = false;\n let wasRawMode = false;\n\n function onData(data: Buffer): void {\n const key = data.toString();\n\n // Ctrl+C\n if (key === \"\\x03\") {\n emitter.emit(\"quit\");\n return;\n }\n\n switch (key.toLowerCase()) {\n case \"q\":\n emitter.emit(\"quit\");\n break;\n case \"v\":\n emitter.emit(\"verbose\");\n break;\n }\n }\n\n return {\n start() {\n if (started) return;\n if (!stdin.isTTY || typeof stdin.setRawMode !== \"function\") return;\n\n started = true;\n wasRawMode = stdin.isRaw;\n stdin.setRawMode(true);\n stdin.resume();\n stdin.on(\"data\", onData);\n },\n\n dispose() {\n if (!started) return;\n started = false;\n stdin.removeListener(\"data\", onData);\n if (stdin.isTTY && typeof stdin.setRawMode === \"function\") {\n stdin.setRawMode(wasRawMode);\n }\n stdin.pause();\n },\n\n on(event: KeyboardEvent, handler: () => void) {\n emitter.on(event, handler);\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/ansi.ts","../node_modules/chalk/source/vendor/ansi-styles/index.js","../node_modules/chalk/source/vendor/supports-color/index.js","../node_modules/chalk/source/utilities.js","../node_modules/chalk/source/index.js","../src/theme.ts","../src/detect.ts","../src/symbols.ts","../src/plain.ts","../src/easing.ts","../src/primitives/text.ts","../src/primitives/box.ts","../src/primitives/table.ts","../src/primitives/spinner.ts","../src/primitives/progress.ts","../src/primitives/list.ts","../src/primitives/diff.ts","../src/primitives/error-box.ts","../src/layout/step-list.ts","../src/layout/run-steps.ts","../src/dashboard/state.ts","../src/dashboard/frame.ts","../src/layout/alternate.ts","../src/layout/composed.ts","../src/layout/inline.ts","../src/layout/renderer.ts","../src/layout/physicalRows.ts","../src/layout/viewport.ts","../src/dashboard/keyboard.ts"],"names":["style","process","styles","chalk","label","bold","dim","text","sym","formatElapsed"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Raw ANSI escape sequences for terminal control.\n *\n * No dependencies — pure string constants and functions.\n * Used by renderers and primitives for direct terminal manipulation.\n */\n\nconst ESC = \"\\x1b\";\nconst CSI = `${ESC}[`;\n\n// ── Cursor movement ──────────────────────────────────────────────\n\nexport const cursor = {\n /** Move cursor to row, col (1-indexed) */\n to: (row: number, col: number) => `${CSI}${row};${col}H`,\n /** Move cursor to top-left */\n home: `${CSI}H`,\n /** Move cursor up N lines */\n up: (n = 1) => `${CSI}${n}A`,\n /** Move cursor down N lines */\n down: (n = 1) => `${CSI}${n}B`,\n /** Move cursor to column N (1-indexed) */\n column: (n: number) => `${CSI}${n}G`,\n /** Hide cursor */\n hide: `${CSI}?25l`,\n /** Show cursor */\n show: `${CSI}?25h`,\n /** Save cursor position */\n save: `${ESC}7`,\n /** Restore cursor position */\n restore: `${ESC}8`,\n} as const;\n\n// ── Screen control ───────────────────────────────────────────────\n\nexport const screen = {\n /** Clear entire screen */\n clear: `${CSI}2J`,\n /** Clear from cursor to end of screen */\n clearDown: `${CSI}J`,\n /** Clear from cursor to end of line */\n clearLine: `${CSI}K`,\n /** Clear entire line */\n clearFullLine: `${CSI}2K`,\n /** Enter alternate screen buffer (preserves scrollback) */\n altEnter: `${CSI}?1049h`,\n /** Exit alternate screen buffer */\n altExit: `${CSI}?1049l`,\n} as const;\n\n// ── Style reset ──────────────────────────────────────────────────\n\nexport const style = {\n /** Reset all attributes */\n reset: `${CSI}0m`,\n} as const;\n\n// ── Box drawing characters ───────────────────────────────────────\n\nexport const borders = {\n single: {\n topLeft: \"\\u250C\", // ┌\n topRight: \"\\u2510\", // ┐\n bottomLeft: \"\\u2514\", // └\n bottomRight: \"\\u2518\", // ┘\n horizontal: \"\\u2500\", // ─\n vertical: \"\\u2502\", // │\n },\n double: {\n topLeft: \"\\u2554\", // ╔\n topRight: \"\\u2557\", // ╗\n bottomLeft: \"\\u255A\", // ╚\n bottomRight: \"\\u255D\", // ╝\n horizontal: \"\\u2550\", // ═\n vertical: \"\\u2551\", // ║\n },\n rounded: {\n topLeft: \"\\u256D\", // ╭\n topRight: \"\\u256E\", // ╮\n bottomLeft: \"\\u2570\", // ╰\n bottomRight: \"\\u256F\", // ╯\n horizontal: \"\\u2500\", // ─\n vertical: \"\\u2502\", // │\n },\n heavy: {\n topLeft: \"\\u250F\", // ┏\n topRight: \"\\u2513\", // ┓\n bottomLeft: \"\\u2517\", // ┗\n bottomRight: \"\\u251B\", // ┛\n horizontal: \"\\u2501\", // ━\n vertical: \"\\u2503\", // ┃\n },\n} as const;\n\nexport type BorderStyle = keyof typeof borders;\n\n/** Common type for any border character set */\nexport interface BorderChars {\n readonly topLeft: string;\n readonly topRight: string;\n readonly bottomLeft: string;\n readonly bottomRight: string;\n readonly horizontal: string;\n readonly vertical: string;\n}\n\n// ── Utility ──────────────────────────────────────────────────────\n\n/** Strip all ANSI escape sequences from a string */\nexport function stripAnsi(str: string): string {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\x1b\\[[0-9;]*[A-Za-z]|\\x1b[78]/g, \"\");\n}\n\n/** Get visible character width of a string (excluding ANSI codes) */\nexport function visibleLength(str: string): number {\n return stripAnsi(str).length;\n}\n\n/** Pad string to visible width, accounting for ANSI codes */\nexport function padEnd(str: string, width: number): string {\n const visible = visibleLength(str);\n if (visible >= width) return str;\n return str + \" \".repeat(width - visible);\n}\n\n/** Pad string to visible width from left */\nexport function padStart(str: string, width: number): string {\n const visible = visibleLength(str);\n if (visible >= width) return str;\n return \" \".repeat(width - visible) + str;\n}\n\n/** Center string within width, accounting for ANSI codes */\nexport function center(str: string, width: number): string {\n const visible = visibleLength(str);\n if (visible >= width) return str;\n const left = Math.floor((width - visible) / 2);\n const right = width - visible - left;\n return \" \".repeat(left) + str + \" \".repeat(right);\n}\n\n/** Truncate string to visible width, adding ellipsis */\nexport function truncate(str: string, maxWidth: number): string {\n if (maxWidth <= 0) return \"\";\n const stripped = stripAnsi(str);\n if (stripped.length <= maxWidth) return str;\n if (maxWidth <= 3) return stripped.slice(0, maxWidth);\n return stripped.slice(0, maxWidth - 1) + \"\\u2026\"; // …\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","/**\n * VertaaUX brand theme for terminal output.\n *\n * Defines the color palette, severity colors, score gradients,\n * and semantic tokens used across all TUI primitives.\n */\n\nimport chalk from \"chalk\";\n\n// ── Brand palette ────────────────────────────────────────────────\n\nexport const brand = {\n lime: \"#78FFB4\",\n tealLight: \"#6BEEBD\",\n teal: \"#5EDDC6\",\n cyan: \"#51CCCE\",\n dark: \"#0A0F1A\",\n} as const;\n\n/** Gradient stops from lime → cyan (for banner, headers, accents) */\nexport const gradient = [brand.lime, brand.tealLight, brand.teal, brand.cyan] as const;\n\n// ── Severity palette ─────────────────────────────────────────────\n\nexport const severity = {\n critical: \"#FF6B6B\",\n error: \"#FF6B6B\",\n serious: \"#FFD93D\",\n warning: \"#FFD93D\",\n moderate: \"#6BCEFF\",\n minor: \"#6BCEFF\",\n info: \"#888888\",\n} as const;\n\nexport type SeverityLevel = keyof typeof severity;\n\n/** Severity display labels */\nexport const severityLabels: Record<string, string> = {\n critical: \"CRITICAL\",\n error: \"ERROR\",\n serious: \"SERIOUS\",\n warning: \"WARNING\",\n moderate: \"MODERATE\",\n minor: \"MINOR\",\n info: \"INFO\",\n};\n\n/** Severity sort order (highest first) */\nexport const severityOrder: Record<string, number> = {\n critical: 0,\n error: 1,\n serious: 2,\n warning: 3,\n minor: 4,\n moderate: 5,\n info: 6,\n};\n\n// ── Score colors ─────────────────────────────────────────────────\n\n/** Score thresholds and their corresponding colors */\nconst SCORE_THRESHOLDS = [\n { min: 90, color: \"#4ADE80\" }, // Green — excellent\n { min: 70, color: \"#FACC15\" }, // Yellow — needs work\n { min: 0, color: \"#F87171\" }, // Red — poor\n] as const;\n\n/**\n * Get hex color for a score value (0-100).\n */\nexport function scoreColor(score: number): string {\n for (const { min, color } of SCORE_THRESHOLDS) {\n if (score >= min) return color;\n }\n return SCORE_THRESHOLDS[SCORE_THRESHOLDS.length - 1].color;\n}\n\n// ── Semantic tokens ──────────────────────────────────────────────\n\nexport const tokens = {\n success: \"#4ADE80\",\n error: \"#F87171\",\n warning: \"#FACC15\",\n info: \"#6BCEFF\",\n muted: \"#6B7280\",\n accent: brand.lime,\n} as const;\n\n// ── Color application helpers ────────────────────────────────────\n\nlet _colorEnabled = true;\n\n/** Set whether color output is enabled (call early, based on detect.ts) */\nexport function setColorEnabled(enabled: boolean): void {\n _colorEnabled = enabled;\n // Sync chalk's internal color level so it actually emits ANSI codes\n // (chalk may detect level 0 in non-TTY environments like test runners)\n chalk.level = enabled ? 3 : 0;\n}\n\n/** Check if color is currently enabled */\nexport function isColorEnabled(): boolean {\n return _colorEnabled;\n}\n\n/** Apply hex color to text (respects color-enabled state) */\nexport function colorize(text: string, hex: string): string {\n if (!_colorEnabled) return text;\n return chalk.hex(hex)(text);\n}\n\n/** Apply bold + hex color */\nexport function boldColor(text: string, hex: string): string {\n if (!_colorEnabled) return text;\n return chalk.hex(hex).bold(text);\n}\n\n/** Apply dim styling */\nexport function dim(text: string): string {\n if (!_colorEnabled) return text;\n return chalk.dim(text);\n}\n\n/** Apply bold styling */\nexport function bold(text: string): string {\n if (!_colorEnabled) return text;\n return chalk.bold(text);\n}\n\n/**\n * Get colored severity label for a severity level.\n * High-severity levels (critical, error, serious, warning) are bold; others are plain colored.\n */\nexport function severityColor(level: string | undefined): string {\n const normalized = (level || \"info\").toLowerCase();\n const hex = severity[normalized as SeverityLevel] ?? severity.info;\n const isBold = [\"critical\", \"error\", \"serious\", \"warning\"].includes(normalized);\n const label = normalized.toUpperCase();\n return isBold ? boldColor(label, hex) : colorize(label, hex);\n}\n\n/** Apply background hex color to text */\nexport function bgColor(text: string, hex: string): string {\n if (!_colorEnabled) return text;\n return chalk.bgHex(hex)(text);\n}\n\n/** Apply gradient across text characters */\nexport function applyGradient(text: string, colors: readonly string[] = gradient): string {\n if (!_colorEnabled) return text;\n const colorCount = colors.length;\n let result = \"\";\n let idx = 0;\n\n for (const char of text) {\n if (char !== \" \" && char !== \"\\n\") {\n result += chalk.hex(colors[idx % colorCount])(char);\n idx++;\n } else {\n result += char;\n }\n }\n\n return result;\n}\n","/**\n * Environment detection for terminal capabilities.\n *\n * Standalone implementations (no CLI dependency) that detect\n * TTY, CI, color support, and terminal dimensions.\n */\n\n/** Check if running in a CI environment. */\nexport function isCI(): boolean {\n return Boolean(\n process.env.CI ||\n process.env.CONTINUOUS_INTEGRATION ||\n process.env.BUILD_NUMBER ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.CIRCLECI ||\n process.env.JENKINS_URL ||\n process.env.TRAVIS ||\n process.env.BUILDKITE\n );\n}\n\n/** Check if stderr is a TTY (used for UI output). */\nexport function isTTY(): boolean {\n return Boolean(process.stderr.isTTY);\n}\n\n/** Check if stdout is a TTY (used for data output detection). */\nexport function isStdoutTTY(): boolean {\n return Boolean(process.stdout.isTTY);\n}\n\n/** Check if stdin is a TTY (used for keyboard input detection). */\nexport function isStdinTTY(): boolean {\n return Boolean(process.stdin.isTTY);\n}\n\n/**\n * Determine if colors should be used.\n *\n * Priority: NO_COLOR > FORCE_COLOR > CI (off) > TTY detection\n */\nexport function shouldUseColor(): boolean {\n if (process.env.NO_COLOR !== undefined) return false;\n if (process.env.FORCE_COLOR !== undefined) return true;\n if (isCI()) return false;\n return isTTY();\n}\n\n/** Get terminal width from stderr (where UI renders). Falls back to 80.\n *\n * Checks COLUMNS env var first so that non-PTY subprocesses (e.g. snapshot\n * test harness) can set a deterministic width for reproducible output.\n */\nexport function getTerminalWidth(): number {\n return parseInt(process.env.COLUMNS ?? \"\", 10) || process.stderr.columns || 80;\n}\n\n/** Get terminal height from stderr. Falls back to 24. */\nexport function getTerminalHeight(): number {\n return process.stderr.rows || 24;\n}\n\n/** Check if terminal supports Unicode (not dumb terminal). */\nexport function supportsUnicode(): boolean {\n if (process.env.TERM === \"dumb\") return false;\n if (process.platform === \"win32\") {\n return Boolean(process.env.WT_SESSION || process.env.TERM_PROGRAM);\n }\n return true;\n}\n","/**\n * Three-tier glyph map for terminal status symbols.\n *\n * Tiers: nerd (Nerd Font PUA glyphs) → unicode (basic Unicode) → ascii (--plain)\n * Default tier is \"unicode\". Tier is switched to \"ascii\" by setPlainMode(true).\n *\n * Circular dependency note: This module does NOT import from plain.ts.\n * plain.ts calls setSymbolTier(\"ascii\") directly. detectSymbolTier() accepts\n * an options parameter to receive the plain mode state without importing it.\n */\n\nimport { supportsUnicode } from \"./detect.js\";\n\nexport type SymbolRole = \"success\" | \"fail\" | \"warning\" | \"info\" | \"pending\" | \"running\";\nexport type SymbolTier = \"nerd\" | \"unicode\" | \"ascii\";\n\n/** Three-tier glyph map per CONTEXT.md locked decisions */\nconst SYMBOL_MAP: Record<SymbolTier, Record<SymbolRole, string>> = {\n nerd: {\n // Nerd Font Material Design icons (private use area U+F0000+)\n success: \"\\uDB80\\uDD2C\", // 󰄬 nf-md-check_circle\n fail: \"\\uDB80\\uDD56\", // 󰅖 nf-md-close_circle\n warning: \"\\uDB80\\uDDA6\", // 󰀦 nf-md-alert\n info: \"\\uDB80\\uDEFD\", // 󰋽 nf-md-information\n pending: \"\\u25EF\", // ◯ large circle (no NF required)\n running: \"\\u25C9\", // ◉ fisheye (no NF required)\n },\n unicode: {\n success: \"✓\",\n fail: \"✗\",\n warning: \"▲\",\n info: \"ℹ\",\n pending: \"○\",\n running: \"◆\",\n },\n ascii: {\n success: \"+\",\n fail: \"x\",\n warning: \"!\",\n info: \"i\",\n pending: \"-\",\n running: \"*\",\n },\n} as const;\n\n/** Current active tier (default is unicode — never nerd to avoid [?] boxes) */\nlet _tier: SymbolTier = \"unicode\";\n\n/** Set the active symbol tier */\nexport function setSymbolTier(tier: SymbolTier): void {\n _tier = tier;\n}\n\n/** Get the symbol string for a given role using the current tier */\nexport function sym(role: SymbolRole): string {\n return SYMBOL_MAP[_tier][role];\n}\n\nexport interface DetectSymbolTierOptions {\n /** Override plain mode state (avoids circular dependency with plain.ts) */\n plainMode?: boolean;\n}\n\n/**\n * Detect the appropriate symbol tier based on environment.\n *\n * Priority:\n * 1. plainMode option (or isPlainMode()) → \"ascii\"\n * 2. VERTAA_ICONS env var (nerd|unicode|ascii) → explicit choice\n * 3. Known Nerd Font terminals (TERM_PROGRAM) → \"nerd\"\n * 4. supportsUnicode() → \"unicode\"\n * 5. Fallback → \"ascii\"\n */\nexport function detectSymbolTier(options: DetectSymbolTierOptions = {}): SymbolTier {\n // plain mode → always ascii\n if (options.plainMode) return \"ascii\";\n\n // Explicit VERTAA_ICONS env var for full user control\n const envIcons = process.env.VERTAA_ICONS;\n if (envIcons === \"nerd\" || envIcons === \"unicode\" || envIcons === \"ascii\") {\n return envIcons;\n }\n\n // Known Nerd Font terminals\n const termProgram = process.env.TERM_PROGRAM;\n if (termProgram === \"iTerm.app\" || termProgram === \"WezTerm\") {\n return \"nerd\";\n }\n\n // Unicode support\n if (supportsUnicode()) return \"unicode\";\n\n return \"ascii\";\n}\n","/**\n * Plain mode state management.\n *\n * --plain is a superset of --no-color: it also replaces Unicode box-drawing\n * chars and status symbols with ASCII equivalents, making output\n * grep/awk/pipe-friendly (PLAIN-01, PLAIN-02).\n *\n * Circular dependency note: symbols.ts does NOT import from plain.ts.\n * This module calls setSymbolTier() directly. detectSymbolTier() accepts\n * a plainMode option parameter to receive state without circular import.\n */\n\nimport { setColorEnabled } from \"./theme.js\";\nimport { setSymbolTier } from \"./symbols.js\";\n\nlet _plainMode = false;\n\n/**\n * Enable or disable plain mode.\n *\n * When enabled:\n * - isColorEnabled() returns false (color disabled)\n * - Symbol tier is switched to \"ascii\"\n * - toPlainBox() replaces Unicode box-drawing chars with ASCII\n */\nexport function setPlainMode(enabled: boolean): void {\n _plainMode = enabled;\n if (enabled) {\n setColorEnabled(false); // --plain is superset of --no-color\n setSymbolTier(\"ascii\"); // force ASCII glyph tier\n }\n}\n\n/** Whether plain mode is currently active */\nexport function isPlainMode(): boolean {\n return _plainMode;\n}\n\n/**\n * Replace Unicode box-drawing characters with ASCII equivalents.\n *\n * Is a no-op when plain mode is not active.\n * Replacements:\n * ─━═ → - │┃║ → | all corners/junctions (including rounded ╭╮╰╯) → +\n */\nexport function toPlainBox(str: string): string {\n if (!_plainMode) return str;\n\n return str\n // Horizontal lines: ─ (U+2500), ━ (U+2501), ═ (U+2550)\n .replace(/[─━═]/g, \"-\")\n // Vertical lines: │ (U+2502), ┃ (U+2503), ║ (U+2551)\n .replace(/[│┃║]/g, \"|\")\n // Rounded corners: ╭ (U+256D), ╮ (U+256E), ╰ (U+2570), ╯ (U+256F)\n .replace(/[╭╮╰╯]/g, \"+\")\n // Top-left corners: ┌┍┎┏╔\n .replace(/[┌┍┎┏╔]/g, \"+\")\n // Top-right corners: ┐┑┒┓╗\n .replace(/[┐┑┒┓╗]/g, \"+\")\n // Bottom-left corners: └┕┖┗╚\n .replace(/[└┕┖┗╚]/g, \"+\")\n // Bottom-right corners: ┘┙┚┛╝\n .replace(/[┘┙┚┛╝]/g, \"+\")\n // T-junctions and cross: ├┤┬┴┼\n .replace(/[├┤┬┴┼]/g, \"+\");\n}\n","/**\n * Easing functions for animation clock.\n *\n * Pure math functions with no side effects or dependencies.\n * Consumed by Phase 97+ for banner entrance animation and spinner timing.\n */\n\n/** Linear progression — t maps directly to output */\nexport function linear(t: number): number {\n return t;\n}\n\n/** Ease in — slow start, fast end (quadratic) */\nexport function easeIn(t: number): number {\n return t * t;\n}\n\n/** Ease out — fast start, slow end */\nexport function easeOut(t: number): number {\n return t * (2 - t);\n}\n\n/** Ease in-out — slow start and end, fast middle */\nexport function easeInOut(t: number): number {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\n/**\n * Interpolate between two values using an easing function.\n *\n * @param from - Start value\n * @param to - End value\n * @param t - Progress 0..1 (clamped automatically)\n * @param ease - Easing function (default: linear)\n */\nexport function lerp(from: number, to: number, t: number, ease = linear): number {\n const clamped = Math.max(0, Math.min(1, t));\n return from + (to - from) * ease(clamped);\n}\n","/**\n * Text styling primitives for terminal output.\n *\n * Semantic text functions for headings, labels, badges, and emphasis.\n * All respect the color-enabled state from theme.ts.\n */\n\nimport {\n colorize,\n boldColor,\n dim as dimColor,\n bold as boldStyle,\n isColorEnabled,\n severity as severityPalette,\n severityLabels,\n scoreColor,\n brand,\n tokens,\n} from \"../theme.js\";\n\n/** Render a section heading with brand accent */\nexport function heading(text: string): string {\n return boldColor(text, brand.lime);\n}\n\n/** Render a sub-heading */\nexport function subheading(text: string): string {\n return boldColor(text, brand.teal);\n}\n\n/** Render a label (key in key-value pairs) */\nexport function label(text: string): string {\n return boldStyle(text);\n}\n\n/** Render dimmed/muted text */\nexport function dim(text: string): string {\n return dimColor(text);\n}\n\n/** Render bold text */\nexport function bold(text: string): string {\n return boldStyle(text);\n}\n\n/** Render a clickable-looking link (underlined cyan) */\nexport function link(text: string): string {\n if (!isColorEnabled()) return text;\n return colorize(`\\x1b[4m${text}\\x1b[24m`, tokens.info);\n}\n\n/** Render severity badge: colored, bold, uppercase label */\nexport function severityBadge(level: string): string {\n const normalized = level.toLowerCase();\n const displayLabel = severityLabels[normalized] || level.toUpperCase();\n const hex = severityPalette[normalized as keyof typeof severityPalette] || tokens.muted;\n return boldColor(displayLabel, hex);\n}\n\n/** Render score badge: color-coded number */\nexport function scoreBadge(score: number): string {\n const hex = scoreColor(score);\n return boldColor(String(score), hex);\n}\n\n/** Render success text */\nexport function success(text: string): string {\n return colorize(text, tokens.success);\n}\n\n/** Render error text */\nexport function error(text: string): string {\n return colorize(text, tokens.error);\n}\n\n/** Render warning text */\nexport function warning(text: string): string {\n return colorize(text, tokens.warning);\n}\n\n/** Render info text */\nexport function info(text: string): string {\n return colorize(text, tokens.info);\n}\n\n/** Render a key: value pair with styled label */\nexport function keyValue(key: string, value: string): string {\n return `${boldStyle(key)}: ${value}`;\n}\n\n/** Render a horizontal rule that spans the terminal width */\nexport function hr(width: number, char = \"\\u2500\"): string {\n const line = char.repeat(width);\n return dimColor(line);\n}\n\n/** Render a status indicator dot */\nexport function statusDot(status: \"pass\" | \"fail\" | \"warn\" | \"skip\" | \"active\"): string {\n const map: Record<string, { symbol: string; hex: string }> = {\n pass: { symbol: \"\\u25CF\", hex: tokens.success }, // ●\n fail: { symbol: \"\\u25CF\", hex: tokens.error }, // ●\n warn: { symbol: \"\\u25CF\", hex: tokens.warning }, // ●\n skip: { symbol: \"\\u25CB\", hex: tokens.muted }, // ○\n active: { symbol: \"\\u25CF\", hex: brand.lime }, // ●\n };\n const { symbol, hex } = map[status] || map.skip;\n return colorize(symbol, hex);\n}\n","/**\n * Box primitive for bordered terminal output.\n *\n * Renders content inside a Unicode box with optional title, subtitle,\n * padding, and multiple border styles.\n */\n\nimport { borders, type BorderStyle, type BorderChars, padEnd, visibleLength } from \"../ansi.js\";\nimport { colorize, dim, brand, isColorEnabled } from \"../theme.js\";\nimport { getTerminalWidth } from \"../detect.js\";\nimport { toPlainBox } from \"../plain.js\";\n\nexport interface BoxOptions {\n /** Border style: single, double, rounded, heavy, none */\n border?: BorderStyle | \"none\";\n /** Inner padding (number of spaces on each side) */\n padding?: number;\n /** Vertical padding (blank lines above/below content) */\n paddingY?: number;\n /** Title displayed on the top border */\n title?: string;\n /** Subtitle displayed on the bottom border */\n subtitle?: string;\n /** Fixed width (defaults to terminal width - 2) */\n width?: number;\n /** Border color hex (defaults to brand.teal) */\n borderColor?: string;\n /** Title color hex (defaults to brand.lime) */\n titleColor?: string;\n}\n\n/**\n * Render content inside a bordered box.\n *\n * @param content - Text content (can be multi-line)\n * @param opts - Box options\n * @returns Rendered box string\n */\nexport function box(content: string, opts: BoxOptions = {}): string {\n const {\n border = \"rounded\",\n padding = 1,\n paddingY = 0,\n title,\n subtitle,\n width: fixedWidth,\n borderColor = brand.teal,\n titleColor = brand.lime,\n } = opts;\n\n if (border === \"none\") {\n return renderNoBorder(content, padding);\n }\n\n const chars = borders[border];\n const termWidth = fixedWidth || Math.min(getTerminalWidth(), 100);\n // Inner width = total - 2 borders - 2*padding\n const innerWidth = termWidth - 2 - padding * 2;\n\n const bc = (ch: string) => colorize(ch, borderColor);\n const lines = wrapLines(content, innerWidth);\n const pad = \" \".repeat(padding);\n const result: string[] = [];\n\n // Top border\n result.push(renderTopBorder(chars, termWidth, title, titleColor, borderColor));\n\n // Vertical padding\n for (let i = 0; i < paddingY; i++) {\n result.push(bc(chars.vertical) + \" \".repeat(termWidth - 2) + bc(chars.vertical));\n }\n\n // Content lines\n for (const line of lines) {\n const padded = pad + padEnd(line, innerWidth) + pad;\n result.push(bc(chars.vertical) + padded + bc(chars.vertical));\n }\n\n // Vertical padding\n for (let i = 0; i < paddingY; i++) {\n result.push(bc(chars.vertical) + \" \".repeat(termWidth - 2) + bc(chars.vertical));\n }\n\n // Bottom border\n result.push(renderBottomBorder(chars, termWidth, subtitle, borderColor));\n\n const output = result.join(\"\\n\");\n return toPlainBox(output);\n}\n\nfunction renderNoBorder(content: string, padding: number): string {\n const pad = \" \".repeat(padding);\n return content\n .split(\"\\n\")\n .map((line) => pad + line + pad)\n .join(\"\\n\");\n}\n\nfunction renderTopBorder(\n chars: BorderChars,\n width: number,\n title: string | undefined,\n titleColor: string,\n borderColor: string,\n): string {\n const bc = (ch: string) => colorize(ch, borderColor);\n const hLen = width - 2; // Total horizontal chars\n\n if (title) {\n const titleStr = isColorEnabled()\n ? ` ${colorize(title, titleColor)} `\n : ` ${title} `;\n const titleVisible = visibleLength(titleStr);\n const leftDash = 1; // One dash after corner\n const rightDash = Math.max(0, hLen - leftDash - titleVisible);\n return (\n bc(chars.topLeft) +\n bc(chars.horizontal.repeat(leftDash)) +\n titleStr +\n bc(chars.horizontal.repeat(rightDash)) +\n bc(chars.topRight)\n );\n }\n\n return bc(chars.topLeft) + bc(chars.horizontal.repeat(hLen)) + bc(chars.topRight);\n}\n\nfunction renderBottomBorder(\n chars: BorderChars,\n width: number,\n subtitle: string | undefined,\n borderColor: string,\n): string {\n const bc = (ch: string) => colorize(ch, borderColor);\n const hLen = width - 2;\n\n if (subtitle) {\n const subStr = ` ${dim(subtitle)} `;\n const subVisible = visibleLength(subStr);\n const rightDash = 1;\n const leftDash = Math.max(0, hLen - rightDash - subVisible);\n return (\n bc(chars.bottomLeft) +\n bc(chars.horizontal.repeat(leftDash)) +\n subStr +\n bc(chars.horizontal.repeat(rightDash)) +\n bc(chars.bottomRight)\n );\n }\n\n return bc(chars.bottomLeft) + bc(chars.horizontal.repeat(hLen)) + bc(chars.bottomRight);\n}\n\n/** Wrap text into lines that fit within maxWidth */\nfunction wrapLines(text: string, maxWidth: number): string[] {\n const result: string[] = [];\n\n for (const rawLine of text.split(\"\\n\")) {\n if (rawLine.length <= maxWidth) {\n result.push(rawLine);\n continue;\n }\n\n // Word-wrap long lines\n const words = rawLine.split(\" \");\n let current = \"\";\n\n for (const word of words) {\n if (current.length === 0) {\n current = word;\n } else if (current.length + 1 + word.length <= maxWidth) {\n current += \" \" + word;\n } else {\n result.push(current);\n current = word;\n }\n }\n\n if (current.length > 0) {\n result.push(current);\n }\n }\n\n return result;\n}\n","/**\n * Table primitive for terminal output.\n *\n * Renders aligned, color-coded tables with auto-width,\n * group headers, and terminal-width-aware truncation.\n * No external table library — pure string rendering.\n */\n\nimport { padEnd, padStart, visibleLength, truncate as truncateStr } from \"../ansi.js\";\nimport { dim, bold } from \"../theme.js\";\nimport { getTerminalWidth } from \"../detect.js\";\n\nexport interface Column {\n /** Data key to read from row objects */\n key: string;\n /** Column header label */\n label: string;\n /** Fixed width (characters). If omitted, auto-calculated. */\n width?: number;\n /** Text alignment */\n align?: \"left\" | \"right\" | \"center\";\n /** Custom color function for cell values */\n color?: (value: string) => string;\n}\n\nexport interface TableOptions {\n /** Maximum total width (defaults to terminal width) */\n maxWidth?: number;\n /** Show borders between rows */\n rowBorders?: boolean;\n /** Group header styling */\n groupLabel?: string;\n}\n\n/**\n * Render a data table from rows and column definitions.\n */\nexport function renderTable(\n rows: Record<string, string>[],\n columns: Column[],\n opts: TableOptions = {},\n): string {\n if (rows.length === 0) return \"\";\n\n const maxWidth = opts.maxWidth || getTerminalWidth();\n const colWidths = calculateColumnWidths(rows, columns, maxWidth);\n const lines: string[] = [];\n\n // Group header\n if (opts.groupLabel) {\n lines.push(dim(`── ${opts.groupLabel} ${\"─\".repeat(Math.max(0, maxWidth - opts.groupLabel.length - 4))}`));\n }\n\n // Header\n lines.push(renderHeaderRow(columns, colWidths));\n lines.push(renderSeparator(colWidths));\n\n // Data rows\n for (const row of rows) {\n lines.push(renderDataRow(row, columns, colWidths));\n if (opts.rowBorders) {\n lines.push(renderSeparator(colWidths));\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction calculateColumnWidths(\n rows: Record<string, string>[],\n columns: Column[],\n maxWidth: number,\n): number[] {\n const GAP = 2; // Space between columns\n const widths: number[] = [];\n let fixedTotal = 0;\n let autoCount = 0;\n\n // First pass: fixed widths and content-based maximums\n for (const col of columns) {\n if (col.width) {\n widths.push(col.width);\n fixedTotal += col.width;\n } else {\n // Calculate based on content\n const headerLen = col.label.length;\n const maxContent = rows.reduce((max, row) => {\n const val = row[col.key] || \"\";\n return Math.max(max, val.length);\n }, headerLen);\n widths.push(maxContent);\n autoCount++;\n }\n }\n\n // Total with gaps\n const gaps = (columns.length - 1) * GAP;\n const totalNeeded = widths.reduce((s, w) => s + w, 0) + gaps;\n\n // Shrink auto columns if over budget\n if (totalNeeded > maxWidth && autoCount > 0) {\n const available = maxWidth - fixedTotal - gaps;\n const autoWidths = widths.filter((_, i) => !columns[i].width);\n const autoTotal = autoWidths.reduce((s, w) => s + w, 0);\n\n for (let i = 0; i < widths.length; i++) {\n if (!columns[i].width) {\n widths[i] = Math.max(8, Math.floor((widths[i] / autoTotal) * available));\n }\n }\n }\n\n return widths;\n}\n\nfunction renderHeaderRow(columns: Column[], widths: number[]): string {\n const cells = columns.map((col, i) =>\n bold(alignCell(col.label, widths[i], col.align || \"left\"))\n );\n return cells.join(\" \");\n}\n\nfunction renderSeparator(widths: number[]): string {\n return dim(widths.map((w) => \"─\".repeat(w)).join(\"──\"));\n}\n\nfunction renderDataRow(\n row: Record<string, string>,\n columns: Column[],\n widths: number[],\n): string {\n const cells = columns.map((col, i) => {\n const raw = row[col.key] || \"\";\n const truncated = truncateStr(raw, widths[i]);\n const aligned = alignCell(truncated, widths[i], col.align || \"left\");\n return col.color ? col.color(aligned) : aligned;\n });\n return cells.join(\" \");\n}\n\nfunction alignCell(text: string, width: number, align: \"left\" | \"right\" | \"center\"): string {\n switch (align) {\n case \"right\":\n return padStart(text, width);\n case \"center\": {\n const visible = visibleLength(text);\n if (visible >= width) return text;\n const left = Math.floor((width - visible) / 2);\n const right = width - visible - left;\n return \" \".repeat(left) + text + \" \".repeat(right);\n }\n default:\n return padEnd(text, width);\n }\n}\n","/**\n * Spinner primitive for terminal progress indication.\n *\n * Renders an animated spinner with text to stderr.\n * Writes ONLY to stderr — never pollutes stdout.\n */\n\nimport { screen } from \"../ansi.js\";\nimport { colorize, dim, brand, isColorEnabled } from \"../theme.js\";\nimport { isTTY } from \"../detect.js\";\nimport { isPlainMode } from \"../plain.js\";\nimport { sym } from \"../symbols.js\";\n\nexport const BRAILLE_FRAMES = [\"⡿\", \"⣟\", \"⣯\", \"⣷\", \"⣾\", \"⣽\", \"⣻\", \"⢿\"];\nexport const FRAME_INTERVAL = 80;\n\n/**\n * Pure function: return the braille spinner character for the given frame index.\n * Wraps around using modulo — frame index can be any non-negative integer.\n */\nexport function spinnerFrame(frameIndex: number): string {\n return BRAILLE_FRAMES[frameIndex % BRAILLE_FRAMES.length];\n}\n\nexport interface SpinnerInstance {\n /** Start the spinner animation */\n start(): void;\n /** Stop the spinner and clear the line */\n stop(): void;\n /** Update the display text */\n setText(text: string): void;\n /** Show phase label alongside text */\n setPhase(phase: string): void;\n /** Stop with success indicator */\n succeed(text: string): void;\n /** Stop with failure indicator */\n fail(text: string): void;\n /** Stop with warning indicator */\n warn(text: string): void;\n /** Stop with info indicator */\n info(text: string): void;\n /** Whether the spinner is currently running */\n isRunning: boolean;\n}\n\n/**\n * Create a new spinner instance.\n *\n * @param text - Initial text to display\n * @param output - Writable stream (defaults to process.stderr)\n */\nexport function createSpinner(\n text: string,\n output: NodeJS.WritableStream = process.stderr,\n): SpinnerInstance {\n let frameIndex = 0;\n let currentText = text;\n let currentPhase = \"\";\n let timer: ReturnType<typeof setInterval> | null = null;\n let running = false;\n const enabled = isTTY();\n\n function render(): void {\n if (!enabled) return;\n\n if (isPlainMode()) {\n // Plain mode: static prefix, no animation, grep-friendly (PLAIN-01, PLAIN-02)\n output.write(`[running] ${currentText}\\n`);\n return;\n }\n\n const frame = isColorEnabled()\n ? colorize(BRAILLE_FRAMES[frameIndex], brand.lime)\n : BRAILLE_FRAMES[frameIndex];\n\n const phaseStr = currentPhase ? dim(` [${currentPhase}]`) : \"\";\n const line = `${frame} ${currentText}${phaseStr}`;\n\n output.write(screen.clearLine + \"\\r\" + line);\n frameIndex = (frameIndex + 1) % BRAILLE_FRAMES.length;\n }\n\n function clearLine(): void {\n if (!enabled) return;\n output.write(screen.clearLine + \"\\r\");\n }\n\n function writeFinalLine(symbol: string, text: string): void {\n clearLine();\n output.write(`${symbol} ${text}\\n`);\n }\n\n const instance: SpinnerInstance = {\n get isRunning() {\n return running;\n },\n\n start() {\n if (running) return;\n running = true;\n frameIndex = 0;\n if (enabled) {\n if (isPlainMode()) {\n // Plain mode: write once on start, no interval animation\n render();\n } else {\n render();\n timer = setInterval(render, FRAME_INTERVAL);\n }\n }\n },\n\n stop() {\n running = false;\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n clearLine();\n },\n\n setText(text: string) {\n currentText = text;\n },\n\n setPhase(phase: string) {\n currentPhase = phase;\n },\n\n succeed(text: string) {\n instance.stop();\n const icon = isColorEnabled() ? colorize(sym(\"success\"), \"#4ADE80\") : sym(\"success\");\n writeFinalLine(icon, text);\n },\n\n fail(text: string) {\n instance.stop();\n const icon = isColorEnabled() ? colorize(sym(\"fail\"), \"#F87171\") : sym(\"fail\");\n writeFinalLine(icon, text);\n },\n\n warn(text: string) {\n instance.stop();\n const icon = isColorEnabled() ? colorize(sym(\"warning\"), \"#FACC15\") : sym(\"warning\");\n writeFinalLine(icon, text);\n },\n\n info(text: string) {\n instance.stop();\n const icon = isColorEnabled() ? colorize(sym(\"info\"), \"#6BCEFF\") : sym(\"info\");\n writeFinalLine(icon, text);\n },\n };\n\n return instance;\n}\n","/**\n * Progress bar primitive for terminal output.\n *\n * Single bars and multi-bar stacks with percentage, ETA,\n * and brand-colored fill. Writes to stderr only.\n */\n\nimport { cursor, screen, padEnd } from \"../ansi.js\";\nimport { colorize, dim, brand, isColorEnabled } from \"../theme.js\";\nimport { isTTY, getTerminalWidth } from \"../detect.js\";\n\nconst FILL_CHAR = \"█\";\nconst EMPTY_CHAR = \"░\";\n\nexport interface ProgressBarOptions {\n /** Total number of steps */\n total: number;\n /** Label displayed before the bar */\n label?: string;\n /** Bar width in characters (defaults to auto) */\n width?: number;\n /** Color hex for the filled portion */\n color?: string;\n /** Writable stream (defaults to stderr) */\n output?: NodeJS.WritableStream;\n}\n\nexport interface ProgressBar {\n /** Update progress to a new value */\n update(current: number): void;\n /** Complete the bar at 100% */\n complete(message?: string): void;\n /** Fail the bar with error indicator */\n fail(message?: string): void;\n /** Get the current rendered bar string (for embedding in frames) */\n render(current: number, barWidth?: number): string;\n}\n\n/**\n * Create a progress bar.\n */\nexport function createProgressBar(opts: ProgressBarOptions): ProgressBar {\n const {\n total,\n label = \"\",\n width: fixedWidth,\n color = brand.lime,\n output = process.stderr,\n } = opts;\n\n const enabled = isTTY();\n const startTime = Date.now();\n\n function renderBar(current: number, barWidth?: number): string {\n const pct = total > 0 ? Math.min(current / total, 1) : 0;\n const pctStr = `${Math.round(pct * 100)}%`;\n\n const termWidth = barWidth || fixedWidth || Math.max(20, getTerminalWidth() - (label.length + 12));\n const filled = Math.round(pct * termWidth);\n const empty = termWidth - filled;\n\n const bar = isColorEnabled()\n ? colorize(FILL_CHAR.repeat(filled), color) + dim(EMPTY_CHAR.repeat(empty))\n : FILL_CHAR.repeat(filled) + EMPTY_CHAR.repeat(empty);\n\n const eta = formatETA(current, total, startTime);\n const labelStr = label ? padEnd(label, 16) : \"\";\n\n return `${labelStr}${bar} ${pctStr}${eta ? ` ${dim(eta)}` : \"\"}`;\n }\n\n return {\n update(current: number) {\n if (!enabled) return;\n const line = renderBar(current);\n output.write(screen.clearLine + \"\\r\" + line);\n },\n\n complete(message?: string) {\n if (!enabled) return;\n output.write(screen.clearLine + \"\\r\");\n if (message) {\n const sym = isColorEnabled() ? colorize(\"✓\", \"#4ADE80\") : \"✓\";\n output.write(`${sym} ${message}\\n`);\n }\n },\n\n fail(message?: string) {\n if (!enabled) return;\n output.write(screen.clearLine + \"\\r\");\n if (message) {\n const sym = isColorEnabled() ? colorize(\"✗\", \"#F87171\") : \"✗\";\n output.write(`${sym} ${message}\\n`);\n }\n },\n\n render(current: number, barWidth?: number): string {\n return renderBar(current, barWidth);\n },\n };\n}\n\nfunction formatETA(current: number, total: number, startTime: number): string {\n if (current <= 0 || total <= 0) return \"\";\n const elapsed = (Date.now() - startTime) / 1000;\n const rate = current / elapsed;\n const remaining = (total - current) / rate;\n if (remaining <= 0 || !isFinite(remaining)) return \"\";\n if (remaining < 60) return `~${Math.ceil(remaining)}s`;\n return `~${Math.ceil(remaining / 60)}m`;\n}\n\n// ── Multi-progress ───────────────────────────────────────────────\n\nexport interface MultiProgressOptions {\n /** Writable stream (defaults to stderr) */\n output?: NodeJS.WritableStream;\n}\n\nexport interface MultiProgress {\n /** Add a named progress bar */\n add(id: string, opts: Omit<ProgressBarOptions, \"output\">): void;\n /** Update a specific bar */\n update(id: string, current: number): void;\n /** Mark a bar as complete */\n complete(id: string): void;\n /** Render all bars (returns multi-line string for dashboard embedding) */\n renderAll(): string;\n /** Write all bars to output (in-place update) */\n draw(): void;\n /** Clear all bar lines from terminal */\n clear(): void;\n}\n\n/**\n * Create a multi-progress bar stack.\n */\nexport function createMultiProgress(opts: MultiProgressOptions = {}): MultiProgress {\n const output = opts.output || process.stderr;\n const bars: Map<string, { bar: ProgressBar; current: number; total: number; completed: boolean }> = new Map();\n let drawnLines = 0;\n\n return {\n add(id: string, barOpts: Omit<ProgressBarOptions, \"output\">) {\n const bar = createProgressBar({ ...barOpts, output });\n bars.set(id, { bar, current: 0, total: barOpts.total, completed: false });\n },\n\n update(id: string, current: number) {\n const entry = bars.get(id);\n if (entry) {\n entry.current = current;\n }\n },\n\n complete(id: string) {\n const entry = bars.get(id);\n if (entry) {\n entry.current = entry.total;\n entry.completed = true;\n }\n },\n\n renderAll(): string {\n const lines: string[] = [];\n for (const [, entry] of bars) {\n lines.push(entry.bar.render(entry.current));\n }\n return lines.join(\"\\n\");\n },\n\n draw() {\n if (!isTTY()) return;\n // Move cursor up to overwrite previous render\n if (drawnLines > 0) {\n output.write(cursor.up(drawnLines));\n }\n const lines: string[] = [];\n for (const [, entry] of bars) {\n lines.push(screen.clearLine + entry.bar.render(entry.current));\n }\n output.write(lines.join(\"\\n\") + \"\\n\");\n drawnLines = lines.length;\n },\n\n clear() {\n if (!isTTY() || drawnLines === 0) return;\n output.write(cursor.up(drawnLines));\n for (let i = 0; i < drawnLines; i++) {\n output.write(screen.clearLine + \"\\n\");\n }\n output.write(cursor.up(drawnLines));\n drawnLines = 0;\n },\n };\n}\n","/**\n * List and tree primitive for terminal output.\n *\n * Renders ordered/unordered lists and tree structures\n * with Unicode connectors and configurable indentation.\n */\n\nimport { dim } from \"../theme.js\";\n\nexport interface ListOptions {\n /** Ordered (numbered) or unordered (bullet) */\n ordered?: boolean;\n /** Indentation level (for nesting) */\n indent?: number;\n /** Bullet character for unordered lists */\n bullet?: string;\n}\n\n/**\n * Render a flat list of items.\n */\nexport function renderList(items: string[], opts: ListOptions = {}): string {\n const { ordered = false, indent = 0, bullet = \"•\" } = opts;\n const pad = \" \".repeat(indent);\n\n return items\n .map((item, i) => {\n const prefix = ordered ? `${pad}${i + 1}.` : `${pad}${bullet}`;\n return `${prefix} ${item}`;\n })\n .join(\"\\n\");\n}\n\n// ── Tree rendering ───────────────────────────────────────────────\n\nexport interface TreeNode {\n label: string;\n children?: TreeNode[];\n /** Whether this node's children should be collapsed (hidden) */\n collapsed?: boolean;\n}\n\n/**\n * Render a tree structure with Unicode box-drawing connectors.\n *\n * ```\n * Root\n * ├── Child 1\n * │ ├── Grandchild A\n * │ └── Grandchild B\n * └── Child 2\n * ```\n */\nexport function renderTree(node: TreeNode, prefix = \"\", isLast = true, isRoot = true): string {\n const lines: string[] = [];\n\n if (isRoot) {\n lines.push(node.label);\n } else {\n const connector = isLast ? \"└── \" : \"├── \";\n lines.push(prefix + dim(connector) + node.label);\n }\n\n if (node.children && !node.collapsed) {\n const childPrefix = isRoot ? \"\" : prefix + (isLast ? \" \" : dim(\"│ \"));\n\n node.children.forEach((child, index) => {\n const childIsLast = index === node.children!.length - 1;\n lines.push(renderTree(child, childPrefix, childIsLast, false));\n });\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Render a grouped list with section headers.\n *\n * ```\n * ── Critical (3) ──────────\n * • Issue 1\n * • Issue 2\n * • Issue 3\n *\n * ── Warning (5) ───────────\n * • Issue 4\n * ...\n * ```\n */\nexport function renderGroupedList(\n groups: Map<string, string[]> | Record<string, string[]>,\n opts: ListOptions = {},\n): string {\n const entries = groups instanceof Map ? [...groups.entries()] : Object.entries(groups);\n const sections: string[] = [];\n\n for (const [groupLabel, items] of entries) {\n if (items.length === 0) continue;\n\n const header = dim(`── ${groupLabel} (${items.length}) ${\"─\".repeat(20)}`);\n const list = renderList(items, { ...opts, indent: (opts.indent || 0) + 1 });\n sections.push(`${header}\\n${list}`);\n }\n\n return sections.join(\"\\n\\n\");\n}\n","/**\n * Diff rendering primitive for terminal output.\n *\n * Displays unified or side-by-side diffs with\n * colored additions/deletions.\n */\n\nimport { colorize, dim, tokens } from \"../theme.js\";\nimport { padEnd } from \"../ansi.js\";\nimport { getTerminalWidth } from \"../detect.js\";\n\nexport type DiffMode = \"unified\" | \"side-by-side\";\n\nexport interface DiffLine {\n type: \"add\" | \"remove\" | \"context\" | \"header\";\n content: string;\n lineNum?: number;\n}\n\nexport interface DiffOptions {\n mode?: DiffMode;\n context?: number;\n maxWidth?: number;\n}\n\n/**\n * Render a unified diff from structured diff lines.\n */\nexport function renderDiff(lines: DiffLine[], opts: DiffOptions = {}): string {\n const { mode = \"unified\" } = opts;\n\n if (mode === \"side-by-side\") {\n return renderSideBySide(lines, opts);\n }\n\n return renderUnified(lines);\n}\n\nfunction renderUnified(lines: DiffLine[]): string {\n return lines\n .map((line) => {\n switch (line.type) {\n case \"header\":\n return dim(line.content);\n case \"add\":\n return colorize(`+ ${line.content}`, tokens.success);\n case \"remove\":\n return colorize(`- ${line.content}`, tokens.error);\n case \"context\":\n return dim(` ${line.content}`);\n }\n })\n .join(\"\\n\");\n}\n\nfunction renderSideBySide(lines: DiffLine[], opts: DiffOptions): string {\n const maxWidth = opts.maxWidth || getTerminalWidth();\n const halfWidth = Math.floor((maxWidth - 3) / 2); // 3 for separator \" │ \"\n\n const left: string[] = [];\n const right: string[] = [];\n\n for (const line of lines) {\n if (line.type === \"header\") {\n left.push(dim(line.content));\n right.push(\"\");\n } else if (line.type === \"remove\") {\n left.push(colorize(truncateLine(line.content, halfWidth), tokens.error));\n right.push(\"\");\n } else if (line.type === \"add\") {\n left.push(\"\");\n right.push(colorize(truncateLine(line.content, halfWidth), tokens.success));\n } else {\n const ctx = dim(truncateLine(line.content, halfWidth));\n left.push(ctx);\n right.push(ctx);\n }\n }\n\n // Pair up: merge empty entries\n const merged = mergeSideBySide(left, right, halfWidth);\n\n return merged.join(\"\\n\");\n}\n\nfunction mergeSideBySide(left: string[], right: string[], halfWidth: number): string[] {\n const result: string[] = [];\n const sep = dim(\" │ \");\n let li = 0;\n let ri = 0;\n\n while (li < left.length || ri < right.length) {\n const l = li < left.length ? left[li] : \"\";\n const r = ri < right.length ? right[ri] : \"\";\n\n // Skip if both empty\n if (l === \"\" && r === \"\") {\n li++;\n ri++;\n continue;\n }\n\n // If left has content and right is empty, pair with next right that has content\n if (l !== \"\" && r === \"\") {\n result.push(padEnd(l, halfWidth) + sep + padEnd(\"\", halfWidth));\n li++;\n ri++;\n continue;\n }\n\n if (l === \"\" && r !== \"\") {\n result.push(padEnd(\"\", halfWidth) + sep + padEnd(r, halfWidth));\n li++;\n ri++;\n continue;\n }\n\n result.push(padEnd(l, halfWidth) + sep + padEnd(r, halfWidth));\n li++;\n ri++;\n }\n\n return result;\n}\n\nfunction truncateLine(text: string, maxWidth: number): string {\n if (text.length <= maxWidth) return text;\n return text.slice(0, maxWidth - 1) + \"…\";\n}\n\n/**\n * Parse a unified diff string into structured DiffLine array.\n */\nexport function parseDiff(diffText: string): DiffLine[] {\n const lines: DiffLine[] = [];\n\n for (const raw of diffText.split(\"\\n\")) {\n if (raw.startsWith(\"@@\") || raw.startsWith(\"---\") || raw.startsWith(\"+++\") || raw.startsWith(\"diff \")) {\n lines.push({ type: \"header\", content: raw });\n } else if (raw.startsWith(\"+\")) {\n lines.push({ type: \"add\", content: raw.slice(1) });\n } else if (raw.startsWith(\"-\")) {\n lines.push({ type: \"remove\", content: raw.slice(1) });\n } else {\n lines.push({ type: \"context\", content: raw.startsWith(\" \") ? raw.slice(1) : raw });\n }\n }\n\n return lines;\n}\n","/**\n * Branded error and warning box primitives.\n *\n * Renders error/warning messages in a rounded-border box with\n * color hierarchy: bold red message, dim context, lime suggestion,\n * dim exit code.\n *\n * Delegates to box() for border rendering.\n * In plain mode, box() automatically converts to ASCII chars.\n */\n\nimport { box } from \"./box.js\";\nimport { sym } from \"../symbols.js\";\nimport { colorize, dim, bold, tokens, brand } from \"../theme.js\";\nimport { getTerminalWidth } from \"../detect.js\";\n\n// ── Types ─────────────────────────────────────────────────────────\n\nexport interface ErrorBoxOptions {\n /** Primary error message (displayed bold) */\n message: string;\n /** Additional context about where/why the error occurred (displayed dim) */\n context?: string;\n /** Suggested resolution — displayed as \"Try: suggestion\" in lime */\n suggestion?: string;\n /** Exit code from underlying process */\n exitCode?: number;\n}\n\n// ── Internal helpers ──────────────────────────────────────────────\n\nfunction buildBoxWidth(): number {\n return Math.min(getTerminalWidth() - 4, 88);\n}\n\nfunction buildErrorContent(opts: ErrorBoxOptions): string {\n const parts: string[] = [];\n\n // Header line: symbol + \"Error:\" + bold message\n parts.push(\n `${sym(\"fail\")} Error: ${bold(opts.message)}`\n );\n\n // Context: dim\n if (opts.context !== undefined && opts.context !== \"\") {\n parts.push(\"\");\n parts.push(dim(opts.context));\n }\n\n // Suggestion: lime \"Try: suggestion\"\n if (opts.suggestion !== undefined && opts.suggestion !== \"\") {\n parts.push(\"\");\n parts.push(colorize(`Try: ${opts.suggestion}`, brand.lime));\n }\n\n // Exit code: dim\n if (opts.exitCode !== undefined) {\n parts.push(\"\");\n parts.push(dim(`Exit code: ${opts.exitCode}`));\n }\n\n return parts.join(\"\\n\");\n}\n\nfunction buildWarningContent(opts: Omit<ErrorBoxOptions, \"exitCode\">): string {\n const parts: string[] = [];\n\n // Header line: symbol + \"Warning:\" + bold message\n parts.push(\n `${sym(\"warning\")} Warning: ${bold(opts.message)}`\n );\n\n // Context: dim\n if (opts.context !== undefined && opts.context !== \"\") {\n parts.push(\"\");\n parts.push(dim(opts.context));\n }\n\n // Suggestion: lime \"Try: suggestion\"\n if (opts.suggestion !== undefined && opts.suggestion !== \"\") {\n parts.push(\"\");\n parts.push(colorize(`Try: ${opts.suggestion}`, brand.lime));\n }\n\n return parts.join(\"\\n\");\n}\n\n// ── Public API ────────────────────────────────────────────────────\n\n/**\n * Render a branded error box.\n *\n * @param opts - Error box options\n * @returns Rendered box string with rounded border, red border color\n */\nexport function renderError(opts: ErrorBoxOptions): string {\n const content = buildErrorContent(opts);\n return box(content, {\n border: \"rounded\",\n borderColor: tokens.error,\n padding: 1,\n width: buildBoxWidth(),\n });\n}\n\n/**\n * Render a branded warning box.\n *\n * @param opts - Warning box options (no exitCode)\n * @returns Rendered box string with rounded border, amber border color\n */\nexport function renderWarning(opts: Omit<ErrorBoxOptions, \"exitCode\">): string {\n const content = buildWarningContent(opts);\n return box(content, {\n border: \"rounded\",\n borderColor: tokens.warning,\n padding: 1,\n width: buildBoxWidth(),\n });\n}\n","/**\n * Step-list rendering primitives for CLI step progress display.\n *\n * Provides types, pure rendering functions for multi-step progress UI.\n * All rendering is stateless — pass StepState[] + frameIndex each render cycle.\n */\n\nimport { visibleLength } from \"../ansi.js\";\nimport { sym } from \"../symbols.js\";\nimport { spinnerFrame } from \"../primitives/spinner.js\";\nimport { colorize, dim, tokens } from \"../theme.js\";\nimport { isPlainMode } from \"../plain.js\";\n\n// ── Types ─────────────────────────────────────────────────────────\n\nexport type StepStatus = \"pending\" | \"running\" | \"done\" | \"failed\" | \"skipped\" | \"warning\";\n\n/** Definition of a step (static configuration) */\nexport interface StepDef {\n id: string;\n actionText: string;\n summaryText: string;\n run: () => Promise<void>;\n subSteps?: StepDef[];\n}\n\n/** Mutable state of a step during execution */\nexport interface StepState {\n id: string;\n actionText: string;\n summaryText: string;\n status: StepStatus;\n startedAt: number | undefined;\n finishedAt: number | undefined;\n durationMs: number | undefined;\n failReason: string | undefined;\n subSteps: StepState[] | undefined;\n}\n\n/** Result of a completed step */\nexport interface StepResult {\n id: string;\n status: StepStatus;\n durationMs: number | undefined;\n failReason: string | undefined;\n}\n\n// ── Internal helpers ──────────────────────────────────────────────\n\n/**\n * Return the glyph for a given step state.\n * Uses spinnerFrame for running state, sym() for others.\n */\nfunction stepGlyph(state: StepState, frameIndex: number): string {\n switch (state.status) {\n case \"running\":\n return colorize(spinnerFrame(frameIndex), tokens.success);\n case \"done\":\n return colorize(sym(\"success\"), tokens.success);\n case \"failed\":\n return colorize(sym(\"fail\"), tokens.error);\n case \"warning\":\n return colorize(sym(\"warning\"), tokens.warning);\n case \"skipped\":\n return dim(\"—\");\n default:\n return dim(sym(\"pending\"));\n }\n}\n\n/**\n * Return the display text for a step based on its status.\n */\nexport function stepText(state: StepState): string {\n switch (state.status) {\n case \"done\":\n return state.summaryText;\n case \"failed\":\n return state.failReason\n ? `${state.actionText} — ${state.failReason}`\n : state.actionText;\n case \"skipped\":\n return dim(state.actionText);\n default:\n return state.actionText;\n }\n}\n\n/**\n * Format duration in milliseconds to \"N.Ns\" format.\n */\nexport function stepDuration(state: StepState): string {\n if (state.durationMs === undefined) return \"\";\n const secs = state.durationMs / 1000;\n return `${secs.toFixed(1)}s`;\n}\n\n/**\n * Render a single step row (and optionally its sub-steps).\n */\nfunction renderStep(\n state: StepState,\n frameIndex: number,\n indent: string,\n termWidth: number,\n): string {\n if (isPlainMode()) {\n return renderStepPlain(state, indent);\n }\n\n const glyph = stepGlyph(state, frameIndex);\n const text = stepText(state);\n const duration = stepDuration(state);\n\n // Calculate right-aligned duration gap\n const glyphVisible = visibleLength(glyph);\n const textVisible = visibleLength(text);\n const durationVisible = visibleLength(duration);\n const indentLen = indent.length;\n\n // Total: indent + glyph + \" \" + text + gap + duration\n const usedWidth = indentLen + glyphVisible + 1 + textVisible + durationVisible;\n const gap = Math.max(1, termWidth - usedWidth);\n\n let line: string;\n if (duration) {\n line = `${indent}${glyph} ${text}${\" \".repeat(gap)}${dim(duration)}`;\n } else {\n line = `${indent}${glyph} ${text}`;\n }\n\n const lines: string[] = [line];\n\n // Render sub-steps with connector prefix\n if (state.subSteps && state.subSteps.length > 0) {\n const subIndent = indent + \" | \";\n for (const sub of state.subSteps) {\n lines.push(renderStep(sub, frameIndex, subIndent, termWidth));\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Render a step in plain mode (no ANSI, grep-friendly).\n */\nfunction renderStepPlain(state: StepState, indent: string): string {\n const text = stepText(state);\n const duration = stepDuration(state);\n const durationStr = duration ? ` (${duration})` : \"\";\n const line = `${indent}[${state.status}] ${text}${durationStr}`;\n\n const lines: string[] = [line];\n if (state.subSteps && state.subSteps.length > 0) {\n for (const sub of state.subSteps) {\n lines.push(renderStepPlain(sub, indent + \" | \"));\n }\n }\n return lines.join(\"\\n\");\n}\n\n// ── Public API ────────────────────────────────────────────────────\n\n/**\n * Render a list of steps as a terminal string.\n *\n * @param steps - Array of step states to render\n * @param frameIndex - Current animation frame index (for spinner)\n * @param termWidth - Terminal width for right-alignment (default: 80)\n * @returns Rendered string without trailing newline\n */\nexport function renderStepList(\n steps: StepState[],\n frameIndex: number,\n termWidth: number = 80,\n): string {\n const lines = steps.map((step) => renderStep(step, frameIndex, \"\", termWidth));\n return lines.join(\"\\n\");\n}\n","/**\n * runSteps — async step orchestrator.\n *\n * Executes a list of StepDef sequentially, managing state transitions\n * and reporting via onStateChange callback.\n *\n * Fail modes:\n * - failFast=true (CI/non-TTY default): mark current step \"failed\",\n * mark remaining steps \"skipped\", return immediately.\n * - failFast=false (interactive TTY default): mark current step \"warning\",\n * continue to next step.\n */\n\nimport { isCI, isTTY } from \"../detect.js\";\nimport type { StepDef, StepState } from \"./step-list.js\";\n\n// ── Types ─────────────────────────────────────────────────────────\n\nexport interface RunStepsOptions {\n /** Whether to stop on first failure (default: isCI() || !isTTY()) */\n failFast?: boolean;\n /** Called after every state transition with the full states array */\n onStateChange?: (states: StepState[]) => void;\n}\n\nexport interface RunStepsResult {\n success: boolean;\n states: StepState[];\n}\n\n// ── Internal helpers ──────────────────────────────────────────────\n\nfunction defToState(def: StepDef): StepState {\n return {\n id: def.id,\n actionText: def.actionText,\n summaryText: def.summaryText,\n status: \"pending\",\n startedAt: undefined,\n finishedAt: undefined,\n durationMs: undefined,\n failReason: undefined,\n subSteps: def.subSteps ? def.subSteps.map(defToState) : undefined,\n };\n}\n\n// ── Public API ────────────────────────────────────────────────────\n\n/**\n * Run a list of step definitions sequentially.\n *\n * @param defs - Step definitions to run\n * @param opts - Options including failFast mode and onStateChange callback\n * @returns Result with success flag and final states array\n */\nexport async function runSteps(\n defs: StepDef[],\n opts: RunStepsOptions = {},\n): Promise<RunStepsResult> {\n const failFast = opts.failFast ?? (isCI() || !isTTY());\n const { onStateChange } = opts;\n\n const states: StepState[] = defs.map(defToState);\n let anyFailed = false;\n\n const notify = () => {\n onStateChange?.(states);\n };\n\n for (let i = 0; i < defs.length; i++) {\n const def = defs[i];\n const state = states[i];\n\n // Transition to running\n state.status = \"running\";\n state.startedAt = Date.now();\n notify();\n\n try {\n await def.run();\n\n // Transition to done\n state.finishedAt = Date.now();\n state.durationMs = state.finishedAt - (state.startedAt ?? state.finishedAt);\n state.status = \"done\";\n notify();\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n state.finishedAt = Date.now();\n state.durationMs = state.finishedAt - (state.startedAt ?? state.finishedAt);\n state.failReason = reason;\n anyFailed = true;\n\n if (failFast) {\n // Mark current as failed, remaining as skipped\n state.status = \"failed\";\n notify();\n\n for (let j = i + 1; j < states.length; j++) {\n states[j].status = \"skipped\";\n }\n notify();\n\n return { success: false, states };\n } else {\n // Mark current as warning, continue\n state.status = \"warning\";\n notify();\n }\n }\n }\n\n return { success: !anyFailed, states };\n}\n","/**\n * Dashboard state types and phase definitions.\n */\n\nexport const AuditPhase = {\n Connecting: \"Connecting\",\n Crawling: \"Crawling\",\n Analyzing: \"Analyzing\",\n Scoring: \"Scoring\",\n Done: \"Done\",\n Failed: \"Failed\",\n} as const;\n\nexport type AuditPhaseName = (typeof AuditPhase)[keyof typeof AuditPhase];\n\n/** Ordered phases for progress indication */\nexport const PHASE_ORDER: AuditPhaseName[] = [\n AuditPhase.Connecting,\n AuditPhase.Crawling,\n AuditPhase.Analyzing,\n AuditPhase.Scoring,\n AuditPhase.Done,\n];\n\n/** Get the index of a phase in the ordered sequence */\nexport function phaseIndex(phase: string): number {\n const idx = PHASE_ORDER.indexOf(phase as AuditPhaseName);\n return idx >= 0 ? idx : 0;\n}\n\n/** Get the total number of actionable phases (excluding Done) */\nexport function phaseTotal(): number {\n return PHASE_ORDER.length - 1; // Exclude \"Done\"\n}\n","/**\n * Dashboard frame renderer — pure function.\n *\n * Takes dashboard state + terminal dimensions, returns a string\n * representing the full screen content. No side effects.\n */\n\nimport type { DashboardState } from \"../layout/renderer.js\";\nimport { padEnd, visibleLength } from \"../ansi.js\";\nimport { box } from \"../primitives/box.js\";\nimport { colorize, dim, bold, brand, isColorEnabled, scoreColor } from \"../theme.js\";\nimport { statusDot } from \"../primitives/text.js\";\nimport { PHASE_ORDER, phaseIndex as getPhaseIndex } from \"./state.js\";\n\n/**\n * Render a complete dashboard frame.\n *\n * Pure function — no I/O, no side effects, fully testable.\n */\nexport function renderFrame(state: DashboardState, width: number, _height: number): string {\n const sections: string[] = [];\n const innerWidth = Math.min(width - 4, 96); // Constrain for readability\n\n // ── Header box ─────────────────────────────────────────────\n const time = formatTime(new Date());\n\n sections.push(\n box(padEnd(state.url, innerWidth - state.mode.length - 14) + `${dim(\"mode:\")} ${state.mode}`, {\n border: \"rounded\",\n title: `VertaaUX Audit`,\n subtitle: time,\n width: innerWidth + 4,\n borderColor: brand.teal,\n titleColor: brand.lime,\n })\n );\n\n // ── Phase indicator ────────────────────────────────────────\n const currentPhaseIdx = getPhaseIndex(state.phase);\n const phaseDots = PHASE_ORDER.slice(0, -1) // Exclude Done from dots\n .map((_, i) => {\n if (i < currentPhaseIdx) return statusDot(\"pass\");\n if (i === currentPhaseIdx) return statusDot(\"active\");\n return statusDot(\"skip\");\n })\n .join(\"\");\n\n const phaseLabel = bold(state.phase);\n const phasePct = state.phaseTotal > 0 ? dim(` (${state.phaseIndex}/${state.phaseTotal})`) : \"\";\n sections.push(` Phase: ${phaseLabel} ${phaseDots}${phasePct}`);\n\n // ── Progress bars ──────────────────────────────────────────\n sections.push(\"\");\n const barWidth = innerWidth - 22; // Label(16) + pct(6)\n const analyzerNames = Object.keys(state.progress);\n\n if (analyzerNames.length > 0) {\n for (const name of analyzerNames) {\n const current = state.progress[name] || 0;\n const total = state.totals[name] || 100;\n const pct = total > 0 ? Math.min(current / total, 1) : 0;\n const filled = Math.round(pct * barWidth);\n const empty = barWidth - filled;\n\n const fillStr = isColorEnabled()\n ? colorize(\"█\".repeat(filled), brand.lime) + dim(\"░\".repeat(empty))\n : \"█\".repeat(filled) + \"░\".repeat(empty);\n\n const pctStr = `${Math.round(pct * 100)}%`;\n const label = padEnd(capitalize(name), 16);\n sections.push(` ${label}${fillStr} ${pctStr}`);\n }\n } else {\n sections.push(dim(\" Waiting for analyzers...\"));\n }\n\n // ── Stats ──────────────────────────────────────────────────\n sections.push(\"\");\n const issueStr = `Issues found: ${bold(String(state.issueCount))}`;\n const scoreStr = state.scorePreview !== null\n ? `Score preview: ${colorize(String(state.scorePreview), scoreColor(state.scorePreview))}`\n : dim(\"Score: --\");\n sections.push(` ${issueStr} ${scoreStr}`);\n\n // ── Footer ─────────────────────────────────────────────────\n sections.push(\"\");\n const keys = dim(\"[q] abort [v] verbose\");\n const elapsed = dim(formatElapsed(state.elapsed));\n const footerPad = Math.max(0, innerWidth - visibleLength(keys) - visibleLength(elapsed));\n sections.push(` ${keys}${\" \".repeat(footerPad)}${elapsed}`);\n\n return sections.join(\"\\n\");\n}\n\nfunction formatTime(date: Date): string {\n const h = String(date.getHours()).padStart(2, \"0\");\n const m = String(date.getMinutes()).padStart(2, \"0\");\n const s = String(date.getSeconds()).padStart(2, \"0\");\n return `${h}:${m}:${s}`;\n}\n\nfunction formatElapsed(ms: number): string {\n const totalSecs = Math.floor(ms / 1000);\n const mins = Math.floor(totalSecs / 60);\n const secs = totalSecs % 60;\n return `${String(mins).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")} elapsed`;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n","/**\n * Alternate screen renderer for interactive TTY.\n *\n * Takes over the terminal with a full-screen dashboard.\n * Uses the alternate screen buffer to preserve scrollback.\n * On dispose, restores the original terminal.\n */\n\nimport { cursor, screen } from \"../ansi.js\";\nimport { renderFrame } from \"../dashboard/frame.js\";\nimport type { Renderer, DashboardState, SummaryResult } from \"./renderer.js\";\nimport { getTerminalWidth, getTerminalHeight } from \"../detect.js\";\nimport { bold, dim, colorize } from \"../theme.js\";\nimport { box } from \"../primitives/box.js\";\n\nexport class AlternateScreenRenderer implements Renderer {\n private output: NodeJS.WritableStream;\n private entered = false;\n\n constructor(output: NodeJS.WritableStream = process.stderr) {\n this.output = output;\n }\n\n update(state: DashboardState): void {\n if (!this.entered) {\n this.output.write(screen.altEnter + cursor.hide);\n this.entered = true;\n }\n\n const width = getTerminalWidth();\n const height = getTerminalHeight();\n const frame = renderFrame(state, width, height);\n\n this.output.write(cursor.home + screen.clear + frame);\n }\n\n finish(result: SummaryResult): void {\n this.dispose();\n\n // Write summary to stderr after exiting alternate screen\n const summary = this.renderSummary(result);\n this.output.write(summary + \"\\n\");\n }\n\n dispose(): void {\n if (this.entered) {\n this.output.write(cursor.show + screen.altExit);\n this.entered = false;\n }\n }\n\n suspend(): void {}\n\n resume(): void {}\n\n private renderSummary(result: SummaryResult): string {\n const status = result.passed\n ? colorize(\"PASSED\", \"#4ADE80\")\n : colorize(\"FAILED\", \"#F87171\");\n\n const scoreStr = colorize(String(result.overallScore), result.overallScore >= 70 ? \"#4ADE80\" : \"#F87171\");\n\n const lines = [\n `${bold(\"Audit Complete\")} — ${status}`,\n `${dim(\"URL:\")} ${result.url}`,\n `${dim(\"Score:\")} ${scoreStr} ${dim(`| ${result.issueCount} issues | ${formatElapsed(result.elapsed)}`)}`,\n ];\n\n const categories = Object.entries(result.scores)\n .map(([cat, score]) => ` ${cat}: ${score}`)\n .join(\"\\n\");\n\n if (categories) {\n lines.push(dim(categories));\n }\n\n return box(lines.join(\"\\n\"), { border: \"rounded\", title: \"VertaaUX\", width: Math.min(getTerminalWidth(), 80) });\n }\n}\n\nfunction formatElapsed(ms: number): string {\n const secs = Math.round(ms / 1000);\n if (secs < 60) return `${secs}s`;\n return `${Math.floor(secs / 60)}m ${secs % 60}s`;\n}\n","/**\n * ComposedRenderer — scroll-proof terminal rendering using alternate screen.\n *\n * Enters the alternate screen buffer on first update, renders the step-list\n * with animated spinners, and exits on finish(). The alternate screen is\n * scroll-proof — users cannot scroll past the rendered content.\n *\n * After finish(), output returns to the normal terminal where results\n * (scores, issues, quality gate) are written to scrollback.\n */\n\nimport type { Renderer, DashboardState, SummaryResult } from \"./renderer.js\";\nimport { cursor, screen } from \"../ansi.js\";\nimport { getTerminalWidth, getTerminalHeight } from \"../detect.js\";\nimport { spinnerFrame, FRAME_INTERVAL } from \"../primitives/spinner.js\";\nimport { dim, bold } from \"../theme.js\";\nimport { sym } from \"../symbols.js\";\nimport { renderStepList } from \"./step-list.js\";\n\nexport class ComposedRenderer implements Renderer {\n private output: NodeJS.WritableStream;\n private tickTimer: ReturnType<typeof setInterval> | null = null;\n private frameIndex = 0;\n private suspended = false;\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n private lastState: DashboardState | null = null;\n private entered = false;\n\n constructor(output: NodeJS.WritableStream = process.stderr) {\n this.output = output;\n process.stderr.on(\"resize\", this.onResize);\n }\n\n update(state: DashboardState): void {\n if (!this.entered) {\n this.output.write(screen.altEnter + cursor.hide);\n this.entered = true;\n }\n this.lastState = state;\n const content = this.buildContent(state, this.frameIndex);\n const capped = this.capContent(content);\n // Alternate screen: just home + clear + write\n this.output.write(cursor.home + screen.clear + capped);\n if (!this.tickTimer && !this.suspended) {\n this.startTick();\n }\n }\n\n finish(result: SummaryResult): void {\n this.stopTick();\n // Show final state briefly on alt screen\n const content = this.buildFinishContent(result);\n if (this.entered) {\n this.output.write(cursor.home + screen.clear + content);\n }\n // Exit alternate screen — returns to normal terminal\n if (this.entered) {\n this.output.write(cursor.show + screen.altExit);\n this.entered = false;\n }\n this.lastState = null;\n }\n\n dispose(): void {\n this.stopTick();\n if (this.resizeTimer !== null) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = null;\n }\n process.stderr.removeListener(\"resize\", this.onResize);\n if (this.entered) {\n this.output.write(cursor.show + screen.altExit);\n this.entered = false;\n }\n }\n\n suspend(): void {\n this.suspended = true;\n this.stopTick();\n if (this.entered) {\n this.output.write(cursor.show + screen.altExit);\n this.entered = false;\n }\n }\n\n resume(): void {\n this.suspended = false;\n if (this.lastState) {\n this.output.write(screen.altEnter + cursor.hide);\n this.entered = true;\n this.startTick();\n }\n }\n\n // ── Private helpers ──────────────────────────────────────────────\n\n private startTick(): void {\n this.tickTimer = setInterval(() => {\n this.frameIndex++;\n if (this.lastState && this.entered) {\n const content = this.buildContent(this.lastState, this.frameIndex);\n const capped = this.capContent(content);\n this.output.write(cursor.home + screen.clear + capped);\n }\n }, FRAME_INTERVAL);\n }\n\n private stopTick(): void {\n if (this.tickTimer !== null) {\n clearInterval(this.tickTimer);\n this.tickTimer = null;\n }\n }\n\n private onResize = (): void => {\n if (this.resizeTimer !== null) {\n clearTimeout(this.resizeTimer);\n }\n this.resizeTimer = setTimeout(() => {\n this.resizeTimer = null;\n if (this.lastState && this.entered) {\n const content = this.buildContent(this.lastState, this.frameIndex);\n const capped = this.capContent(content);\n this.output.write(cursor.home + screen.clear + capped);\n }\n }, 100);\n };\n\n private capContent(content: string): string {\n const maxLines = Math.max(1, getTerminalHeight() - 2);\n const lines = content.split(\"\\n\");\n if (lines.length <= maxLines) return content;\n const overflow = lines.length - (maxLines - 1);\n const truncated = lines.slice(0, maxLines - 1);\n truncated.push(dim(`... ${overflow} more lines`));\n return truncated.join(\"\\n\");\n }\n\n private buildContent(state: DashboardState, frame: number): string {\n if (state.stepStates && state.stepStates.length > 0) {\n return renderStepList(state.stepStates, frame, getTerminalWidth());\n }\n const spinner = spinnerFrame(frame);\n const progress = state.phaseTotal > 0\n ? ` (${state.phaseIndex}/${state.phaseTotal})`\n : \"\";\n return `${spinner} ${state.phase}${dim(progress)}`;\n }\n\n private buildFinishContent(result: SummaryResult): string {\n if (result.passed) {\n return `${sym(\"success\")} ${bold(\"Complete\")}${dim(\" \" + formatElapsed(result.elapsed))}`;\n }\n return `${sym(\"fail\")} ${bold(\"Failed\")}${dim(\" \" + formatElapsed(result.elapsed))}`;\n }\n}\n\nfunction formatElapsed(ms: number): string {\n const secs = Math.round(ms / 1000);\n if (secs < 60) return `(${secs}s)`;\n return `(${Math.floor(secs / 60)}m ${secs % 60}s)`;\n}\n","/**\n * Inline renderer for CI/piped environments.\n *\n * Writes timestamped, non-interactive log lines to stderr.\n * No cursor movement, no ANSI escape sequences beyond color.\n * Compatible with log aggregation tools.\n */\n\nimport type { Renderer, DashboardState, SummaryResult } from \"./renderer.js\";\nimport { dim, colorize, bold, isColorEnabled } from \"../theme.js\";\n\nexport class InlineRenderer implements Renderer {\n private output: NodeJS.WritableStream;\n private lastPhase = \"\";\n\n constructor(output: NodeJS.WritableStream = process.stderr) {\n this.output = output;\n }\n\n update(state: DashboardState): void {\n // Only write when phase changes to avoid log spam\n if (state.phase !== this.lastPhase) {\n this.lastPhase = state.phase;\n const ts = timestamp();\n const phasePct = state.phaseTotal > 0\n ? ` (${state.phaseIndex}/${state.phaseTotal})`\n : \"\";\n\n this.output.write(\n `${dim(ts)} ${bold(state.phase)}${dim(phasePct)} ${dim(`| ${state.issueCount} issues`)}\\n`\n );\n }\n }\n\n finish(result: SummaryResult): void {\n const ts = timestamp();\n const status = result.passed\n ? isColorEnabled() ? colorize(\"PASSED\", \"#4ADE80\") : \"PASSED\"\n : isColorEnabled() ? colorize(\"FAILED\", \"#F87171\") : \"FAILED\";\n\n const elapsed = formatElapsed(result.elapsed);\n\n this.output.write(\n `${dim(ts)} ${bold(\"Audit Complete\")} ${status} ` +\n `score=${result.overallScore} issues=${result.issueCount} ${dim(elapsed)}\\n`\n );\n }\n\n dispose(): void {\n // No cleanup needed for inline renderer\n }\n\n suspend(): void {}\n\n resume(): void {}\n}\n\nfunction timestamp(): string {\n const now = new Date();\n return `[${pad2(now.getHours())}:${pad2(now.getMinutes())}:${pad2(now.getSeconds())}]`;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n\nfunction formatElapsed(ms: number): string {\n const secs = Math.round(ms / 1000);\n if (secs < 60) return `(${secs}s)`;\n return `(${Math.floor(secs / 60)}m ${secs % 60}s)`;\n}\n","/**\n * Renderer interface and factory for terminal output.\n *\n * Two rendering modes:\n * - AlternateScreenRenderer: Full terminal takeover (TTY)\n * - InlineRenderer: Timestamped log lines (CI/piped)\n */\n\nimport { isCI, isTTY } from \"../detect.js\";\nimport { AlternateScreenRenderer } from \"./alternate.js\";\nimport { ComposedRenderer } from \"./composed.js\";\nimport { InlineRenderer } from \"./inline.js\";\nimport type { StepState } from \"./step-list.js\";\n\nexport interface DashboardState {\n phase: string;\n phaseIndex: number;\n phaseTotal: number;\n url: string;\n mode: string;\n progress: Record<string, number>;\n totals: Record<string, number>;\n issueCount: number;\n scorePreview: number | null;\n verbose: boolean;\n elapsed: number;\n /** Optional step states for step-list rendering. When present and non-empty,\n * ComposedRenderer replaces the single-spinner line with a step list. */\n stepStates?: StepState[];\n}\n\nexport interface SummaryResult {\n url: string;\n mode: string;\n overallScore: number;\n scores: Record<string, number>;\n issueCount: number;\n passed: boolean;\n elapsed: number;\n}\n\nexport interface Renderer {\n /** Update the display with new state */\n update(state: DashboardState): void;\n /** Show final summary and clean up */\n finish(result: SummaryResult): void;\n /** Clean up resources (keyboard, alternate screen, etc.) */\n dispose(): void;\n /** Stop animation and show cursor before a prompt */\n suspend(): void;\n /** Restart animation after a prompt resolves */\n resume(): void;\n}\n\nexport type RendererMode = \"alternate\" | \"inline\" | \"composed\" | \"auto\";\n\n/**\n * Global renderer override. When set, createRenderer() returns this\n * instead of creating a new one. Used by the interactive app to inject\n * a canvas-aware renderer that commands use transparently.\n */\nlet _rendererOverride: Renderer | null = null;\n\n/** Set a renderer override. Pass null to clear. */\nexport function setRendererOverride(renderer: Renderer | null): void {\n _rendererOverride = renderer;\n}\n\n/**\n * Create a renderer based on mode or auto-detection.\n *\n * If a renderer override is active (set by the interactive app),\n * returns the override instead of creating a new one.\n *\n * auto: composed in interactive TTY, inline in CI/piped\n */\nexport function createRenderer(\n mode: RendererMode = \"auto\",\n output: NodeJS.WritableStream = process.stderr,\n): Renderer {\n if (_rendererOverride) return _rendererOverride;\n\n if (mode === \"auto\") {\n mode = isTTY() && !isCI() ? \"composed\" : \"inline\";\n }\n\n if (mode === \"alternate\") {\n return new AlternateScreenRenderer(output);\n }\n\n if (mode === \"composed\") {\n if (!isTTY()) return new InlineRenderer(output);\n return new ComposedRenderer(output);\n }\n\n return new InlineRenderer(output);\n}\n","/**\n * Physical row calculation for terminal cursor math.\n *\n * Calculates how many terminal rows a string occupies at a given terminal\n * width, accounting for line wrapping and ANSI escape sequences.\n *\n * Used by ComposedRenderer to determine how far to move the cursor up\n * before redrawing — prevents cursor drift at 120+ column widths.\n */\n\nimport { visibleLength } from \"../ansi.js\";\n\n/**\n * Calculate the number of physical terminal rows occupied by a string.\n *\n * Each logical line (split on \"\\n\") occupies ceil(visibleLength / terminalWidth)\n * rows, with a minimum of 1 row per line (empty lines still occupy a row).\n *\n * @param content - The string to measure (may contain ANSI escape codes and newlines)\n * @param terminalWidth - The terminal column width\n * @returns Number of physical rows, or 0 if terminalWidth <= 0\n */\nexport function physicalRows(content: string, terminalWidth: number): number {\n if (terminalWidth <= 0) return 0;\n const lines = content.split(\"\\n\");\n return lines.reduce((total, line) => {\n const len = visibleLength(line);\n return total + Math.max(1, Math.ceil(len / terminalWidth));\n }, 0);\n}\n","/**\n * ScrollingViewport — fixed-height arrow-key navigable list with expand/collapse.\n *\n * Renders a scrollable list of items within a bounded terminal region using\n * cursor.up(N) + clearDown for in-place updates (no alternate screen).\n *\n * Features:\n * - Up/Down arrows, j/k aliases, Page Up/Down navigation\n * - Boundary stop (no wrap-around)\n * - Top/bottom scroll indicators with item counts\n * - Enter to toggle inline detail expansion; Esc to collapse\n * - Ctrl+C exits cleanly and always restores terminal state\n * - Terminal resize recalculates visibleRows and clamps scrollOffset\n *\n * All output goes to stderr (the `output` param). No alternate screen.\n */\n\nimport { cursor, screen, truncate } from \"../ansi.js\";\nimport { getTerminalWidth, getTerminalHeight } from \"../detect.js\";\nimport { physicalRows } from \"./physicalRows.js\";\nimport { severityColor, dim, bgColor, isColorEnabled, brand } from \"../theme.js\";\nimport { isPlainMode } from \"../plain.js\";\n\n// ── Public types ──────────────────────────────────────────────────────────────\n\nexport interface ViewportItem {\n /** Unique identifier for this item */\n id: string;\n /** Severity level: critical, error, serious, warning, moderate, minor, info */\n severity: string;\n /** Display title */\n title: string;\n /** Effort estimate: trivial|small|medium|large */\n effort: string;\n /** Optional detail text shown when item is expanded */\n detail?: string;\n}\n\nexport interface ViewportOptions {\n items: ViewportItem[];\n /** Maximum visible rows. Actual visibleRows = Math.min(maxRows, termHeight - 4). Default: 10 */\n maxRows?: number;\n /** Output stream. Default: process.stderr */\n output?: NodeJS.WritableStream;\n /** Input stream. Default: process.stdin */\n stdin?: NodeJS.ReadStream;\n}\n\n// ── Key constants ─────────────────────────────────────────────────────────────\n\nconst KEY_CTRL_C = \"\\x03\";\nconst KEY_UP = \"\\x1b[A\";\nconst KEY_DOWN = \"\\x1b[B\";\nconst KEY_PAGE_UP = \"\\x1b[5~\";\nconst KEY_PAGE_DOWN = \"\\x1b[6~\";\nconst KEY_ENTER_CR = \"\\r\";\nconst KEY_ENTER_LF = \"\\n\";\nconst KEY_ESC = \"\\x1b\";\nconst KEY_J = \"j\";\nconst KEY_K = \"k\";\n\ntype KeyAction = \"up\" | \"down\" | \"pageup\" | \"pagedown\" | \"enter\" | \"escape\" | \"quit\" | null;\n\nfunction parseKey(data: Buffer): KeyAction {\n const str = data.toString(\"binary\");\n if (str === KEY_CTRL_C) return \"quit\";\n if (str === KEY_UP) return \"up\";\n if (str === KEY_DOWN) return \"down\";\n if (str === KEY_PAGE_UP) return \"pageup\";\n if (str === KEY_PAGE_DOWN) return \"pagedown\";\n if (str === KEY_ENTER_CR || str === KEY_ENTER_LF) return \"enter\";\n // Single ESC byte (not start of sequence) — guard against longer sequences\n if (str === KEY_ESC) return \"escape\";\n if (str === KEY_J) return \"down\";\n if (str === KEY_K) return \"up\";\n return null;\n}\n\n// ── ScrollingViewport class ───────────────────────────────────────────────────\n\nexport class ScrollingViewport {\n private readonly items: ViewportItem[];\n private readonly maxRows: number;\n private readonly output: NodeJS.WritableStream;\n private readonly stdin: NodeJS.ReadStream;\n\n /** Index of the currently highlighted item (0-indexed) */\n cursorIdx = 0;\n /** Index of first visible item */\n scrollOffset = 0;\n /** Index of expanded item (-1 = none) */\n expandedIdx = -1;\n /** Calculated visible rows (updated on resize) */\n visibleRows: number;\n\n private lastRows = 0;\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(options: ViewportOptions) {\n this.items = options.items;\n this.maxRows = options.maxRows ?? 10;\n this.output = options.output ?? process.stderr;\n this.stdin = options.stdin ?? (process.stdin as NodeJS.ReadStream);\n this.visibleRows = this.calcVisibleRows();\n }\n\n // ── Public entry point ──────────────────────────────────────────────────────\n\n /**\n * Run the viewport interactively.\n *\n * Guard: if stdin is not a TTY or setRawMode is unavailable, returns\n * immediately (non-interactive fallback).\n *\n * Resolves when the user presses Ctrl+C.\n */\n async run(): Promise<void> {\n if (!this.stdin.isTTY || typeof this.stdin.setRawMode !== \"function\") {\n return;\n }\n\n return new Promise<void>((resolve) => {\n this.stdin.setRawMode(true);\n this.stdin.resume();\n this.output.write(cursor.hide);\n\n // Initial draw\n this.redraw(this.buildFrame());\n\n // Resize handler\n const onResize = (): void => {\n if (this.resizeTimer !== null) clearTimeout(this.resizeTimer);\n this.resizeTimer = setTimeout(() => {\n this.resizeTimer = null;\n this.visibleRows = this.calcVisibleRows();\n this.clampScrollOffset();\n this.lastRows = 0; // reset so we don't cursor-up with stale count\n this.redraw(this.buildFrame());\n }, 100);\n };\n\n // Key input handler\n const onData = (data: Buffer): void => {\n const action = parseKey(data);\n if (action === \"quit\") {\n cleanup();\n resolve();\n return;\n }\n this.handleAction(action);\n this.redraw(this.buildFrame());\n };\n\n const cleanup = (): void => {\n this.stdin.removeListener(\"data\", onData);\n process.stderr.removeListener(\"resize\", onResize);\n if (this.resizeTimer !== null) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = null;\n }\n try {\n this.stdin.setRawMode(false);\n } catch {\n // ignore — stdin may already be closed\n }\n this.stdin.pause();\n this.output.write(cursor.show);\n };\n\n this.stdin.on(\"data\", onData);\n process.stderr.on(\"resize\", onResize);\n });\n }\n\n // ── Private helpers ─────────────────────────────────────────────────────────\n\n private calcVisibleRows(): number {\n return Math.min(this.maxRows, getTerminalHeight() - 4);\n }\n\n private clampScrollOffset(): void {\n const maxOffset = Math.max(0, this.items.length - this.visibleRows);\n this.scrollOffset = Math.max(0, Math.min(this.scrollOffset, maxOffset));\n }\n\n private handleAction(action: KeyAction): void {\n const last = this.items.length - 1;\n switch (action) {\n case \"up\":\n this.cursorIdx = Math.max(0, this.cursorIdx - 1);\n break;\n case \"down\":\n this.cursorIdx = Math.min(last, this.cursorIdx + 1);\n break;\n case \"pageup\":\n this.cursorIdx = Math.max(0, this.cursorIdx - this.visibleRows);\n break;\n case \"pagedown\":\n this.cursorIdx = Math.min(last, this.cursorIdx + this.visibleRows);\n break;\n case \"enter\":\n this.expandedIdx = this.expandedIdx === this.cursorIdx ? -1 : this.cursorIdx;\n break;\n case \"escape\":\n this.expandedIdx = -1;\n break;\n default:\n break;\n }\n // Adjust scroll offset to keep cursor in view\n if (this.cursorIdx < this.scrollOffset) {\n this.scrollOffset = this.cursorIdx;\n }\n if (this.cursorIdx >= this.scrollOffset + this.visibleRows) {\n this.scrollOffset = this.cursorIdx - this.visibleRows + 1;\n }\n this.clampScrollOffset();\n }\n\n private buildFrame(): string {\n const width = getTerminalWidth();\n const lines: string[] = [];\n const plain = isPlainMode();\n const colored = isColorEnabled();\n\n // ── Top indicator ──\n if (this.scrollOffset > 0) {\n const count = this.scrollOffset;\n const arrow = plain ? \"^\" : \"\\u25b2\"; // ▲\n lines.push(dim(` ${arrow} ${count} more`));\n }\n\n // ── Visible items ──\n const end = Math.min(this.scrollOffset + this.visibleRows, this.items.length);\n for (let i = this.scrollOffset; i < end; i++) {\n const item = this.items[i];\n const isHighlighted = i === this.cursorIdx;\n const isExpanded = i === this.expandedIdx;\n\n const badge = severityColor(item.severity);\n // Badge visible width is the label text length (e.g., \"CRITICAL\" = 8)\n const badgeVisibleWidth = item.severity.toUpperCase().length;\n // Reserve space: 2 indent + badgeWidth + 1 space + effort \"[xxx]\" ~12 + 1 pad\n const titleMaxWidth = Math.max(10, width - badgeVisibleWidth - 18);\n const title = truncate(item.title, titleMaxWidth);\n const effortTag = dim(`[${item.effort}]`);\n\n let row = ` ${badge} ${title} ${effortTag}`;\n\n if (isHighlighted) {\n if (colored && !plain) {\n row = bgColor(row, brand.teal);\n } else {\n // Reverse video fallback (plain mode or no color)\n row = `\\x1b[7m${row}\\x1b[0m`;\n }\n }\n\n lines.push(row);\n\n // ── Expanded detail ──\n if (isExpanded && item.detail) {\n const detailLines = item.detail.split(\"\\n\");\n for (const dl of detailLines) {\n lines.push(` ${dim(truncate(dl, width - 6))}`);\n }\n }\n }\n\n // ── Bottom indicator ──\n if (this.scrollOffset + this.visibleRows < this.items.length) {\n const count = this.items.length - (this.scrollOffset + this.visibleRows);\n const arrow = plain ? \"v\" : \"\\u25bc\"; // ▼\n lines.push(dim(` ${arrow} ${count} more`));\n }\n\n return lines.join(\"\\n\");\n }\n\n private redraw(content: string): void {\n const rows = this.lastRows;\n let seq = rows > 0 ? cursor.up(rows) + screen.clearDown : \"\";\n seq += content;\n this.output.write(seq);\n this.lastRows = physicalRows(content, getTerminalWidth());\n }\n}\n","/**\n * Keyboard handler for dashboard interaction.\n *\n * Listens for keypresses in raw mode and emits semantic events.\n * Only works in TTY — gracefully no-ops in non-TTY environments.\n */\n\nimport { EventEmitter } from \"node:events\";\n\n/** Check if a renderer override is active (interactive app owns the terminal). */\nlet _isOverrideActive = false;\nexport function setKeyboardOverrideActive(active: boolean): void {\n _isOverrideActive = active;\n}\n\nexport type KeyboardEvent = \"quit\" | \"verbose\";\n\nexport interface KeyboardHandler {\n /** Start listening for keypresses */\n start(): void;\n /** Stop listening and restore terminal state */\n dispose(): void;\n /** Register an event handler */\n on(event: KeyboardEvent, handler: () => void): void;\n}\n\n/**\n * Create a keyboard handler.\n *\n * @param stdin - Input stream (defaults to process.stdin, injectable for testing)\n */\nexport function createKeyboardHandler(\n stdin: NodeJS.ReadStream = process.stdin,\n): KeyboardHandler {\n // When running inside the interactive app, return a no-op handler\n // to avoid stealing stdin from the app's key handling.\n if (_isOverrideActive) {\n return {\n start() {},\n dispose() {},\n on() {},\n };\n }\n\n const emitter = new EventEmitter();\n let started = false;\n let wasRawMode = false;\n\n function onData(data: Buffer): void {\n const key = data.toString();\n\n // Ctrl+C\n if (key === \"\\x03\") {\n emitter.emit(\"quit\");\n return;\n }\n\n switch (key.toLowerCase()) {\n case \"q\":\n emitter.emit(\"quit\");\n break;\n case \"v\":\n emitter.emit(\"verbose\");\n break;\n }\n }\n\n return {\n start() {\n if (started) return;\n if (!stdin.isTTY || typeof stdin.setRawMode !== \"function\") return;\n\n started = true;\n wasRawMode = stdin.isRaw;\n stdin.setRawMode(true);\n stdin.resume();\n stdin.on(\"data\", onData);\n },\n\n dispose() {\n if (!started) return;\n started = false;\n stdin.removeListener(\"data\", onData);\n if (stdin.isTTY && typeof stdin.setRawMode === \"function\") {\n stdin.setRawMode(wasRawMode);\n }\n stdin.pause();\n },\n\n on(event: KeyboardEvent, handler: () => void) {\n emitter.on(event, handler);\n },\n };\n}\n"]}