@wundr.io/cli 1.0.12 → 1.0.13

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 (234) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ai/ai-service.d.ts +152 -0
  3. package/dist/ai/ai-service.d.ts.map +1 -0
  4. package/dist/ai/ai-service.js +430 -0
  5. package/dist/ai/ai-service.js.map +1 -0
  6. package/dist/ai/claude-client.d.ts +130 -0
  7. package/dist/ai/claude-client.d.ts.map +1 -0
  8. package/dist/ai/claude-client.js +340 -0
  9. package/dist/ai/claude-client.js.map +1 -0
  10. package/dist/ai/conversation-manager.d.ts +164 -0
  11. package/dist/ai/conversation-manager.d.ts.map +1 -0
  12. package/dist/ai/conversation-manager.js +614 -0
  13. package/dist/ai/conversation-manager.js.map +1 -0
  14. package/dist/ai/index.d.ts +5 -0
  15. package/dist/ai/index.d.ts.map +1 -0
  16. package/dist/ai/index.js +8 -0
  17. package/dist/ai/index.js.map +1 -0
  18. package/dist/cli.d.ts +36 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +192 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/commands/ai.d.ts +89 -0
  23. package/dist/commands/ai.d.ts.map +1 -0
  24. package/dist/commands/ai.js +954 -0
  25. package/dist/commands/ai.js.map +1 -0
  26. package/dist/commands/alignment.d.ts +78 -0
  27. package/dist/commands/alignment.d.ts.map +1 -0
  28. package/dist/commands/alignment.js +817 -0
  29. package/dist/commands/alignment.js.map +1 -0
  30. package/dist/commands/analyze-optimized.d.ts +14 -0
  31. package/dist/commands/analyze-optimized.d.ts.map +1 -0
  32. package/dist/commands/analyze-optimized.js +609 -0
  33. package/dist/commands/analyze-optimized.js.map +1 -0
  34. package/dist/commands/analyze.d.ts +65 -0
  35. package/dist/commands/analyze.d.ts.map +1 -0
  36. package/dist/commands/analyze.js +435 -0
  37. package/dist/commands/analyze.js.map +1 -0
  38. package/dist/commands/batch.d.ts +93 -0
  39. package/dist/commands/batch.d.ts.map +1 -0
  40. package/dist/commands/batch.js +854 -0
  41. package/dist/commands/batch.js.map +1 -0
  42. package/dist/commands/chat.d.ts +72 -0
  43. package/dist/commands/chat.d.ts.map +1 -0
  44. package/dist/commands/chat.js +678 -0
  45. package/dist/commands/chat.js.map +1 -0
  46. package/dist/commands/claude-init.d.ts +28 -0
  47. package/dist/commands/claude-init.d.ts.map +1 -0
  48. package/dist/commands/claude-init.js +591 -0
  49. package/dist/commands/claude-init.js.map +1 -0
  50. package/dist/commands/claude-setup.d.ts +119 -0
  51. package/dist/commands/claude-setup.d.ts.map +1 -0
  52. package/dist/commands/claude-setup.js +1079 -0
  53. package/dist/commands/claude-setup.js.map +1 -0
  54. package/dist/commands/computer-setup.d.ts +8 -0
  55. package/dist/commands/computer-setup.d.ts.map +1 -0
  56. package/dist/commands/computer-setup.js +877 -0
  57. package/dist/commands/computer-setup.js.map +1 -0
  58. package/dist/commands/create-command.d.ts +7 -0
  59. package/dist/commands/create-command.d.ts.map +1 -0
  60. package/dist/commands/create-command.js +158 -0
  61. package/dist/commands/create-command.js.map +1 -0
  62. package/dist/commands/create.d.ts +74 -0
  63. package/dist/commands/create.d.ts.map +1 -0
  64. package/dist/commands/create.js +556 -0
  65. package/dist/commands/create.js.map +1 -0
  66. package/dist/commands/dashboard.d.ts +91 -0
  67. package/dist/commands/dashboard.d.ts.map +1 -0
  68. package/dist/commands/dashboard.js +538 -0
  69. package/dist/commands/dashboard.js.map +1 -0
  70. package/dist/commands/govern.d.ts +70 -0
  71. package/dist/commands/govern.d.ts.map +1 -0
  72. package/dist/commands/govern.js +481 -0
  73. package/dist/commands/govern.js.map +1 -0
  74. package/dist/commands/governance.d.ts +17 -0
  75. package/dist/commands/governance.d.ts.map +1 -0
  76. package/dist/commands/governance.js +703 -0
  77. package/dist/commands/governance.js.map +1 -0
  78. package/dist/commands/guardian.d.ts +20 -0
  79. package/dist/commands/guardian.d.ts.map +1 -0
  80. package/dist/commands/guardian.js +597 -0
  81. package/dist/commands/guardian.js.map +1 -0
  82. package/dist/commands/init.d.ts +59 -0
  83. package/dist/commands/init.d.ts.map +1 -0
  84. package/dist/commands/init.js +650 -0
  85. package/dist/commands/init.js.map +1 -0
  86. package/dist/commands/orchestrator.d.ts +7 -0
  87. package/dist/commands/orchestrator.d.ts.map +1 -0
  88. package/dist/commands/orchestrator.js +578 -0
  89. package/dist/commands/orchestrator.js.map +1 -0
  90. package/dist/commands/performance-optimizer.d.ts +30 -0
  91. package/dist/commands/performance-optimizer.d.ts.map +1 -0
  92. package/dist/commands/performance-optimizer.js +650 -0
  93. package/dist/commands/performance-optimizer.js.map +1 -0
  94. package/dist/commands/plugins.d.ts +87 -0
  95. package/dist/commands/plugins.d.ts.map +1 -0
  96. package/dist/commands/plugins.js +685 -0
  97. package/dist/commands/plugins.js.map +1 -0
  98. package/dist/commands/rag.d.ts +7 -0
  99. package/dist/commands/rag.d.ts.map +1 -0
  100. package/dist/commands/rag.js +751 -0
  101. package/dist/commands/rag.js.map +1 -0
  102. package/dist/commands/session.d.ts +41 -0
  103. package/dist/commands/session.d.ts.map +1 -0
  104. package/dist/commands/session.js +441 -0
  105. package/dist/commands/session.js.map +1 -0
  106. package/dist/commands/setup.d.ts +24 -0
  107. package/dist/commands/setup.d.ts.map +1 -0
  108. package/dist/commands/setup.js +172 -0
  109. package/dist/commands/setup.js.map +1 -0
  110. package/dist/commands/test-init.d.ts +9 -0
  111. package/dist/commands/test-init.d.ts.map +1 -0
  112. package/dist/commands/test-init.js +222 -0
  113. package/dist/commands/test-init.js.map +1 -0
  114. package/dist/commands/test.d.ts +25 -0
  115. package/dist/commands/test.d.ts.map +1 -0
  116. package/dist/commands/test.js +217 -0
  117. package/dist/commands/test.js.map +1 -0
  118. package/dist/commands/watch.d.ts +76 -0
  119. package/dist/commands/watch.d.ts.map +1 -0
  120. package/dist/commands/watch.js +613 -0
  121. package/dist/commands/watch.js.map +1 -0
  122. package/dist/commands/worktree.d.ts +63 -0
  123. package/dist/commands/worktree.d.ts.map +1 -0
  124. package/dist/commands/worktree.js +774 -0
  125. package/dist/commands/worktree.js.map +1 -0
  126. package/dist/context/context-manager.d.ts +155 -0
  127. package/dist/context/context-manager.d.ts.map +1 -0
  128. package/dist/context/context-manager.js +383 -0
  129. package/dist/context/context-manager.js.map +1 -0
  130. package/dist/context/index.d.ts +3 -0
  131. package/dist/context/index.d.ts.map +1 -0
  132. package/dist/context/index.js +6 -0
  133. package/dist/context/index.js.map +1 -0
  134. package/dist/context/session-manager.d.ts +207 -0
  135. package/dist/context/session-manager.d.ts.map +1 -0
  136. package/dist/context/session-manager.js +686 -0
  137. package/dist/context/session-manager.js.map +1 -0
  138. package/dist/framework/command-interface.d.ts +349 -0
  139. package/dist/framework/command-interface.d.ts.map +1 -0
  140. package/dist/framework/command-interface.js +101 -0
  141. package/dist/framework/command-interface.js.map +1 -0
  142. package/dist/framework/command-registry.d.ts +173 -0
  143. package/dist/framework/command-registry.d.ts.map +1 -0
  144. package/dist/framework/command-registry.js +734 -0
  145. package/dist/framework/command-registry.js.map +1 -0
  146. package/dist/framework/completion-exporter.d.ts +79 -0
  147. package/dist/framework/completion-exporter.d.ts.map +1 -0
  148. package/dist/framework/completion-exporter.js +259 -0
  149. package/dist/framework/completion-exporter.js.map +1 -0
  150. package/dist/framework/debug-logger.d.ts +163 -0
  151. package/dist/framework/debug-logger.d.ts.map +1 -0
  152. package/dist/framework/debug-logger.js +373 -0
  153. package/dist/framework/debug-logger.js.map +1 -0
  154. package/dist/framework/error-handler.d.ts +196 -0
  155. package/dist/framework/error-handler.d.ts.map +1 -0
  156. package/dist/framework/error-handler.js +613 -0
  157. package/dist/framework/error-handler.js.map +1 -0
  158. package/dist/framework/help-generator.d.ts +78 -0
  159. package/dist/framework/help-generator.d.ts.map +1 -0
  160. package/dist/framework/help-generator.js +414 -0
  161. package/dist/framework/help-generator.js.map +1 -0
  162. package/dist/framework/index.d.ts +62 -0
  163. package/dist/framework/index.d.ts.map +1 -0
  164. package/dist/framework/index.js +95 -0
  165. package/dist/framework/index.js.map +1 -0
  166. package/dist/framework/interactive-repl.d.ts +138 -0
  167. package/dist/framework/interactive-repl.d.ts.map +1 -0
  168. package/dist/framework/interactive-repl.js +567 -0
  169. package/dist/framework/interactive-repl.js.map +1 -0
  170. package/dist/framework/output-formatter.d.ts +274 -0
  171. package/dist/framework/output-formatter.d.ts.map +1 -0
  172. package/dist/framework/output-formatter.js +545 -0
  173. package/dist/framework/output-formatter.js.map +1 -0
  174. package/dist/framework/progress-manager.d.ts +192 -0
  175. package/dist/framework/progress-manager.d.ts.map +1 -0
  176. package/dist/framework/progress-manager.js +408 -0
  177. package/dist/framework/progress-manager.js.map +1 -0
  178. package/dist/index.d.ts +8 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +51 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/interactive/interactive-mode.d.ts +76 -0
  183. package/dist/interactive/interactive-mode.d.ts.map +1 -0
  184. package/dist/interactive/interactive-mode.js +732 -0
  185. package/dist/interactive/interactive-mode.js.map +1 -0
  186. package/dist/nlp/command-mapper.d.ts +174 -0
  187. package/dist/nlp/command-mapper.d.ts.map +1 -0
  188. package/dist/nlp/command-mapper.js +624 -0
  189. package/dist/nlp/command-mapper.js.map +1 -0
  190. package/dist/nlp/command-parser.d.ts +106 -0
  191. package/dist/nlp/command-parser.d.ts.map +1 -0
  192. package/dist/nlp/command-parser.js +417 -0
  193. package/dist/nlp/command-parser.js.map +1 -0
  194. package/dist/nlp/index.d.ts +5 -0
  195. package/dist/nlp/index.d.ts.map +1 -0
  196. package/dist/nlp/index.js +8 -0
  197. package/dist/nlp/index.js.map +1 -0
  198. package/dist/nlp/intent-classifier.d.ts +59 -0
  199. package/dist/nlp/intent-classifier.d.ts.map +1 -0
  200. package/dist/nlp/intent-classifier.js +384 -0
  201. package/dist/nlp/intent-classifier.js.map +1 -0
  202. package/dist/nlp/intent-parser.d.ts +152 -0
  203. package/dist/nlp/intent-parser.d.ts.map +1 -0
  204. package/dist/nlp/intent-parser.js +746 -0
  205. package/dist/nlp/intent-parser.js.map +1 -0
  206. package/dist/plugins/plugin-manager.d.ts +121 -0
  207. package/dist/plugins/plugin-manager.d.ts.map +1 -0
  208. package/dist/plugins/plugin-manager.js +606 -0
  209. package/dist/plugins/plugin-manager.js.map +1 -0
  210. package/dist/types/index.d.ts +224 -0
  211. package/dist/types/index.d.ts.map +1 -0
  212. package/dist/types/index.js +3 -0
  213. package/dist/types/index.js.map +1 -0
  214. package/dist/utils/backup-rollback-manager.d.ts +72 -0
  215. package/dist/utils/backup-rollback-manager.d.ts.map +1 -0
  216. package/dist/utils/backup-rollback-manager.js +288 -0
  217. package/dist/utils/backup-rollback-manager.js.map +1 -0
  218. package/dist/utils/claude-config-installer.d.ts +98 -0
  219. package/dist/utils/claude-config-installer.d.ts.map +1 -0
  220. package/dist/utils/claude-config-installer.js +678 -0
  221. package/dist/utils/claude-config-installer.js.map +1 -0
  222. package/dist/utils/config-manager.d.ts +73 -0
  223. package/dist/utils/config-manager.d.ts.map +1 -0
  224. package/dist/utils/config-manager.js +339 -0
  225. package/dist/utils/config-manager.js.map +1 -0
  226. package/dist/utils/error-handler.d.ts +46 -0
  227. package/dist/utils/error-handler.d.ts.map +1 -0
  228. package/dist/utils/error-handler.js +169 -0
  229. package/dist/utils/error-handler.js.map +1 -0
  230. package/dist/utils/logger.d.ts +25 -0
  231. package/dist/utils/logger.d.ts.map +1 -0
  232. package/dist/utils/logger.js +105 -0
  233. package/dist/utils/logger.js.map +1 -0
  234. package/package.json +23 -23
@@ -0,0 +1,545 @@
1
+ "use strict";
2
+ /**
3
+ * Output Formatter - Consistent output formatting for all CLI commands.
4
+ *
5
+ * Provides:
6
+ * - Table rendering with column alignment and truncation
7
+ * - JSON output (pretty or compact)
8
+ * - Key-value pair formatting
9
+ * - List formatting (ordered/unordered)
10
+ * - Tree rendering for hierarchical data
11
+ * - Progress bars
12
+ * - Status indicators with consistent color coding
13
+ * - Diff formatting
14
+ * - Smart output that respects --json, --quiet, --no-color flags
15
+ *
16
+ * @module framework/output-formatter
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.OutputFormatter = void 0;
20
+ const tslib_1 = require("tslib");
21
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
22
+ // ---------------------------------------------------------------------------
23
+ // Constants
24
+ // ---------------------------------------------------------------------------
25
+ const STATUS_CONFIG = {
26
+ running: { icon: '[RUNNING]', color: chalk_1.default.green },
27
+ active: { icon: '[ACTIVE]', color: chalk_1.default.green },
28
+ healthy: { icon: '[HEALTHY]', color: chalk_1.default.green },
29
+ done: { icon: '[DONE]', color: chalk_1.default.blue },
30
+ stopped: { icon: '[STOPPED]', color: chalk_1.default.yellow },
31
+ paused: { icon: '[PAUSED]', color: chalk_1.default.yellow },
32
+ warning: { icon: '[WARNING]', color: chalk_1.default.yellow },
33
+ degraded: { icon: '[DEGRADED]', color: chalk_1.default.yellow },
34
+ pending: { icon: '[PENDING]', color: chalk_1.default.cyan },
35
+ error: { icon: '[ERROR]', color: chalk_1.default.red },
36
+ unhealthy: { icon: '[UNHEALTHY]', color: chalk_1.default.red },
37
+ terminated: { icon: '[TERMINATED]', color: chalk_1.default.gray },
38
+ skipped: { icon: '[SKIPPED]', color: chalk_1.default.gray },
39
+ };
40
+ const TREE_CHARS = {
41
+ unicode: {
42
+ branch: '\u251c\u2500\u2500 ',
43
+ last: '\u2514\u2500\u2500 ',
44
+ pipe: '\u2502 ',
45
+ empty: ' ',
46
+ },
47
+ ascii: { branch: '|-- ', last: '`-- ', pipe: '| ', empty: ' ' },
48
+ };
49
+ // ---------------------------------------------------------------------------
50
+ // Output Formatter
51
+ // ---------------------------------------------------------------------------
52
+ class OutputFormatter {
53
+ noColor;
54
+ constructor(options = {}) {
55
+ this.noColor = options.noColor ?? process.env['NO_COLOR'] === '1';
56
+ }
57
+ // -------------------------------------------------------------------------
58
+ // Table
59
+ // -------------------------------------------------------------------------
60
+ /**
61
+ * Render a data array as an aligned table.
62
+ *
63
+ * @param data - Array of row objects
64
+ * @param options - Table rendering options
65
+ * @returns Formatted table string
66
+ */
67
+ table(data, options = {}) {
68
+ if (data.length === 0) {
69
+ return options.emptyMessage ?? chalk_1.default.gray('No data to display.');
70
+ }
71
+ // Determine columns
72
+ const columns = options.columns ?? this.inferColumns(data);
73
+ const rows = options.maxRows ? data.slice(0, options.maxRows) : data;
74
+ // Calculate column widths
75
+ const widths = this.calculateColumnWidths(columns, rows, options.maxWidth);
76
+ // Render header
77
+ const lines = [];
78
+ const headerLine = columns
79
+ .map((col, i) => {
80
+ const text = this.padCell(col.header, widths[i] ?? 10, col.align ?? 'left');
81
+ return this.applyHeaderStyle(text, options.headerStyle ?? 'bold');
82
+ })
83
+ .join(' ');
84
+ lines.push(headerLine);
85
+ // Separator
86
+ const separator = columns
87
+ .map((_, i) => chalk_1.default.gray('-'.repeat(widths[i] ?? 10)))
88
+ .join(' ');
89
+ lines.push(separator);
90
+ // Render rows
91
+ for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
92
+ const row = rows[rowIndex];
93
+ if (!row)
94
+ continue;
95
+ const prefix = options.rowNumbers ? chalk_1.default.gray(`${rowIndex + 1}. `) : '';
96
+ const cells = columns
97
+ .map((col, i) => {
98
+ const rawValue = row[col.key];
99
+ const formatted = col.format
100
+ ? col.format(rawValue)
101
+ : String(rawValue ?? '');
102
+ const truncated = this.truncate(formatted, widths[i] ?? 10);
103
+ const padded = this.padCell(truncated, widths[i] ?? 10, col.align ?? 'left');
104
+ return col.color ? col.color(rawValue) : padded;
105
+ })
106
+ .join(' ');
107
+ lines.push(prefix + cells);
108
+ }
109
+ // Truncation notice
110
+ if (options.maxRows && data.length > options.maxRows) {
111
+ lines.push(chalk_1.default.gray(`... and ${data.length - options.maxRows} more rows`));
112
+ }
113
+ return lines.join('\n');
114
+ }
115
+ // -------------------------------------------------------------------------
116
+ // JSON
117
+ // -------------------------------------------------------------------------
118
+ /**
119
+ * Format data as JSON.
120
+ *
121
+ * @param data - Any serializable data
122
+ * @param pretty - Pretty print. Defaults to true.
123
+ * @returns JSON string
124
+ */
125
+ json(data, pretty = true) {
126
+ if (pretty) {
127
+ return JSON.stringify(data, null, 2);
128
+ }
129
+ return JSON.stringify(data);
130
+ }
131
+ // -------------------------------------------------------------------------
132
+ // Key-Value
133
+ // -------------------------------------------------------------------------
134
+ /**
135
+ * Format key-value pairs with aligned columns.
136
+ *
137
+ * @param data - Object with string keys
138
+ * @param options - Formatting options
139
+ * @returns Formatted key-value string
140
+ */
141
+ keyValue(data, options = {}) {
142
+ const separator = options.separator ?? ': ';
143
+ const indent = ' '.repeat(options.indent ?? 0);
144
+ const keyColor = options.keyColor ?? chalk_1.default.white;
145
+ const valueColor = options.valueColor ?? ((s) => s);
146
+ const entries = Object.entries(data);
147
+ if (entries.length === 0) {
148
+ return chalk_1.default.gray('No data.');
149
+ }
150
+ // Calculate key width for alignment
151
+ const keyWidth = options.keyWidth ?? Math.max(...entries.map(([k]) => k.length));
152
+ return entries
153
+ .map(([key, value]) => {
154
+ const paddedKey = key.padEnd(keyWidth);
155
+ const formattedValue = this.formatValue(value);
156
+ return `${indent}${keyColor(paddedKey)}${separator}${valueColor(formattedValue)}`;
157
+ })
158
+ .join('\n');
159
+ }
160
+ // -------------------------------------------------------------------------
161
+ // List
162
+ // -------------------------------------------------------------------------
163
+ /**
164
+ * Format items as a list.
165
+ *
166
+ * @param items - List items
167
+ * @param ordered - Use numbers instead of bullets
168
+ * @returns Formatted list string
169
+ */
170
+ list(items, ordered = false) {
171
+ if (items.length === 0) {
172
+ return chalk_1.default.gray('Empty list.');
173
+ }
174
+ const indent = ' ';
175
+ return items
176
+ .map((item, index) => {
177
+ const prefix = ordered ? chalk_1.default.gray(`${index + 1}.`) : chalk_1.default.gray('-');
178
+ return `${indent}${prefix} ${item}`;
179
+ })
180
+ .join('\n');
181
+ }
182
+ // -------------------------------------------------------------------------
183
+ // Tree
184
+ // -------------------------------------------------------------------------
185
+ /**
186
+ * Render a tree structure.
187
+ *
188
+ * @param node - Root node
189
+ * @param options - Rendering options
190
+ * @returns Formatted tree string
191
+ */
192
+ tree(node, options = {}) {
193
+ const chars = options.unicode !== false ? TREE_CHARS.unicode : TREE_CHARS.ascii;
194
+ const maxDepth = options.maxDepth ?? Infinity;
195
+ const lines = [];
196
+ lines.push(`${node.prefix ?? ''}${node.label}`);
197
+ if (node.children) {
198
+ this.renderTreeChildren(node.children, '', chars, lines, 0, maxDepth);
199
+ }
200
+ return lines.join('\n');
201
+ }
202
+ // -------------------------------------------------------------------------
203
+ // Progress Bar
204
+ // -------------------------------------------------------------------------
205
+ /**
206
+ * Render a progress bar.
207
+ *
208
+ * @param current - Current progress value
209
+ * @param total - Total/target value
210
+ * @param width - Bar width in characters
211
+ * @returns Formatted progress bar string
212
+ */
213
+ progressBar(current, total, width = 30) {
214
+ const percentage = total > 0 ? Math.min(current / total, 1) : 0;
215
+ const filled = Math.round(percentage * width);
216
+ const empty = width - filled;
217
+ const bar = chalk_1.default.cyan('[') +
218
+ chalk_1.default.green('='.repeat(filled)) +
219
+ chalk_1.default.gray('-'.repeat(empty)) +
220
+ chalk_1.default.cyan(']');
221
+ const pct = `${(percentage * 100).toFixed(1)}%`;
222
+ const count = `${current}/${total}`;
223
+ return `${bar} ${pct} (${count})`;
224
+ }
225
+ // -------------------------------------------------------------------------
226
+ // Status
227
+ // -------------------------------------------------------------------------
228
+ /**
229
+ * Format a status indicator with consistent color and icon.
230
+ *
231
+ * @param state - Status state
232
+ * @param label - Label to display next to the status
233
+ * @returns Formatted status string
234
+ */
235
+ status(state, label) {
236
+ const config = STATUS_CONFIG[state];
237
+ if (!config) {
238
+ return `[${state.toUpperCase()}] ${label}`;
239
+ }
240
+ return `${config.color(config.icon)} ${label}`;
241
+ }
242
+ // -------------------------------------------------------------------------
243
+ // Diff
244
+ // -------------------------------------------------------------------------
245
+ /**
246
+ * Format a simple diff between two values.
247
+ *
248
+ * @param before - Original value
249
+ * @param after - New value
250
+ * @returns Formatted diff string
251
+ */
252
+ diff(before, after) {
253
+ return `${chalk_1.default.red('- ' + before)}\n${chalk_1.default.green('+ ' + after)}`;
254
+ }
255
+ // -------------------------------------------------------------------------
256
+ // Section Headers
257
+ // -------------------------------------------------------------------------
258
+ /**
259
+ * Format a section header with a separator line.
260
+ *
261
+ * @param title - Section title
262
+ * @param width - Separator width. Defaults to 60.
263
+ * @returns Formatted header string
264
+ */
265
+ header(title, width = 60) {
266
+ return `\n${chalk_1.default.cyan(title)}\n${chalk_1.default.gray('='.repeat(width))}`;
267
+ }
268
+ /**
269
+ * Format a sub-section header.
270
+ *
271
+ * @param title - Sub-section title
272
+ * @param width - Separator width. Defaults to 40.
273
+ * @returns Formatted sub-header string
274
+ */
275
+ subHeader(title, width = 40) {
276
+ return `\n${chalk_1.default.white(title)}\n${chalk_1.default.gray('-'.repeat(width))}`;
277
+ }
278
+ // -------------------------------------------------------------------------
279
+ // Duration & Size Formatting
280
+ // -------------------------------------------------------------------------
281
+ /**
282
+ * Format a duration in milliseconds to a human-readable string.
283
+ */
284
+ duration(ms) {
285
+ const seconds = Math.floor(ms / 1000);
286
+ const minutes = Math.floor(seconds / 60);
287
+ const hours = Math.floor(minutes / 60);
288
+ const days = Math.floor(hours / 24);
289
+ if (days > 0)
290
+ return `${days}d ${hours % 24}h ${minutes % 60}m`;
291
+ if (hours > 0)
292
+ return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
293
+ if (minutes > 0)
294
+ return `${minutes}m ${seconds % 60}s`;
295
+ return `${seconds}s`;
296
+ }
297
+ /**
298
+ * Format bytes to a human-readable string.
299
+ */
300
+ bytes(bytes) {
301
+ if (bytes === 0)
302
+ return '0 B';
303
+ const k = 1024;
304
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
305
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
306
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
307
+ }
308
+ // -------------------------------------------------------------------------
309
+ // YAML
310
+ // -------------------------------------------------------------------------
311
+ /**
312
+ * Format data as YAML.
313
+ * Uses a lightweight built-in serializer to avoid external dependencies.
314
+ *
315
+ * @param data - Any serializable data
316
+ * @param indent - Indentation level (used for recursion). Defaults to 0.
317
+ * @returns YAML-formatted string
318
+ */
319
+ yaml(data, indent = 0) {
320
+ return this.toYaml(data, indent);
321
+ }
322
+ // -------------------------------------------------------------------------
323
+ // Multi-format output
324
+ // -------------------------------------------------------------------------
325
+ /**
326
+ * Format data in the specified output format.
327
+ *
328
+ * @param data - Data to format
329
+ * @param format - Output format
330
+ * @returns Formatted string
331
+ */
332
+ formatAs(data, format) {
333
+ switch (format) {
334
+ case 'json':
335
+ return this.json(data);
336
+ case 'yaml':
337
+ return this.yaml(data);
338
+ case 'table':
339
+ if (Array.isArray(data) &&
340
+ data.length > 0 &&
341
+ typeof data[0] === 'object') {
342
+ return this.table(data);
343
+ }
344
+ if (typeof data === 'object' && data !== null) {
345
+ return this.keyValue(data);
346
+ }
347
+ return String(data);
348
+ case 'plain':
349
+ if (typeof data === 'string')
350
+ return data;
351
+ if (typeof data === 'object')
352
+ return JSON.stringify(data, null, 2);
353
+ return String(data);
354
+ }
355
+ }
356
+ // -------------------------------------------------------------------------
357
+ // Smart Output
358
+ // -------------------------------------------------------------------------
359
+ /**
360
+ * Smart output respecting context flags (--json, --quiet, --no-color).
361
+ *
362
+ * In JSON mode: outputs data as JSON to stdout.
363
+ * In quiet mode: outputs nothing.
364
+ * Otherwise: outputs message to stdout.
365
+ *
366
+ * @param data - Structured data for JSON mode
367
+ * @param message - Human-readable message for normal mode
368
+ * @param context - Command context with global flags
369
+ */
370
+ output(data, message, context) {
371
+ if (context.globalOptions.quiet) {
372
+ return;
373
+ }
374
+ if (context.globalOptions.json) {
375
+ console.log(this.json(data));
376
+ return;
377
+ }
378
+ console.log(message);
379
+ }
380
+ // -------------------------------------------------------------------------
381
+ // Private Helpers
382
+ // -------------------------------------------------------------------------
383
+ inferColumns(data) {
384
+ const firstRow = data[0];
385
+ if (!firstRow)
386
+ return [];
387
+ return Object.keys(firstRow).map(key => ({
388
+ header: this.humanize(key),
389
+ key,
390
+ align: 'left',
391
+ }));
392
+ }
393
+ calculateColumnWidths(columns, data, maxWidth) {
394
+ const termWidth = maxWidth ?? process.stdout.columns ?? 120;
395
+ const gap = 2; // gap between columns
396
+ return columns.map(col => {
397
+ // Header width
398
+ let width = col.header.length;
399
+ // Data widths
400
+ for (const row of data) {
401
+ const val = row[col.key];
402
+ const formatted = col.format ? col.format(val) : String(val ?? '');
403
+ width = Math.max(width, formatted.length);
404
+ }
405
+ // Apply constraints
406
+ if (col.minWidth)
407
+ width = Math.max(width, col.minWidth);
408
+ if (col.maxWidth)
409
+ width = Math.min(width, col.maxWidth);
410
+ if (col.width)
411
+ width = col.width;
412
+ return width;
413
+ });
414
+ }
415
+ padCell(text, width, align) {
416
+ if (text.length >= width)
417
+ return text.substring(0, width);
418
+ switch (align) {
419
+ case 'right':
420
+ return text.padStart(width);
421
+ case 'center': {
422
+ const leftPad = Math.floor((width - text.length) / 2);
423
+ const rightPad = width - text.length - leftPad;
424
+ return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);
425
+ }
426
+ default:
427
+ return text.padEnd(width);
428
+ }
429
+ }
430
+ applyHeaderStyle(text, style) {
431
+ switch (style) {
432
+ case 'bold':
433
+ return chalk_1.default.bold(text);
434
+ case 'underline':
435
+ return chalk_1.default.underline(text);
436
+ case 'dim':
437
+ return chalk_1.default.dim(text);
438
+ default:
439
+ return text;
440
+ }
441
+ }
442
+ truncate(text, maxLength) {
443
+ if (text.length <= maxLength)
444
+ return text;
445
+ return text.substring(0, maxLength - 3) + '...';
446
+ }
447
+ formatValue(value) {
448
+ if (value === null || value === undefined)
449
+ return chalk_1.default.gray('(none)');
450
+ if (typeof value === 'boolean')
451
+ return value ? chalk_1.default.green('true') : chalk_1.default.red('false');
452
+ if (typeof value === 'number')
453
+ return chalk_1.default.cyan(String(value));
454
+ if (Array.isArray(value))
455
+ return value.join(', ');
456
+ if (typeof value === 'object')
457
+ return JSON.stringify(value);
458
+ return String(value);
459
+ }
460
+ humanize(key) {
461
+ return key
462
+ .replace(/([A-Z])/g, ' $1')
463
+ .replace(/[_-]/g, ' ')
464
+ .replace(/^\s/, '')
465
+ .split(' ')
466
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
467
+ .join(' ');
468
+ }
469
+ /**
470
+ * Lightweight YAML serializer.
471
+ */
472
+ toYaml(data, indent) {
473
+ const prefix = ' '.repeat(indent);
474
+ if (data === null || data === undefined) {
475
+ return 'null';
476
+ }
477
+ if (typeof data === 'string') {
478
+ // Quote strings that need it
479
+ if (data === '' ||
480
+ data.includes('\n') ||
481
+ data.includes(':') ||
482
+ data.includes('#') ||
483
+ data === 'true' ||
484
+ data === 'false' ||
485
+ data === 'null' ||
486
+ /^\d+$/.test(data)) {
487
+ return `"${data.replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`;
488
+ }
489
+ return data;
490
+ }
491
+ if (typeof data === 'number' || typeof data === 'boolean') {
492
+ return String(data);
493
+ }
494
+ if (Array.isArray(data)) {
495
+ if (data.length === 0)
496
+ return '[]';
497
+ const items = data.map(item => {
498
+ const val = this.toYaml(item, indent + 1);
499
+ if (typeof item === 'object' && item !== null && !Array.isArray(item)) {
500
+ // Object items: put first key on same line as dash
501
+ const firstNewline = val.indexOf('\n');
502
+ if (firstNewline === -1) {
503
+ return `${prefix}- ${val}`;
504
+ }
505
+ return `${prefix}- ${val}`;
506
+ }
507
+ return `${prefix}- ${val}`;
508
+ });
509
+ return '\n' + items.join('\n');
510
+ }
511
+ if (typeof data === 'object') {
512
+ const entries = Object.entries(data);
513
+ if (entries.length === 0)
514
+ return '{}';
515
+ const lines = entries.map(([key, value]) => {
516
+ const serialized = this.toYaml(value, indent + 1);
517
+ if (typeof value === 'object' && value !== null) {
518
+ return `${prefix}${key}:${serialized.startsWith('\n') ? serialized : ' ' + serialized}`;
519
+ }
520
+ return `${prefix}${key}: ${serialized}`;
521
+ });
522
+ return (indent > 0 ? '\n' : '') + lines.join('\n');
523
+ }
524
+ return String(data);
525
+ }
526
+ renderTreeChildren(children, prefix, chars, lines, depth, maxDepth) {
527
+ if (depth >= maxDepth)
528
+ return;
529
+ for (let i = 0; i < children.length; i++) {
530
+ const child = children[i];
531
+ if (!child)
532
+ continue;
533
+ const isLast = i === children.length - 1;
534
+ const connector = isLast ? chars.last : chars.branch;
535
+ const nodePrefix = child.prefix ? `${child.prefix} ` : '';
536
+ lines.push(`${prefix}${connector}${nodePrefix}${child.label}`);
537
+ if (child.children && child.children.length > 0) {
538
+ const childPrefix = prefix + (isLast ? chars.empty : chars.pipe);
539
+ this.renderTreeChildren(child.children, childPrefix, chars, lines, depth + 1, maxDepth);
540
+ }
541
+ }
542
+ }
543
+ }
544
+ exports.OutputFormatter = OutputFormatter;
545
+ //# sourceMappingURL=output-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-formatter.js","sourceRoot":"","sources":["../../src/framework/output-formatter.ts"],"names":[],"mappings":"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"}