maistro 1.0.390

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 (111) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +107 -0
  3. package/dist/app.d.ts +247 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +4971 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/buildInfo.d.ts +5 -0
  8. package/dist/buildInfo.d.ts.map +1 -0
  9. package/dist/buildInfo.js +2 -0
  10. package/dist/buildInfo.js.map +1 -0
  11. package/dist/caffeinate.d.ts +72 -0
  12. package/dist/caffeinate.d.ts.map +1 -0
  13. package/dist/caffeinate.js +258 -0
  14. package/dist/caffeinate.js.map +1 -0
  15. package/dist/claudePath.d.ts +10 -0
  16. package/dist/claudePath.d.ts.map +1 -0
  17. package/dist/claudePath.js +34 -0
  18. package/dist/claudePath.js.map +1 -0
  19. package/dist/clipboard.d.ts +44 -0
  20. package/dist/clipboard.d.ts.map +1 -0
  21. package/dist/clipboard.js +442 -0
  22. package/dist/clipboard.js.map +1 -0
  23. package/dist/config.d.ts +211 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +933 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/constants.d.ts +50 -0
  28. package/dist/constants.d.ts.map +1 -0
  29. package/dist/constants.js +81 -0
  30. package/dist/constants.js.map +1 -0
  31. package/dist/contextBuilder.d.ts +38 -0
  32. package/dist/contextBuilder.d.ts.map +1 -0
  33. package/dist/contextBuilder.js +113 -0
  34. package/dist/contextBuilder.js.map +1 -0
  35. package/dist/dependencyDetector.d.ts +57 -0
  36. package/dist/dependencyDetector.d.ts.map +1 -0
  37. package/dist/dependencyDetector.js +505 -0
  38. package/dist/dependencyDetector.js.map +1 -0
  39. package/dist/executor.d.ts +83 -0
  40. package/dist/executor.d.ts.map +1 -0
  41. package/dist/executor.js +583 -0
  42. package/dist/executor.js.map +1 -0
  43. package/dist/git.d.ts +85 -0
  44. package/dist/git.d.ts.map +1 -0
  45. package/dist/git.js +283 -0
  46. package/dist/git.js.map +1 -0
  47. package/dist/imageManager.d.ts +161 -0
  48. package/dist/imageManager.d.ts.map +1 -0
  49. package/dist/imageManager.js +674 -0
  50. package/dist/imageManager.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +437 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/input-visual-test.d.ts +9 -0
  56. package/dist/input-visual-test.d.ts.map +1 -0
  57. package/dist/input-visual-test.js +108 -0
  58. package/dist/input-visual-test.js.map +1 -0
  59. package/dist/inputBox.d.ts +228 -0
  60. package/dist/inputBox.d.ts.map +1 -0
  61. package/dist/inputBox.js +966 -0
  62. package/dist/inputBox.js.map +1 -0
  63. package/dist/logger.d.ts +136 -0
  64. package/dist/logger.d.ts.map +1 -0
  65. package/dist/logger.js +347 -0
  66. package/dist/logger.js.map +1 -0
  67. package/dist/orchestrator.d.ts +149 -0
  68. package/dist/orchestrator.d.ts.map +1 -0
  69. package/dist/orchestrator.js +821 -0
  70. package/dist/orchestrator.js.map +1 -0
  71. package/dist/planner.d.ts +86 -0
  72. package/dist/planner.d.ts.map +1 -0
  73. package/dist/planner.js +830 -0
  74. package/dist/planner.js.map +1 -0
  75. package/dist/pty-test-runner.d.ts +87 -0
  76. package/dist/pty-test-runner.d.ts.map +1 -0
  77. package/dist/pty-test-runner.js +721 -0
  78. package/dist/pty-test-runner.js.map +1 -0
  79. package/dist/screen.d.ts +44 -0
  80. package/dist/screen.d.ts.map +1 -0
  81. package/dist/screen.js +152 -0
  82. package/dist/screen.js.map +1 -0
  83. package/dist/taskQueue.d.ts +70 -0
  84. package/dist/taskQueue.d.ts.map +1 -0
  85. package/dist/taskQueue.js +282 -0
  86. package/dist/taskQueue.js.map +1 -0
  87. package/dist/tui-test-harness.d.ts +216 -0
  88. package/dist/tui-test-harness.d.ts.map +1 -0
  89. package/dist/tui-test-harness.js +527 -0
  90. package/dist/tui-test-harness.js.map +1 -0
  91. package/dist/types.d.ts +257 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +46 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/ui-visual-test.d.ts +15 -0
  96. package/dist/ui-visual-test.d.ts.map +1 -0
  97. package/dist/ui-visual-test.js +141 -0
  98. package/dist/ui-visual-test.js.map +1 -0
  99. package/dist/ui.d.ts +272 -0
  100. package/dist/ui.d.ts.map +1 -0
  101. package/dist/ui.js +1531 -0
  102. package/dist/ui.js.map +1 -0
  103. package/dist/validator.d.ts +53 -0
  104. package/dist/validator.d.ts.map +1 -0
  105. package/dist/validator.js +491 -0
  106. package/dist/validator.js.map +1 -0
  107. package/dist/versionCheck.d.ts +63 -0
  108. package/dist/versionCheck.d.ts.map +1 -0
  109. package/dist/versionCheck.js +261 -0
  110. package/dist/versionCheck.js.map +1 -0
  111. package/package.json +62 -0
@@ -0,0 +1,527 @@
1
+ /**
2
+ * TUI Test Harness
3
+ *
4
+ * Provides utilities for testing terminal UI components by:
5
+ * 1. Capturing terminal output (stdout.write calls)
6
+ * 2. Simulating keyboard input (stdin events)
7
+ * 3. Parsing ANSI escape codes to understand rendered state
8
+ * 4. Computing a virtual terminal buffer to see what's "on screen"
9
+ */
10
+ import { EventEmitter } from 'node:events';
11
+ /**
12
+ * Virtual terminal that tracks what would be displayed on screen
13
+ */
14
+ export class VirtualTerminal {
15
+ buffer = [];
16
+ cursor = { row: 0, col: 0 };
17
+ savedCursor = null;
18
+ savedScrollOffset = 0; // Scroll offset when cursor was saved
19
+ scrollOffset = 0; // Total lines scrolled since start
20
+ width;
21
+ height;
22
+ rawOutput = []; // All raw output for debugging
23
+ constructor(width = 80, height = 24) {
24
+ this.width = width;
25
+ this.height = height;
26
+ this.clear();
27
+ }
28
+ /**
29
+ * Clear the terminal buffer
30
+ */
31
+ clear() {
32
+ this.buffer = [];
33
+ for (let i = 0; i < this.height; i++) {
34
+ this.buffer.push(new Array(this.width).fill(' '));
35
+ }
36
+ this.cursor = { row: 0, col: 0 };
37
+ }
38
+ /**
39
+ * Process raw output (including ANSI codes)
40
+ */
41
+ write(data) {
42
+ this.rawOutput.push(data);
43
+ let i = 0;
44
+ while (i < data.length) {
45
+ // Check for ANSI escape sequence
46
+ if (data[i] === '\x1b') {
47
+ const escEnd = this.findEscapeEnd(data, i);
48
+ if (escEnd > i) {
49
+ const escSeq = data.slice(i, escEnd + 1);
50
+ this.processEscape(escSeq);
51
+ i = escEnd + 1;
52
+ continue;
53
+ }
54
+ }
55
+ // Handle special characters
56
+ if (data[i] === '\r') {
57
+ this.cursor.col = 0;
58
+ i++;
59
+ continue;
60
+ }
61
+ if (data[i] === '\n') {
62
+ this.cursor.col = 0; // Newline also goes to column 0
63
+ this.cursor.row++;
64
+ if (this.cursor.row >= this.height) {
65
+ this.scroll();
66
+ this.cursor.row = this.height - 1;
67
+ }
68
+ i++;
69
+ continue;
70
+ }
71
+ // Regular character - write to buffer
72
+ if (this.cursor.row >= 0 && this.cursor.row < this.height &&
73
+ this.cursor.col >= 0 && this.cursor.col < this.width) {
74
+ this.buffer[this.cursor.row][this.cursor.col] = data[i];
75
+ }
76
+ this.cursor.col++;
77
+ // Handle line wrap
78
+ if (this.cursor.col >= this.width) {
79
+ this.cursor.col = 0;
80
+ this.cursor.row++;
81
+ if (this.cursor.row >= this.height) {
82
+ this.scroll();
83
+ this.cursor.row = this.height - 1;
84
+ }
85
+ }
86
+ i++;
87
+ }
88
+ }
89
+ /**
90
+ * Find the end of an ANSI escape sequence
91
+ */
92
+ findEscapeEnd(data, start) {
93
+ if (start + 1 >= data.length)
94
+ return start;
95
+ // CSI sequence: \x1b[...
96
+ if (data[start + 1] === '[') {
97
+ let i = start + 2;
98
+ while (i < data.length) {
99
+ const c = data[i];
100
+ // CSI sequences end with a letter (A-Z, a-z) or certain punctuation
101
+ if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c === '@' || c === '`') {
102
+ return i;
103
+ }
104
+ i++;
105
+ }
106
+ return start; // Incomplete sequence
107
+ }
108
+ // DEC private sequences: \x1b7, \x1b8, etc.
109
+ if (data[start + 1] === '7' || data[start + 1] === '8') {
110
+ return start + 1;
111
+ }
112
+ // OSC or other: \x1b]...\x07 or \x1b]...\x1b\\
113
+ if (data[start + 1] === ']') {
114
+ let i = start + 2;
115
+ while (i < data.length) {
116
+ if (data[i] === '\x07')
117
+ return i;
118
+ if (data[i] === '\x1b' && i + 1 < data.length && data[i + 1] === '\\')
119
+ return i + 1;
120
+ i++;
121
+ }
122
+ return start;
123
+ }
124
+ return start + 1; // Single character escape
125
+ }
126
+ /**
127
+ * Process an ANSI escape sequence
128
+ */
129
+ processEscape(seq) {
130
+ // CSI sequences
131
+ if (seq.startsWith('\x1b[')) {
132
+ const cmd = seq[seq.length - 1];
133
+ const params = seq.slice(2, -1);
134
+ switch (cmd) {
135
+ case 'A': // Cursor up
136
+ const upCount = parseInt(params) || 1;
137
+ this.cursor.row = Math.max(0, this.cursor.row - upCount);
138
+ break;
139
+ case 'B': // Cursor down
140
+ const downCount = parseInt(params) || 1;
141
+ this.cursor.row = Math.min(this.height - 1, this.cursor.row + downCount);
142
+ break;
143
+ case 'C': // Cursor forward
144
+ const fwdCount = parseInt(params) || 1;
145
+ this.cursor.col = Math.min(this.width - 1, this.cursor.col + fwdCount);
146
+ break;
147
+ case 'D': // Cursor back
148
+ const backCount = parseInt(params) || 1;
149
+ this.cursor.col = Math.max(0, this.cursor.col - backCount);
150
+ break;
151
+ case 'H': // Cursor position (row;col)
152
+ const parts = params.split(';');
153
+ this.cursor.row = Math.max(0, (parseInt(parts[0]) || 1) - 1);
154
+ this.cursor.col = Math.max(0, (parseInt(parts[1]) || 1) - 1);
155
+ break;
156
+ case 'J': // Erase in display
157
+ const jMode = parseInt(params) || 0;
158
+ if (jMode === 0) {
159
+ // Clear from cursor to end of screen
160
+ this.clearToEndOfScreen();
161
+ }
162
+ else if (jMode === 1) {
163
+ // Clear from beginning to cursor
164
+ this.clearToBeginningOfScreen();
165
+ }
166
+ else if (jMode === 2 || jMode === 3) {
167
+ // Clear entire screen
168
+ this.clearScreen();
169
+ }
170
+ break;
171
+ case 'K': // Erase in line
172
+ const kMode = parseInt(params) || 0;
173
+ if (kMode === 0) {
174
+ // Clear from cursor to end of line
175
+ this.clearToEndOfLine();
176
+ }
177
+ else if (kMode === 1) {
178
+ // Clear from beginning to cursor
179
+ this.clearToBeginningOfLine();
180
+ }
181
+ else if (kMode === 2) {
182
+ // Clear entire line
183
+ this.clearLine();
184
+ }
185
+ break;
186
+ case 's': // Save cursor position
187
+ this.savedCursor = { ...this.cursor };
188
+ break;
189
+ case 'u': // Restore cursor position
190
+ if (this.savedCursor) {
191
+ this.cursor = { ...this.savedCursor };
192
+ }
193
+ break;
194
+ case 'm': // SGR (colors, etc.) - ignore for now
195
+ break;
196
+ case 'h': // Set mode (e.g., ?25h for show cursor)
197
+ case 'l': // Reset mode (e.g., ?25l for hide cursor)
198
+ // Ignore cursor visibility for testing
199
+ break;
200
+ }
201
+ }
202
+ // DEC save/restore
203
+ if (seq === '\x1b7') {
204
+ this.savedCursor = { ...this.cursor };
205
+ }
206
+ else if (seq === '\x1b8') {
207
+ if (this.savedCursor) {
208
+ this.cursor = { ...this.savedCursor };
209
+ }
210
+ }
211
+ }
212
+ clearToEndOfScreen() {
213
+ // Clear rest of current line
214
+ for (let c = this.cursor.col; c < this.width; c++) {
215
+ this.buffer[this.cursor.row][c] = ' ';
216
+ }
217
+ // Clear all lines below
218
+ for (let r = this.cursor.row + 1; r < this.height; r++) {
219
+ for (let c = 0; c < this.width; c++) {
220
+ this.buffer[r][c] = ' ';
221
+ }
222
+ }
223
+ }
224
+ clearToBeginningOfScreen() {
225
+ // Clear beginning of current line
226
+ for (let c = 0; c <= this.cursor.col; c++) {
227
+ this.buffer[this.cursor.row][c] = ' ';
228
+ }
229
+ // Clear all lines above
230
+ for (let r = 0; r < this.cursor.row; r++) {
231
+ for (let c = 0; c < this.width; c++) {
232
+ this.buffer[r][c] = ' ';
233
+ }
234
+ }
235
+ }
236
+ clearScreen() {
237
+ for (let r = 0; r < this.height; r++) {
238
+ for (let c = 0; c < this.width; c++) {
239
+ this.buffer[r][c] = ' ';
240
+ }
241
+ }
242
+ }
243
+ clearToEndOfLine() {
244
+ for (let c = this.cursor.col; c < this.width; c++) {
245
+ this.buffer[this.cursor.row][c] = ' ';
246
+ }
247
+ }
248
+ clearToBeginningOfLine() {
249
+ for (let c = 0; c <= this.cursor.col; c++) {
250
+ this.buffer[this.cursor.row][c] = ' ';
251
+ }
252
+ }
253
+ clearLine() {
254
+ for (let c = 0; c < this.width; c++) {
255
+ this.buffer[this.cursor.row][c] = ' ';
256
+ }
257
+ }
258
+ scroll() {
259
+ // Remove first line, add empty line at bottom
260
+ this.buffer.shift();
261
+ this.buffer.push(new Array(this.width).fill(' '));
262
+ }
263
+ /**
264
+ * Get the content of a specific line (trimmed)
265
+ */
266
+ getLine(row) {
267
+ if (row < 0 || row >= this.height)
268
+ return '';
269
+ return this.buffer[row].join('').trimEnd();
270
+ }
271
+ /**
272
+ * Get all non-empty lines
273
+ */
274
+ getVisibleLines() {
275
+ const lines = [];
276
+ for (let r = 0; r < this.height; r++) {
277
+ const line = this.getLine(r);
278
+ if (line || lines.length > 0) { // Include empty lines between content
279
+ lines.push(line);
280
+ }
281
+ }
282
+ // Trim trailing empty lines
283
+ while (lines.length > 0 && lines[lines.length - 1] === '') {
284
+ lines.pop();
285
+ }
286
+ return lines;
287
+ }
288
+ /**
289
+ * Get current cursor position
290
+ */
291
+ getCursor() {
292
+ return { ...this.cursor };
293
+ }
294
+ /**
295
+ * Get raw output for debugging
296
+ */
297
+ getRawOutput() {
298
+ return [...this.rawOutput];
299
+ }
300
+ /**
301
+ * Count occurrences of a string in visible content
302
+ */
303
+ countOccurrences(needle) {
304
+ const content = this.getVisibleLines().join('\n');
305
+ let count = 0;
306
+ let pos = 0;
307
+ while ((pos = content.indexOf(needle, pos)) !== -1) {
308
+ count++;
309
+ pos += needle.length;
310
+ }
311
+ return count;
312
+ }
313
+ /**
314
+ * Check if content contains a string
315
+ */
316
+ contains(needle) {
317
+ return this.countOccurrences(needle) > 0;
318
+ }
319
+ /**
320
+ * Debug: print the terminal buffer
321
+ */
322
+ debug() {
323
+ console.log('=== Terminal Buffer ===');
324
+ console.log(`Cursor: (${this.cursor.row}, ${this.cursor.col})`);
325
+ console.log('Lines:');
326
+ for (let r = 0; r < this.height; r++) {
327
+ const line = this.getLine(r);
328
+ if (line) {
329
+ console.log(` ${r}: "${line}"`);
330
+ }
331
+ }
332
+ }
333
+ }
334
+ /**
335
+ * Mock stdin for simulating keyboard input
336
+ * Extends EventEmitter to be compatible with TestableInput interface
337
+ */
338
+ export class MockStdin extends EventEmitter {
339
+ _isTTY = true;
340
+ _rawMode = false;
341
+ get isTTY() {
342
+ return this._isTTY;
343
+ }
344
+ set isTTY(value) {
345
+ this._isTTY = value;
346
+ }
347
+ setRawMode(mode) {
348
+ this._rawMode = mode;
349
+ return this;
350
+ }
351
+ isRawMode() {
352
+ return this._rawMode;
353
+ }
354
+ resume() { }
355
+ pause() { }
356
+ /**
357
+ * Simulate typing a string (each character sent separately)
358
+ */
359
+ type(text) {
360
+ for (const char of text) {
361
+ this.sendKey(char);
362
+ }
363
+ }
364
+ /**
365
+ * Send a single key or escape sequence
366
+ */
367
+ sendKey(key) {
368
+ const buffer = Buffer.from(key);
369
+ this.emit('data', buffer);
370
+ }
371
+ /**
372
+ * Send Enter key
373
+ */
374
+ sendEnter() {
375
+ this.sendKey('\r');
376
+ }
377
+ /**
378
+ * Send Escape key
379
+ */
380
+ sendEscape() {
381
+ this.sendKey('\x1b');
382
+ }
383
+ /**
384
+ * Send Backspace
385
+ */
386
+ sendBackspace() {
387
+ this.sendKey('\x7f');
388
+ }
389
+ /**
390
+ * Send arrow keys
391
+ */
392
+ sendArrowUp() { this.sendKey('\x1b[A'); }
393
+ sendArrowDown() { this.sendKey('\x1b[B'); }
394
+ sendArrowRight() { this.sendKey('\x1b[C'); }
395
+ sendArrowLeft() { this.sendKey('\x1b[D'); }
396
+ /**
397
+ * Send Home key
398
+ */
399
+ sendHome() { this.sendKey('\x1b[H'); }
400
+ /**
401
+ * Send End key
402
+ */
403
+ sendEnd() { this.sendKey('\x1b[F'); }
404
+ /**
405
+ * Send Delete key
406
+ */
407
+ sendDelete() { this.sendKey('\x1b[3~'); }
408
+ /**
409
+ * Send Ctrl+A (go to beginning)
410
+ */
411
+ sendCtrlA() { this.sendKey('\x01'); }
412
+ /**
413
+ * Send Ctrl+E (go to end)
414
+ */
415
+ sendCtrlE() { this.sendKey('\x05'); }
416
+ /**
417
+ * Send Ctrl+C (cancel)
418
+ */
419
+ sendCtrlC() { this.sendKey('\x03'); }
420
+ }
421
+ /**
422
+ * Mock stdout that wraps VirtualTerminal
423
+ * Implements TestableStream interface from ui.ts
424
+ */
425
+ export class MockStdout {
426
+ terminal;
427
+ columns;
428
+ constructor(terminal, width = 80) {
429
+ this.terminal = terminal;
430
+ this.columns = width;
431
+ }
432
+ write(data) {
433
+ this.terminal.write(data);
434
+ return true;
435
+ }
436
+ /**
437
+ * Get the underlying virtual terminal for assertions
438
+ */
439
+ getTerminal() {
440
+ return this.terminal;
441
+ }
442
+ }
443
+ /**
444
+ * Test harness that combines virtual terminal and mock stdin
445
+ */
446
+ export class TUITestHarness {
447
+ terminal;
448
+ stdin;
449
+ stdout;
450
+ originalStdin;
451
+ originalStdoutWrite;
452
+ originalColumns;
453
+ width;
454
+ constructor(width = 80, height = 24) {
455
+ this.width = width;
456
+ this.terminal = new VirtualTerminal(width, height);
457
+ this.stdin = new MockStdin();
458
+ this.stdout = new MockStdout(this.terminal, width);
459
+ this.originalStdin = process.stdin;
460
+ this.originalStdoutWrite = process.stdout.write;
461
+ this.originalColumns = process.stdout.columns;
462
+ }
463
+ /**
464
+ * Install the test harness (replace stdout.write to capture output)
465
+ * Note: stdin cannot be replaced in Node.js, use MockStdin directly for input simulation
466
+ */
467
+ install() {
468
+ // Replace stdout.write to capture output
469
+ process.stdout.write = ((chunk, ...args) => {
470
+ const str = typeof chunk === 'string' ? chunk : chunk.toString();
471
+ this.terminal.write(str);
472
+ return true;
473
+ });
474
+ // Set terminal width
475
+ process.stdout.columns = this.terminal['width'];
476
+ }
477
+ /**
478
+ * Uninstall the test harness (restore original stdout)
479
+ */
480
+ uninstall() {
481
+ process.stdout.write = this.originalStdoutWrite;
482
+ process.stdout.columns = this.originalColumns;
483
+ }
484
+ /**
485
+ * Reset the terminal buffer
486
+ */
487
+ reset() {
488
+ this.terminal.clear();
489
+ }
490
+ /**
491
+ * Run a test with the harness installed
492
+ */
493
+ async run(fn) {
494
+ this.install();
495
+ try {
496
+ return await fn();
497
+ }
498
+ finally {
499
+ this.uninstall();
500
+ }
501
+ }
502
+ /**
503
+ * Get the mock streams for use with InteractiveUI constructor
504
+ * Usage: new InteractiveUI(harness.getStreams().stdin, harness.getStreams().stdout)
505
+ */
506
+ getStreams() {
507
+ return { stdin: this.stdin, stdout: this.stdout };
508
+ }
509
+ }
510
+ // Common key sequences
511
+ export const Keys = {
512
+ ENTER: '\r',
513
+ ESCAPE: '\x1b',
514
+ BACKSPACE: '\x7f',
515
+ DELETE: '\x1b[3~',
516
+ TAB: '\t',
517
+ CTRL_C: '\x03',
518
+ CTRL_A: '\x01',
519
+ CTRL_E: '\x05',
520
+ ARROW_UP: '\x1b[A',
521
+ ARROW_DOWN: '\x1b[B',
522
+ ARROW_RIGHT: '\x1b[C',
523
+ ARROW_LEFT: '\x1b[D',
524
+ HOME: '\x1b[H',
525
+ END: '\x1b[F',
526
+ };
527
+ //# sourceMappingURL=tui-test-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-test-harness.js","sourceRoot":"","sources":["../src/tui-test-harness.ts"],"names":[],"mappings":"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"}