megabuff 0.15.0 โ†’ 0.16.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.
package/README.md CHANGED
@@ -57,6 +57,7 @@ megabuff optimize "Rewrite this prompt to be clearer"
57
57
  - ๐Ÿ”’ **Secure Storage** - Keychain support for API keys
58
58
  - ๐ŸŽฏ **Smart Model Selection** - Auto-detects provider from model name
59
59
  - ๐Ÿ“Š **Stats Tracking** - See word count changes and improvements
60
+ - ๐Ÿ“ **Error Logging** - All errors saved to `~/.megabuff/errors.log` for easy debugging
60
61
  - ๐ŸŒˆ **Beautiful Output** - Themed, formatted, fun to use!
61
62
 
62
63
  ---
@@ -98,9 +99,12 @@ megabuff config token YOUR_API_KEY --provider openai
98
99
 
99
100
  # 3. Start optimizing!
100
101
  megabuff optimize "Write a function to validate emails"
102
+
103
+ # 4. Or use interactive mode for multiple commands!
104
+ megabuff shell
101
105
  ```
102
106
 
103
- > ๐Ÿ’ก **Pro Tip:** Try out different themes with `megabuff theme list`!
107
+ > ๐Ÿ’ก **Pro Tip:** Use `megabuff shell` for an interactive session with guided wizards!
104
108
 
105
109
  ---
106
110
 
@@ -337,26 +341,40 @@ megabuff config show
337
341
  ### ๐Ÿค– Available Models
338
342
 
339
343
  **OpenAI:**
344
+ - `gpt-5.2` (default)
340
345
  - `gpt-4o`
341
- - `gpt-4o-mini` (default)
346
+ - `gpt-4o-mini`
342
347
  - `gpt-4-turbo`
343
348
  - `gpt-4`
344
349
  - `gpt-3.5-turbo`
345
350
 
346
351
  **Anthropic:**
347
- - `claude-sonnet-4-5-20250929` (latest)
352
+ - `claude-opus-4-5` (default)
348
353
  - `claude-sonnet-4-5`
349
- - `claude-sonnet-4`
354
+ - `claude-sonnet-4-0`
355
+ - `claude-sonnet-4-5-20250929`
350
356
  - `claude-3-5-sonnet-20241022`
351
357
  - `claude-3-opus-20240229`
352
358
  - `claude-3-sonnet-20240229`
353
359
  - `claude-3-haiku-20240307`
354
360
 
355
361
  **Google Gemini:**
356
- - `gemini-2.0-flash-exp` (experimental)
357
- - `gemini-1.5-pro`
358
- - `gemini-1.5-flash` (default for Google)
359
- - `gemini-1.0-pro`
362
+ - `gemini-2.5-flash` (default)
363
+ - `gemini-2.5-pro`
364
+ - `gemini-2.5-flash-lite`
365
+ - `gemini-2.0-flash`
366
+ - `gemini-2.0-flash-lite`
367
+ - `gemini-3-flash-preview`
368
+ - `gemini-3-pro-preview`
369
+ - `gemini-flash-latest`
370
+
371
+ **xAI (Grok):**
372
+ - `grok-beta` (default)
373
+ - `grok-vision-beta`
374
+
375
+ **DeepSeek:**
376
+ - `deepseek-chat` (default)
377
+ - `deepseek-reasoner`
360
378
 
361
379
  ---
362
380
 
@@ -450,8 +468,10 @@ megabuff> exit
450
468
 
451
469
  **Features:**
452
470
  - โšก **Faster workflow** - Skip typing `megabuff` for every command
471
+ - ๐Ÿง™ **Guided wizards** - Type `optimize` or `analyze` without arguments to start a step-by-step wizard
453
472
  - ๐Ÿ“œ **Command history** - Use arrow keys (โ†‘/โ†“) to recall previous commands
454
473
  - ๐Ÿ”„ **Session persistence** - API keys and config loaded once
474
+ - ๐Ÿ“ **Error logging** - All errors saved to `~/.megabuff/errors.log` for debugging
455
475
  - ๐Ÿ’ก **Built-in help** - Type `help` anytime
456
476
  - ๐Ÿงน **Clear screen** - Type `clear` to refresh
457
477
  - ๐Ÿšช **Easy exit** - Type `exit`, `quit`, or `q` to leave
@@ -459,6 +479,8 @@ megabuff> exit
459
479
  **Pro Tips:**
460
480
  - All regular commands work: `optimize`, `analyze`, `config`, `theme`
461
481
  - All flags work: `--provider`, `--style`, `--iterations`, `--show-cost`, etc.
482
+ - Guided wizards only show providers with configured API tokens
483
+ - Compare mode in wizards only shows providers you've set up
462
484
  - Press Ctrl+C twice to exit immediately
463
485
  - Perfect for batch operations and experimentation
464
486
 
package/dist/config.d.ts CHANGED
@@ -74,4 +74,12 @@ export declare function getThemeName(): Promise<ThemeName>;
74
74
  * Set the theme
75
75
  */
76
76
  export declare function setThemeName(theme: ThemeName): Promise<void>;
77
+ /**
78
+ * Log an error to the errors.log file
79
+ */
80
+ export declare function logError(error: Error | string, context?: string): Promise<void>;
81
+ /**
82
+ * Get the path to the error log file
83
+ */
84
+ export declare function getErrorLogPath(): string;
77
85
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,cAAc,CAAC;AAE/F,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAAkF,CAAC;AAE5H,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEvE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAUjF;AAMD,UAAU,MAAM;IAEZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AA2ED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKzE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3D;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG5D;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8BhG;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1E;;;GAGG;AACH,wBAAsB,aAAa,CAC/B,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,CA8BpD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB/G;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAapE;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAGvD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,cAAc,CAAC;AAE/F,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAAkF,CAAC;AAE5H,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEvE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAUjF;AAMD,UAAU,MAAM;IAEZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AA2ED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKzE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3D;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG5D;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8BhG;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1E;;;GAGG;AACH,wBAAsB,aAAa,CAC/B,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,CA8BpD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB/G;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAapE;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAGvD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlE;AAQD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
package/dist/config.js CHANGED
@@ -309,4 +309,38 @@ export async function setThemeName(theme) {
309
309
  config.theme = theme;
310
310
  await writeConfig(config);
311
311
  }
312
+ // ============================================================================
313
+ // ERROR LOGGING
314
+ // ============================================================================
315
+ const ERROR_LOG_FILE = path.join(CONFIG_DIR, "errors.log");
316
+ /**
317
+ * Log an error to the errors.log file
318
+ */
319
+ export async function logError(error, context) {
320
+ try {
321
+ await ensureConfigDir();
322
+ const timestamp = new Date().toISOString();
323
+ const errorMessage = error instanceof Error ? error.message : error;
324
+ const errorStack = error instanceof Error ? error.stack : undefined;
325
+ let logEntry = `[${timestamp}]`;
326
+ if (context) {
327
+ logEntry += ` [${context}]`;
328
+ }
329
+ logEntry += ` ${errorMessage}`;
330
+ if (errorStack) {
331
+ logEntry += `\n${errorStack}`;
332
+ }
333
+ logEntry += "\n\n";
334
+ await fs.appendFile(ERROR_LOG_FILE, logEntry, "utf-8");
335
+ }
336
+ catch {
337
+ // Silently fail if we can't write to the log file
338
+ }
339
+ }
340
+ /**
341
+ * Get the path to the error log file
342
+ */
343
+ export function getErrorLogPath() {
344
+ return ERROR_LOG_FILE;
345
+ }
312
346
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAe/D,eAAO,MAAM,OAAO,SAAgB,CAAC;AA0RrC;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8N/E;AAkKD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkG9E;AAwGD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6H5E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuH7E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAe/D,eAAO,MAAM,OAAO,SAAgB,CAAC;AAiSrC;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiO/E;AAoKD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0G9E;AAwGD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6H5E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuH7E"}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import { xai } from "@ai-sdk/xai";
9
9
  import { generateText } from "ai";
10
10
  import * as clipboardy from "clipboardy";
11
11
  import chalk from "chalk";
12
- import { getApiKeyInfo, setApiKey, removeApiKey, hasApiKey, getConfig, getProvider, setProvider, setModel, getModel, normalizeProvider, getProviderForModel, MODEL_PROVIDER_MAP, PROVIDERS, getThemeName, setThemeName } from "./config.js";
12
+ import { getApiKeyInfo, setApiKey, removeApiKey, hasApiKey, getConfig, getProvider, setProvider, setModel, getModel, normalizeProvider, getProviderForModel, MODEL_PROVIDER_MAP, PROVIDERS, getThemeName, setThemeName, logError, getErrorLogPath } from "./config.js";
13
13
  import { getDefaultModel } from "./models.js";
14
14
  import { themes, getAllThemeNames, isValidTheme } from "./themes.js";
15
15
  import { getCurrentTheme, clearThemeCache } from "./theme-utils.js";
@@ -55,11 +55,17 @@ function maskSecret(secret) {
55
55
  * Exit or throw error based on shell mode.
56
56
  * In shell mode, throws an error so the shell can catch it and continue.
57
57
  * Outside shell mode, calls process.exit(1).
58
+ * All errors are logged to ~/.megabuff/errors.log
58
59
  */
59
- function exitOrThrow(message) {
60
+ function exitOrThrow(message, context) {
61
+ // Log the error to file
62
+ const errorMessage = message || "Command failed";
63
+ logError(errorMessage, context).catch(() => {
64
+ // Ignore logging errors
65
+ });
60
66
  if (isInShellMode()) {
61
67
  // In shell mode, throw error so the shell can catch it and continue
62
- const err = new Error(message || "Command failed");
68
+ const err = new Error(errorMessage);
63
69
  // Mark it so the shell knows to suppress the error message (already printed)
64
70
  err.alreadyPrinted = true;
65
71
  throw err;
@@ -354,7 +360,15 @@ export async function guidedOptimize(shellRl) {
354
360
  showCost = await wizardConfirm(rl, "Show cost estimates?", false);
355
361
  // Step 8: Output file (optional)
356
362
  wizardStep(8, totalSteps, "Output options");
357
- outputFile = await wizardPrompt(rl, "Save to file? (path or Enter to skip)");
363
+ const defaultOutputFile = `./megabuff-output-${new Date().toISOString().slice(0, 10)}.txt`;
364
+ console.log(theme.colors.dim(` Default: ${defaultOutputFile}`));
365
+ const outputInput = await wizardPrompt(rl, "Save to file? (path, 'yes' for default, or Enter to skip)");
366
+ if (outputInput.toLowerCase() === 'yes' || outputInput.toLowerCase() === 'y') {
367
+ outputFile = defaultOutputFile;
368
+ }
369
+ else if (outputInput.trim()) {
370
+ outputFile = outputInput;
371
+ }
358
372
  }
359
373
  // Show summary
360
374
  const summaryItems = [
@@ -376,8 +390,6 @@ export async function guidedOptimize(shellRl) {
376
390
  return;
377
391
  }
378
392
  }
379
- // Close readline before running the actual command
380
- rl.close();
381
393
  // Build options object and run optimize
382
394
  const options = {
383
395
  provider: selectedProvider,
@@ -397,28 +409,20 @@ export async function guidedOptimize(shellRl) {
397
409
  options.compare = true;
398
410
  options.providers = compareProviders.join(",");
399
411
  }
400
- // Now trigger the actual optimize command by parsing programmatically
401
- // We'll construct the command args and call parseAsync
402
- const args = ["node", "megabuff", "optimize", promptText];
403
- if (options.provider)
404
- args.push("--provider", options.provider);
405
- if (options.style)
406
- args.push("--style", options.style);
407
- if (options.iterations)
408
- args.push("--iterations", options.iterations);
409
- if (options.showCost)
410
- args.push("--show-cost");
411
- if (options.output)
412
- args.push("--output", options.output);
413
- if (options.compare) {
414
- args.push("--compare");
415
- if (options.providers)
416
- args.push("--providers", options.providers);
412
+ // Determine if we need to keep readline open for iteration prompts
413
+ // In interactive shell mode, always prompt for iterations in compare mode
414
+ const needsIterationPrompts = useCompare && compareProviders.length >= 2 && iterations > 1;
415
+ // Close readline before running the actual command (unless we need it for iteration prompts)
416
+ if (!needsIterationPrompts) {
417
+ rl.close();
417
418
  }
418
419
  console.log(theme.colors.dim("\n๐Ÿš€ Running optimization...\n"));
419
- // We need to run the actual optimization logic directly
420
- // rather than re-parsing to avoid infinite loops
421
- await runOptimizeWithOptions(promptText, options);
420
+ // Pass the readline if we need iteration prompts in shell mode
421
+ await runOptimizeWithOptions(promptText, options, needsIterationPrompts ? rl : undefined);
422
+ // Close readline after if we kept it open
423
+ if (needsIterationPrompts) {
424
+ rl.close();
425
+ }
422
426
  }
423
427
  catch (error) {
424
428
  rl.close();
@@ -428,7 +432,7 @@ export async function guidedOptimize(shellRl) {
428
432
  /**
429
433
  * Core optimize logic extracted for use by guided wizard
430
434
  */
431
- async function runOptimizeWithOptions(promptText, options) {
435
+ async function runOptimizeWithOptions(promptText, options, shellRl) {
432
436
  const provider = await getProvider(options.provider);
433
437
  const { apiKey } = await getApiKeyInfo(provider, options.apiKey);
434
438
  if (!apiKey) {
@@ -446,7 +450,7 @@ async function runOptimizeWithOptions(promptText, options) {
446
450
  models: options.models,
447
451
  verbose: options.verbose,
448
452
  showCost: options.showCost
449
- });
453
+ }, shellRl);
450
454
  return;
451
455
  }
452
456
  // Cost estimation
@@ -596,7 +600,16 @@ export async function guidedAnalyze(shellRl) {
596
600
  const showCost = await wizardConfirm(rl, "Show cost estimates?", false);
597
601
  // Step 4: Output file (optional)
598
602
  wizardStep(4, totalSteps, "Output options");
599
- const outputFile = await wizardPrompt(rl, "Save analysis to file? (path or Enter to skip)");
603
+ const defaultOutputFile = `./megabuff-analysis-${new Date().toISOString().slice(0, 10)}.txt`;
604
+ console.log(theme.colors.dim(` Default: ${defaultOutputFile}`));
605
+ const outputInput = await wizardPrompt(rl, "Save analysis to file? (path, 'yes' for default, or Enter to skip)");
606
+ let outputFile = "";
607
+ if (outputInput.toLowerCase() === 'yes' || outputInput.toLowerCase() === 'y') {
608
+ outputFile = defaultOutputFile;
609
+ }
610
+ else if (outputInput.trim()) {
611
+ outputFile = outputInput;
612
+ }
600
613
  // Step 5: Confirmation
601
614
  wizardStep(5, totalSteps, "Confirm");
602
615
  const summaryItems = [
@@ -2369,7 +2382,7 @@ themeCmd
2369
2382
  }
2370
2383
  });
2371
2384
  // Comparison mode function
2372
- async function runComparisonMode(original, style, customPrompt, iterations, options) {
2385
+ async function runComparisonMode(original, style, customPrompt, iterations, options, shellRl) {
2373
2386
  console.log("");
2374
2387
  console.log(theme.colors.primary("๐Ÿ” Comparison Mode") + theme.colors.dim(" - Testing multiple providers..."));
2375
2388
  console.log("");
@@ -2526,7 +2539,8 @@ async function runComparisonMode(original, style, customPrompt, iterations, opti
2526
2539
  }
2527
2540
  // Run optimization for each provider
2528
2541
  // Use sequential execution if we need interactive prompts for iterations
2529
- const needsSequentialExecution = options.showCost && iterations > 1 && process.stdin.isTTY && process.stdout.isTTY;
2542
+ // Always run sequentially with prompts when there are multiple iterations in TTY mode
2543
+ const needsSequentialExecution = iterations > 1 && process.stdin.isTTY && process.stdout.isTTY;
2530
2544
  const results = [];
2531
2545
  const processProvider = async (provider) => {
2532
2546
  const providerEmoji = provider === "openai" ? "๐Ÿค–" : provider === "anthropic" ? "๐Ÿง " : provider === "google" ? "โœจ" : provider === "xai" ? "๐Ÿš€" : provider === "deepseek" ? "๐Ÿ”ฎ" : "๐Ÿ”ง";
@@ -2553,6 +2567,47 @@ async function runComparisonMode(original, style, customPrompt, iterations, opti
2553
2567
  }
2554
2568
  // Run iterations for this provider
2555
2569
  for (let i = 0; i < iterations; i++) {
2570
+ // Prompt before FIRST iteration with multiple iterations (both CLI and shell mode)
2571
+ if (i === 0 && iterations > 1 && process.stdin.isTTY && process.stdout.isTTY) {
2572
+ spinner.stop();
2573
+ // Show cost estimate for first iteration
2574
+ if (options.showCost) {
2575
+ const actualModel = modelToUse || getDefaultModelForProvider(provider);
2576
+ const firstIterationEstimate = estimateOptimizationCost(optimized, actualModel, 1);
2577
+ console.log("");
2578
+ console.log(theme.colors.primary(`๐Ÿ’ฐ ${formatProviderName(provider)} - Iteration 1/${iterations} Cost Estimate`));
2579
+ console.log(theme.colors.dim("โ”€".repeat(80)));
2580
+ console.log(theme.colors.info(` Model: `) + theme.colors.secondary(actualModel));
2581
+ console.log(theme.colors.info(` Estimated input tokens: `) + theme.colors.secondary(formatTokens(firstIterationEstimate.inputTokens)));
2582
+ console.log(theme.colors.info(` Estimated output tokens: `) + theme.colors.secondary(formatTokens(firstIterationEstimate.outputTokens)));
2583
+ console.log(theme.colors.info(` Estimated cost: `) + theme.colors.accent(formatCost(firstIterationEstimate.estimatedCost)));
2584
+ console.log(theme.colors.dim("โ”€".repeat(80)));
2585
+ console.log("");
2586
+ }
2587
+ let answer;
2588
+ if (shellRl) {
2589
+ // Use the shell's readline interface
2590
+ answer = await shellRl.question(theme.colors.warning(`${formatProviderName(provider)}: Start iteration 1/${iterations}? (Y/n): `));
2591
+ }
2592
+ else {
2593
+ // Create a new readline for CLI mode
2594
+ const rl = readline.createInterface({
2595
+ input: process.stdin,
2596
+ output: process.stdout
2597
+ });
2598
+ answer = await rl.question(theme.colors.warning(`${formatProviderName(provider)}: Start iteration 1/${iterations}? (Y/n): `));
2599
+ rl.close();
2600
+ }
2601
+ // Default to 'yes' if user just presses Enter (since they explicitly requested multiple iterations)
2602
+ if (answer.trim() !== '' && answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
2603
+ console.log("");
2604
+ console.log(theme.colors.dim(`${formatProviderName(provider)}: Skipped.`));
2605
+ console.log("");
2606
+ break;
2607
+ }
2608
+ console.log("");
2609
+ spinner.start();
2610
+ }
2556
2611
  // Update spinner to show current iteration
2557
2612
  if (iterations > 1) {
2558
2613
  spinner.update(`${providerEmoji} ${formatProviderName(provider)} - iteration ${i + 1}/${iterations}...`);
@@ -2592,8 +2647,8 @@ async function runComparisonMode(original, style, customPrompt, iterations, opti
2592
2647
  if (iterations > 1) {
2593
2648
  spinner.stop();
2594
2649
  }
2595
- // Show iteration output if verbose mode is enabled
2596
- if (options.verbose && iterations > 1) {
2650
+ // Show iteration output if verbose mode is enabled OR if --show-cost is used (so user can see what they're paying for)
2651
+ if ((options.verbose || options.showCost) && iterations > 1) {
2597
2652
  console.log("");
2598
2653
  console.log(theme.colors.primary(`๐Ÿ“ ${formatProviderName(provider)} - Iteration ${i + 1}/${iterations} Output:`));
2599
2654
  console.log(theme.colors.dim("โ”€".repeat(80)));
@@ -2612,32 +2667,44 @@ async function runComparisonMode(original, style, customPrompt, iterations, opti
2612
2667
  console.log(theme.colors.dim("โ”€".repeat(80)));
2613
2668
  console.log("");
2614
2669
  }
2615
- // Show cost estimate for NEXT iteration and prompt for confirmation (if not the last iteration)
2670
+ // Show cost estimate for NEXT iteration (if --show-cost enabled)
2616
2671
  if (options.showCost && iterations > 1 && i < iterations - 1) {
2617
2672
  const nextIterationEstimate = estimateOptimizationCost(optimized, actualModel, 1);
2618
2673
  console.log("");
2619
2674
  console.log(theme.colors.primary(`๐Ÿ’ฐ ${formatProviderName(provider)} - Iteration ${i + 2}/${iterations} Cost Estimate`));
2620
2675
  console.log(theme.colors.dim("โ”€".repeat(80)));
2621
2676
  console.log(theme.colors.info(` Model: `) + theme.colors.secondary(actualModel));
2677
+ console.log(theme.colors.info(` Estimated input tokens: `) + theme.colors.secondary(formatTokens(nextIterationEstimate.inputTokens)));
2678
+ console.log(theme.colors.info(` Estimated output tokens: `) + theme.colors.secondary(formatTokens(nextIterationEstimate.outputTokens)));
2622
2679
  console.log(theme.colors.info(` Estimated cost: `) + theme.colors.accent(formatCost(nextIterationEstimate.estimatedCost)));
2623
2680
  console.log(theme.colors.dim("โ”€".repeat(80)));
2624
2681
  console.log("");
2625
- // Prompt user to confirm proceeding with next iteration (skip in shell mode)
2626
- if (process.stdin.isTTY && process.stdout.isTTY && !isInShellMode()) {
2682
+ }
2683
+ // Prompt user to confirm proceeding with next iteration (if not the last iteration)
2684
+ // Always prompt in TTY mode when there are multiple iterations
2685
+ if (iterations > 1 && i < iterations - 1 && process.stdin.isTTY && process.stdout.isTTY) {
2686
+ let answer;
2687
+ if (shellRl) {
2688
+ // Use the shell's readline interface (WizardReadline has async question)
2689
+ answer = await shellRl.question(theme.colors.warning(`${formatProviderName(provider)}: Continue with iteration ${i + 2}/${iterations}? (Y/n): `));
2690
+ }
2691
+ else {
2692
+ // Create a new readline for CLI mode
2627
2693
  const rl = readline.createInterface({
2628
2694
  input: process.stdin,
2629
2695
  output: process.stdout
2630
2696
  });
2631
- const answer = await rl.question(theme.colors.warning(`${formatProviderName(provider)}: Continue with iteration ${i + 2}/${iterations}? (y/n): `));
2697
+ answer = await rl.question(theme.colors.warning(`${formatProviderName(provider)}: Continue with iteration ${i + 2}/${iterations}? (Y/n): `));
2632
2698
  rl.close();
2633
- if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
2634
- console.log("");
2635
- console.log(theme.colors.dim(`${formatProviderName(provider)}: Stopped after ${i + 1} iteration(s).`));
2636
- console.log("");
2637
- break;
2638
- }
2699
+ }
2700
+ // Default to 'yes' if user just presses Enter (since they explicitly requested multiple iterations)
2701
+ if (answer.trim() !== '' && answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
2639
2702
  console.log("");
2703
+ console.log(theme.colors.dim(`${formatProviderName(provider)}: Stopped after ${i + 1} iteration(s).`));
2704
+ console.log("");
2705
+ break;
2640
2706
  }
2707
+ console.log("");
2641
2708
  }
2642
2709
  // Restart spinner for next iteration
2643
2710
  if (iterations > 1 && i < iterations - 1) {
@@ -2648,6 +2715,11 @@ async function runComparisonMode(original, style, customPrompt, iterations, opti
2648
2715
  const actualModel = modelToUse || getDefaultModelForProvider(provider);
2649
2716
  const actualCost = calculateCost(totalInputTokens, totalOutputTokens, actualModel);
2650
2717
  spinner.stop(`โœจ ${formatProviderName(provider)} complete in ${(duration / 1000).toFixed(1)}s`);
2718
+ // Show completion message for multiple iterations
2719
+ if (iterations > 1) {
2720
+ console.log(theme.colors.success(`๐ŸŽ‰ ${formatProviderName(provider)}: All ${iterations} iterations complete!`));
2721
+ console.log("");
2722
+ }
2651
2723
  const resultData = {
2652
2724
  provider,
2653
2725
  result: optimized,
@@ -3069,8 +3141,8 @@ program
3069
3141
  console.log(theme.colors.dim("โ”€".repeat(80)));
3070
3142
  console.log("");
3071
3143
  }
3072
- // Show iteration output if verbose mode is enabled
3073
- if (options.verbose && iterations > 1) {
3144
+ // Show iteration output if verbose mode is enabled OR if --show-cost is used (so user can see what they're paying for)
3145
+ if ((options.verbose || options.showCost) && iterations > 1) {
3074
3146
  console.log("");
3075
3147
  console.log(theme.colors.primary(`๐Ÿ“ Iteration ${i}/${iterations} Output:`));
3076
3148
  console.log(theme.colors.dim("โ”€".repeat(80)));
@@ -3162,10 +3234,13 @@ program
3162
3234
  await outputResult(original, optimized, options);
3163
3235
  }
3164
3236
  catch (error) {
3237
+ const errorMessage = error instanceof Error ? error.message : String(error);
3238
+ await logError(error instanceof Error ? error : errorMessage, "optimize");
3165
3239
  console.error("");
3166
- console.error(theme.colors.error("โŒ Error: ") + theme.colors.warning(error instanceof Error ? error.message : String(error)));
3240
+ console.error(theme.colors.error("โŒ Error: ") + theme.colors.warning(errorMessage));
3241
+ console.error(theme.colors.dim(` Error logged to: ~/.megabuff/errors.log`));
3167
3242
  console.error("");
3168
- exitOrThrow();
3243
+ exitOrThrow(errorMessage, "optimize");
3169
3244
  }
3170
3245
  });
3171
3246
  // Analyze command - get detailed feedback on a prompt
@@ -3356,10 +3431,13 @@ program
3356
3431
  }
3357
3432
  }
3358
3433
  catch (error) {
3434
+ const errorMessage = error instanceof Error ? error.message : String(error);
3435
+ await logError(error instanceof Error ? error : errorMessage, "analyze");
3359
3436
  console.error("");
3360
- console.error(theme.colors.error("โŒ Error: ") + theme.colors.warning(error instanceof Error ? error.message : String(error)));
3437
+ console.error(theme.colors.error("โŒ Error: ") + theme.colors.warning(errorMessage));
3438
+ console.error(theme.colors.dim(` Error logged to: ~/.megabuff/errors.log`));
3361
3439
  console.error("");
3362
- exitOrThrow();
3440
+ exitOrThrow(errorMessage, "analyze");
3363
3441
  }
3364
3442
  });
3365
3443
  // Interactive shell command