diff --git a/packages/cli/README.md b/packages/cli/README.md index 5fde69f..e7ba354 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -127,6 +127,7 @@ leanmcp deploy # Deploy to LeanMCP Cloud leanmcp projects list # List your cloud projects leanmcp projects get # Get project details leanmcp projects delete # Delete a project +leanmcp send-feedback [msg] # Send feedback or bug reports ``` --- @@ -324,6 +325,27 @@ leanmcp projects delete leanmcp projects delete --force # Skip confirmation ``` +### send-feedback + +Send feedback, bug reports, or feature requests to the LeanMCP team: + +```bash +leanmcp send-feedback "I love this tool!" +``` + +**Options:** + +- `--anon`: Send anonymously +- `--include-logs`: Attach local logs for debugging + +```bash +# Interactive mode (multiline) +leanmcp send-feedback + +# With logs (great for bug reports) +leanmcp send-feedback "Deploy failed" --include-logs +``` + --- ## API Reference @@ -344,6 +366,7 @@ leanmcp projects delete --force # Skip confirmation | `projects list` | List cloud projects | `leanmcp projects list` | | `projects get ` | Get project details | `leanmcp projects get ` | | `projects delete ` | Delete project | `leanmcp projects delete ` | +| `send-feedback [msg]` | Send feedback to the team | `leanmcp send-feedback` | | `env list [folder]` | List environment variables | `leanmcp env list` | | `env set ` | Set environment variable | `leanmcp env set KEY=VALUE` | | `env get ` | Get environment variable value | `leanmcp env get KEY` | diff --git a/packages/cli/package.json b/packages/cli/package.json index 701a710..8fe4b85 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@leanmcp/cli", - "version": "0.5.8", + "version": "0.5.9", "description": "Command-line interface for scaffolding LeanMCP projects", "bin": { "leanmcp": "bin/leanmcp.js" diff --git a/packages/cli/src/commands/feedback.ts b/packages/cli/src/commands/feedback.ts index 48ea967..3e47b80 100644 --- a/packages/cli/src/commands/feedback.ts +++ b/packages/cli/src/commands/feedback.ts @@ -4,6 +4,7 @@ * Sends feedback to the LeanMCP API with support for authenticated and anonymous feedback. * Supports multi-line messages and optional log file attachments. */ +import { editor } from '@inquirer/prompts'; import ora from 'ora'; import fs from 'fs-extra'; import path from 'path'; @@ -265,16 +266,29 @@ export async function sendFeedbackCommand( // Validate message if (!feedbackMessage || feedbackMessage.trim().length === 0) { - logger.error('Feedback message cannot be empty.'); - logger.info('Usage examples:'); - logger.info(' leanmcp send-feedback "Your message"'); - logger.gray(' leanmcp send-feedback << EOF'); - logger.gray(' multi-line'); - logger.gray(' message'); - logger.gray(' EOF'); - logger.info(' leanmcp send-feedback --anon "Anonymous feedback"'); - logger.info(' leanmcp send-feedback "Issue with deploy" --include-logs'); - process.exit(1); + // If running in a TTY, prompt the user for input using an editor + if (process.stdin.isTTY) { + try { + feedbackMessage = await editor({ + message: 'Enter your feedback message (closes on save):', + }); + } catch (error) { + // Handle cancellation (Ctrl+C) + logger.warn('\nFeedback cancelled.'); + process.exit(0); + } + } + + // If still empty (e.g. non-TTY with no input, or user saved empty file), show error + if (!feedbackMessage || feedbackMessage.trim().length === 0) { + logger.error('Feedback message cannot be empty.'); + logger.info('Usage examples:'); + logger.info(' leanmcp send-feedback "Your message"'); + logger.info(' leanmcp send-feedback (interactive editor mode)'); + logger.info(' leanmcp send-feedback --anon "Anonymous feedback"'); + logger.info(' leanmcp send-feedback "Issue with deploy" --include-logs'); + process.exit(1); + } } if (feedbackMessage.length > 5000) {