wiggum-cli 0.11.26 → 0.12.0

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 (90) hide show
  1. package/README.md +2 -1
  2. package/dist/__test-utils__/fixtures.d.ts +17 -0
  3. package/dist/__test-utils__/fixtures.d.ts.map +1 -0
  4. package/dist/__test-utils__/fixtures.js +32 -0
  5. package/dist/__test-utils__/fixtures.js.map +1 -0
  6. package/dist/__test-utils__/ink-helpers.d.ts +43 -0
  7. package/dist/__test-utils__/ink-helpers.d.ts.map +1 -0
  8. package/dist/__test-utils__/ink-helpers.js +62 -0
  9. package/dist/__test-utils__/ink-helpers.js.map +1 -0
  10. package/dist/__test-utils__/mock-ai.d.ts +99 -0
  11. package/dist/__test-utils__/mock-ai.d.ts.map +1 -0
  12. package/dist/__test-utils__/mock-ai.js +75 -0
  13. package/dist/__test-utils__/mock-ai.js.map +1 -0
  14. package/dist/__test-utils__/mock-tracing.d.ts +18 -0
  15. package/dist/__test-utils__/mock-tracing.d.ts.map +1 -0
  16. package/dist/__test-utils__/mock-tracing.js +24 -0
  17. package/dist/__test-utils__/mock-tracing.js.map +1 -0
  18. package/dist/__test-utils__/setup.d.ts +8 -0
  19. package/dist/__test-utils__/setup.d.ts.map +1 -0
  20. package/dist/__test-utils__/setup.js +21 -0
  21. package/dist/__test-utils__/setup.js.map +1 -0
  22. package/dist/commands/monitor.d.ts.map +1 -1
  23. package/dist/commands/monitor.js +3 -1
  24. package/dist/commands/monitor.js.map +1 -1
  25. package/dist/commands/run.d.ts +1 -0
  26. package/dist/commands/run.d.ts.map +1 -1
  27. package/dist/commands/run.js +8 -0
  28. package/dist/commands/run.js.map +1 -1
  29. package/dist/templates/config/ralph.config.cjs.tmpl +1 -0
  30. package/dist/templates/prompts/PROMPT_review_manual.md.tmpl +96 -0
  31. package/dist/templates/root/README.md.tmpl +7 -6
  32. package/dist/templates/scripts/feature-loop.sh.tmpl +34 -5
  33. package/dist/templates/scripts/ralph-monitor.sh.tmpl +3 -1
  34. package/dist/tui/app.d.ts.map +1 -1
  35. package/dist/tui/app.js +3 -0
  36. package/dist/tui/app.js.map +1 -1
  37. package/dist/tui/components/ChatInput.test.d.ts +2 -0
  38. package/dist/tui/components/ChatInput.test.d.ts.map +1 -0
  39. package/dist/tui/components/ChatInput.test.js +75 -0
  40. package/dist/tui/components/ChatInput.test.js.map +1 -0
  41. package/dist/tui/components/WiggumBanner.d.ts.map +1 -1
  42. package/dist/tui/components/WiggumBanner.js +1 -2
  43. package/dist/tui/components/WiggumBanner.js.map +1 -1
  44. package/dist/tui/components/WorkingIndicator.test.d.ts +2 -0
  45. package/dist/tui/components/WorkingIndicator.test.d.ts.map +1 -0
  46. package/dist/tui/components/WorkingIndicator.test.js +26 -0
  47. package/dist/tui/components/WorkingIndicator.test.js.map +1 -0
  48. package/dist/tui/screens/InterviewScreen.integration.test.d.ts +7 -0
  49. package/dist/tui/screens/InterviewScreen.integration.test.d.ts.map +1 -0
  50. package/dist/tui/screens/InterviewScreen.integration.test.js +149 -0
  51. package/dist/tui/screens/InterviewScreen.integration.test.js.map +1 -0
  52. package/dist/tui/screens/MainShell.test.d.ts +2 -0
  53. package/dist/tui/screens/MainShell.test.d.ts.map +1 -0
  54. package/dist/tui/screens/MainShell.test.js +103 -0
  55. package/dist/tui/screens/MainShell.test.js.map +1 -0
  56. package/dist/tui/screens/RunScreen.d.ts.map +1 -1
  57. package/dist/tui/screens/RunScreen.js +8 -0
  58. package/dist/tui/screens/RunScreen.js.map +1 -1
  59. package/dist/tui/screens/WelcomeScreen.test.d.ts +2 -0
  60. package/dist/tui/screens/WelcomeScreen.test.d.ts.map +1 -0
  61. package/dist/tui/screens/WelcomeScreen.test.js +51 -0
  62. package/dist/tui/screens/WelcomeScreen.test.js.map +1 -0
  63. package/dist/tui/utils/loop-status.d.ts.map +1 -1
  64. package/dist/tui/utils/loop-status.js +3 -1
  65. package/dist/tui/utils/loop-status.js.map +1 -1
  66. package/dist/utils/config.d.ts +1 -0
  67. package/dist/utils/config.d.ts.map +1 -1
  68. package/dist/utils/config.js +2 -0
  69. package/dist/utils/config.js.map +1 -1
  70. package/package.json +4 -2
  71. package/src/templates/config/ralph.config.cjs.tmpl +1 -0
  72. package/src/templates/prompts/PROMPT_review_manual.md.tmpl +96 -0
  73. package/src/templates/root/README.md.tmpl +7 -6
  74. package/src/templates/scripts/feature-loop.sh.tmpl +34 -5
  75. package/src/templates/scripts/ralph-monitor.sh.tmpl +3 -1
  76. package/dist/cli.d.ts +0 -6
  77. package/dist/cli.d.ts.map +0 -1
  78. package/dist/cli.js +0 -212
  79. package/dist/cli.js.map +0 -1
  80. package/dist/repl/repl-loop.d.ts +0 -32
  81. package/dist/repl/repl-loop.d.ts.map +0 -1
  82. package/dist/repl/repl-loop.js +0 -309
  83. package/dist/repl/repl-loop.js.map +0 -1
  84. package/dist/templates/config/ralph.config.js.tmpl +0 -38
  85. package/dist/utils/repl-prompts.d.ts +0 -59
  86. package/dist/utils/repl-prompts.d.ts.map +0 -1
  87. package/dist/utils/repl-prompts.js +0 -314
  88. package/dist/utils/repl-prompts.js.map +0 -1
  89. /package/dist/templates/prompts/{PROMPT_review.md.tmpl → PROMPT_review_auto.md.tmpl} +0 -0
  90. /package/src/templates/prompts/{PROMPT_review.md.tmpl → PROMPT_review_auto.md.tmpl} +0 -0
@@ -1,314 +0,0 @@
1
- /**
2
- * REPL-Friendly Prompts
3
- * Simple prompts using readline that work properly in REPL context
4
- * (Clack prompts conflict with REPL readline management)
5
- */
6
- import readline from 'node:readline';
7
- import pc from 'picocolors';
8
- import { simpson } from './colors.js';
9
- /**
10
- * Interactive select prompt with arrow key navigation
11
- * Uses readline's emitKeypressEvents for robust keypress handling
12
- */
13
- export async function select(options) {
14
- const { message, options: choices } = options;
15
- let selectedIndex = 0;
16
- // Render the options with current selection highlighted
17
- const render = () => {
18
- const output = [];
19
- choices.forEach((choice, index) => {
20
- const hint = choice.hint ? pc.dim(` (${choice.hint})`) : '';
21
- if (index === selectedIndex) {
22
- output.push(` ${pc.cyan('❯')} ${pc.cyan(choice.label)}${hint}`);
23
- }
24
- else {
25
- output.push(` ${pc.dim(choice.label)}${hint}`);
26
- }
27
- });
28
- return output.join('\n');
29
- };
30
- // Initial render
31
- console.log('');
32
- console.log(`${simpson.yellow('?')} ${message}`);
33
- console.log('');
34
- process.stdout.write(render());
35
- console.log('');
36
- console.log(pc.dim(' (Use arrow keys, Enter to select, Ctrl+C to cancel)'));
37
- return new Promise((resolve) => {
38
- // Track if we've already resolved
39
- let resolved = false;
40
- // Track when keypress handling becomes active (to ignore stale buffered input)
41
- let acceptingInput = false;
42
- const cleanup = () => {
43
- if (resolved)
44
- return;
45
- resolved = true;
46
- process.stdin.removeListener('keypress', onKeypress);
47
- if (process.stdin.isTTY && process.stdin.isRaw) {
48
- process.stdin.setRawMode(false);
49
- }
50
- };
51
- const finishWithSelection = () => {
52
- cleanup();
53
- const selected = choices[selectedIndex];
54
- // Move up past hint + options + blank line + question
55
- process.stdout.write(`\x1b[${choices.length + 3}A`);
56
- // Clear from cursor to end of screen
57
- process.stdout.write('\x1b[J');
58
- // Rewrite the question with the answer
59
- console.log(`${pc.green('✓')} ${message}`);
60
- console.log(` ${pc.cyan(selected.label)}`);
61
- console.log('');
62
- resolve(selected.value);
63
- };
64
- const finishWithCancel = () => {
65
- cleanup();
66
- // Move up past hint + options + blank line + question
67
- process.stdout.write(`\x1b[${choices.length + 3}A`);
68
- // Clear from cursor to end of screen
69
- process.stdout.write('\x1b[J');
70
- console.log(`${pc.red('✗')} ${message}`);
71
- console.log(pc.dim(' Cancelled'));
72
- console.log('');
73
- resolve(null);
74
- };
75
- const redraw = () => {
76
- // Move up past hint + options
77
- process.stdout.write(`\x1b[${choices.length + 1}A`);
78
- // Clear from cursor to end of screen
79
- process.stdout.write('\x1b[J');
80
- // Write new options
81
- process.stdout.write(render());
82
- console.log('');
83
- console.log(pc.dim(' (Use arrow keys, Enter to select, Ctrl+C to cancel)'));
84
- };
85
- const onKeypress = (_str, key) => {
86
- if (resolved || !key)
87
- return;
88
- // Ignore enter/return until we're ready to accept input.
89
- // This prevents buffered newlines from REPL transitions from
90
- // immediately triggering selection.
91
- if (!acceptingInput && (key.name === 'return' || key.name === 'enter')) {
92
- return;
93
- }
94
- if (key.ctrl && key.name === 'c') {
95
- finishWithCancel();
96
- return;
97
- }
98
- if (key.name === 'return' || key.name === 'enter') {
99
- finishWithSelection();
100
- return;
101
- }
102
- if (key.name === 'up' || key.name === 'k') {
103
- selectedIndex = (selectedIndex - 1 + choices.length) % choices.length;
104
- redraw();
105
- return;
106
- }
107
- if (key.name === 'down' || key.name === 'j') {
108
- selectedIndex = (selectedIndex + 1) % choices.length;
109
- redraw();
110
- return;
111
- }
112
- };
113
- // Enable keypress events on stdin
114
- readline.emitKeypressEvents(process.stdin);
115
- // Set up keypress listener
116
- process.stdin.on('keypress', onKeypress);
117
- // Enable raw mode for keypress detection
118
- if (process.stdin.isTTY) {
119
- process.stdin.setRawMode(true);
120
- process.stdin.resume();
121
- }
122
- // Delay accepting enter/return to allow buffered input to be discarded.
123
- // Any enter keypress arriving before this timeout is from buffered REPL input.
124
- setTimeout(() => {
125
- acceptingInput = true;
126
- }, 100);
127
- });
128
- }
129
- /**
130
- * Simple password prompt for REPL
131
- * Masks input with asterisks
132
- */
133
- export async function password(options) {
134
- const { message } = options;
135
- console.log('');
136
- console.log(`${simpson.yellow('?')} ${message}`);
137
- return new Promise((resolve) => {
138
- let input = '';
139
- // Show initial cursor position
140
- process.stdout.write(`${pc.dim('>')} `);
141
- const onData = (char) => {
142
- // Ctrl+C
143
- if (char === '\u0003') {
144
- cleanup();
145
- console.log('');
146
- resolve(null);
147
- return;
148
- }
149
- // Enter
150
- if (char === '\r' || char === '\n') {
151
- cleanup();
152
- // Clear the line and show fixed mask
153
- process.stdout.write('\r' + pc.dim('>') + ' ' + '*'.repeat(32) + '\n');
154
- console.log(`${pc.green('✓')} API key entered`);
155
- resolve(input.trim() || null);
156
- return;
157
- }
158
- // Backspace
159
- if (char === '\u007F' || char === '\b') {
160
- if (input.length > 0) {
161
- input = input.slice(0, -1);
162
- // Clear and rewrite asterisks
163
- process.stdout.write('\r' + pc.dim('>') + ' ' + '*'.repeat(input.length) + ' \b');
164
- }
165
- return;
166
- }
167
- // Regular character
168
- if (char.charCodeAt(0) >= 32 && char.charCodeAt(0) <= 126) {
169
- input += char;
170
- process.stdout.write('*');
171
- }
172
- };
173
- const cleanup = () => {
174
- if (process.stdin.isTTY) {
175
- process.stdin.setRawMode(false);
176
- }
177
- process.stdin.removeListener('data', onData);
178
- process.stdin.pause();
179
- };
180
- if (process.stdin.isTTY) {
181
- process.stdin.setRawMode(true);
182
- }
183
- process.stdin.resume();
184
- process.stdin.setEncoding('utf8');
185
- process.stdin.on('data', onData);
186
- });
187
- }
188
- /**
189
- * Simple confirm prompt for REPL
190
- */
191
- export async function confirm(options) {
192
- const { message, initialValue = true } = options;
193
- console.log('');
194
- const defaultHint = initialValue ? 'Y/n' : 'y/N';
195
- const rl = readline.createInterface({
196
- input: process.stdin,
197
- output: process.stdout,
198
- });
199
- return new Promise((resolve) => {
200
- rl.question(`${simpson.yellow('?')} ${message} ${pc.dim(`(${defaultHint}):`)} `, (answer) => {
201
- rl.close();
202
- const trimmed = answer.trim().toLowerCase();
203
- if (trimmed === '') {
204
- console.log(`${pc.green('✓')} ${initialValue ? 'Yes' : 'No'}`);
205
- resolve(initialValue);
206
- }
207
- else if (trimmed === 'y' || trimmed === 'yes') {
208
- console.log(`${pc.green('✓')} Yes`);
209
- resolve(true);
210
- }
211
- else if (trimmed === 'n' || trimmed === 'no') {
212
- console.log(`${pc.green('✓')} No`);
213
- resolve(false);
214
- }
215
- else {
216
- console.log(pc.red('Invalid input, using default'));
217
- resolve(initialValue);
218
- }
219
- });
220
- rl.on('SIGINT', () => {
221
- rl.close();
222
- resolve(null);
223
- });
224
- });
225
- }
226
- /**
227
- * Check if user cancelled (similar to clack's isCancel)
228
- */
229
- export function isCancel(value) {
230
- return value === null;
231
- }
232
- /**
233
- * Multi-line input for paste support
234
- * Reads input until an empty line (after content) or Ctrl+D
235
- *
236
- * @param prompt - The prompt to display
237
- * @returns The collected input or null if cancelled
238
- */
239
- export async function multilineInput(options) {
240
- const { prompt = '>', endHint = 'Press Enter twice when done' } = options;
241
- console.log(pc.dim(` (${endHint})`));
242
- return new Promise((resolve) => {
243
- const lines = [];
244
- let lastLineEmpty = false;
245
- const rl = readline.createInterface({
246
- input: process.stdin,
247
- output: process.stdout,
248
- prompt: `${pc.dim(prompt)} `,
249
- });
250
- rl.prompt();
251
- rl.on('line', (line) => {
252
- const trimmed = line.trim();
253
- // If we get an empty line after having content, we're done
254
- if (trimmed === '' && lines.length > 0 && lastLineEmpty) {
255
- rl.close();
256
- // Remove the trailing empty line we added
257
- const result = lines.slice(0, -1).join('\n').trim();
258
- if (result) {
259
- console.log(pc.green('✓') + pc.dim(` Received ${result.split('\n').length} line(s)`));
260
- }
261
- resolve(result || null);
262
- return;
263
- }
264
- lastLineEmpty = trimmed === '';
265
- lines.push(line);
266
- rl.prompt();
267
- });
268
- rl.on('close', () => {
269
- // Ctrl+D or EOF
270
- const result = lines.join('\n').trim();
271
- if (result) {
272
- console.log(pc.green('✓') + pc.dim(` Received ${result.split('\n').length} line(s)`));
273
- }
274
- resolve(result || null);
275
- });
276
- rl.on('SIGINT', () => {
277
- rl.close();
278
- console.log('');
279
- resolve(null);
280
- });
281
- });
282
- }
283
- /**
284
- * Simple text input prompt
285
- *
286
- * @param prompt - The prompt to display
287
- * @returns The input text or null if cancelled
288
- */
289
- export async function textInput(options) {
290
- const { message, placeholder } = options;
291
- const hint = placeholder ? pc.dim(` (${placeholder})`) : '';
292
- const rl = readline.createInterface({
293
- input: process.stdin,
294
- output: process.stdout,
295
- });
296
- return new Promise((resolve) => {
297
- rl.question(`${simpson.yellow('?')} ${message}${hint}: `, (answer) => {
298
- rl.close();
299
- const trimmed = answer.trim();
300
- if (trimmed) {
301
- resolve(trimmed);
302
- }
303
- else {
304
- resolve(null);
305
- }
306
- });
307
- rl.on('SIGINT', () => {
308
- rl.close();
309
- console.log('');
310
- resolve(null);
311
- });
312
- });
313
- }
314
- //# sourceMappingURL=repl-prompts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repl-prompts.js","sourceRoot":"","sources":["../../src/utils/repl-prompts.ts"],"names":[],"mappings":"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"}