wiggum-cli 0.7.2 → 0.7.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAGL,KAAK,UAAU,EAEhB,MAAM,gBAAgB,CAAC;AAwCxB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,OAAO,oBAAoB,EAAE,WAAW,GAAG,IAAI,CAAC;CACzD;AA8JD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6K5B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BrE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAGL,KAAK,UAAU,EAEhB,MAAM,gBAAgB,CAAC;AAyBxB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,OAAO,oBAAoB,EAAE,WAAW,GAAG,IAAI,CAAC;CACzD;AAgKD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6K5B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BrE"}
@@ -7,7 +7,7 @@ import { Scanner } from '../scanner/index.js';
7
7
  import { Generator } from '../generator/index.js';
8
8
  import { AIEnhancer, formatAIAnalysis, } from '../ai/index.js';
9
9
  import { hasApiKey, getApiKeyEnvVar, getAvailableProvider, AVAILABLE_MODELS, } from '../ai/providers.js';
10
- import * as prompts from '@clack/prompts';
10
+ import * as replPrompts from '../utils/repl-prompts.js';
11
11
  import fs from 'fs';
12
12
  import path from 'path';
13
13
  import { simpson, compactHeader, stackBox, fileTree, nextStepsBox, } from '../utils/colors.js';
@@ -15,21 +15,8 @@ import { flushTracing } from '../utils/tracing.js';
15
15
  import { createShimmerSpinner } from '../utils/spinner.js';
16
16
  import { startRepl, createSessionState } from '../repl/index.js';
17
17
  import { loadConfigWithDefaults } from '../utils/config.js';
18
- /**
19
- * Secure password input using @clack/prompts
20
- * Works correctly in both CLI and REPL contexts
21
- */
22
- async function securePasswordInput(message) {
23
- const result = await prompts.password({
24
- message,
25
- mask: '*',
26
- });
27
- if (prompts.isCancel(result)) {
28
- return null;
29
- }
30
- // Return trimmed input, filtering any control characters
31
- return result.trim().replace(/[\x00-\x1F\x7F]/g, '') || null;
32
- }
18
+ // Use REPL-friendly prompts for interactive input
19
+ const prompts = replPrompts;
33
20
  /**
34
21
  * Save API keys to .env.local file
35
22
  */
@@ -97,8 +84,10 @@ async function collectApiKeys(projectRoot, options) {
97
84
  }
98
85
  provider = providerChoice;
99
86
  const envVar = getApiKeyEnvVar(provider);
100
- // Get API key with fixed-length mask (doesn't reveal key length)
101
- const apiKeyInput = await securePasswordInput(`Enter your ${envVar}:`);
87
+ // Get API key with masked input
88
+ const apiKeyInput = await prompts.password({
89
+ message: `Enter your ${envVar}:`,
90
+ });
102
91
  if (!apiKeyInput) {
103
92
  logger.error('API key is required to use Ralph.');
104
93
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import { type ReplCommandName } from './command-parser.js';
11
11
  declare function executeCommand(commandName: ReplCommandName, args: string[], state: SessionState, rl: readline.Interface): Promise<{
12
12
  state: SessionState;
13
13
  shouldExit: boolean;
14
+ needsRlRecreate: boolean;
14
15
  }>;
15
16
  /**
16
17
  * Process a single line of input
@@ -18,6 +19,7 @@ declare function executeCommand(commandName: ReplCommandName, args: string[], st
18
19
  declare function processInput(input: string, state: SessionState, rl: readline.Interface): Promise<{
19
20
  state: SessionState;
20
21
  shouldExit: boolean;
22
+ needsRlRecreate: boolean;
21
23
  }>;
22
24
  /**
23
25
  * Start the REPL loop
@@ -1 +1 @@
1
- {"version":3,"file":"repl-loop.d.ts","sourceRoot":"","sources":["../../src/repl/repl-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AAQrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAiK7B;;GAEG;AACH,iBAAe,cAAc,CAC3B,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,QAAQ,CAAC,SAAS,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAyBvD;AAuBD;;GAEG;AACH,iBAAe,YAAY,CACzB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,QAAQ,CAAC,SAAS,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CA8BvD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"repl-loop.d.ts","sourceRoot":"","sources":["../../src/repl/repl-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AAQrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAwL7B;;GAEG;AACH,iBAAe,cAAc,CAC3B,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,QAAQ,CAAC,SAAS,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CA0BjF;AAuBD;;GAEG;AACH,iBAAe,YAAY,CACzB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,QAAQ,CAAC,SAAS,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CA8BjF;AA6BD;;GAEG;AACH,wBAAsB,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDzE;AAED;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -13,6 +13,32 @@ import { hasConfig } from '../utils/config.js';
13
13
  import { updateSessionState } from './session-state.js';
14
14
  import { parseInput, resolveCommandAlias, formatHelpText, } from './command-parser.js';
15
15
  const PROMPT = `${simpson.yellow('wiggum')}${simpson.brown('>')} `;
16
+ /**
17
+ * Clear any buffered stdin data
18
+ * Prevents leaked input after subcommands that use their own stdin handling
19
+ */
20
+ async function clearStdinBuffer() {
21
+ return new Promise((resolve) => {
22
+ if (process.stdin.isTTY) {
23
+ // Set raw mode temporarily to drain buffer
24
+ const wasRaw = process.stdin.isRaw;
25
+ process.stdin.setRawMode(true);
26
+ process.stdin.once('readable', () => {
27
+ // Drain any buffered data
28
+ while (process.stdin.read() !== null) {
29
+ // discard
30
+ }
31
+ process.stdin.setRawMode(wasRaw);
32
+ resolve();
33
+ });
34
+ // Trigger readable if nothing buffered
35
+ setTimeout(resolve, 10);
36
+ }
37
+ else {
38
+ resolve();
39
+ }
40
+ });
41
+ }
16
42
  /**
17
43
  * Handler for the /init command
18
44
  */
@@ -22,8 +48,9 @@ async function handleInitCommand(_args, state, rl) {
22
48
  logger.warn('Project is already initialized. Re-running init will update configuration.');
23
49
  console.log('');
24
50
  }
25
- // Pause REPL readline to avoid conflicts with subcommand's stdin usage
26
- rl.pause();
51
+ // Close REPL readline to avoid conflicts with subcommand's stdin usage
52
+ // We'll signal to recreate it after the command completes
53
+ rl.close();
27
54
  try {
28
55
  const result = await runInitWorkflow(state.projectRoot, {
29
56
  yes: false, // Always interactive in REPL
@@ -45,10 +72,6 @@ async function handleInitCommand(_args, state, rl) {
45
72
  logger.error(`Init failed: ${error instanceof Error ? error.message : String(error)}`);
46
73
  return state;
47
74
  }
48
- finally {
49
- // Resume REPL readline after subcommand completes
50
- rl.resume();
51
- }
52
75
  }
53
76
  /**
54
77
  * Handler for the /new command
@@ -65,8 +88,8 @@ async function handleNewCommand(args, state, rl) {
65
88
  return state;
66
89
  }
67
90
  const featureName = args[0];
68
- // Pause REPL readline to avoid conflicts with subcommand's stdin usage
69
- rl.pause();
91
+ // Close REPL readline to avoid stdin conflicts with subcommand prompts
92
+ rl.close();
70
93
  try {
71
94
  // Delegate to the existing new command behavior
72
95
  // Always use AI mode in REPL (the command handles fallback to template if no API key)
@@ -79,9 +102,8 @@ async function handleNewCommand(args, state, rl) {
79
102
  ai: true, // Always use AI interview in REPL
80
103
  });
81
104
  }
82
- finally {
83
- // Resume REPL readline after subcommand completes
84
- rl.resume();
105
+ catch (error) {
106
+ logger.error(`New command failed: ${error instanceof Error ? error.message : String(error)}`);
85
107
  }
86
108
  return state;
87
109
  }
@@ -99,13 +121,13 @@ async function handleRunCommand(args, state, rl) {
99
121
  return state;
100
122
  }
101
123
  const featureName = args[0];
102
- // Pause REPL readline to avoid conflicts with subcommand's stdin usage
103
- rl.pause();
124
+ // Close REPL readline to avoid stdin conflicts with subcommand
125
+ rl.close();
104
126
  try {
105
127
  await runCommand(featureName, {});
106
128
  }
107
- finally {
108
- rl.resume();
129
+ catch (error) {
130
+ logger.error(`Run command failed: ${error instanceof Error ? error.message : String(error)}`);
109
131
  }
110
132
  return state;
111
133
  }
@@ -118,13 +140,13 @@ async function handleMonitorCommand(args, state, rl) {
118
140
  return state;
119
141
  }
120
142
  const featureName = args[0];
121
- // Pause REPL readline to avoid conflicts with subcommand's stdin usage
122
- rl.pause();
143
+ // Close REPL readline to avoid stdin conflicts with subcommand
144
+ rl.close();
123
145
  try {
124
146
  await monitorCommand(featureName, {});
125
147
  }
126
- finally {
127
- rl.resume();
148
+ catch (error) {
149
+ logger.error(`Monitor command failed: ${error instanceof Error ? error.message : String(error)}`);
128
150
  }
129
151
  return state;
130
152
  }
@@ -142,21 +164,22 @@ function handleHelpCommand() {
142
164
  async function executeCommand(commandName, args, state, rl) {
143
165
  switch (commandName) {
144
166
  case 'init':
145
- return { state: await handleInitCommand(args, state, rl), shouldExit: false };
167
+ // Init closes the readline to avoid stdin conflicts
168
+ return { state: await handleInitCommand(args, state, rl), shouldExit: false, needsRlRecreate: true };
146
169
  case 'new':
147
- return { state: await handleNewCommand(args, state, rl), shouldExit: false };
170
+ return { state: await handleNewCommand(args, state, rl), shouldExit: false, needsRlRecreate: true };
148
171
  case 'run':
149
- return { state: await handleRunCommand(args, state, rl), shouldExit: false };
172
+ return { state: await handleRunCommand(args, state, rl), shouldExit: false, needsRlRecreate: true };
150
173
  case 'monitor':
151
- return { state: await handleMonitorCommand(args, state, rl), shouldExit: false };
174
+ return { state: await handleMonitorCommand(args, state, rl), shouldExit: false, needsRlRecreate: true };
152
175
  case 'help':
153
176
  handleHelpCommand();
154
- return { state, shouldExit: false };
177
+ return { state, shouldExit: false, needsRlRecreate: false };
155
178
  case 'exit':
156
- return { state, shouldExit: true };
179
+ return { state, shouldExit: true, needsRlRecreate: false };
157
180
  default:
158
181
  logger.warn(`Unknown command: ${commandName}`);
159
- return { state, shouldExit: false };
182
+ return { state, shouldExit: false, needsRlRecreate: false };
160
183
  }
161
184
  }
162
185
  /**
@@ -183,27 +206,52 @@ async function processInput(input, state, rl) {
183
206
  const parsed = parseInput(input);
184
207
  switch (parsed.type) {
185
208
  case 'empty':
186
- return { state, shouldExit: false };
209
+ return { state, shouldExit: false, needsRlRecreate: false };
187
210
  case 'slash-command': {
188
211
  const { command } = parsed;
189
212
  if (!command) {
190
- return { state, shouldExit: false };
213
+ return { state, shouldExit: false, needsRlRecreate: false };
191
214
  }
192
215
  const resolvedName = resolveCommandAlias(command.name);
193
216
  if (!resolvedName) {
194
217
  logger.warn(`Unknown command: /${command.name}. Type /help for available commands.`);
195
- return { state, shouldExit: false };
218
+ return { state, shouldExit: false, needsRlRecreate: false };
196
219
  }
197
220
  return executeCommand(resolvedName, command.args, state, rl);
198
221
  }
199
222
  case 'natural-language': {
200
223
  const newState = await handleNaturalLanguage(parsed.text, state);
201
- return { state: newState, shouldExit: false };
224
+ return { state: newState, shouldExit: false, needsRlRecreate: false };
202
225
  }
203
226
  default:
204
- return { state, shouldExit: false };
227
+ return { state, shouldExit: false, needsRlRecreate: false };
205
228
  }
206
229
  }
230
+ /**
231
+ * Create a new readline interface
232
+ */
233
+ function createReadline() {
234
+ return readline.createInterface({
235
+ input: process.stdin,
236
+ output: process.stdout,
237
+ prompt: PROMPT,
238
+ terminal: true,
239
+ });
240
+ }
241
+ /**
242
+ * Read a single line from readline
243
+ */
244
+ function readLine(rl) {
245
+ return new Promise((resolve) => {
246
+ rl.once('line', (line) => resolve(line));
247
+ rl.once('close', () => resolve(null));
248
+ rl.once('SIGINT', () => {
249
+ console.log('');
250
+ logger.info('Use /exit to quit');
251
+ rl.prompt();
252
+ });
253
+ });
254
+ }
207
255
  /**
208
256
  * Start the REPL loop
209
257
  */
@@ -219,26 +267,18 @@ export async function startRepl(initialState) {
219
267
  console.log(pc.dim('Type /help for commands, /exit to quit'));
220
268
  }
221
269
  console.log('');
222
- const rl = readline.createInterface({
223
- input: process.stdin,
224
- output: process.stdout,
225
- prompt: PROMPT,
226
- terminal: true,
227
- });
228
- // Handle Ctrl+C gracefully
229
- rl.on('SIGINT', () => {
230
- console.log('');
231
- logger.info('Use /exit to quit');
270
+ let rl = createReadline();
271
+ let running = true;
272
+ while (running) {
232
273
  rl.prompt();
233
- });
234
- // Handle Ctrl+D (EOF)
235
- rl.on('close', () => {
236
- console.log('');
237
- logger.info('Goodbye!');
238
- process.exit(0);
239
- });
240
- rl.prompt();
241
- for await (const line of rl) {
274
+ const line = await readLine(rl);
275
+ // Handle EOF (Ctrl+D)
276
+ if (line === null) {
277
+ console.log('');
278
+ logger.info('Goodbye!');
279
+ running = false;
280
+ break;
281
+ }
242
282
  try {
243
283
  const result = await processInput(line, state, rl);
244
284
  state = result.state;
@@ -246,13 +286,17 @@ export async function startRepl(initialState) {
246
286
  console.log('');
247
287
  logger.info('Goodbye!');
248
288
  rl.close();
249
- return;
289
+ running = false;
290
+ break;
291
+ }
292
+ // Recreate readline if needed (after commands that closed it)
293
+ if (result.needsRlRecreate) {
294
+ rl = createReadline();
250
295
  }
251
296
  }
252
297
  catch (error) {
253
298
  logger.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
254
299
  }
255
- rl.prompt();
256
300
  }
257
301
  }
258
302
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"repl-loop.js","sourceRoot":"","sources":["../../src/repl/repl-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repl-loop.js","sourceRoot":"","sources":["../../src/repl/repl-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
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
+ export interface SelectOption<T> {
7
+ value: T;
8
+ label: string;
9
+ hint?: string;
10
+ }
11
+ /**
12
+ * Simple select prompt for REPL
13
+ */
14
+ export declare function select<T>(options: {
15
+ message: string;
16
+ options: SelectOption<T>[];
17
+ }): Promise<T | null>;
18
+ /**
19
+ * Simple password prompt for REPL
20
+ * Masks input with asterisks
21
+ */
22
+ export declare function password(options: {
23
+ message: string;
24
+ }): Promise<string | null>;
25
+ /**
26
+ * Simple confirm prompt for REPL
27
+ */
28
+ export declare function confirm(options: {
29
+ message: string;
30
+ initialValue?: boolean;
31
+ }): Promise<boolean | null>;
32
+ /**
33
+ * Check if user cancelled (similar to clack's isCancel)
34
+ */
35
+ export declare function isCancel(value: unknown): value is null;
36
+ //# sourceMappingURL=repl-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl-prompts.d.ts","sourceRoot":"","sources":["../../src/utils/repl-prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;CAC5B,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAsCpB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+DzB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAoC1B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEtD"}
@@ -0,0 +1,149 @@
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
+ * Simple select prompt for REPL
11
+ */
12
+ export async function select(options) {
13
+ const { message, options: choices } = options;
14
+ console.log('');
15
+ console.log(`${simpson.yellow('?')} ${message}`);
16
+ console.log('');
17
+ choices.forEach((choice, index) => {
18
+ const hint = choice.hint ? pc.dim(` (${choice.hint})`) : '';
19
+ console.log(` ${pc.cyan(`${index + 1})`)} ${choice.label}${hint}`);
20
+ });
21
+ console.log('');
22
+ const rl = readline.createInterface({
23
+ input: process.stdin,
24
+ output: process.stdout,
25
+ });
26
+ return new Promise((resolve) => {
27
+ rl.question(`${pc.dim('Enter number (1-' + choices.length + '):')} `, (answer) => {
28
+ rl.close();
29
+ const num = parseInt(answer.trim(), 10);
30
+ if (num >= 1 && num <= choices.length) {
31
+ const selected = choices[num - 1];
32
+ console.log(`${pc.green('✓')} Selected: ${selected.label}`);
33
+ resolve(selected.value);
34
+ }
35
+ else {
36
+ console.log(pc.red('Invalid selection'));
37
+ resolve(null);
38
+ }
39
+ });
40
+ rl.on('SIGINT', () => {
41
+ rl.close();
42
+ resolve(null);
43
+ });
44
+ });
45
+ }
46
+ /**
47
+ * Simple password prompt for REPL
48
+ * Masks input with asterisks
49
+ */
50
+ export async function password(options) {
51
+ const { message } = options;
52
+ console.log('');
53
+ console.log(`${simpson.yellow('?')} ${message}`);
54
+ return new Promise((resolve) => {
55
+ let input = '';
56
+ // Show initial cursor position
57
+ process.stdout.write(`${pc.dim('>')} `);
58
+ const onData = (char) => {
59
+ // Ctrl+C
60
+ if (char === '\u0003') {
61
+ cleanup();
62
+ console.log('');
63
+ resolve(null);
64
+ return;
65
+ }
66
+ // Enter
67
+ if (char === '\r' || char === '\n') {
68
+ cleanup();
69
+ // Clear the line and show fixed mask
70
+ process.stdout.write('\r' + pc.dim('>') + ' ' + '*'.repeat(32) + '\n');
71
+ console.log(`${pc.green('✓')} API key entered`);
72
+ resolve(input.trim() || null);
73
+ return;
74
+ }
75
+ // Backspace
76
+ if (char === '\u007F' || char === '\b') {
77
+ if (input.length > 0) {
78
+ input = input.slice(0, -1);
79
+ // Clear and rewrite asterisks
80
+ process.stdout.write('\r' + pc.dim('>') + ' ' + '*'.repeat(input.length) + ' \b');
81
+ }
82
+ return;
83
+ }
84
+ // Regular character
85
+ if (char.charCodeAt(0) >= 32 && char.charCodeAt(0) <= 126) {
86
+ input += char;
87
+ process.stdout.write('*');
88
+ }
89
+ };
90
+ const cleanup = () => {
91
+ if (process.stdin.isTTY) {
92
+ process.stdin.setRawMode(false);
93
+ }
94
+ process.stdin.removeListener('data', onData);
95
+ process.stdin.pause();
96
+ };
97
+ if (process.stdin.isTTY) {
98
+ process.stdin.setRawMode(true);
99
+ }
100
+ process.stdin.resume();
101
+ process.stdin.setEncoding('utf8');
102
+ process.stdin.on('data', onData);
103
+ });
104
+ }
105
+ /**
106
+ * Simple confirm prompt for REPL
107
+ */
108
+ export async function confirm(options) {
109
+ const { message, initialValue = true } = options;
110
+ console.log('');
111
+ const defaultHint = initialValue ? 'Y/n' : 'y/N';
112
+ const rl = readline.createInterface({
113
+ input: process.stdin,
114
+ output: process.stdout,
115
+ });
116
+ return new Promise((resolve) => {
117
+ rl.question(`${simpson.yellow('?')} ${message} ${pc.dim(`(${defaultHint}):`)} `, (answer) => {
118
+ rl.close();
119
+ const trimmed = answer.trim().toLowerCase();
120
+ if (trimmed === '') {
121
+ console.log(`${pc.green('✓')} ${initialValue ? 'Yes' : 'No'}`);
122
+ resolve(initialValue);
123
+ }
124
+ else if (trimmed === 'y' || trimmed === 'yes') {
125
+ console.log(`${pc.green('✓')} Yes`);
126
+ resolve(true);
127
+ }
128
+ else if (trimmed === 'n' || trimmed === 'no') {
129
+ console.log(`${pc.green('✓')} No`);
130
+ resolve(false);
131
+ }
132
+ else {
133
+ console.log(pc.red('Invalid input, using default'));
134
+ resolve(initialValue);
135
+ }
136
+ });
137
+ rl.on('SIGINT', () => {
138
+ rl.close();
139
+ resolve(null);
140
+ });
141
+ });
142
+ }
143
+ /**
144
+ * Check if user cancelled (similar to clack's isCancel)
145
+ */
146
+ export function isCancel(value) {
147
+ return value === null;
148
+ }
149
+ //# sourceMappingURL=repl-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl-prompts.js","sourceRoot":"","sources":["../../src/utils/repl-prompts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wiggum-cli",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "description": "AI-powered feature development loop CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,7 +18,7 @@ import {
18
18
  getAvailableProvider,
19
19
  AVAILABLE_MODELS,
20
20
  } from '../ai/providers.js';
21
- import * as prompts from '@clack/prompts';
21
+ import * as replPrompts from '../utils/repl-prompts.js';
22
22
  import fs from 'fs';
23
23
  import path from 'path';
24
24
  import {
@@ -33,23 +33,8 @@ import { createShimmerSpinner, type ShimmerSpinner } from '../utils/spinner.js';
33
33
  import { startRepl, createSessionState } from '../repl/index.js';
34
34
  import { loadConfigWithDefaults } from '../utils/config.js';
35
35
 
36
- /**
37
- * Secure password input using @clack/prompts
38
- * Works correctly in both CLI and REPL contexts
39
- */
40
- async function securePasswordInput(message: string): Promise<string | null> {
41
- const result = await prompts.password({
42
- message,
43
- mask: '*',
44
- });
45
-
46
- if (prompts.isCancel(result)) {
47
- return null;
48
- }
49
-
50
- // Return trimmed input, filtering any control characters
51
- return (result as string).trim().replace(/[\x00-\x1F\x7F]/g, '') || null;
52
- }
36
+ // Use REPL-friendly prompts for interactive input
37
+ const prompts = replPrompts;
53
38
 
54
39
  export interface InitOptions {
55
40
  provider?: AIProvider;
@@ -154,8 +139,10 @@ async function collectApiKeys(
154
139
  provider = providerChoice as AIProvider;
155
140
  const envVar = getApiKeyEnvVar(provider);
156
141
 
157
- // Get API key with fixed-length mask (doesn't reveal key length)
158
- const apiKeyInput = await securePasswordInput(`Enter your ${envVar}:`);
142
+ // Get API key with masked input
143
+ const apiKeyInput = await prompts.password({
144
+ message: `Enter your ${envVar}:`,
145
+ });
159
146
 
160
147
  if (!apiKeyInput) {
161
148
  logger.error('API key is required to use Ralph.');
@@ -22,6 +22,32 @@ import {
22
22
 
23
23
  const PROMPT = `${simpson.yellow('wiggum')}${simpson.brown('>')} `;
24
24
 
25
+ /**
26
+ * Clear any buffered stdin data
27
+ * Prevents leaked input after subcommands that use their own stdin handling
28
+ */
29
+ async function clearStdinBuffer(): Promise<void> {
30
+ return new Promise((resolve) => {
31
+ if (process.stdin.isTTY) {
32
+ // Set raw mode temporarily to drain buffer
33
+ const wasRaw = process.stdin.isRaw;
34
+ process.stdin.setRawMode(true);
35
+ process.stdin.once('readable', () => {
36
+ // Drain any buffered data
37
+ while (process.stdin.read() !== null) {
38
+ // discard
39
+ }
40
+ process.stdin.setRawMode(wasRaw);
41
+ resolve();
42
+ });
43
+ // Trigger readable if nothing buffered
44
+ setTimeout(resolve, 10);
45
+ } else {
46
+ resolve();
47
+ }
48
+ });
49
+ }
50
+
25
51
  /**
26
52
  * Handler for the /init command
27
53
  */
@@ -36,8 +62,9 @@ async function handleInitCommand(
36
62
  console.log('');
37
63
  }
38
64
 
39
- // Pause REPL readline to avoid conflicts with subcommand's stdin usage
40
- rl.pause();
65
+ // Close REPL readline to avoid conflicts with subcommand's stdin usage
66
+ // We'll signal to recreate it after the command completes
67
+ rl.close();
41
68
 
42
69
  try {
43
70
  const result = await runInitWorkflow(state.projectRoot, {
@@ -60,9 +87,6 @@ async function handleInitCommand(
60
87
  } catch (error) {
61
88
  logger.error(`Init failed: ${error instanceof Error ? error.message : String(error)}`);
62
89
  return state;
63
- } finally {
64
- // Resume REPL readline after subcommand completes
65
- rl.resume();
66
90
  }
67
91
  }
68
92
 
@@ -88,8 +112,8 @@ async function handleNewCommand(
88
112
 
89
113
  const featureName = args[0];
90
114
 
91
- // Pause REPL readline to avoid conflicts with subcommand's stdin usage
92
- rl.pause();
115
+ // Close REPL readline to avoid stdin conflicts with subcommand prompts
116
+ rl.close();
93
117
 
94
118
  try {
95
119
  // Delegate to the existing new command behavior
@@ -102,9 +126,8 @@ async function handleNewCommand(
102
126
  model: state.model,
103
127
  ai: true, // Always use AI interview in REPL
104
128
  });
105
- } finally {
106
- // Resume REPL readline after subcommand completes
107
- rl.resume();
129
+ } catch (error) {
130
+ logger.error(`New command failed: ${error instanceof Error ? error.message : String(error)}`);
108
131
  }
109
132
 
110
133
  return state;
@@ -131,13 +154,13 @@ async function handleRunCommand(
131
154
 
132
155
  const featureName = args[0];
133
156
 
134
- // Pause REPL readline to avoid conflicts with subcommand's stdin usage
135
- rl.pause();
157
+ // Close REPL readline to avoid stdin conflicts with subcommand
158
+ rl.close();
136
159
 
137
160
  try {
138
161
  await runCommand(featureName, {});
139
- } finally {
140
- rl.resume();
162
+ } catch (error) {
163
+ logger.error(`Run command failed: ${error instanceof Error ? error.message : String(error)}`);
141
164
  }
142
165
 
143
166
  return state;
@@ -158,13 +181,13 @@ async function handleMonitorCommand(
158
181
 
159
182
  const featureName = args[0];
160
183
 
161
- // Pause REPL readline to avoid conflicts with subcommand's stdin usage
162
- rl.pause();
184
+ // Close REPL readline to avoid stdin conflicts with subcommand
185
+ rl.close();
163
186
 
164
187
  try {
165
188
  await monitorCommand(featureName, {});
166
- } finally {
167
- rl.resume();
189
+ } catch (error) {
190
+ logger.error(`Monitor command failed: ${error instanceof Error ? error.message : String(error)}`);
168
191
  }
169
192
 
170
193
  return state;
@@ -187,30 +210,31 @@ async function executeCommand(
187
210
  args: string[],
188
211
  state: SessionState,
189
212
  rl: readline.Interface
190
- ): Promise<{ state: SessionState; shouldExit: boolean }> {
213
+ ): Promise<{ state: SessionState; shouldExit: boolean; needsRlRecreate: boolean }> {
191
214
  switch (commandName) {
192
215
  case 'init':
193
- return { state: await handleInitCommand(args, state, rl), shouldExit: false };
216
+ // Init closes the readline to avoid stdin conflicts
217
+ return { state: await handleInitCommand(args, state, rl), shouldExit: false, needsRlRecreate: true };
194
218
 
195
219
  case 'new':
196
- return { state: await handleNewCommand(args, state, rl), shouldExit: false };
220
+ return { state: await handleNewCommand(args, state, rl), shouldExit: false, needsRlRecreate: true };
197
221
 
198
222
  case 'run':
199
- return { state: await handleRunCommand(args, state, rl), shouldExit: false };
223
+ return { state: await handleRunCommand(args, state, rl), shouldExit: false, needsRlRecreate: true };
200
224
 
201
225
  case 'monitor':
202
- return { state: await handleMonitorCommand(args, state, rl), shouldExit: false };
226
+ return { state: await handleMonitorCommand(args, state, rl), shouldExit: false, needsRlRecreate: true };
203
227
 
204
228
  case 'help':
205
229
  handleHelpCommand();
206
- return { state, shouldExit: false };
230
+ return { state, shouldExit: false, needsRlRecreate: false };
207
231
 
208
232
  case 'exit':
209
- return { state, shouldExit: true };
233
+ return { state, shouldExit: true, needsRlRecreate: false };
210
234
 
211
235
  default:
212
236
  logger.warn(`Unknown command: ${commandName}`);
213
- return { state, shouldExit: false };
237
+ return { state, shouldExit: false, needsRlRecreate: false };
214
238
  }
215
239
  }
216
240
 
@@ -242,23 +266,23 @@ async function processInput(
242
266
  input: string,
243
267
  state: SessionState,
244
268
  rl: readline.Interface
245
- ): Promise<{ state: SessionState; shouldExit: boolean }> {
269
+ ): Promise<{ state: SessionState; shouldExit: boolean; needsRlRecreate: boolean }> {
246
270
  const parsed = parseInput(input);
247
271
 
248
272
  switch (parsed.type) {
249
273
  case 'empty':
250
- return { state, shouldExit: false };
274
+ return { state, shouldExit: false, needsRlRecreate: false };
251
275
 
252
276
  case 'slash-command': {
253
277
  const { command } = parsed;
254
278
  if (!command) {
255
- return { state, shouldExit: false };
279
+ return { state, shouldExit: false, needsRlRecreate: false };
256
280
  }
257
281
 
258
282
  const resolvedName = resolveCommandAlias(command.name);
259
283
  if (!resolvedName) {
260
284
  logger.warn(`Unknown command: /${command.name}. Type /help for available commands.`);
261
- return { state, shouldExit: false };
285
+ return { state, shouldExit: false, needsRlRecreate: false };
262
286
  }
263
287
 
264
288
  return executeCommand(resolvedName, command.args, state, rl);
@@ -266,14 +290,41 @@ async function processInput(
266
290
 
267
291
  case 'natural-language': {
268
292
  const newState = await handleNaturalLanguage(parsed.text!, state);
269
- return { state: newState, shouldExit: false };
293
+ return { state: newState, shouldExit: false, needsRlRecreate: false };
270
294
  }
271
295
 
272
296
  default:
273
- return { state, shouldExit: false };
297
+ return { state, shouldExit: false, needsRlRecreate: false };
274
298
  }
275
299
  }
276
300
 
301
+ /**
302
+ * Create a new readline interface
303
+ */
304
+ function createReadline(): readline.Interface {
305
+ return readline.createInterface({
306
+ input: process.stdin,
307
+ output: process.stdout,
308
+ prompt: PROMPT,
309
+ terminal: true,
310
+ });
311
+ }
312
+
313
+ /**
314
+ * Read a single line from readline
315
+ */
316
+ function readLine(rl: readline.Interface): Promise<string | null> {
317
+ return new Promise((resolve) => {
318
+ rl.once('line', (line) => resolve(line));
319
+ rl.once('close', () => resolve(null));
320
+ rl.once('SIGINT', () => {
321
+ console.log('');
322
+ logger.info('Use /exit to quit');
323
+ rl.prompt();
324
+ });
325
+ });
326
+ }
327
+
277
328
  /**
278
329
  * Start the REPL loop
279
330
  */
@@ -291,30 +342,21 @@ export async function startRepl(initialState: SessionState): Promise<void> {
291
342
  }
292
343
  console.log('');
293
344
 
294
- const rl = readline.createInterface({
295
- input: process.stdin,
296
- output: process.stdout,
297
- prompt: PROMPT,
298
- terminal: true,
299
- });
345
+ let rl = createReadline();
346
+ let running = true;
300
347
 
301
- // Handle Ctrl+C gracefully
302
- rl.on('SIGINT', () => {
303
- console.log('');
304
- logger.info('Use /exit to quit');
348
+ while (running) {
305
349
  rl.prompt();
306
- });
307
-
308
- // Handle Ctrl+D (EOF)
309
- rl.on('close', () => {
310
- console.log('');
311
- logger.info('Goodbye!');
312
- process.exit(0);
313
- });
314
-
315
- rl.prompt();
350
+ const line = await readLine(rl);
351
+
352
+ // Handle EOF (Ctrl+D)
353
+ if (line === null) {
354
+ console.log('');
355
+ logger.info('Goodbye!');
356
+ running = false;
357
+ break;
358
+ }
316
359
 
317
- for await (const line of rl) {
318
360
  try {
319
361
  const result = await processInput(line, state, rl);
320
362
  state = result.state;
@@ -323,13 +365,17 @@ export async function startRepl(initialState: SessionState): Promise<void> {
323
365
  console.log('');
324
366
  logger.info('Goodbye!');
325
367
  rl.close();
326
- return;
368
+ running = false;
369
+ break;
370
+ }
371
+
372
+ // Recreate readline if needed (after commands that closed it)
373
+ if (result.needsRlRecreate) {
374
+ rl = createReadline();
327
375
  }
328
376
  } catch (error) {
329
377
  logger.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
330
378
  }
331
-
332
- rl.prompt();
333
379
  }
334
380
  }
335
381
 
@@ -0,0 +1,183 @@
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
+
7
+ import readline from 'node:readline';
8
+ import pc from 'picocolors';
9
+ import { simpson } from './colors.js';
10
+
11
+ export interface SelectOption<T> {
12
+ value: T;
13
+ label: string;
14
+ hint?: string;
15
+ }
16
+
17
+ /**
18
+ * Simple select prompt for REPL
19
+ */
20
+ export async function select<T>(options: {
21
+ message: string;
22
+ options: SelectOption<T>[];
23
+ }): Promise<T | null> {
24
+ const { message, options: choices } = options;
25
+
26
+ console.log('');
27
+ console.log(`${simpson.yellow('?')} ${message}`);
28
+ console.log('');
29
+
30
+ choices.forEach((choice, index) => {
31
+ const hint = choice.hint ? pc.dim(` (${choice.hint})`) : '';
32
+ console.log(` ${pc.cyan(`${index + 1})`)} ${choice.label}${hint}`);
33
+ });
34
+
35
+ console.log('');
36
+
37
+ const rl = readline.createInterface({
38
+ input: process.stdin,
39
+ output: process.stdout,
40
+ });
41
+
42
+ return new Promise((resolve) => {
43
+ rl.question(`${pc.dim('Enter number (1-' + choices.length + '):')} `, (answer) => {
44
+ rl.close();
45
+ const num = parseInt(answer.trim(), 10);
46
+ if (num >= 1 && num <= choices.length) {
47
+ const selected = choices[num - 1];
48
+ console.log(`${pc.green('✓')} Selected: ${selected.label}`);
49
+ resolve(selected.value);
50
+ } else {
51
+ console.log(pc.red('Invalid selection'));
52
+ resolve(null);
53
+ }
54
+ });
55
+
56
+ rl.on('SIGINT', () => {
57
+ rl.close();
58
+ resolve(null);
59
+ });
60
+ });
61
+ }
62
+
63
+ /**
64
+ * Simple password prompt for REPL
65
+ * Masks input with asterisks
66
+ */
67
+ export async function password(options: {
68
+ message: string;
69
+ }): Promise<string | null> {
70
+ const { message } = options;
71
+
72
+ console.log('');
73
+ console.log(`${simpson.yellow('?')} ${message}`);
74
+
75
+ return new Promise((resolve) => {
76
+ let input = '';
77
+
78
+ // Show initial cursor position
79
+ process.stdout.write(`${pc.dim('>')} `);
80
+
81
+ const onData = (char: string) => {
82
+ // Ctrl+C
83
+ if (char === '\u0003') {
84
+ cleanup();
85
+ console.log('');
86
+ resolve(null);
87
+ return;
88
+ }
89
+
90
+ // Enter
91
+ if (char === '\r' || char === '\n') {
92
+ cleanup();
93
+ // Clear the line and show fixed mask
94
+ process.stdout.write('\r' + pc.dim('>') + ' ' + '*'.repeat(32) + '\n');
95
+ console.log(`${pc.green('✓')} API key entered`);
96
+ resolve(input.trim() || null);
97
+ return;
98
+ }
99
+
100
+ // Backspace
101
+ if (char === '\u007F' || char === '\b') {
102
+ if (input.length > 0) {
103
+ input = input.slice(0, -1);
104
+ // Clear and rewrite asterisks
105
+ process.stdout.write('\r' + pc.dim('>') + ' ' + '*'.repeat(input.length) + ' \b');
106
+ }
107
+ return;
108
+ }
109
+
110
+ // Regular character
111
+ if (char.charCodeAt(0) >= 32 && char.charCodeAt(0) <= 126) {
112
+ input += char;
113
+ process.stdout.write('*');
114
+ }
115
+ };
116
+
117
+ const cleanup = () => {
118
+ if (process.stdin.isTTY) {
119
+ process.stdin.setRawMode(false);
120
+ }
121
+ process.stdin.removeListener('data', onData);
122
+ process.stdin.pause();
123
+ };
124
+
125
+ if (process.stdin.isTTY) {
126
+ process.stdin.setRawMode(true);
127
+ }
128
+ process.stdin.resume();
129
+ process.stdin.setEncoding('utf8');
130
+ process.stdin.on('data', onData);
131
+ });
132
+ }
133
+
134
+ /**
135
+ * Simple confirm prompt for REPL
136
+ */
137
+ export async function confirm(options: {
138
+ message: string;
139
+ initialValue?: boolean;
140
+ }): Promise<boolean | null> {
141
+ const { message, initialValue = true } = options;
142
+
143
+ console.log('');
144
+ const defaultHint = initialValue ? 'Y/n' : 'y/N';
145
+
146
+ const rl = readline.createInterface({
147
+ input: process.stdin,
148
+ output: process.stdout,
149
+ });
150
+
151
+ return new Promise((resolve) => {
152
+ rl.question(`${simpson.yellow('?')} ${message} ${pc.dim(`(${defaultHint}):`)} `, (answer) => {
153
+ rl.close();
154
+ const trimmed = answer.trim().toLowerCase();
155
+
156
+ if (trimmed === '') {
157
+ console.log(`${pc.green('✓')} ${initialValue ? 'Yes' : 'No'}`);
158
+ resolve(initialValue);
159
+ } else if (trimmed === 'y' || trimmed === 'yes') {
160
+ console.log(`${pc.green('✓')} Yes`);
161
+ resolve(true);
162
+ } else if (trimmed === 'n' || trimmed === 'no') {
163
+ console.log(`${pc.green('✓')} No`);
164
+ resolve(false);
165
+ } else {
166
+ console.log(pc.red('Invalid input, using default'));
167
+ resolve(initialValue);
168
+ }
169
+ });
170
+
171
+ rl.on('SIGINT', () => {
172
+ rl.close();
173
+ resolve(null);
174
+ });
175
+ });
176
+ }
177
+
178
+ /**
179
+ * Check if user cancelled (similar to clack's isCancel)
180
+ */
181
+ export function isCancel(value: unknown): value is null {
182
+ return value === null;
183
+ }