@mutagent/cli 0.1.13 → 0.1.14

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,18 +1,23 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/bin/cli.ts", "../src/commands/auth.ts", "../src/lib/config.ts", "../src/lib/sdk-client.ts", "../src/lib/errors.ts", "../src/lib/output.ts", "../src/lib/browser-auth.ts", "../src/commands/login.ts", "../src/commands/prompts.ts", "../src/lib/ui-links.ts", "../src/lib/schema-helpers.ts", "../src/commands/traces.ts", "../src/commands/integrate.ts", "../src/lib/integrations/mastra.ts", "../src/lib/integrations/langchain.ts", "../src/lib/integrations/langgraph.ts", "../src/lib/integrations/vercel-ai.ts", "../src/lib/integrations/openai.ts", "../src/lib/integrations/claude-code.ts", "../src/lib/integrations/generic.ts", "../src/lib/integrations/registry.ts", "../src/commands/agents.ts", "../src/commands/config.ts", "../src/commands/playground.ts", "../src/commands/workspaces.ts", "../src/commands/providers.ts", "../src/commands/init.ts"],
3
+ "sources": ["../src/lib/config.ts", "../src/lib/errors.ts", "../src/lib/sdk-client.ts", "../src/bin/cli.ts", "../src/commands/auth.ts", "../src/lib/output.ts", "../src/lib/browser-auth.ts", "../src/lib/mutation-context.ts", "../src/commands/onboarding.ts", "../src/lib/explorer.ts", "../src/commands/login.ts", "../src/commands/prompts.ts", "../src/lib/ui-links.ts", "../src/lib/schema-helpers.ts", "../src/lib/eval-creator.ts", "../src/lib/scorecard.ts", "../src/commands/traces.ts", "../src/commands/integrate.ts", "../src/lib/integrations/mastra.ts", "../src/lib/integrations/langchain.ts", "../src/lib/integrations/langgraph.ts", "../src/lib/integrations/vercel-ai.ts", "../src/lib/integrations/openai.ts", "../src/lib/integrations/claude-code.ts", "../src/lib/integrations/generic.ts", "../src/lib/integrations/registry.ts", "../src/commands/agents.ts", "../src/commands/config.ts", "../src/commands/playground.ts", "../src/commands/workspaces.ts", "../src/commands/providers.ts", "../src/commands/init.ts", "../src/commands/explore.ts", "../src/commands/skills.ts"],
4
4
  "sourcesContent": [
5
- "#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { createAuthCommand } from '../commands/auth.js';\nimport { createLoginCommand } from '../commands/login.js';\nimport { createPromptsCommand } from '../commands/prompts.js';\nimport { createTracesCommand } from '../commands/traces.js';\nimport { createIntegrateCommand } from '../commands/integrate.js';\nimport { createAgentsCommand } from '../commands/agents.js';\nimport { createConfigCommand } from '../commands/config.js';\nimport { createPlaygroundCommand } from '../commands/playground.js';\nimport { createWorkspacesCommand } from '../commands/workspaces.js';\nimport { createProvidersCommand } from '../commands/providers.js';\nimport { createInitCommand } from '../commands/init.js';\nimport { hasCredentials } from '../lib/config.js';\nimport { hasRcConfig } from '../commands/init.js';\n\n/**\n * CLI Context Interface\n * Passed to all subcommands for shared state\n */\nexport interface CliContext {\n /** Output results as JSON */\n json: boolean;\n /** MutagenT API key */\n apiKey?: string;\n /** MutagenT server endpoint */\n endpoint?: string;\n /** Enable verbose logging */\n verbose: boolean;\n}\n\n// Read version from package.json\nlet cliVersion = '0.1.1';\ntry {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPath = join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version?: string };\n cliVersion = pkg.version ?? cliVersion;\n} catch {\n // Fallback to hardcoded version\n}\n\nconst program = new Command();\n\nprogram\n .name('mutagent')\n .description(`MutagenT CLI - AI-native prompt optimization platform\n\n Documentation: https://docs.mutagent.io/cli\n Dashboard: https://app.mutagent.io`)\n .version(cliVersion, '-v, --version', 'Display the version number')\n .option('--json', 'Output results as JSON (for AI agents)')\n .option('--api-key <key>', 'MutagenT API key')\n .option('--endpoint <url>', 'MutagenT server endpoint')\n .option('--non-interactive', 'Disable interactive prompts (for CI/AI agents)')\n .configureHelp({\n sortSubcommands: true,\n showGlobalOptions: true,\n });\n\n// Add non-interactive mode instructions for CI/CD and coding agents\nprogram.addHelpText('after', `\n${chalk.yellow('Non-Interactive Mode (CI/CD & Coding Agents):')}\n Export your API key: ${chalk.green('export MUTAGENT_API_KEY=mt_your_key_here')}\n Or pass inline: ${chalk.green('mutagent prompts list --api-key mt_your_key')}\n Machine-readable output: ${chalk.green('mutagent prompts list --json')}\n Disable prompts: ${chalk.green('mutagent prompts list --non-interactive')}\n Set default workspace: ${chalk.green('mutagent config set workspace <workspace-id>')}\n Set default org: ${chalk.green('mutagent config set org <org-id>')}\n`);\n\n// Add workflow guidance for common user journeys\nprogram.addHelpText('after', `\n${chalk.yellow('Workflows:')}\n ${chalk.bold('Evaluate → Optimize Loop:')}\n 1. mutagent prompts create --name \"...\" --raw-file prompt.txt\n 2. mutagent prompts dataset add <prompt-id> --name \"...\" --file data.json\n 3. mutagent prompts evaluation create <prompt-id> --name \"...\" --file criteria.json\n 4. mutagent prompts optimize start <prompt-id> --dataset <id> --max-iterations 3\n\n ${chalk.bold('Quick Test:')}\n mutagent playground run <prompt-id> --input '{\"key\":\"value\"}'\n\n ${chalk.bold('Prerequisites for Optimization:')}\n ${chalk.green('\\u2713')} Prompt with input/output parameters\n ${chalk.green('\\u2713')} Dataset with items (input + expectedOutput pairs)\n ${chalk.green('\\u2713')} Evaluation with criteria (field-level, input/output focused)\n ${chalk.dim('\\u2022')} LLM provider ${chalk.dim('(only when server uses external providers)')}\n`);\n\n// Add AI agent integration hint — top-level only (using 'after' instead of 'afterAll')\nprogram.addHelpText('after', `\n${chalk.cyan('┌─ AI AGENT INTEGRATION HINT ────────────────────────────────────────────────┐')}\n${chalk.cyan('│')} ${chalk.cyan('│')}\n${chalk.cyan('│')} Frameworks: mastra, langchain, langgraph, vercel-ai, claude-code, generic ${chalk.cyan('│')}\n${chalk.cyan('│')} ${chalk.cyan('│')}\n${chalk.cyan('│')} Get integration guide: mutagent integrate <framework> ${chalk.cyan('│')}\n${chalk.cyan('│')} Verify setup: mutagent integrate <framework> --verify ${chalk.cyan('│')}\n${chalk.cyan('│')} Use --json for AI parsing: mutagent <command> --json ${chalk.cyan('│')}\n${chalk.cyan('│')} ${chalk.cyan('│')}\n${chalk.cyan('└────────────────────────────────────────────────────────────────────────────┘')}\n${!hasCredentials() ? chalk.yellow('\\n Warning: Not authenticated. Run: mutagent auth login --browser\\n') : ''}${!hasRcConfig() ? chalk.green('\\n Get started: mutagent init\\n') : ''}`);\n\n// Propagate global options to env vars before subcommands run\n// This ensures --api-key, --endpoint, and --non-interactive flags are picked up\nprogram.hook('preAction', (thisCommand) => {\n const globalOpts: { apiKey?: string; endpoint?: string; nonInteractive?: boolean } = thisCommand.optsWithGlobals();\n if (globalOpts.apiKey && !process.env.MUTAGENT_API_KEY) {\n process.env.MUTAGENT_API_KEY = globalOpts.apiKey;\n }\n if (globalOpts.endpoint && !process.env.MUTAGENT_ENDPOINT) {\n process.env.MUTAGENT_ENDPOINT = globalOpts.endpoint;\n }\n if (globalOpts.nonInteractive || process.env.CI === 'true' || !process.stdin.isTTY) {\n process.env.MUTAGENT_NON_INTERACTIVE = 'true';\n }\n});\n\n// Add commands\nprogram.addCommand(createInitCommand()); // Init wizard\nprogram.addCommand(createLoginCommand()); // Top-level login\nprogram.addCommand(createAuthCommand());\nprogram.addCommand(createConfigCommand());\nprogram.addCommand(createPromptsCommand());\nprogram.addCommand(createTracesCommand());\nprogram.addCommand(createIntegrateCommand());\nprogram.addCommand(createAgentsCommand());\nprogram.addCommand(createPlaygroundCommand());\nprogram.addCommand(createWorkspacesCommand());\nprogram.addCommand(createProvidersCommand());\n\n// Parse arguments\nprogram.parse();\n",
6
- "import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { clearCredentials, getApiKey, loadConfig, saveFullCredentials, hasCredentials } from '../lib/config.js';\nimport { validateApiKey, fetchOrganizations, fetchWorkspaces } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError } from '../lib/errors.js';\nimport { performBrowserAuth, BrowserAuthError } from '../lib/browser-auth.js';\n\ninterface LoginOptions {\n apiKey?: string;\n endpoint: string;\n browser?: boolean;\n nonInteractive?: boolean;\n}\n\ninterface LoginAnswers {\n apiKey: string;\n endpoint: string;\n}\n\ninterface AuthMethodAnswer {\n method: 'browser' | 'apiKey';\n}\n\nexport function createAuthCommand(): Command {\n const auth = new Command('auth')\n .description('Authenticate with MutagenT platform')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent auth login\n ${chalk.dim('$')} mutagent auth login --browser\n ${chalk.dim('$')} mutagent auth login --api-key <key>\n ${chalk.dim('$')} mutagent auth status\n ${chalk.dim('$')} mutagent auth logout\n `);\n\n // Login command\n auth\n .command('login')\n .description('Authenticate and store API key')\n .option('--api-key <key>', 'API key (non-interactive)')\n .option('--browser', 'Force browser-based authentication')\n .option('--non-interactive', 'Disable interactive prompts (auto-selects browser auth)')\n .option('--endpoint <url>', 'API endpoint', 'https://api.mutagent.io')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent auth login ${chalk.dim('# Interactive (choose method)')}\n ${chalk.dim('$')} mutagent auth login --browser ${chalk.dim('# Browser OAuth flow')}\n ${chalk.dim('$')} mutagent auth login --api-key mg_live_xxx ${chalk.dim('# Direct API key (CI/CD)')}\n ${chalk.dim('$')} mutagent auth login --non-interactive ${chalk.dim('# Auto browser flow (AI agents)')}\n\nEnvironment Variables:\n MUTAGENT_API_KEY API key (skips login entirely)\n MUTAGENT_ENDPOINT Custom API endpoint\n MUTAGENT_NON_INTERACTIVE=true Non-interactive mode (auto browser auth)\n CI=true Enables non-interactive mode\n `)\n .action(async (options: LoginOptions) => {\n const isJson = getJsonFlag(auth);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let apiKey: string | undefined = options.apiKey ?? process.env.MUTAGENT_API_KEY;\n let endpoint: string = process.env.MUTAGENT_ENDPOINT ?? options.endpoint;\n let workspaceName: string | undefined;\n let organizationName: string | undefined;\n\n // If --api-key provided, use direct flow\n if (apiKey) {\n // Validate API key\n output.info('Validating API key...');\n const isValid = await validateApiKey(apiKey, endpoint);\n\n if (!isValid) {\n throw new MutagentError(\n 'INVALID_API_KEY',\n 'Invalid API key or endpoint',\n 'Check your API key and try again'\n );\n }\n\n // Fetch org/workspace context for the API key\n const orgs = await fetchOrganizations(apiKey, endpoint);\n let orgId: string | undefined;\n let wsId: string | undefined;\n\n if (orgs.length >= 1 && orgs[0]) {\n orgId = orgs[0].id;\n const workspaces = await fetchWorkspaces(apiKey, endpoint, orgId);\n const defaultWs = workspaces.find(w => w.isDefault);\n wsId = defaultWs?.id ?? workspaces[0]?.id;\n }\n\n // Save full credentials with workspace/org context\n saveFullCredentials({\n apiKey,\n endpoint,\n workspaceId: wsId,\n organizationId: orgId,\n });\n\n output.success('Authenticated successfully');\n if (!isJson) {\n output.info(`Endpoint: ${endpoint}`);\n }\n return;\n }\n\n // Detect non-interactive environment\n const isNonInteractive =\n options.nonInteractive === true ||\n process.env.MUTAGENT_NON_INTERACTIVE === 'true' ||\n process.env.CI === 'true' ||\n !process.stdin.isTTY;\n\n // In JSON-only mode without API key, we cannot proceed at all\n if (isJson && !options.browser && isNonInteractive) {\n throw new MutagentError(\n 'INTERACTIVE_REQUIRED',\n 'No API key provided. Use --api-key flag, set MUTAGENT_API_KEY env var, or add --browser for browser auth.',\n 'Run: mutagent auth login --api-key <key> or mutagent auth login --browser --non-interactive'\n );\n }\n\n // Show welcome message for first-time users (only in interactive mode)\n if (!isNonInteractive && !hasCredentials()) {\n console.log('\\n' + chalk.bold.cyan(' Welcome to MutagenT CLI!') + '\\n');\n console.log(' No credentials found. Please authenticate to continue.\\n');\n }\n\n // Determine auth method\n let useLocalBrowserAuth = options.browser === true;\n\n // In non-interactive mode, auto-select browser auth (skip the prompt menu)\n if (!useLocalBrowserAuth && isNonInteractive) {\n output.info('Non-interactive environment detected. Using browser authentication.');\n useLocalBrowserAuth = true;\n }\n\n if (!useLocalBrowserAuth && !options.apiKey) {\n // Ask user which method to use (interactive only)\n const methodAnswer = await inquirer.prompt<AuthMethodAnswer>([\n {\n type: 'list',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n name: 'Login (opens browser)',\n value: 'browser',\n },\n {\n name: 'API Key (paste existing key)',\n value: 'apiKey',\n },\n ],\n },\n ]);\n\n useLocalBrowserAuth = methodAnswer.method === 'browser';\n }\n\n if (useLocalBrowserAuth) {\n // Browser authentication flow\n const spinner = ora({\n text: 'Opening browser for authentication...',\n spinner: 'dots',\n });\n\n try {\n spinner.start();\n\n const result = await performBrowserAuth(\n {\n endpoint,\n timeout: 300000, // 5 minutes\n pollInterval: 2000, // 2 seconds\n },\n (message) => {\n spinner.text = message;\n }\n );\n\n spinner.succeed('Authenticated successfully!');\n\n // Save full credentials including workspace info\n saveFullCredentials({\n apiKey: result.apiKey,\n endpoint,\n workspaceId: result.workspaceId,\n organizationId: result.organizationId,\n expiresAt: result.expiresAt,\n });\n\n // Store for display\n apiKey = result.apiKey;\n workspaceName = result.workspaceName;\n organizationName = result.organizationName;\n\n console.log('');\n output.info('Workspace: ' + workspaceName);\n output.info('Organization: ' + organizationName);\n output.info('Endpoint: ' + endpoint);\n\n } catch (error) {\n spinner.fail('Authentication failed');\n\n if (error instanceof BrowserAuthError) {\n throw new MutagentError(\n error.code,\n error.message,\n error.getSuggestion()\n );\n }\n throw error;\n }\n } else {\n // API key paste flow\n const answers = await inquirer.prompt<LoginAnswers>([\n {\n type: 'input',\n name: 'endpoint',\n message: 'MutagenT endpoint:',\n default: endpoint,\n },\n {\n type: 'password',\n name: 'apiKey',\n message: 'API Key:',\n mask: '*',\n validate: (input: string): boolean | string => input.length > 0 || 'API key is required',\n },\n ]);\n\n apiKey = answers.apiKey;\n endpoint = answers.endpoint;\n\n // Validate API key\n output.info('Validating API key...');\n const isValid = await validateApiKey(apiKey, endpoint);\n\n if (!isValid) {\n throw new MutagentError(\n 'INVALID_API_KEY',\n 'Invalid API key or endpoint',\n 'Check your API key and try again'\n );\n }\n\n // Fetch organizations to get workspace/org context\n let selectedOrgId: string | undefined;\n let selectedOrgName: string | undefined;\n let selectedWsId: string | undefined;\n let selectedWsName: string | undefined;\n\n const orgs = await fetchOrganizations(apiKey, endpoint);\n if (orgs.length === 1 && orgs[0]) {\n // Auto-select sole org\n selectedOrgId = orgs[0].id;\n selectedOrgName = orgs[0].name;\n } else if (orgs.length > 1) {\n const orgAnswer = await inquirer.prompt<{ orgId: string }>([{\n type: 'list',\n name: 'orgId',\n message: 'Select organization:',\n choices: orgs.map(o => ({ name: o.name, value: o.id })),\n }]);\n selectedOrgId = orgAnswer.orgId;\n selectedOrgName = orgs.find(o => o.id === selectedOrgId)?.name;\n }\n\n if (selectedOrgId) {\n const workspaces = await fetchWorkspaces(apiKey, endpoint, selectedOrgId);\n const defaultWs = workspaces.find(w => w.isDefault);\n if (workspaces.length === 1 && workspaces[0]) {\n selectedWsId = workspaces[0].id;\n selectedWsName = workspaces[0].name;\n } else if (defaultWs) {\n selectedWsId = defaultWs.id;\n selectedWsName = defaultWs.name;\n } else if (workspaces.length > 1) {\n const wsAnswer = await inquirer.prompt<{ wsId: string }>([{\n type: 'list',\n name: 'wsId',\n message: 'Select workspace:',\n choices: workspaces.map(w => ({ name: w.name + (w.isDefault ? ' (default)' : ''), value: w.id })),\n }]);\n selectedWsId = wsAnswer.wsId;\n selectedWsName = workspaces.find(w => w.id === selectedWsId)?.name;\n }\n }\n\n // Save full credentials with workspace/org context\n saveFullCredentials({\n apiKey,\n endpoint,\n workspaceId: selectedWsId,\n organizationId: selectedOrgId,\n });\n\n output.success('Authenticated successfully');\n if (selectedOrgName) output.info('Organization: ' + selectedOrgName);\n if (selectedWsName) output.info('Workspace: ' + selectedWsName);\n output.info('Endpoint: ' + endpoint);\n }\n } catch (error) {\n if (error instanceof MutagentError) {\n output.error(error.message);\n process.exit(error.exitCode);\n }\n throw error;\n }\n });\n\n // Status command\n auth\n .command('status')\n .description('Check authentication status')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent auth status\n ${chalk.dim('$')} mutagent auth status --json\n `)\n .action(async () => {\n const isJson = getJsonFlag(auth);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n const apiKey = getApiKey();\n const config = loadConfig();\n const endpoint = config.endpoint ?? 'https://api.mutagent.io';\n\n if (!apiKey) {\n if (isJson) {\n output.output({ authenticated: false, message: 'Not authenticated' });\n } else {\n output.error('Not authenticated');\n output.info('Run: mutagent auth login');\n }\n process.exit(0);\n }\n\n // Validate the key\n const isValid = await validateApiKey(apiKey, endpoint);\n\n if (isJson) {\n const statusResult: Record<string, unknown> = {\n authenticated: isValid,\n endpoint,\n keyPrefix: `${apiKey.slice(0, 8)}...`,\n defaultWorkspace: config.defaultWorkspace,\n defaultOrganization: config.defaultOrganization,\n };\n if (!isValid) {\n statusResult.message = 'Authentication invalid — run `mutagent auth login --browser`';\n statusResult.remediation = {\n interactive: 'mutagent auth login --browser',\n nonInteractive: 'export MUTAGENT_API_KEY=<your-key>',\n ciCd: 'mutagent auth login --api-key <key>',\n };\n }\n output.output(statusResult);\n } else {\n if (isValid) {\n output.success('Authenticated');\n output.info(`Endpoint: ${endpoint}`);\n output.info(`Key: ${apiKey.slice(0, 8)}...`);\n if (config.defaultWorkspace) {\n output.info(`Workspace: ${config.defaultWorkspace}`);\n }\n if (config.defaultOrganization) {\n output.info(`Organization: ${config.defaultOrganization}`);\n }\n } else {\n output.error('Authentication invalid — run `mutagent auth login --browser`');\n console.error('');\n console.error('Authentication required. Options:');\n console.error(' Interactive: mutagent auth login --browser');\n console.error(' Non-interactive: export MUTAGENT_API_KEY=<your-key>');\n console.error(' CI/CD: mutagent auth login --api-key <key>');\n }\n }\n });\n\n // Logout command\n auth\n .command('logout')\n .description('Clear stored credentials')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent auth logout\n `)\n .action(() => {\n const isJson = getJsonFlag(auth);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n clearCredentials();\n output.success('Logged out successfully');\n });\n\n return auth;\n}\n",
7
5
  "import { cosmiconfigSync } from 'cosmiconfig';\nimport { z } from 'zod';\nimport { homedir } from 'os';\nimport { join } from 'path';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport type { Config } from '../types/index.js';\n\nconst configSchema = z.object({\n apiKey: z.string().optional(),\n endpoint: z.string().default('https://api.mutagent.io'),\n format: z.enum(['table', 'json']).default('table'),\n timeout: z.number().default(30000),\n defaultWorkspace: z.string().optional(),\n defaultOrganization: z.string().optional(),\n});\n\nconst credentialsSchema = z.object({\n apiKey: z.string().optional(),\n endpoint: z.string().optional(),\n defaultWorkspace: z.string().optional(),\n defaultOrganization: z.string().optional(),\n expiresAt: z.string().optional(),\n}).loose();\n\nexport interface FullCredentials {\n apiKey: string;\n endpoint?: string;\n workspaceId?: string;\n organizationId?: string;\n expiresAt?: string;\n}\n\nconst CREDENTIALS_DIR = join(homedir(), '.config', 'mutagent');\nconst CREDENTIALS_FILE = join(CREDENTIALS_DIR, 'credentials.json');\n\nfunction parseJsonSafe<T>(content: string, schema: z.ZodType<T>): T | null {\n try {\n const parsed: unknown = JSON.parse(content);\n return schema.parse(parsed);\n } catch {\n return null;\n }\n}\n\nexport function loadConfig(): Config {\n // Load from cosmiconfig (rc files)\n const explorer = cosmiconfigSync('mutagent');\n const result = explorer.search();\n\n // Safely extract config from cosmiconfig result\n const rcConfig = result?.config as Record<string, unknown> | undefined;\n\n // Load from credentials file\n let credentials: z.infer<typeof credentialsSchema> | null = null;\n if (existsSync(CREDENTIALS_FILE)) {\n credentials = parseJsonSafe(readFileSync(CREDENTIALS_FILE, 'utf-8'), credentialsSchema);\n }\n\n // Merge configs: ENV > credentials > rc files > defaults\n const merged = {\n providers: {},\n environment: 'production',\n ...rcConfig,\n ...credentials,\n apiKey: process.env.MUTAGENT_API_KEY ?? credentials?.apiKey ?? (rcConfig?.apiKey as string | undefined),\n endpoint: process.env.MUTAGENT_ENDPOINT ?? credentials?.endpoint ?? (rcConfig?.endpoint as string | undefined),\n defaultWorkspace: credentials?.defaultWorkspace ?? (rcConfig?.defaultWorkspace as string | undefined),\n defaultOrganization: credentials?.defaultOrganization ?? (rcConfig?.defaultOrganization as string | undefined),\n };\n\n return configSchema.parse(merged) as Config;\n}\n\nexport function saveCredentials(apiKey: string, endpoint?: string): void {\n if (!existsSync(CREDENTIALS_DIR)) {\n mkdirSync(CREDENTIALS_DIR, { recursive: true });\n }\n\n const config = loadConfig();\n const credentials = {\n apiKey,\n endpoint: endpoint ?? config.endpoint,\n };\n\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2));\n}\n\n/**\n * Save full credentials including workspace and organization info\n * Used by browser auth flow which returns complete credential set\n */\nexport function saveFullCredentials(creds: FullCredentials): void {\n if (!existsSync(CREDENTIALS_DIR)) {\n mkdirSync(CREDENTIALS_DIR, { recursive: true });\n }\n\n // Load existing credentials to preserve any custom settings\n let existingCredentials: Record<string, unknown> = {};\n if (existsSync(CREDENTIALS_FILE)) {\n try {\n existingCredentials = JSON.parse(readFileSync(CREDENTIALS_FILE, 'utf-8')) as Record<string, unknown>;\n } catch {\n // Ignore parse errors, start fresh\n }\n }\n\n const credentials = {\n ...existingCredentials,\n apiKey: creds.apiKey,\n endpoint: creds.endpoint ?? existingCredentials.endpoint ?? 'https://api.mutagent.io',\n defaultWorkspace: creds.workspaceId ?? existingCredentials.defaultWorkspace,\n defaultOrganization: creds.organizationId ?? existingCredentials.defaultOrganization,\n expiresAt: creds.expiresAt,\n };\n\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2));\n}\n\nexport function clearCredentials(): void {\n if (existsSync(CREDENTIALS_FILE)) {\n writeFileSync(CREDENTIALS_FILE, JSON.stringify({}));\n }\n}\n\nexport function hasCredentials(): boolean {\n if (process.env.MUTAGENT_API_KEY) return true;\n if (!existsSync(CREDENTIALS_FILE)) return false;\n\n const credentials = parseJsonSafe(readFileSync(CREDENTIALS_FILE, 'utf-8'), credentialsSchema);\n return credentials?.apiKey !== undefined && credentials.apiKey !== '';\n}\n\nexport function getApiKey(): string | undefined {\n return process.env.MUTAGENT_API_KEY ?? loadConfig().apiKey;\n}\n\nexport function setDefaultWorkspace(workspaceId: string): void {\n if (!existsSync(CREDENTIALS_DIR)) {\n mkdirSync(CREDENTIALS_DIR, { recursive: true });\n }\n\n let existingCredentials: Record<string, unknown> = {};\n if (existsSync(CREDENTIALS_FILE)) {\n try {\n existingCredentials = JSON.parse(readFileSync(CREDENTIALS_FILE, 'utf-8')) as Record<string, unknown>;\n } catch {\n // Ignore parse errors, start fresh\n }\n }\n\n const updated = {\n ...existingCredentials,\n defaultWorkspace: workspaceId,\n };\n\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(updated, null, 2));\n}\n\nexport function setDefaultOrganization(organizationId: string): void {\n if (!existsSync(CREDENTIALS_DIR)) {\n mkdirSync(CREDENTIALS_DIR, { recursive: true });\n }\n\n let existingCredentials: Record<string, unknown> = {};\n if (existsSync(CREDENTIALS_FILE)) {\n try {\n existingCredentials = JSON.parse(readFileSync(CREDENTIALS_FILE, 'utf-8')) as Record<string, unknown>;\n } catch {\n // Ignore parse errors, start fresh\n }\n }\n\n const updated = {\n ...existingCredentials,\n defaultOrganization: organizationId,\n };\n\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(updated, null, 2));\n}\n",
8
- "// SDK Client wrapper for MutagenT API\n/// <reference lib=\"dom\" />\nimport { Mutagent, HTTPClient } from '@mutagent/sdk';\nimport type { Prompt, Dataset, Evaluation, OptimizeJob as OptimizationJob, OptimizeStatus, Agent, CreateAgentInput, UpdateAgentInput, PromptExecutionResult, Conversation, CreateConversationInput, Message, Workspace, Provider, ProviderTestResult } from '../types/index.js';\nimport { ApiError, AuthenticationError, MutagentError, WorkspaceContextError } from './errors.js';\nimport { getApiKey, loadConfig } from './config.js';\n\n/**\n * SDK Client Wrapper\n *\n * This class wraps the real @mutagent/sdk to provide a consistent interface\n * for CLI commands. It maps the SDK's method signatures to the interface\n * expected by the CLI.\n */\nclass SDKClientWrapper {\n private sdk: Mutagent;\n private apiKey: string;\n private endpoint: string;\n private workspaceId?: string;\n private organizationId?: string;\n\n constructor(opts: { bearerAuth: string; serverURL?: string; workspaceId?: string; organizationId?: string }) {\n this.apiKey = opts.bearerAuth;\n this.endpoint = opts.serverURL ?? 'http://localhost:3003';\n this.workspaceId = opts.workspaceId;\n this.organizationId = opts.organizationId;\n\n // Create HTTP client with tenancy header injection\n const httpClient = new HTTPClient();\n httpClient.addHook(\"beforeRequest\", (req) => {\n if (this.workspaceId) req.headers.set(\"x-workspace-id\", this.workspaceId);\n if (this.organizationId) req.headers.set(\"x-organization-id\", this.organizationId);\n return req;\n });\n\n this.sdk = new Mutagent({\n security: {\n apiKey: this.apiKey,\n },\n serverURL: this.endpoint,\n httpClient,\n });\n }\n\n /**\n * Helper to handle SDK errors and convert them to CLI errors.\n * Masks Speakeasy SDK internal errors (SDKValidationError, SDKError, etc.)\n * so users see clean, actionable messages instead of raw stack traces.\n */\n private handleError(error: unknown): never {\n if (error && typeof error === 'object') {\n const err = error as { statusCode?: number; message?: string; body?: string; name?: string; rawValue?: unknown; rawMessage?: string };\n\n if (err.statusCode === 401) {\n throw new AuthenticationError();\n }\n if (err.statusCode === 403) {\n throw new ApiError(403, err.message ?? err.body ?? 'Access denied');\n }\n\n // Detect workspace/org context errors from the server\n const errMessage = (err.message ?? err.body ?? '').toLowerCase();\n if (\n errMessage.includes('workspace') && (errMessage.includes('missing') || errMessage.includes('required')) ||\n errMessage.includes('x-workspace-id')\n ) {\n throw new WorkspaceContextError(err.message ?? err.body ?? undefined);\n }\n\n if (err.statusCode) {\n throw new ApiError(err.statusCode, err.message ?? err.body ?? 'Unknown error');\n }\n\n // Catch Speakeasy SDK internal errors (SDKValidationError, SDKError, etc.)\n if (\n err.name === 'SDKValidationError' ||\n err.name === 'SDKError' ||\n err.rawValue !== undefined ||\n err.rawMessage !== undefined\n ) {\n const friendlyMessage = err.rawMessage ?? err.message ?? 'Request failed';\n throw new MutagentError(\n 'REQUEST_FAILED',\n friendlyMessage,\n 'Check your input and try again. Run the command with --help for usage details.'\n );\n }\n }\n\n // Catch network errors (fetch failures, DNS resolution, etc.)\n if (error instanceof TypeError && typeof error.message === 'string') {\n if (error.message.includes('fetch') || error.message.includes('network') || error.message.includes('ECONNREFUSED')) {\n throw new MutagentError(\n 'NETWORK_ERROR',\n 'Unable to connect to the MutagenT server',\n 'Check your internet connection and verify the server URL with: mutagent config list'\n );\n }\n }\n\n // Last resort: wrap unknown errors in MutagentError\n if (error instanceof Error) {\n throw new MutagentError(\n 'REQUEST_FAILED',\n error.message,\n 'Run the command with --help for usage details'\n );\n }\n\n throw new MutagentError(\n 'UNKNOWN_ERROR',\n 'An unexpected error occurred',\n 'Run the command with --help for usage details'\n );\n }\n\n /**\n * Helper for direct HTTP requests (for endpoints not yet in SDK)\n */\n private async request<T>(path: string, options?: RequestInit): Promise<T> {\n // Convert Headers object to plain object if needed\n const optHeaders = options?.headers;\n let extraHeaders: Record<string, string> = {};\n if (optHeaders instanceof Headers) {\n optHeaders.forEach((value, key) => {\n extraHeaders[key] = value;\n });\n } else if (optHeaders) {\n extraHeaders = optHeaders as Record<string, string>;\n }\n\n // Build tenancy headers from stored config\n const tenancyHeaders: Record<string, string> = {};\n if (this.workspaceId) tenancyHeaders['x-workspace-id'] = this.workspaceId;\n if (this.organizationId) tenancyHeaders['x-organization-id'] = this.organizationId;\n\n const response = await fetch(`${this.endpoint}${path}`, {\n ...options,\n headers: {\n 'x-api-key': this.apiKey,\n 'Content-Type': 'application/json',\n ...tenancyHeaders,\n ...extraHeaders,\n },\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new AuthenticationError();\n }\n if (response.status === 403) {\n throw new ApiError(403, await response.text() || 'Access denied');\n }\n const error = await response.text();\n // Detect workspace context errors from the server response body\n const errorLower = error.toLowerCase();\n if (\n errorLower.includes('workspace') && (errorLower.includes('missing') || errorLower.includes('required')) ||\n errorLower.includes('x-workspace-id')\n ) {\n throw new WorkspaceContextError(error);\n }\n throw new ApiError(response.status, error);\n }\n\n return response.json() as Promise<T>;\n }\n\n // =========================================================================\n // PROMPTS\n // =========================================================================\n\n async listPrompts(): Promise<Prompt[]> {\n try {\n const response = await this.sdk.prompt.listPrompts();\n return response.result.data as Prompt[];\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getPrompt(id: string): Promise<Prompt> {\n try {\n const response = await this.sdk.prompt.getPrompt({ id: parseInt(id, 10) });\n return response as Prompt;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async createPrompt(data: Partial<Prompt>): Promise<Prompt> {\n try {\n const response = await this.sdk.prompt.createPrompt({\n name: data.name ?? '',\n description: data.description ?? undefined,\n version: data.version ?? undefined,\n isLatest: data.isLatest ?? undefined,\n systemPrompt: data.systemPrompt ?? undefined,\n humanPrompt: data.humanPrompt ?? undefined,\n rawPrompt: data.rawPrompt ?? undefined,\n inputSchema: data.inputSchema ?? undefined,\n outputSchema: data.outputSchema ?? undefined,\n metadata: data.metadata ?? undefined,\n tags: data.tags ?? undefined,\n });\n return response as Prompt;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async updatePrompt(id: string, data: Partial<Prompt>): Promise<Prompt> {\n try {\n const body: Record<string, unknown> = {\n description: data.description ?? undefined,\n isLatest: data.isLatest ?? undefined,\n systemPrompt: data.systemPrompt ?? undefined,\n humanPrompt: data.humanPrompt ?? undefined,\n rawPrompt: data.rawPrompt ?? undefined,\n outputSchema: data.outputSchema as Record<string, never> | undefined,\n metadata: data.metadata as Record<string, never> | undefined,\n tags: data.tags ?? undefined,\n };\n if (data.name !== undefined) {\n body.name = data.name;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- SDK type missing `name` until regenerated\n const updateArgs = { id: parseInt(id, 10), body } as any;\n const response = await this.sdk.prompt.updatePrompt(updateArgs);\n return response as Prompt;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async deletePrompt(id: string): Promise<void> {\n try {\n await this.sdk.prompt.deletePrompt({ id: parseInt(id, 10) });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // DATASETS (scoped to prompt)\n // Using direct fetch as SDK types don't match CLI expectations\n // =========================================================================\n\n async listDatasets(promptId: string): Promise<Dataset[]> {\n try {\n const response = await this.request<Dataset[] | { data: Dataset[] }>(`/api/prompt/${promptId}/datasets`);\n return Array.isArray(response) ? response : response.data;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async addDataset(promptId: string, fileContent: string, name?: string): Promise<Dataset & { itemCount?: number }> {\n try {\n // Step 1: Parse content to extract items\n let parsed: unknown;\n try {\n parsed = JSON.parse(fileContent);\n } catch {\n // If not parseable as JSON (e.g., CSV), no items to extract\n parsed = null;\n }\n\n // Determine dataset name and items\n let datasetName = name ?? `Dataset ${new Date().toISOString().slice(0, 16)}`;\n let items: Record<string, unknown>[] | undefined;\n\n if (\n parsed !== null &&\n !Array.isArray(parsed) &&\n typeof parsed === 'object' &&\n 'name' in (parsed as Record<string, unknown>)\n ) {\n // Object with 'name' field: treat as dataset metadata (may contain items)\n const meta = parsed as Record<string, unknown>;\n datasetName = (meta.name as string) ?? datasetName;\n if (Array.isArray(meta.items)) {\n items = meta.items as Record<string, unknown>[];\n }\n } else if (Array.isArray(parsed)) {\n items = parsed as Record<string, unknown>[];\n }\n\n // Step 2: Create dataset metadata via POST /api/prompt/:id/datasets\n const dataset = await this.request<Dataset>(`/api/prompt/${promptId}/datasets`, {\n method: 'POST',\n body: JSON.stringify({\n name: datasetName,\n }),\n });\n\n // Step 3: Bulk upload items if any via POST /api/prompts/datasets/:id/items/bulk\n let itemCount = 0;\n if (items && items.length > 0) {\n // Map items to the backend schema: { input, expectedOutput, ... }\n const mappedItems = items.map((item) => ({\n input: item.input ?? item,\n expectedOutput: item.expectedOutput ?? item.expected_output ?? undefined,\n name: item.name as string | undefined,\n userFeedback: item.userFeedback as string | undefined,\n systemFeedback: item.systemFeedback as string | undefined,\n labels: item.labels as string[] | undefined,\n metadata: item.metadata as Record<string, unknown> | undefined,\n }));\n\n await this.request(`/api/prompts/datasets/${String(dataset.id)}/items/bulk`, {\n method: 'POST',\n body: JSON.stringify({ items: mappedItems }),\n });\n itemCount = mappedItems.length;\n }\n\n return { ...dataset, itemCount };\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async removeDataset(_promptId: string, datasetId: string): Promise<void> {\n try {\n await this.request(`/api/prompts/datasets/${datasetId}`, { method: 'DELETE' });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // EVALUATIONS - Using direct fetch for consistent interface\n // =========================================================================\n\n async listEvaluations(promptId: string): Promise<Evaluation[]> {\n try {\n const response = await this.request<{ data: Evaluation[] }>(`/api/prompts/evaluations?promptId=${promptId}`);\n return response.data;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async createEvaluation(promptId: string, data: {\n name: string;\n description?: string;\n datasetId?: number;\n evalConfig?: Record<string, unknown>;\n llmConfig?: Record<string, unknown>;\n tags?: string[];\n metadata?: Record<string, unknown>;\n }): Promise<Evaluation> {\n try {\n return await this.request<Evaluation>('/api/prompts/evaluations', {\n method: 'POST',\n body: JSON.stringify({\n promptId: parseInt(promptId, 10),\n datasetId: data.datasetId,\n name: data.name,\n description: data.description,\n evalConfig: data.evalConfig,\n llmConfig: data.llmConfig,\n tags: data.tags,\n metadata: data.metadata,\n }),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getEvaluationResults(runId: string): Promise<Evaluation> {\n try {\n return await this.request<Evaluation>(`/api/prompts/evaluations/${runId}/result`);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // OPTIMIZATIONS - Using direct fetch for consistent interface\n // =========================================================================\n\n async startOptimization(promptId: string, datasetId: string, config?: {\n maxIterations?: number;\n targetScore?: number;\n patience?: number;\n model?: string;\n evalModel?: string;\n }): Promise<OptimizationJob> {\n try {\n return await this.request<OptimizationJob>(`/api/prompt/${promptId}/optimize`, {\n method: 'POST',\n body: JSON.stringify({\n datasetId: parseInt(datasetId, 10),\n config: {\n maxIterations: config?.maxIterations ?? 3,\n targetScore: config?.targetScore,\n patience: config?.patience,\n model: config?.model,\n ...(config?.evalModel ? { tuningParams: { evaluationModel: config.evalModel } } : {}),\n },\n executionMode: 'worker_loop',\n }),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getOptimizationStatus(jobId: string): Promise<OptimizeStatus> {\n try {\n return await this.request<OptimizeStatus>(`/api/optimization/${jobId}`);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getOptimizationResults(jobId: string): Promise<{ job: OptimizationJob; prompt: Prompt }> {\n try {\n return await this.request<{ job: OptimizationJob; prompt: Prompt }>(`/api/optimization/${jobId}/progress`);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // TRACES - Using direct fetch since SDK doesn't have traces\n // =========================================================================\n\n async listTraces(filters?: { promptId?: string }): Promise<unknown[]> {\n const params = filters ? new URLSearchParams(filters as Record<string, string>).toString() : '';\n const response = await this.request<{ data: unknown[]; total: number }>(`/api/traces${params ? `?${params}` : ''}`);\n return response.data ?? [];\n }\n\n async getTrace(id: string): Promise<unknown> {\n return this.request(`/api/traces/${id}`);\n }\n\n async analyzeTraces(promptId: string): Promise<Record<string, unknown>> {\n return this.request(`/api/prompts/${promptId}/trace-analysis`);\n }\n\n // =========================================================================\n // AGENTS\n // =========================================================================\n\n async listAgents(filters?: { limit?: number; offset?: number; name?: string; status?: string }): Promise<{ data: Agent[]; total: number }> {\n try {\n const response = await this.sdk.agents.listAgents({\n limit: filters?.limit,\n offset: filters?.offset,\n name: filters?.name,\n status: filters?.status,\n });\n return {\n data: response.result.data as unknown as Agent[],\n total: response.result.total,\n };\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getAgent(id: string): Promise<Agent> {\n try {\n const response = await this.sdk.agents.getAgent({\n id: parseInt(id, 10),\n });\n return response as unknown as Agent;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async createAgent(data: CreateAgentInput): Promise<Agent> {\n try {\n const response = await this.sdk.agents.createAgent({\n name: data.name,\n slug: data.slug,\n description: data.description ?? undefined,\n systemPrompt: data.systemPrompt,\n model: data.model ?? undefined,\n maxTurns: data.maxTurns ?? undefined,\n permissionMode: data.permissionMode ?? undefined,\n allowedTools: data.allowedTools ?? undefined,\n disallowedTools: data.disallowedTools ?? undefined,\n status: data.status ?? undefined,\n isPublic: data.isPublic ?? undefined,\n metadata: data.metadata ?? undefined,\n tags: data.tags ?? undefined,\n });\n return response as unknown as Agent;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async updateAgent(id: string, data: UpdateAgentInput): Promise<Agent> {\n try {\n const response = await this.sdk.agents.updateAgent({\n id: parseInt(id, 10),\n body: {\n name: data.name ?? undefined,\n description: data.description ?? undefined,\n systemPrompt: data.systemPrompt ?? undefined,\n model: data.model ?? undefined,\n maxTurns: data.maxTurns ?? undefined,\n permissionMode: data.permissionMode ?? undefined,\n allowedTools: data.allowedTools ?? undefined,\n disallowedTools: data.disallowedTools ?? undefined,\n status: data.status ?? undefined,\n isPublic: data.isPublic ?? undefined,\n metadata: data.metadata ?? undefined,\n tags: data.tags ?? undefined,\n },\n });\n return response as unknown as Agent;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async deleteAgent(id: string): Promise<void> {\n try {\n await this.sdk.agents.deleteAgent({\n id: parseInt(id, 10),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // AGENT CONVERSATIONS - Using direct fetch for consistent interface\n // =========================================================================\n\n async listConversations(agentId: string, filters?: { limit?: number; offset?: number }): Promise<{ data: Conversation[]; total: number }> {\n try {\n const params = new URLSearchParams();\n if (filters?.limit) params.set('limit', String(filters.limit));\n if (filters?.offset) params.set('offset', String(filters.offset));\n const query = params.toString();\n return await this.request<{ data: Conversation[]; total: number }>(\n `/api/agents/${agentId}/conversations${query ? `?${query}` : ''}`\n );\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getConversation(_agentId: string, conversationId: string): Promise<Conversation> {\n try {\n return await this.request<Conversation>(`/api/conversations/${conversationId}`);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async createConversation(agentId: string, data?: CreateConversationInput): Promise<Conversation> {\n try {\n return await this.request<Conversation>(`/api/agents/${agentId}/conversations`, {\n method: 'POST',\n body: JSON.stringify({\n title: data?.title ?? undefined,\n metadata: data?.metadata ?? undefined,\n }),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async deleteConversation(_agentId: string, conversationId: string): Promise<void> {\n try {\n await this.request(`/api/conversations/${conversationId}`, { method: 'DELETE' });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async listMessages(_agentId: string, conversationId: string, filters?: { limit?: number; offset?: number }): Promise<{ data: Message[]; total: number }> {\n try {\n const params = new URLSearchParams();\n if (filters?.limit) params.set('limit', String(filters.limit));\n if (filters?.offset) params.set('offset', String(filters.offset));\n const query = params.toString();\n return await this.request<{ data: Message[]; total: number }>(\n `/api/conversations/${conversationId}/messages${query ? `?${query}` : ''}`\n );\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // WORKSPACES\n // =========================================================================\n\n async listWorkspaces(filters?: { limit?: number; offset?: number }): Promise<{ data: Workspace[]; total: number }> {\n try {\n const response = await this.sdk.workspaces.listWorkspaces({\n includeInactive: false,\n });\n // SDK returns { workspaces: [...], total } but CLI expects { data: [...], total }\n const workspaces = response.workspaces as unknown as Workspace[];\n // Apply client-side pagination if needed\n const offset = filters?.offset ?? 0;\n const limit = filters?.limit ?? workspaces.length;\n return {\n data: workspaces.slice(offset, offset + limit),\n total: response.total,\n };\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getWorkspace(id: string): Promise<Workspace> {\n try {\n const response = await this.sdk.workspaces.getWorkspace({\n wsId: id,\n });\n return response as unknown as Workspace;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // PLAYGROUND - Execute prompts\n // =========================================================================\n\n async executePrompt(\n promptId: string,\n input: Record<string, unknown>,\n options?: { model?: string }\n ): Promise<PromptExecutionResult> {\n try {\n return await this.request<PromptExecutionResult>(`/api/prompt/${promptId}/playground/call`, {\n method: 'POST',\n body: JSON.stringify({ input, model: options?.model }),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async executePromptStream(\n promptId: string,\n input: Record<string, unknown>,\n options?: { model?: string }\n ): Promise<Response> {\n const response = await fetch(`${this.endpoint}/api/prompt/${promptId}/execute/stream`, {\n method: 'POST',\n headers: {\n 'x-api-key': this.apiKey,\n 'Content-Type': 'application/json',\n 'Accept': 'text/event-stream',\n },\n body: JSON.stringify({ input, ...options }),\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new AuthenticationError();\n }\n if (response.status === 403) {\n throw new ApiError(403, await response.text() || 'Access denied');\n }\n const error = await response.text();\n // Detect workspace context errors from the server response body\n const errorLower = error.toLowerCase();\n if (\n errorLower.includes('workspace') && (errorLower.includes('missing') || errorLower.includes('required')) ||\n errorLower.includes('x-workspace-id')\n ) {\n throw new WorkspaceContextError(error);\n }\n throw new ApiError(response.status, error);\n }\n\n return response;\n }\n\n // =========================================================================\n // PROVIDERS\n // =========================================================================\n\n async listProviders(filters?: { limit?: number; offset?: number; type?: string }): Promise<{ data: Provider[]; total: number }> {\n try {\n const response = await this.sdk.providerConfigs.listProviders({\n provider: filters?.type,\n includeInactive: false,\n });\n // SDK returns { configs: [...], total } but CLI expects { data: [...], total }\n const configs = response.configs as unknown as Provider[];\n // Apply client-side pagination if needed\n const offset = filters?.offset ?? 0;\n const limit = filters?.limit ?? configs.length;\n return {\n data: configs.slice(offset, offset + limit),\n total: response.total,\n };\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getProvider(id: string): Promise<Provider> {\n try {\n const response = await this.sdk.providerConfigs.getProvider({\n id: id,\n });\n return response as unknown as Provider;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async testProvider(id: string): Promise<ProviderTestResult> {\n try {\n const response = await this.sdk.providerConfigs.testProvider({\n id: id,\n });\n return response as unknown as ProviderTestResult;\n } catch (error) {\n this.handleError(error);\n }\n }\n}\n\n// Singleton SDK client\nlet sdkClient: SDKClientWrapper | null = null;\n\nexport function getSDKClient(): SDKClientWrapper {\n if (!sdkClient) {\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new AuthenticationError();\n }\n\n const config = loadConfig();\n sdkClient = new SDKClientWrapper({\n bearerAuth: apiKey,\n serverURL: config.endpoint,\n workspaceId: config.defaultWorkspace,\n organizationId: config.defaultOrganization,\n });\n }\n\n return sdkClient;\n}\n\nexport function resetSDKClient(): void {\n sdkClient = null;\n}\n\nexport async function validateApiKey(apiKey: string, endpoint: string): Promise<boolean> {\n // Use /api/organizations directly — it requires only x-api-key, no tenancy headers\n try {\n const response = await fetch(`${endpoint}/api/organizations`, {\n headers: { 'x-api-key': apiKey },\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Fetch organizations for the authenticated API key.\n * Returns array of { id, name } or empty array on failure.\n */\nexport async function fetchOrganizations(apiKey: string, endpoint: string): Promise<{ id: string; name: string }[]> {\n try {\n const response = await fetch(`${endpoint}/api/organizations`, {\n headers: { 'x-api-key': apiKey },\n });\n if (!response.ok) return [];\n const data = await response.json() as { data?: { id: string; name: string }[] };\n return data.data ?? [];\n } catch {\n return [];\n }\n}\n\n/**\n * Fetch workspaces for the given organization.\n * Returns array of { id, name, isDefault } or empty array on failure.\n */\nexport async function fetchWorkspaces(apiKey: string, endpoint: string, orgId: string): Promise<{ id: string; name: string; isDefault?: boolean }[]> {\n try {\n const response = await fetch(`${endpoint}/api/workspaces`, {\n headers: { 'x-api-key': apiKey, 'x-organization-id': orgId },\n });\n if (!response.ok) return [];\n const data = await response.json() as { workspaces?: { id: string; name: string; isDefault?: boolean }[] };\n return data.workspaces ?? [];\n } catch {\n return [];\n }\n}\n\n// Export the wrapper class for type compatibility\nexport { SDKClientWrapper as MutagentSDK };\n",
9
6
  "export class MutagentError extends Error {\n constructor(\n public code: string,\n message: string,\n public suggestion?: string,\n public exitCode = 1\n ) {\n super(message);\n this.name = 'MutagentError';\n }\n\n toJSON(): { error: { code: string; message: string; suggestion?: string } } {\n return {\n error: {\n code: this.code,\n message: this.message,\n suggestion: this.suggestion,\n }\n };\n }\n}\n\nexport interface AuthenticationErrorOptions {\n suggestions?: string[];\n cause?: Error;\n}\n\nexport const AUTH_REMEDIATION_MESSAGE = [\n 'Authentication required. Options:',\n ' Interactive: mutagent auth login --browser',\n ' Non-interactive: export MUTAGENT_API_KEY=<your-key>',\n ' CI/CD: mutagent auth login --api-key <key>',\n].join('\\n');\n\nexport class AuthenticationError extends MutagentError {\n readonly suggestions: string[];\n override readonly cause?: Error;\n\n constructor(\n message?: string,\n options: AuthenticationErrorOptions = {}\n ) {\n super(\n 'AUTH_REQUIRED',\n message ?? 'Authentication required. Please run \"mutagent auth login\"',\n options.suggestions ? options.suggestions[0] : 'Run: mutagent auth login --browser',\n 2\n );\n this.suggestions = options.suggestions ?? [\n 'mutagent auth login --browser',\n 'export MUTAGENT_API_KEY=<your-key>',\n 'mutagent auth login --api-key <key>',\n ];\n this.suggestion = options.suggestions ? options.suggestions[0] : 'Run: mutagent auth login --browser';\n this.cause = options.cause;\n }\n}\n\nexport class ApiError extends MutagentError {\n readonly statusCode: number;\n\n constructor(status: number, message: string) {\n super(\n `API_${status}`,\n message,\n status === 401 ? 'Check your API key with: mutagent auth status' : undefined,\n 1\n );\n this.statusCode = status;\n }\n}\n\nexport const WORKSPACE_REMEDIATION_MESSAGE = [\n 'Workspace context missing. To fix:',\n ' mutagent config set workspace <workspace-id> # Set default workspace',\n ' mutagent workspaces list # List available workspaces',\n].join('\\n');\n\nexport class WorkspaceContextError extends MutagentError {\n constructor(message?: string) {\n super(\n 'WORKSPACE_CONTEXT_MISSING',\n message ?? 'Workspace context is required but not configured',\n 'Run: mutagent config set workspace <workspace-id>',\n 3\n );\n }\n}\n\nexport class ValidationError extends MutagentError {\n constructor(message: string) {\n super(\n 'VALIDATION_ERROR',\n message,\n 'Check the command syntax with: mutagent <command> --help',\n 1\n );\n }\n}\n\n// =============================================================================\n// Additional Error Classes for Configuration & Auth System\n// =============================================================================\n\nexport class CredentialsExpiredError extends AuthenticationError {\n readonly expiredAt: Date;\n\n constructor(expiredAt: Date) {\n super();\n this.expiredAt = expiredAt;\n this.code = 'CREDENTIALS_EXPIRED';\n this.message = `Credentials expired at ${expiredAt.toISOString()}`;\n this.suggestion = 'Run \"mutagent auth login\" to refresh your credentials';\n }\n}\n\nexport class InvalidApiKeyError extends MutagentError {\n constructor(keyPreview?: string) {\n const preview = keyPreview ? ` (received: \"${keyPreview}...\")` : '';\n super(\n 'INVALID_API_KEY',\n `Invalid API key format${preview}`,\n 'API keys should start with \"sk_\" or \"sk-\" and be at least 20 characters',\n 2\n );\n }\n}\n\nexport interface ConfigErrorOptions {\n cause?: Error;\n suggestions?: string[];\n configPath?: string;\n}\n\nexport class ConfigError extends MutagentError {\n readonly configPath?: string;\n readonly suggestions: string[];\n override readonly cause?: Error;\n\n constructor(\n message: string,\n options: ConfigErrorOptions = {}\n ) {\n super(\n 'CONFIG_ERROR',\n message,\n options.suggestions ? options.suggestions[0] : 'Run \"mutagent config validate\" to check your configuration',\n 3\n );\n this.configPath = options.configPath;\n this.suggestions = options.suggestions ?? ['Run \"mutagent config validate\" to check your configuration'];\n this.suggestion = options.suggestions ? options.suggestions[0] : 'Run \"mutagent config validate\" to check your configuration';\n this.cause = options.cause;\n }\n}\n\nexport class ConfigNotFoundError extends ConfigError {\n constructor(configPath: string) {\n super(\n `Configuration file not found: ${configPath}`,\n { suggestions: ['Create a configuration file with \"mutagent config init\" or use --config'] }\n );\n this.code = 'CONFIG_NOT_FOUND';\n this.suggestion = 'Create a configuration file with \"mutagent config init\" or use --config';\n }\n}\n\nexport class ConfigParseError extends ConfigError {\n readonly parseError: Error;\n\n constructor(\n configPath: string,\n parseError: Error\n ) {\n super(\n `Failed to parse configuration file: ${configPath}`,\n { suggestions: ['Validate your JSON/JavaScript syntax and check for trailing commas'] }\n );\n this.code = 'CONFIG_PARSE_ERROR';\n this.suggestion = 'Validate your JSON/JavaScript syntax and check for trailing commas';\n this.parseError = parseError;\n }\n}\n\nexport interface PermissionErrorOptions {\n cause?: Error;\n}\n\nexport class PermissionError extends MutagentError {\n readonly path?: string;\n readonly operation: string;\n override readonly cause?: Error;\n\n constructor(\n operation: string,\n path?: string,\n options: PermissionErrorOptions = {}\n ) {\n const pathMsg = path ? ` at ${path}` : '';\n super(\n 'PERMISSION_ERROR',\n `Permission denied: ${operation}${pathMsg}`,\n 'Check file permissions and ensure the file is not read-only',\n 8\n );\n this.operation = operation;\n this.path = path;\n this.cause = options.cause;\n }\n}\n\nexport class NetworkError extends MutagentError {\n readonly url?: string;\n readonly statusCode?: number;\n\n constructor(\n message = 'Network error',\n url?: string,\n statusCode?: number\n ) {\n super(\n 'NETWORK_ERROR',\n message,\n 'Check your internet connection and verify the server URL',\n 5\n );\n this.url = url;\n this.statusCode = statusCode;\n }\n}\n\nexport class RateLimitError extends NetworkError {\n readonly retryAfter?: number;\n\n constructor(\n retryAfter?: number\n ) {\n super(\n 'Rate limit exceeded',\n undefined,\n 429\n );\n this.code = 'RATE_LIMIT_ERROR';\n this.suggestion = retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Wait a few seconds before retrying';\n this.retryAfter = retryAfter;\n this.exitCode = 6;\n }\n}\n\n// =============================================================================\n// Error Factory Functions\n// =============================================================================\n\nexport function createErrorFromUnknown(error: unknown): MutagentError {\n if (error instanceof MutagentError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new MutagentError(\n 'UNKNOWN_ERROR',\n error.message,\n undefined,\n 1\n );\n }\n\n return new MutagentError(\n 'UNKNOWN_ERROR',\n typeof error === 'string' ? error : 'An unknown error occurred',\n undefined,\n 1\n );\n}\n\nexport function handleError(error: unknown, isJson: boolean): never {\n if (error instanceof MutagentError) {\n if (isJson) {\n const jsonOutput = error.toJSON();\n // Include remediation info for auth errors\n if (error instanceof AuthenticationError) {\n (jsonOutput as Record<string, unknown>).remediation = {\n interactive: 'mutagent auth login --browser',\n nonInteractive: 'export MUTAGENT_API_KEY=<your-key>',\n ciCd: 'mutagent auth login --api-key <key>',\n };\n }\n // Include remediation info for workspace context errors\n if (error instanceof WorkspaceContextError) {\n (jsonOutput as Record<string, unknown>).remediation = {\n setWorkspace: 'mutagent config set workspace <workspace-id>',\n listWorkspaces: 'mutagent workspaces list',\n };\n }\n // Include auth recovery hint for 403 API errors\n if (error instanceof ApiError && error.statusCode === 403) {\n (jsonOutput as Record<string, unknown>).remediation = {\n interactive: 'mutagent auth login --browser',\n nonInteractive: 'export MUTAGENT_API_KEY=<your-key>',\n checkPermissions: 'Verify your API key has the required permissions',\n };\n }\n console.log(JSON.stringify(jsonOutput, null, 2));\n } else {\n console.error(`Error: ${error.message}`);\n if (error instanceof AuthenticationError) {\n console.error('');\n console.error(AUTH_REMEDIATION_MESSAGE);\n } else if (error instanceof WorkspaceContextError) {\n console.error('');\n console.error(WORKSPACE_REMEDIATION_MESSAGE);\n } else if (error instanceof ApiError && error.statusCode === 403) {\n console.error('');\n console.error('Access denied. To fix:');\n console.error(' mutagent auth login --browser # Re-authenticate');\n console.error(' export MUTAGENT_API_KEY=mt_xxx # Or use a different API key');\n } else if (error instanceof ValidationError) {\n if (error.suggestion) {\n console.error(`Suggestion: ${error.suggestion}`);\n }\n console.error('');\n console.error('Run `mutagent <command> --help` for usage information.');\n } else if (error.suggestion) {\n console.error(`Suggestion: ${error.suggestion}`);\n }\n // Show help hint for missing arguments or invalid input errors\n if (error.code === 'MISSING_ARGUMENTS' || error.code === 'INVALID_ARGUMENTS' || error.code === 'INVALID_INPUT') {\n console.error('');\n console.error('Run `mutagent <command> --help` for usage information.');\n }\n }\n process.exit(error.exitCode);\n }\n\n // Catch Speakeasy SDK internal errors that leaked past sdk-client wrapper\n if (error && typeof error === 'object') {\n const sdkErr = error as { name?: string; rawValue?: unknown; rawMessage?: string; message?: string };\n if (\n sdkErr.name === 'SDKValidationError' ||\n sdkErr.name === 'SDKError' ||\n sdkErr.rawValue !== undefined ||\n sdkErr.rawMessage !== undefined\n ) {\n const friendlyMessage = sdkErr.rawMessage ?? sdkErr.message ?? 'Request failed';\n const wrapped = new MutagentError(\n 'REQUEST_FAILED',\n friendlyMessage,\n 'Check your input and try again. Run the command with --help for usage details.'\n );\n if (isJson) {\n console.log(JSON.stringify(wrapped.toJSON(), null, 2));\n } else {\n console.error(`Error: ${wrapped.message}`);\n if (wrapped.suggestion) {\n console.error(`Suggestion: ${wrapped.suggestion}`);\n }\n }\n process.exit(1);\n }\n }\n\n // Unknown error\n const message = error instanceof Error ? error.message : 'Unknown error';\n if (isJson) {\n console.log(JSON.stringify({ error: { code: 'UNKNOWN_ERROR', message } }, null, 2));\n } else {\n console.error(`Error: ${message}`);\n }\n process.exit(1);\n}\n",
7
+ "// SDK Client wrapper for MutagenT API\n/// <reference lib=\"dom\" />\nimport { Mutagent, HTTPClient } from '@mutagent/sdk';\nimport type { Prompt, Dataset, Evaluation, OptimizeJob as OptimizationJob, OptimizeStatus, Agent, CreateAgentInput, UpdateAgentInput, PromptExecutionResult, Conversation, CreateConversationInput, Message, Workspace, Provider, ProviderTestResult } from '../types/index.js';\nimport { ApiError, AuthenticationError, MutagentError, WorkspaceContextError } from './errors.js';\nimport { getApiKey, loadConfig } from './config.js';\n\n/**\n * SDK Client Wrapper\n *\n * This class wraps the real @mutagent/sdk to provide a consistent interface\n * for CLI commands. It maps the SDK's method signatures to the interface\n * expected by the CLI.\n */\nclass SDKClientWrapper {\n private sdk: Mutagent;\n private apiKey: string;\n private endpoint: string;\n private workspaceId?: string;\n private organizationId?: string;\n\n constructor(opts: { bearerAuth: string; serverURL?: string; workspaceId?: string; organizationId?: string }) {\n this.apiKey = opts.bearerAuth;\n this.endpoint = opts.serverURL ?? 'http://localhost:3003';\n this.workspaceId = opts.workspaceId;\n this.organizationId = opts.organizationId;\n\n // Create HTTP client with tenancy header injection\n const httpClient = new HTTPClient();\n httpClient.addHook(\"beforeRequest\", (req) => {\n if (this.workspaceId) req.headers.set(\"x-workspace-id\", this.workspaceId);\n if (this.organizationId) req.headers.set(\"x-organization-id\", this.organizationId);\n return req;\n });\n\n this.sdk = new Mutagent({\n security: {\n apiKey: this.apiKey,\n },\n serverURL: this.endpoint,\n httpClient,\n });\n }\n\n /**\n * Helper to handle SDK errors and convert them to CLI errors.\n * Masks Speakeasy SDK internal errors (SDKValidationError, SDKError, etc.)\n * so users see clean, actionable messages instead of raw stack traces.\n */\n private handleError(error: unknown): never {\n if (error && typeof error === 'object') {\n const err = error as { statusCode?: number; message?: string; body?: string; name?: string; rawValue?: unknown; rawMessage?: string };\n\n if (err.statusCode === 401) {\n throw new AuthenticationError();\n }\n if (err.statusCode === 403) {\n throw new ApiError(403, err.message ?? err.body ?? 'Access denied');\n }\n\n // Detect workspace/org context errors from the server\n const errMessage = (err.message ?? err.body ?? '').toLowerCase();\n if (\n errMessage.includes('workspace') && (errMessage.includes('missing') || errMessage.includes('required')) ||\n errMessage.includes('x-workspace-id')\n ) {\n throw new WorkspaceContextError(err.message ?? err.body ?? undefined);\n }\n\n if (err.statusCode) {\n throw new ApiError(err.statusCode, err.message ?? err.body ?? 'Unknown error');\n }\n\n // Catch Speakeasy SDK internal errors (SDKValidationError, SDKError, etc.)\n if (\n err.name === 'SDKValidationError' ||\n err.name === 'SDKError' ||\n err.rawValue !== undefined ||\n err.rawMessage !== undefined\n ) {\n const friendlyMessage = err.rawMessage ?? err.message ?? 'Request failed';\n throw new MutagentError(\n 'REQUEST_FAILED',\n friendlyMessage,\n 'Check your input and try again. Run the command with --help for usage details.'\n );\n }\n }\n\n // Catch network errors (fetch failures, DNS resolution, etc.)\n if (error instanceof TypeError && typeof error.message === 'string') {\n if (error.message.includes('fetch') || error.message.includes('network') || error.message.includes('ECONNREFUSED')) {\n throw new MutagentError(\n 'NETWORK_ERROR',\n 'Unable to connect to the MutagenT server',\n 'Check your internet connection and verify the server URL with: mutagent config list'\n );\n }\n }\n\n // Last resort: wrap unknown errors in MutagentError\n if (error instanceof Error) {\n throw new MutagentError(\n 'REQUEST_FAILED',\n error.message,\n 'Run the command with --help for usage details'\n );\n }\n\n throw new MutagentError(\n 'UNKNOWN_ERROR',\n 'An unexpected error occurred',\n 'Run the command with --help for usage details'\n );\n }\n\n /**\n * Helper for direct HTTP requests (for endpoints not yet in SDK)\n */\n private async request<T>(path: string, options?: RequestInit): Promise<T> {\n // Convert Headers object to plain object if needed\n const optHeaders = options?.headers;\n let extraHeaders: Record<string, string> = {};\n if (optHeaders instanceof Headers) {\n optHeaders.forEach((value, key) => {\n extraHeaders[key] = value;\n });\n } else if (optHeaders) {\n extraHeaders = optHeaders as Record<string, string>;\n }\n\n // Build tenancy headers from stored config\n const tenancyHeaders: Record<string, string> = {};\n if (this.workspaceId) tenancyHeaders['x-workspace-id'] = this.workspaceId;\n if (this.organizationId) tenancyHeaders['x-organization-id'] = this.organizationId;\n\n const response = await fetch(`${this.endpoint}${path}`, {\n ...options,\n headers: {\n 'x-api-key': this.apiKey,\n 'Content-Type': 'application/json',\n ...tenancyHeaders,\n ...extraHeaders,\n },\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new AuthenticationError();\n }\n if (response.status === 403) {\n throw new ApiError(403, await response.text() || 'Access denied');\n }\n const error = await response.text();\n // Detect workspace context errors from the server response body\n const errorLower = error.toLowerCase();\n if (\n errorLower.includes('workspace') && (errorLower.includes('missing') || errorLower.includes('required')) ||\n errorLower.includes('x-workspace-id')\n ) {\n throw new WorkspaceContextError(error);\n }\n throw new ApiError(response.status, error);\n }\n\n return response.json() as Promise<T>;\n }\n\n // =========================================================================\n // PROMPTS\n // =========================================================================\n\n async listPrompts(): Promise<Prompt[]> {\n try {\n const response = await this.sdk.prompt.listPrompts();\n return response.result.data as Prompt[];\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getPrompt(id: string): Promise<Prompt> {\n try {\n const response = await this.sdk.prompt.getPrompt({ id: parseInt(id, 10) });\n return response as Prompt;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async createPrompt(data: Partial<Prompt>): Promise<Prompt> {\n try {\n const response = await this.sdk.prompt.createPrompt({\n name: data.name ?? '',\n description: data.description ?? undefined,\n version: data.version ?? undefined,\n isLatest: data.isLatest ?? undefined,\n systemPrompt: data.systemPrompt ?? undefined,\n humanPrompt: data.humanPrompt ?? undefined,\n rawPrompt: data.rawPrompt ?? undefined,\n inputSchema: data.inputSchema ?? undefined,\n outputSchema: data.outputSchema ?? undefined,\n metadata: data.metadata ?? undefined,\n tags: data.tags ?? undefined,\n });\n return response as Prompt;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async updatePrompt(id: string, data: Partial<Prompt>): Promise<Prompt> {\n try {\n const body: Record<string, unknown> = {\n description: data.description ?? undefined,\n isLatest: data.isLatest ?? undefined,\n systemPrompt: data.systemPrompt ?? undefined,\n humanPrompt: data.humanPrompt ?? undefined,\n rawPrompt: data.rawPrompt ?? undefined,\n outputSchema: data.outputSchema as Record<string, never> | undefined,\n metadata: data.metadata as Record<string, never> | undefined,\n tags: data.tags ?? undefined,\n };\n if (data.name !== undefined) {\n body.name = data.name;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- SDK type missing `name` until regenerated\n const updateArgs = { id: parseInt(id, 10), body } as any;\n const response = await this.sdk.prompt.updatePrompt(updateArgs);\n return response as Prompt;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async deletePrompt(id: string): Promise<void> {\n try {\n await this.sdk.prompt.deletePrompt({ id: parseInt(id, 10) });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // DATASETS (scoped to prompt)\n // Using direct fetch as SDK types don't match CLI expectations\n // =========================================================================\n\n async listDatasets(promptId: string): Promise<Dataset[]> {\n try {\n const response = await this.request<Dataset[] | { data: Dataset[] }>(`/api/prompt/${promptId}/datasets`);\n return Array.isArray(response) ? response : response.data;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async addDataset(promptId: string, fileContent: string, name?: string): Promise<Dataset & { itemCount?: number }> {\n try {\n // Step 1: Parse content to extract items\n let parsed: unknown;\n try {\n parsed = JSON.parse(fileContent);\n } catch {\n // If not parseable as JSON (e.g., CSV), no items to extract\n parsed = null;\n }\n\n // Determine dataset name and items\n let datasetName = name ?? `Dataset ${new Date().toISOString().slice(0, 16)}`;\n let items: Record<string, unknown>[] | undefined;\n\n if (\n parsed !== null &&\n !Array.isArray(parsed) &&\n typeof parsed === 'object' &&\n 'name' in (parsed as Record<string, unknown>)\n ) {\n // Object with 'name' field: treat as dataset metadata (may contain items)\n const meta = parsed as Record<string, unknown>;\n datasetName = (meta.name as string) ?? datasetName;\n if (Array.isArray(meta.items)) {\n items = meta.items as Record<string, unknown>[];\n }\n } else if (Array.isArray(parsed)) {\n items = parsed as Record<string, unknown>[];\n }\n\n // Step 2: Create dataset metadata via POST /api/prompt/:id/datasets\n const dataset = await this.request<Dataset>(`/api/prompt/${promptId}/datasets`, {\n method: 'POST',\n body: JSON.stringify({\n name: datasetName,\n }),\n });\n\n // Step 3: Bulk upload items if any via POST /api/prompts/datasets/:id/items/bulk\n let itemCount = 0;\n if (items && items.length > 0) {\n // Map items to the backend schema: { input, expectedOutput, ... }\n const mappedItems = items.map((item) => ({\n input: item.input ?? item,\n expectedOutput: item.expectedOutput ?? item.expected_output ?? undefined,\n name: item.name as string | undefined,\n userFeedback: item.userFeedback as string | undefined,\n systemFeedback: item.systemFeedback as string | undefined,\n labels: item.labels as string[] | undefined,\n metadata: item.metadata as Record<string, unknown> | undefined,\n }));\n\n await this.request(`/api/prompts/datasets/${String(dataset.id)}/items/bulk`, {\n method: 'POST',\n body: JSON.stringify({ items: mappedItems }),\n });\n itemCount = mappedItems.length;\n }\n\n return { ...dataset, itemCount };\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async removeDataset(_promptId: string, datasetId: string): Promise<void> {\n try {\n await this.request(`/api/prompts/datasets/${datasetId}`, { method: 'DELETE' });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // EVALUATIONS - Using direct fetch for consistent interface\n // =========================================================================\n\n async listEvaluations(promptId: string): Promise<Evaluation[]> {\n try {\n const response = await this.request<{ data: Evaluation[] }>(`/api/prompts/evaluations?promptId=${promptId}`);\n return response.data;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async createEvaluation(promptId: string, data: {\n name: string;\n description?: string;\n datasetId?: number;\n evalConfig?: Record<string, unknown>;\n llmConfig?: Record<string, unknown>;\n tags?: string[];\n metadata?: Record<string, unknown>;\n }): Promise<Evaluation> {\n try {\n return await this.request<Evaluation>('/api/prompts/evaluations', {\n method: 'POST',\n body: JSON.stringify({\n promptId: parseInt(promptId, 10),\n datasetId: data.datasetId,\n name: data.name,\n description: data.description,\n evalConfig: data.evalConfig,\n llmConfig: data.llmConfig,\n tags: data.tags,\n metadata: data.metadata,\n }),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getEvaluationResults(runId: string): Promise<Evaluation> {\n try {\n return await this.request<Evaluation>(`/api/prompts/evaluations/${runId}/result`);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // OPTIMIZATIONS - Using direct fetch for consistent interface\n // =========================================================================\n\n async startOptimization(promptId: string, datasetId: string, config?: {\n maxIterations?: number;\n targetScore?: number;\n patience?: number;\n model?: string;\n evalModel?: string;\n }): Promise<OptimizationJob> {\n try {\n return await this.request<OptimizationJob>(`/api/prompt/${promptId}/optimize`, {\n method: 'POST',\n body: JSON.stringify({\n datasetId: parseInt(datasetId, 10),\n config: {\n maxIterations: config?.maxIterations ?? 3,\n targetScore: config?.targetScore,\n patience: config?.patience,\n model: config?.model,\n ...(config?.evalModel ? { tuningParams: { evaluationModel: config.evalModel } } : {}),\n },\n executionMode: 'worker_loop',\n }),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getOptimizationStatus(jobId: string): Promise<OptimizeStatus> {\n try {\n return await this.request<OptimizeStatus>(`/api/optimization/${jobId}`);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getOptimizationResults(jobId: string): Promise<{ job: OptimizationJob; prompt: Prompt }> {\n try {\n return await this.request<{ job: OptimizationJob; prompt: Prompt }>(`/api/optimization/${jobId}/progress`);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // TRACES - Using direct fetch since SDK doesn't have traces\n // =========================================================================\n\n async listTraces(filters?: { promptId?: string }): Promise<unknown[]> {\n const params = filters ? new URLSearchParams(filters as Record<string, string>).toString() : '';\n const response = await this.request<{ data: unknown[]; total: number }>(`/api/traces${params ? `?${params}` : ''}`);\n return response.data ?? [];\n }\n\n async getTrace(id: string): Promise<unknown> {\n return this.request(`/api/traces/${id}`);\n }\n\n async analyzeTraces(promptId: string): Promise<Record<string, unknown>> {\n return this.request(`/api/prompts/${promptId}/trace-analysis`);\n }\n\n // =========================================================================\n // AGENTS\n // =========================================================================\n\n async listAgents(filters?: { limit?: number; offset?: number; name?: string; status?: string }): Promise<{ data: Agent[]; total: number }> {\n try {\n const response = await this.sdk.agents.listAgents({\n limit: filters?.limit,\n offset: filters?.offset,\n name: filters?.name,\n status: filters?.status,\n });\n return {\n data: response.result.data as unknown as Agent[],\n total: response.result.total,\n };\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getAgent(id: string): Promise<Agent> {\n try {\n const response = await this.sdk.agents.getAgent({\n id: parseInt(id, 10),\n });\n return response as unknown as Agent;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async createAgent(data: CreateAgentInput): Promise<Agent> {\n try {\n const response = await this.sdk.agents.createAgent({\n name: data.name,\n slug: data.slug,\n description: data.description ?? undefined,\n systemPrompt: data.systemPrompt,\n model: data.model ?? undefined,\n maxTurns: data.maxTurns ?? undefined,\n permissionMode: data.permissionMode ?? undefined,\n allowedTools: data.allowedTools ?? undefined,\n disallowedTools: data.disallowedTools ?? undefined,\n status: data.status ?? undefined,\n isPublic: data.isPublic ?? undefined,\n metadata: data.metadata ?? undefined,\n tags: data.tags ?? undefined,\n });\n return response as unknown as Agent;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async updateAgent(id: string, data: UpdateAgentInput): Promise<Agent> {\n try {\n const response = await this.sdk.agents.updateAgent({\n id: parseInt(id, 10),\n body: {\n name: data.name ?? undefined,\n description: data.description ?? undefined,\n systemPrompt: data.systemPrompt ?? undefined,\n model: data.model ?? undefined,\n maxTurns: data.maxTurns ?? undefined,\n permissionMode: data.permissionMode ?? undefined,\n allowedTools: data.allowedTools ?? undefined,\n disallowedTools: data.disallowedTools ?? undefined,\n status: data.status ?? undefined,\n isPublic: data.isPublic ?? undefined,\n metadata: data.metadata ?? undefined,\n tags: data.tags ?? undefined,\n },\n });\n return response as unknown as Agent;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async deleteAgent(id: string): Promise<void> {\n try {\n await this.sdk.agents.deleteAgent({\n id: parseInt(id, 10),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // AGENT CONVERSATIONS - Using direct fetch for consistent interface\n // =========================================================================\n\n async listConversations(agentId: string, filters?: { limit?: number; offset?: number }): Promise<{ data: Conversation[]; total: number }> {\n try {\n const params = new URLSearchParams();\n if (filters?.limit) params.set('limit', String(filters.limit));\n if (filters?.offset) params.set('offset', String(filters.offset));\n const query = params.toString();\n return await this.request<{ data: Conversation[]; total: number }>(\n `/api/agents/${agentId}/conversations${query ? `?${query}` : ''}`\n );\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getConversation(_agentId: string, conversationId: string): Promise<Conversation> {\n try {\n return await this.request<Conversation>(`/api/conversations/${conversationId}`);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async createConversation(agentId: string, data?: CreateConversationInput): Promise<Conversation> {\n try {\n return await this.request<Conversation>(`/api/agents/${agentId}/conversations`, {\n method: 'POST',\n body: JSON.stringify({\n title: data?.title ?? undefined,\n metadata: data?.metadata ?? undefined,\n }),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async deleteConversation(_agentId: string, conversationId: string): Promise<void> {\n try {\n await this.request(`/api/conversations/${conversationId}`, { method: 'DELETE' });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async listMessages(_agentId: string, conversationId: string, filters?: { limit?: number; offset?: number }): Promise<{ data: Message[]; total: number }> {\n try {\n const params = new URLSearchParams();\n if (filters?.limit) params.set('limit', String(filters.limit));\n if (filters?.offset) params.set('offset', String(filters.offset));\n const query = params.toString();\n return await this.request<{ data: Message[]; total: number }>(\n `/api/conversations/${conversationId}/messages${query ? `?${query}` : ''}`\n );\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // WORKSPACES\n // =========================================================================\n\n async listWorkspaces(filters?: { limit?: number; offset?: number }): Promise<{ data: Workspace[]; total: number }> {\n try {\n const response = await this.sdk.workspaces.listWorkspaces({\n includeInactive: false,\n });\n // SDK returns { workspaces: [...], total } but CLI expects { data: [...], total }\n const workspaces = response.workspaces as unknown as Workspace[];\n // Apply client-side pagination if needed\n const offset = filters?.offset ?? 0;\n const limit = filters?.limit ?? workspaces.length;\n return {\n data: workspaces.slice(offset, offset + limit),\n total: response.total,\n };\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getWorkspace(id: string): Promise<Workspace> {\n try {\n const response = await this.sdk.workspaces.getWorkspace({\n wsId: id,\n });\n return response as unknown as Workspace;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n // =========================================================================\n // PLAYGROUND - Execute prompts\n // =========================================================================\n\n async executePrompt(\n promptId: string,\n input: Record<string, unknown>,\n options?: { model?: string }\n ): Promise<PromptExecutionResult> {\n try {\n return await this.request<PromptExecutionResult>(`/api/prompt/${promptId}/playground/call`, {\n method: 'POST',\n body: JSON.stringify({ input, model: options?.model }),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async executePromptStream(\n promptId: string,\n input: Record<string, unknown>,\n options?: { model?: string }\n ): Promise<Response> {\n const response = await fetch(`${this.endpoint}/api/prompt/${promptId}/execute/stream`, {\n method: 'POST',\n headers: {\n 'x-api-key': this.apiKey,\n 'Content-Type': 'application/json',\n 'Accept': 'text/event-stream',\n },\n body: JSON.stringify({ input, ...options }),\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new AuthenticationError();\n }\n if (response.status === 403) {\n throw new ApiError(403, await response.text() || 'Access denied');\n }\n const error = await response.text();\n // Detect workspace context errors from the server response body\n const errorLower = error.toLowerCase();\n if (\n errorLower.includes('workspace') && (errorLower.includes('missing') || errorLower.includes('required')) ||\n errorLower.includes('x-workspace-id')\n ) {\n throw new WorkspaceContextError(error);\n }\n throw new ApiError(response.status, error);\n }\n\n return response;\n }\n\n // =========================================================================\n // PROVIDERS\n // =========================================================================\n\n async listProviders(filters?: { limit?: number; offset?: number; type?: string }): Promise<{ data: Provider[]; total: number }> {\n try {\n const response = await this.sdk.providerConfigs.listProviders({\n provider: filters?.type,\n includeInactive: false,\n });\n // SDK returns { configs: [...], total } but CLI expects { data: [...], total }\n const configs = response.configs as unknown as Provider[];\n // Apply client-side pagination if needed\n const offset = filters?.offset ?? 0;\n const limit = filters?.limit ?? configs.length;\n return {\n data: configs.slice(offset, offset + limit),\n total: response.total,\n };\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async getProvider(id: string): Promise<Provider> {\n try {\n const response = await this.sdk.providerConfigs.getProvider({\n id: id,\n });\n return response as unknown as Provider;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n async testProvider(id: string): Promise<ProviderTestResult> {\n try {\n const response = await this.sdk.providerConfigs.testProvider({\n id: id,\n });\n return response as unknown as ProviderTestResult;\n } catch (error) {\n this.handleError(error);\n }\n }\n}\n\n// Singleton SDK client\nlet sdkClient: SDKClientWrapper | null = null;\n\nexport function getSDKClient(): SDKClientWrapper {\n if (!sdkClient) {\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new AuthenticationError();\n }\n\n const config = loadConfig();\n sdkClient = new SDKClientWrapper({\n bearerAuth: apiKey,\n serverURL: config.endpoint,\n workspaceId: config.defaultWorkspace,\n organizationId: config.defaultOrganization,\n });\n }\n\n return sdkClient;\n}\n\nexport function resetSDKClient(): void {\n sdkClient = null;\n}\n\nexport async function validateApiKey(apiKey: string, endpoint: string): Promise<boolean> {\n // Use /api/organizations directly — it requires only x-api-key, no tenancy headers\n try {\n const response = await fetch(`${endpoint}/api/organizations`, {\n headers: { 'x-api-key': apiKey },\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Fetch organizations for the authenticated API key.\n * Returns array of { id, name } or empty array on failure.\n */\nexport async function fetchOrganizations(apiKey: string, endpoint: string): Promise<{ id: string; name: string }[]> {\n try {\n const response = await fetch(`${endpoint}/api/organizations`, {\n headers: { 'x-api-key': apiKey },\n });\n if (!response.ok) return [];\n const data = await response.json() as { data?: { id: string; name: string }[] };\n return data.data ?? [];\n } catch {\n return [];\n }\n}\n\n/**\n * Fetch workspaces for the given organization.\n * Returns array of { id, name, isDefault } or empty array on failure.\n */\nexport async function fetchWorkspaces(apiKey: string, endpoint: string, orgId: string): Promise<{ id: string; name: string; isDefault?: boolean }[]> {\n try {\n const response = await fetch(`${endpoint}/api/workspaces`, {\n headers: { 'x-api-key': apiKey, 'x-organization-id': orgId },\n });\n if (!response.ok) return [];\n const data = await response.json() as { workspaces?: { id: string; name: string; isDefault?: boolean }[] };\n return data.workspaces ?? [];\n } catch {\n return [];\n }\n}\n\n// Export the wrapper class for type compatibility\nexport { SDKClientWrapper as MutagentSDK };\n",
8
+ "#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { createAuthCommand } from '../commands/auth.js';\nimport { createLoginCommand } from '../commands/login.js';\nimport { createPromptsCommand } from '../commands/prompts.js';\nimport { createTracesCommand } from '../commands/traces.js';\nimport { createIntegrateCommand } from '../commands/integrate.js';\nimport { createAgentsCommand } from '../commands/agents.js';\nimport { createConfigCommand } from '../commands/config.js';\nimport { createPlaygroundCommand } from '../commands/playground.js';\nimport { createWorkspacesCommand } from '../commands/workspaces.js';\nimport { createProvidersCommand } from '../commands/providers.js';\nimport { createInitCommand } from '../commands/init.js';\nimport { createExploreCommand } from '../commands/explore.js';\nimport { createSkillsCommand } from '../commands/skills.js';\nimport { hasCredentials } from '../lib/config.js';\nimport { hasRcConfig } from '../commands/init.js';\n\n/**\n * CLI Context Interface\n * Passed to all subcommands for shared state\n */\nexport interface CliContext {\n /** Output results as JSON */\n json: boolean;\n /** MutagenT API key */\n apiKey?: string;\n /** MutagenT server endpoint */\n endpoint?: string;\n /** Enable verbose logging */\n verbose: boolean;\n}\n\n// Read version from package.json\nlet cliVersion = '0.1.1';\ntry {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPath = join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version?: string };\n cliVersion = pkg.version ?? cliVersion;\n} catch {\n // Fallback to hardcoded version\n}\n\nconst program = new Command();\n\nprogram\n .name('mutagent')\n .description(`MutagenT CLI - AI-native prompt optimization platform\n\n Documentation: https://docs.mutagent.io/cli\n Dashboard: https://app.mutagent.io`)\n .version(cliVersion, '-v, --version', 'Display the version number')\n .option('--json', 'Output results as JSON (for AI agents)')\n .option('--api-key <key>', 'MutagenT API key')\n .option('--endpoint <url>', 'MutagenT server endpoint')\n .option('--non-interactive', 'Disable interactive prompts (for CI/AI agents)')\n .configureHelp({\n sortSubcommands: true,\n showGlobalOptions: true,\n });\n\n// Add non-interactive mode instructions for CI/CD and coding agents\nprogram.addHelpText('after', `\n${chalk.yellow('Non-Interactive Mode (CI/CD & Coding Agents):')}\n Export your API key: ${chalk.green('export MUTAGENT_API_KEY=mt_your_key_here')}\n Or pass inline: ${chalk.green('mutagent prompts list --api-key mt_your_key')}\n Machine-readable output: ${chalk.green('mutagent prompts list --json')}\n Disable prompts: ${chalk.green('mutagent prompts list --non-interactive')}\n Set default workspace: ${chalk.green('mutagent config set workspace <workspace-id>')}\n Set default org: ${chalk.green('mutagent config set org <org-id>')}\n`);\n\n// Add workflow guidance for common user journeys\nprogram.addHelpText('after', `\n${chalk.yellow('Workflows:')}\n ${chalk.bold('Evaluate → Optimize Loop:')}\n 1. mutagent prompts create --name \"...\" --raw-file prompt.txt\n 2. mutagent prompts dataset add <prompt-id> --name \"...\" --file data.json\n 3. mutagent prompts evaluation create <prompt-id> --name \"...\" --file criteria.json\n 4. mutagent prompts optimize start <prompt-id> --dataset <id> --max-iterations 3\n\n ${chalk.bold('Quick Test:')}\n mutagent playground run <prompt-id> --input '{\"key\":\"value\"}'\n\n ${chalk.bold('Prerequisites for Optimization:')}\n ${chalk.green('\\u2713')} Prompt with input/output parameters\n ${chalk.green('\\u2713')} Dataset with items (input + expectedOutput pairs)\n ${chalk.green('\\u2713')} Evaluation with criteria (field-level, input/output focused)\n ${chalk.dim('\\u2022')} LLM provider ${chalk.dim('(only when server uses external providers)')}\n`);\n\n// Add AI agent integration hint — top-level only (using 'after' instead of 'afterAll')\nprogram.addHelpText('after', `\n${chalk.cyan('┌─ AI AGENT INTEGRATION HINT ────────────────────────────────────────────────┐')}\n${chalk.cyan('│')} ${chalk.cyan('│')}\n${chalk.cyan('│')} Frameworks: mastra, langchain, langgraph, vercel-ai, claude-code, generic ${chalk.cyan('│')}\n${chalk.cyan('│')} ${chalk.cyan('│')}\n${chalk.cyan('│')} Get integration guide: mutagent integrate <framework> ${chalk.cyan('│')}\n${chalk.cyan('│')} Verify setup: mutagent integrate <framework> --verify ${chalk.cyan('│')}\n${chalk.cyan('│')} Use --json for AI parsing: mutagent <command> --json ${chalk.cyan('│')}\n${chalk.cyan('│')} ${chalk.cyan('│')}\n${chalk.cyan('└────────────────────────────────────────────────────────────────────────────┘')}\n${!hasCredentials() ? chalk.yellow('\\n Warning: Not authenticated. Run: mutagent auth login --browser\\n') : ''}${!hasRcConfig() ? chalk.green('\\n Get started: mutagent init\\n') : ''}`);\n\n// Propagate global options to env vars before subcommands run\n// This ensures --api-key, --endpoint, and --non-interactive flags are picked up\nprogram.hook('preAction', (thisCommand) => {\n const globalOpts: { apiKey?: string; endpoint?: string; nonInteractive?: boolean } = thisCommand.optsWithGlobals();\n if (globalOpts.apiKey && !process.env.MUTAGENT_API_KEY) {\n process.env.MUTAGENT_API_KEY = globalOpts.apiKey;\n }\n if (globalOpts.endpoint && !process.env.MUTAGENT_ENDPOINT) {\n process.env.MUTAGENT_ENDPOINT = globalOpts.endpoint;\n }\n if (globalOpts.nonInteractive || process.env.CI === 'true' || !process.stdin.isTTY) {\n process.env.MUTAGENT_NON_INTERACTIVE = 'true';\n }\n});\n\n// Add commands\nprogram.addCommand(createInitCommand()); // Init wizard\nprogram.addCommand(createLoginCommand()); // Top-level login\nprogram.addCommand(createAuthCommand());\nprogram.addCommand(createConfigCommand());\nprogram.addCommand(createPromptsCommand());\nprogram.addCommand(createTracesCommand());\nprogram.addCommand(createIntegrateCommand());\nprogram.addCommand(createAgentsCommand());\nprogram.addCommand(createPlaygroundCommand());\nprogram.addCommand(createWorkspacesCommand());\nprogram.addCommand(createProvidersCommand());\nprogram.addCommand(createExploreCommand()); // Codebase scanner\nprogram.addCommand(createSkillsCommand()); // Skills install\n\n// Parse arguments\nprogram.parse();\n",
9
+ "import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { clearCredentials, getApiKey, loadConfig, saveFullCredentials, hasCredentials } from '../lib/config.js';\nimport { validateApiKey, fetchOrganizations, fetchWorkspaces } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError } from '../lib/errors.js';\nimport { performBrowserAuth, BrowserAuthError } from '../lib/browser-auth.js';\nimport { MutationContext } from '../lib/mutation-context.js';\nimport { runPostOnboarding } from './onboarding.js';\n\ninterface LoginOptions {\n apiKey?: string;\n endpoint: string;\n browser?: boolean;\n nonInteractive?: boolean;\n}\n\ninterface LoginAnswers {\n apiKey: string;\n endpoint: string;\n}\n\ninterface AuthMethodAnswer {\n method: 'browser' | 'apiKey';\n}\n\nexport function createAuthCommand(): Command {\n const auth = new Command('auth')\n .description('Authenticate with MutagenT platform')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent auth login\n ${chalk.dim('$')} mutagent auth login --browser\n ${chalk.dim('$')} mutagent auth login --api-key <key>\n ${chalk.dim('$')} mutagent auth status\n ${chalk.dim('$')} mutagent auth logout\n `);\n\n // Login command\n auth\n .command('login')\n .description('Authenticate and store API key')\n .option('--api-key <key>', 'API key (non-interactive)')\n .option('--browser', 'Force browser-based authentication')\n .option('--non-interactive', 'Disable interactive prompts (auto-selects browser auth)')\n .option('--endpoint <url>', 'API endpoint', 'https://api.mutagent.io')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent auth login ${chalk.dim('# Interactive (choose method)')}\n ${chalk.dim('$')} mutagent auth login --browser ${chalk.dim('# Browser OAuth flow')}\n ${chalk.dim('$')} mutagent auth login --api-key mg_live_xxx ${chalk.dim('# Direct API key (CI/CD)')}\n ${chalk.dim('$')} mutagent auth login --non-interactive ${chalk.dim('# Auto browser flow (AI agents)')}\n\nEnvironment Variables:\n MUTAGENT_API_KEY API key (skips login entirely)\n MUTAGENT_ENDPOINT Custom API endpoint\n MUTAGENT_NON_INTERACTIVE=true Non-interactive mode (auto browser auth)\n CI=true Enables non-interactive mode\n `)\n .action(async (options: LoginOptions) => {\n const isJson = getJsonFlag(auth);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const wasFirstLogin = !hasCredentials();\n let apiKey: string | undefined = options.apiKey ?? process.env.MUTAGENT_API_KEY;\n let endpoint: string = process.env.MUTAGENT_ENDPOINT ?? options.endpoint;\n let workspaceName: string | undefined;\n let organizationName: string | undefined;\n\n // If --api-key provided, use direct flow\n if (apiKey) {\n // Validate API key\n output.info('Validating API key...');\n const isValid = await validateApiKey(apiKey, endpoint);\n\n if (!isValid) {\n throw new MutagentError(\n 'INVALID_API_KEY',\n 'Invalid API key or endpoint',\n 'Check your API key and try again'\n );\n }\n\n // Fetch org/workspace context for the API key\n const orgs = await fetchOrganizations(apiKey, endpoint);\n let orgId: string | undefined;\n let wsId: string | undefined;\n\n if (orgs.length >= 1 && orgs[0]) {\n orgId = orgs[0].id;\n const workspaces = await fetchWorkspaces(apiKey, endpoint, orgId);\n const defaultWs = workspaces.find(w => w.isDefault);\n wsId = defaultWs?.id ?? workspaces[0]?.id;\n }\n\n // Save full credentials with workspace/org context\n saveFullCredentials({\n apiKey,\n endpoint,\n workspaceId: wsId,\n organizationId: orgId,\n });\n\n output.success('Authenticated successfully');\n if (!isJson) {\n output.info(`Endpoint: ${endpoint}`);\n }\n return;\n }\n\n // Detect non-interactive environment\n const isNonInteractive =\n options.nonInteractive === true ||\n process.env.MUTAGENT_NON_INTERACTIVE === 'true' ||\n process.env.CI === 'true' ||\n !process.stdin.isTTY;\n\n // In JSON-only mode without API key, we cannot proceed at all\n if (isJson && !options.browser && isNonInteractive) {\n throw new MutagentError(\n 'INTERACTIVE_REQUIRED',\n 'No API key provided. Use --api-key flag, set MUTAGENT_API_KEY env var, or add --browser for browser auth.',\n 'Run: mutagent auth login --api-key <key> or mutagent auth login --browser --non-interactive'\n );\n }\n\n // Show welcome message for first-time users (only in interactive mode)\n if (!isNonInteractive && !hasCredentials()) {\n console.log('\\n' + chalk.bold.cyan(' Welcome to MutagenT CLI!') + '\\n');\n console.log(' No credentials found. Please authenticate to continue.\\n');\n }\n\n // Determine auth method\n let useLocalBrowserAuth = options.browser === true;\n\n // In non-interactive mode, auto-select browser auth (skip the prompt menu)\n if (!useLocalBrowserAuth && isNonInteractive) {\n output.info('Non-interactive environment detected. Using browser authentication.');\n useLocalBrowserAuth = true;\n }\n\n if (!useLocalBrowserAuth && !options.apiKey) {\n // Ask user which method to use (interactive only)\n const methodAnswer = await inquirer.prompt<AuthMethodAnswer>([\n {\n type: 'list',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n name: 'Login (opens browser)',\n value: 'browser',\n },\n {\n name: 'API Key (paste existing key)',\n value: 'apiKey',\n },\n ],\n },\n ]);\n\n useLocalBrowserAuth = methodAnswer.method === 'browser';\n }\n\n if (useLocalBrowserAuth) {\n // Browser authentication flow\n const spinner = ora({\n text: 'Opening browser for authentication...',\n spinner: 'dots',\n });\n\n try {\n spinner.start();\n\n const result = await performBrowserAuth(\n {\n endpoint,\n timeout: 300000, // 5 minutes\n pollInterval: 2000, // 2 seconds\n },\n (message) => {\n spinner.text = message;\n }\n );\n\n spinner.succeed('Authenticated successfully!');\n\n // Save full credentials including workspace info\n saveFullCredentials({\n apiKey: result.apiKey,\n endpoint,\n workspaceId: result.workspaceId,\n organizationId: result.organizationId,\n expiresAt: result.expiresAt,\n });\n\n // Store for display\n apiKey = result.apiKey;\n workspaceName = result.workspaceName;\n organizationName = result.organizationName;\n\n console.log('');\n output.info('Workspace: ' + workspaceName);\n output.info('Organization: ' + organizationName);\n output.info('Endpoint: ' + endpoint);\n\n } catch (error) {\n spinner.fail('Authentication failed');\n\n if (error instanceof BrowserAuthError) {\n throw new MutagentError(\n error.code,\n error.message,\n error.getSuggestion()\n );\n }\n throw error;\n }\n } else {\n // API key paste flow\n const answers = await inquirer.prompt<LoginAnswers>([\n {\n type: 'input',\n name: 'endpoint',\n message: 'MutagenT endpoint:',\n default: endpoint,\n },\n {\n type: 'password',\n name: 'apiKey',\n message: 'API Key:',\n mask: '*',\n validate: (input: string): boolean | string => input.length > 0 || 'API key is required',\n },\n ]);\n\n apiKey = answers.apiKey;\n endpoint = answers.endpoint;\n\n // Validate API key\n output.info('Validating API key...');\n const isValid = await validateApiKey(apiKey, endpoint);\n\n if (!isValid) {\n throw new MutagentError(\n 'INVALID_API_KEY',\n 'Invalid API key or endpoint',\n 'Check your API key and try again'\n );\n }\n\n // Fetch organizations to get workspace/org context\n let selectedOrgId: string | undefined;\n let selectedOrgName: string | undefined;\n let selectedWsId: string | undefined;\n let selectedWsName: string | undefined;\n\n const orgs = await fetchOrganizations(apiKey, endpoint);\n if (orgs.length === 1 && orgs[0]) {\n // Auto-select sole org\n selectedOrgId = orgs[0].id;\n selectedOrgName = orgs[0].name;\n } else if (orgs.length > 1) {\n const orgAnswer = await inquirer.prompt<{ orgId: string }>([{\n type: 'list',\n name: 'orgId',\n message: 'Select organization:',\n choices: orgs.map(o => ({ name: o.name, value: o.id })),\n }]);\n selectedOrgId = orgAnswer.orgId;\n selectedOrgName = orgs.find(o => o.id === selectedOrgId)?.name;\n }\n\n if (selectedOrgId) {\n const workspaces = await fetchWorkspaces(apiKey, endpoint, selectedOrgId);\n const defaultWs = workspaces.find(w => w.isDefault);\n if (workspaces.length === 1 && workspaces[0]) {\n selectedWsId = workspaces[0].id;\n selectedWsName = workspaces[0].name;\n } else if (defaultWs) {\n selectedWsId = defaultWs.id;\n selectedWsName = defaultWs.name;\n } else if (workspaces.length > 1) {\n const wsAnswer = await inquirer.prompt<{ wsId: string }>([{\n type: 'list',\n name: 'wsId',\n message: 'Select workspace:',\n choices: workspaces.map(w => ({ name: w.name + (w.isDefault ? ' (default)' : ''), value: w.id })),\n }]);\n selectedWsId = wsAnswer.wsId;\n selectedWsName = workspaces.find(w => w.id === selectedWsId)?.name;\n }\n }\n\n // Save full credentials with workspace/org context\n saveFullCredentials({\n apiKey,\n endpoint,\n workspaceId: selectedWsId,\n organizationId: selectedOrgId,\n });\n\n output.success('Authenticated successfully');\n if (selectedOrgName) output.info('Organization: ' + selectedOrgName);\n if (selectedWsName) output.info('Workspace: ' + selectedWsName);\n output.info('Endpoint: ' + endpoint);\n }\n\n // Post-onboarding flow: only on first interactive login\n if (wasFirstLogin && process.stdin.isTTY && !isJson) {\n await runPostOnboarding();\n }\n } catch (error) {\n if (error instanceof MutagentError) {\n output.error(error.message);\n process.exit(error.exitCode);\n }\n throw error;\n }\n });\n\n // Status command\n auth\n .command('status')\n .description('Check authentication status')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent auth status\n ${chalk.dim('$')} mutagent auth status --json\n `)\n .action(async () => {\n const isJson = getJsonFlag(auth);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n const apiKey = getApiKey();\n const config = loadConfig();\n const endpoint = config.endpoint ?? 'https://api.mutagent.io';\n\n if (!apiKey) {\n if (isJson) {\n output.output({ authenticated: false, message: 'Not authenticated' });\n } else {\n output.error('Not authenticated');\n output.info('Run: mutagent auth login');\n }\n process.exit(0);\n }\n\n // Validate the key\n const isValid = await validateApiKey(apiKey, endpoint);\n\n // Check onboarding and context state\n const cwd = process.cwd();\n const hasOnboarding = existsSync(join(cwd, '.mutagentrc.json'));\n const hasContextFile = existsSync(join(cwd, '.mutagent', 'mutation-context.md'));\n\n let contextSummary: { prompts: number; datasets: number; evaluations: number; integrated: string[] } | undefined;\n if (hasContextFile) {\n try {\n const ctx = MutationContext.load(cwd);\n contextSummary = ctx.getSummary();\n } catch {\n // Silently ignore parse errors\n }\n }\n\n if (isJson) {\n const statusResult: Record<string, unknown> = {\n authenticated: isValid,\n endpoint,\n keyPrefix: `${apiKey.slice(0, 8)}...`,\n defaultWorkspace: config.defaultWorkspace,\n defaultOrganization: config.defaultOrganization,\n onboarding: hasOnboarding,\n contextFile: hasContextFile,\n context: contextSummary ?? null,\n };\n if (!isValid) {\n statusResult.message = 'Authentication invalid — run `mutagent auth login --browser`';\n statusResult.remediation = {\n interactive: 'mutagent auth login --browser',\n nonInteractive: 'export MUTAGENT_API_KEY=<your-key>',\n ciCd: 'mutagent auth login --api-key <key>',\n };\n }\n output.output(statusResult);\n } else {\n if (isValid) {\n output.success('Authentication: Authenticated');\n output.info(`Endpoint: ${endpoint}`);\n output.info(`Key: ${apiKey.slice(0, 8)}...`);\n if (config.defaultWorkspace) {\n output.info(`Workspace: ${config.defaultWorkspace}`);\n }\n if (config.defaultOrganization) {\n output.info(`Organization: ${config.defaultOrganization}`);\n }\n } else {\n output.error('Authentication: Invalid — run `mutagent auth login --browser`');\n console.error('');\n console.error('Authentication required. Options:');\n console.error(' Interactive: mutagent auth login --browser');\n console.error(' Non-interactive: export MUTAGENT_API_KEY=<your-key>');\n console.error(' CI/CD: mutagent auth login --api-key <key>');\n }\n\n // Onboarding status\n if (hasOnboarding) {\n output.success('Onboarding: Complete (.mutagentrc.json found)');\n } else {\n output.warn('Onboarding: Not initialized (run `mutagent init`)');\n }\n\n // Context file status\n if (hasContextFile && contextSummary) {\n const parts = [\n `${String(contextSummary.prompts)} prompts`,\n `${String(contextSummary.datasets)} datasets`,\n `${String(contextSummary.evaluations)} evaluations`,\n ];\n output.success(`Context File: .mutagent/mutation-context.md (${parts.join(', ')})`);\n } else if (hasContextFile) {\n output.success('Context File: .mutagent/mutation-context.md');\n } else {\n output.warn('Context File: Not found (run `mutagent explore`)');\n }\n\n // Integration status\n if (contextSummary && contextSummary.integrated.length > 0) {\n output.success(`Integration: ${contextSummary.integrated.join(', ')} (active)`);\n }\n }\n });\n\n // Logout command\n auth\n .command('logout')\n .description('Clear stored credentials')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent auth logout\n `)\n .action(() => {\n const isJson = getJsonFlag(auth);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n clearCredentials();\n output.success('Logged out successfully');\n });\n\n return auth;\n}\n",
10
10
  "import chalk from 'chalk';\nimport type { Command } from 'commander';\nimport type { OutputFormat } from '../types/index.js';\n\n/**\n * Safely extract the --json flag from Commander options chain.\n * Handles the `any` type from Commander's opts() method.\n */\nexport function getJsonFlag(command: Command | undefined): boolean {\n if (!command) return false;\n // Navigate up the parent chain to find the root command options\n \n const parentOpts = command.parent ? command.parent.opts() : null;\n \n const ownOpts = command.opts();\n \n return Boolean(parentOpts?.json ?? ownOpts.json);\n}\n\nexport class OutputFormatter {\n constructor(private format: OutputFormat) {}\n\n output(data: unknown): void {\n if (this.format === 'json') {\n console.log(JSON.stringify(data, null, 2));\n } else {\n this.formatTable(data);\n }\n }\n\n private formatTable(data: unknown): void {\n if (Array.isArray(data)) {\n this.formatArray(data);\n } else if (data && typeof data === 'object') {\n this.formatObject(data as Record<string, unknown>);\n } else {\n console.log(data);\n }\n }\n\n private formatArray(data: unknown[]): void {\n if (data.length === 0) {\n console.log(chalk.gray('No results'));\n return;\n }\n\n // Get columns from first item\n const firstItem = data[0];\n if (!firstItem || typeof firstItem !== 'object') {\n data.forEach(item => { console.log(` ${String(item)}`); });\n return;\n }\n\n const keys = Object.keys(firstItem);\n \n // Helper to convert any value to display string\n const toDisplayString = (val: unknown): string => {\n if (val === null || val === undefined) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n if (typeof val === 'string') return val;\n if (typeof val === 'number' || typeof val === 'boolean' || typeof val === 'bigint') {\n return val.toString();\n }\n return JSON.stringify(val);\n };\n\n // Calculate column widths\n const widths: Record<string, number> = {};\n keys.forEach(key => {\n widths[key] = Math.max(\n key.length,\n ...data.map(item => toDisplayString((item as Record<string, unknown>)[key]).length)\n );\n });\n\n // Print header\n const header = keys.map(key => chalk.bold(key.toUpperCase().padEnd(widths[key] ?? 10))).join(' ');\n console.log(header);\n console.log(keys.map(key => '-'.repeat(widths[key] ?? 10)).join(' '));\n\n // Print rows\n data.forEach(item => {\n const row = keys.map(key => {\n const value = toDisplayString((item as Record<string, unknown>)[key]);\n const width = widths[key] ?? 10;\n return value.padEnd(width).slice(0, width);\n }).join(' ');\n console.log(row);\n });\n\n console.log(chalk.gray(`\\n${String(data.length)} result(s)`));\n }\n\n private formatObject(data: Record<string, unknown>): void {\n const maxKeyLength = Math.max(...Object.keys(data).map(k => k.length));\n\n Object.entries(data).forEach(([key, value]) => {\n const formattedKey = chalk.bold(key.padEnd(maxKeyLength));\n let formattedValue: string;\n\n if (value === null || value === undefined) {\n formattedValue = '';\n } else if (typeof value === 'object') {\n formattedValue = JSON.stringify(value, null, 2);\n } else if (typeof value === 'string') {\n formattedValue = value;\n } else if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {\n formattedValue = value.toString();\n } else {\n formattedValue = JSON.stringify(value);\n }\n\n console.log(`${formattedKey} ${formattedValue}`);\n });\n }\n\n success(message: string): void {\n if (this.format === 'json') {\n console.log(JSON.stringify({ success: true, message }, null, 2));\n } else {\n console.log(chalk.green(`✓ ${message}`));\n }\n }\n\n error(message: string): void {\n if (this.format === 'json') {\n console.log(JSON.stringify({ success: false, error: message }, null, 2));\n } else {\n console.log(chalk.red(`✗ ${message}`));\n }\n }\n\n info(message: string): void {\n if (this.format !== 'json') {\n console.log(chalk.blue(`ℹ ${message}`));\n }\n }\n\n warn(message: string): void {\n if (this.format === 'json') {\n console.log(JSON.stringify({ warning: message }, null, 2));\n } else {\n console.log(chalk.yellow(`⚠ ${message}`));\n }\n }\n}\n\ninterface Spinner {\n start: () => Promise<unknown> | undefined;\n stop?: () => void;\n succeed?: () => void;\n fail?: () => void;\n}\n\nexport function createSpinner(text: string, isJson: boolean): Spinner {\n if (isJson) {\n // No-op spinner for JSON mode - returns undefined to match interface\n const noop = (): undefined => undefined;\n return {\n start: noop,\n stop: noop,\n succeed: noop,\n fail: noop,\n };\n }\n\n // Dynamic import for ora (ESM)\n const start = async (): Promise<unknown> => {\n const { default: ora } = await import('ora');\n return ora(text).start();\n };\n\n return { start };\n}\n",
11
11
  "/**\n * Browser Authentication Flow for CLI\n *\n * Implements the CLI token-based browser authentication flow:\n * 1. Generate unique CLI token\n * 2. Call POST /api/auth/cli/init to register pending auth\n * 3. Open browser with auth URL\n * 4. Poll GET /api/auth/cli/status until completion/timeout/error\n * 5. Return credentials on success\n */\n\nimport { hostname, platform } from 'os';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface BrowserAuthOptions {\n /** API endpoint (e.g., https://api.mutagent.dev) */\n endpoint: string;\n /** Timeout in milliseconds (default: 5 minutes) */\n timeout?: number;\n /** Polling interval in milliseconds (default: 2 seconds) */\n pollInterval?: number;\n /** Skip opening browser (for test mode) */\n skipBrowserOpen?: boolean;\n}\n\nexport interface BrowserAuthResult {\n /** The workspace-scoped API key */\n apiKey: string;\n /** Workspace ID for the scoped key */\n workspaceId: string;\n /** Workspace name for display */\n workspaceName: string;\n /** Organization ID */\n organizationId: string;\n /** Organization name for display */\n organizationName: string;\n /** When the key expires (if applicable) */\n expiresAt?: string;\n}\n\nexport interface BrowserAuthInitResponse {\n /** URL to open in browser */\n authUrl: string;\n /** Expiration time in seconds */\n expiresIn: number;\n}\n\nexport type BrowserAuthStatus =\n | 'pending'\n | 'completed'\n | 'expired'\n | 'denied'\n | 'not_found';\n\nexport interface BrowserAuthStatusResponse {\n status: BrowserAuthStatus;\n apiKey?: string;\n workspaceId?: string;\n workspaceName?: string;\n organizationId?: string;\n organizationName?: string;\n expiresAt?: string;\n error?: string;\n}\n\n// =============================================================================\n// Browser Auth Implementation\n// =============================================================================\n\n/**\n * Generate a unique CLI token for authentication\n * Uses crypto.randomUUID for cryptographically secure random tokens\n */\nexport function generateCliToken(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Initialize browser authentication flow with the server\n */\nexport async function initBrowserAuth(\n endpoint: string,\n cliToken: string\n): Promise<BrowserAuthInitResponse> {\n const response = await fetch(`${endpoint}/api/auth/cli/init`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n cliToken,\n hostname: hostname(),\n platform: platform(),\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new BrowserAuthError(\n 'INIT_FAILED',\n 'Failed to initialize browser auth: ' + String(response.status) + ' ' + errorText\n );\n }\n\n const data = (await response.json()) as BrowserAuthInitResponse;\n return data;\n}\n\n/**\n * Poll the server for authentication status\n */\nexport async function pollAuthStatus(\n endpoint: string,\n cliToken: string\n): Promise<BrowserAuthStatusResponse> {\n const response = await fetch(\n `${endpoint}/api/auth/cli/status?token=${encodeURIComponent(cliToken)}`\n );\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new BrowserAuthError(\n 'POLL_FAILED',\n 'Failed to poll auth status: ' + String(response.status) + ' ' + errorText\n );\n }\n\n const data = (await response.json()) as BrowserAuthStatusResponse;\n return data;\n}\n\n/**\n * Open a URL in the system's default browser\n * In test mode (MUTAGENT_TEST_MODE=true), outputs URL to stdout instead\n * In non-interactive mode, prints URL to stdout for AI agents to display\n */\nexport async function openBrowser(url: string): Promise<void> {\n // Test mode: output URL to stdout instead of opening browser\n if (process.env.MUTAGENT_TEST_MODE === 'true') {\n console.log(`AUTH_URL:${url}`);\n return;\n }\n\n // Dynamically import 'open' package\n try {\n const { default: open } = await import('open');\n await open(url);\n } catch {\n // If 'open' package is not available, provide manual instructions\n // In non-interactive mode, this is expected -- just print the URL\n throw new BrowserAuthError(\n 'BROWSER_OPEN_FAILED',\n `Could not open browser automatically. Please visit: ${url}`\n );\n }\n}\n\n/**\n * Sleep utility for polling\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Perform the complete browser authentication flow\n *\n * @param options - Browser auth options\n * @param onStatusUpdate - Optional callback for status updates (for spinners, etc.)\n * @returns Browser auth result with credentials\n */\nexport async function performBrowserAuth(\n options: BrowserAuthOptions,\n onStatusUpdate?: (message: string) => void\n): Promise<BrowserAuthResult> {\n const {\n endpoint,\n timeout = 300000, // 5 minutes default\n pollInterval = 2000, // 2 seconds default\n skipBrowserOpen = false,\n } = options;\n\n // 1. Generate unique CLI token\n const cliToken = generateCliToken();\n\n // 2. Register pending auth with server\n onStatusUpdate?.('Initializing browser authentication...');\n const initResponse = await initBrowserAuth(endpoint, cliToken);\n const { authUrl } = initResponse;\n\n // 3. Open browser (or output URL in test mode / non-interactive mode)\n if (!skipBrowserOpen) {\n onStatusUpdate?.('Opening browser for authentication...');\n try {\n await openBrowser(authUrl);\n } catch (error) {\n // If browser fails to open, continue but inform user\n // This is expected in non-interactive environments (CI, AI agents)\n if (error instanceof BrowserAuthError && error.code === 'BROWSER_OPEN_FAILED') {\n onStatusUpdate?.(error.message);\n } else {\n throw error;\n }\n }\n }\n\n // Always print the URL clearly for non-interactive environments (AI agents, CI)\n // This ensures the URL is visible even if the browser failed to open\n console.log('');\n console.log(' Open this URL to authenticate:');\n console.log('');\n console.log(' ' + authUrl);\n console.log('');\n\n // 4. Poll for completion\n onStatusUpdate?.('Waiting for browser authentication...');\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeout) {\n await sleep(pollInterval);\n\n const status = await pollAuthStatus(endpoint, cliToken);\n\n switch (status.status) {\n case 'pending':\n // Continue polling\n continue;\n\n case 'completed':\n // Success! Return credentials\n if (\n !status.apiKey ||\n !status.workspaceId ||\n !status.workspaceName ||\n !status.organizationId ||\n !status.organizationName\n ) {\n throw new BrowserAuthError(\n 'INCOMPLETE_RESPONSE',\n 'Server returned incomplete auth response'\n );\n }\n return {\n apiKey: status.apiKey,\n workspaceId: status.workspaceId,\n workspaceName: status.workspaceName,\n organizationId: status.organizationId,\n organizationName: status.organizationName,\n expiresAt: status.expiresAt,\n };\n\n case 'expired':\n throw new BrowserAuthError(\n 'AUTH_EXPIRED',\n 'Browser authentication expired. Please try again.'\n );\n\n case 'denied':\n throw new BrowserAuthError(\n 'AUTH_DENIED',\n status.error ?? 'Browser authentication was denied.'\n );\n\n case 'not_found':\n throw new BrowserAuthError(\n 'TOKEN_NOT_FOUND',\n 'Authentication token not found. Please try again.'\n );\n\n default:\n throw new BrowserAuthError(\n 'UNKNOWN_STATUS',\n 'Unknown auth status: ' + String(status.status)\n );\n }\n }\n\n // Timeout\n throw new BrowserAuthError(\n 'AUTH_TIMEOUT',\n 'Browser authentication timed out after 5 minutes. Please try again.'\n );\n}\n\n// =============================================================================\n// Error Classes\n// =============================================================================\n\nexport type BrowserAuthErrorCode =\n | 'INIT_FAILED'\n | 'POLL_FAILED'\n | 'BROWSER_OPEN_FAILED'\n | 'AUTH_EXPIRED'\n | 'AUTH_DENIED'\n | 'AUTH_TIMEOUT'\n | 'TOKEN_NOT_FOUND'\n | 'INCOMPLETE_RESPONSE'\n | 'UNKNOWN_STATUS';\n\nexport class BrowserAuthError extends Error {\n code: BrowserAuthErrorCode;\n\n constructor(code: BrowserAuthErrorCode, message: string) {\n super(message);\n this.name = 'BrowserAuthError';\n this.code = code;\n }\n\n /**\n * Get user-friendly suggestion based on error code\n */\n getSuggestion(): string {\n switch (this.code) {\n case 'INIT_FAILED':\n return 'Check your endpoint configuration and network connection.';\n case 'POLL_FAILED':\n return 'Check your network connection and try again.';\n case 'BROWSER_OPEN_FAILED':\n return 'Copy the URL above and open it manually in your browser.';\n case 'AUTH_EXPIRED':\n case 'AUTH_TIMEOUT':\n return 'Run \"mutagent auth login\" again to restart authentication.';\n case 'AUTH_DENIED':\n return 'Ensure you have access to the workspace and try again.';\n case 'TOKEN_NOT_FOUND':\n case 'INCOMPLETE_RESPONSE':\n case 'UNKNOWN_STATUS':\n return 'Please try again. If the issue persists, contact support.';\n default:\n return 'Please try again.';\n }\n }\n}\n",
12
+ "import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, resolve } from 'path';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PromptEntry {\n file: string;\n line: number;\n preview: string;\n platformId?: string;\n version?: string;\n status: 'discovered' | 'uploaded';\n}\n\nexport interface DatasetEntry {\n file: string;\n name: string;\n items: number;\n platformId?: string;\n promptId?: string;\n status: 'discovered' | 'uploaded';\n}\n\nexport interface EvaluationEntry {\n name: string;\n criteriaCount: number;\n platformId?: string;\n promptId?: string;\n status: 'discovered' | 'uploaded';\n}\n\nexport interface IntegrationEntry {\n framework: string;\n pkg: string;\n status: string;\n}\n\n// =============================================================================\n// Markdown Table Helpers\n// =============================================================================\n\nfunction parseTableRows(lines: string[]): string[][] {\n const rows: string[][] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith('|') || !trimmed.endsWith('|')) continue;\n // Skip separator rows (e.g. |------|------|)\n if (/^\\|[\\s-:|]+\\|$/.test(trimmed)) continue;\n const cells = trimmed\n .slice(1, -1) // strip outer pipes\n .split('|')\n .map(c => c.trim());\n rows.push(cells);\n }\n return rows;\n}\n\nfunction emptyToUndefined(value: string | undefined): string | undefined {\n return value && value.length > 0 ? value : undefined;\n}\n\nfunction renderTable(headers: string[], rows: string[][]): string {\n const separator = headers.map(h => '-'.repeat(Math.max(h.length, 3)));\n const lines = [\n `| ${headers.join(' | ')} |`,\n `| ${separator.join(' | ')} |`,\n ...rows.map(r => `| ${r.join(' | ')} |`),\n ];\n return lines.join('\\n');\n}\n\n// =============================================================================\n// MutationContext\n// =============================================================================\n\nconst CONTEXT_DIR = '.mutagent';\nconst CONTEXT_FILE = 'mutation-context.md';\n\nexport class MutationContext {\n private prompts: PromptEntry[] = [];\n private datasets: DatasetEntry[] = [];\n private evaluations: EvaluationEntry[] = [];\n private integrations: IntegrationEntry[] = [];\n private filePath: string;\n\n private constructor(filePath: string) {\n this.filePath = filePath;\n }\n\n static load(projectRoot?: string): MutationContext {\n const root = projectRoot ?? process.cwd();\n const dirPath = join(resolve(root), CONTEXT_DIR);\n const filePath = join(dirPath, CONTEXT_FILE);\n\n const ctx = new MutationContext(filePath);\n\n if (existsSync(filePath)) {\n const content = readFileSync(filePath, 'utf-8');\n ctx.parse(content);\n }\n\n return ctx;\n }\n\n save(): void {\n const dirPath = join(this.filePath, '..');\n if (!existsSync(dirPath)) {\n mkdirSync(dirPath, { recursive: true });\n }\n writeFileSync(this.filePath, this.render(), 'utf-8');\n }\n\n // ---------------------------------------------------------------------------\n // Prompt operations\n // ---------------------------------------------------------------------------\n\n addDiscoveredPrompt(file: string, line: number, preview: string): void {\n const existing = this.prompts.find(p => p.file === file && p.line === line);\n if (existing) {\n existing.preview = preview;\n return;\n }\n this.prompts.push({ file, line, preview, status: 'discovered' });\n }\n\n markPromptUploaded(file: string, platformId: string, version: string): void {\n const entry = this.prompts.find(p => p.file === file);\n if (entry) {\n entry.platformId = platformId;\n entry.version = version;\n entry.status = 'uploaded';\n }\n }\n\n getDiscoveredPrompts(): PromptEntry[] {\n return this.prompts.filter(p => p.status === 'discovered');\n }\n\n getUploadedPrompts(): PromptEntry[] {\n return this.prompts.filter(p => p.status === 'uploaded');\n }\n\n // ---------------------------------------------------------------------------\n // Dataset operations\n // ---------------------------------------------------------------------------\n\n addDiscoveredDataset(file: string, name: string, items: number): void {\n const existing = this.datasets.find(d => d.file === file && d.name === name);\n if (existing) {\n existing.items = items;\n return;\n }\n this.datasets.push({ file, name, items, status: 'discovered' });\n }\n\n markDatasetUploaded(file: string, platformId: string, promptId: string): void {\n const entry = this.datasets.find(d => d.file === file);\n if (entry) {\n entry.platformId = platformId;\n entry.promptId = promptId;\n entry.status = 'uploaded';\n }\n }\n\n // ---------------------------------------------------------------------------\n // Evaluation operations\n // ---------------------------------------------------------------------------\n\n addEvaluation(name: string, criteriaCount: number, platformId: string, promptId: string): void {\n const existing = this.evaluations.find(e => e.name === name);\n if (existing) {\n existing.criteriaCount = criteriaCount;\n existing.platformId = platformId;\n existing.promptId = promptId;\n existing.status = 'uploaded';\n return;\n }\n this.evaluations.push({ name, criteriaCount, platformId, promptId, status: 'uploaded' });\n }\n\n // ---------------------------------------------------------------------------\n // Integration operations\n // ---------------------------------------------------------------------------\n\n setIntegrationStatus(framework: string, pkg: string, status: string): void {\n const existing = this.integrations.find(i => i.framework === framework);\n if (existing) {\n existing.pkg = pkg;\n existing.status = status;\n return;\n }\n this.integrations.push({ framework, pkg, status });\n }\n\n // ---------------------------------------------------------------------------\n // Summary\n // ---------------------------------------------------------------------------\n\n getSummary(): { prompts: number; datasets: number; evaluations: number; integrated: string[] } {\n return {\n prompts: this.prompts.length,\n datasets: this.datasets.length,\n evaluations: this.evaluations.length,\n integrated: this.integrations.map(i => i.framework),\n };\n }\n\n // ---------------------------------------------------------------------------\n // Serialization\n // ---------------------------------------------------------------------------\n\n private render(): string {\n const now = new Date().toISOString();\n const sections: string[] = [\n '# MutagenT Mutation Context',\n `<!-- MutagenT:AUTO-GENERATED - Do not edit manually -->`,\n `<!-- Last updated: ${now} -->`,\n '',\n '## Discovered Resources',\n '',\n '### Prompts',\n renderTable(\n ['File', 'Line', 'Content Preview', 'Platform ID', 'Version', 'Status'],\n this.prompts.map(p => [\n p.file,\n String(p.line),\n p.preview,\n p.platformId ?? '',\n p.version ?? '',\n p.status,\n ]),\n ),\n '',\n '### Datasets',\n renderTable(\n ['File', 'Name', 'Items', 'Platform ID', 'Prompt ID', 'Status'],\n this.datasets.map(d => [\n d.file,\n d.name,\n String(d.items),\n d.platformId ?? '',\n d.promptId ?? '',\n d.status,\n ]),\n ),\n '',\n '### Evaluations',\n renderTable(\n ['Name', 'Criteria Count', 'Platform ID', 'Prompt ID', 'Status'],\n this.evaluations.map(e => [\n e.name,\n String(e.criteriaCount),\n e.platformId ?? '',\n e.promptId ?? '',\n e.status,\n ]),\n ),\n '',\n '## Integration Status',\n renderTable(\n ['Framework', 'Package', 'Status'],\n this.integrations.map(i => [\n i.framework,\n i.pkg,\n i.status,\n ]),\n ),\n '',\n ];\n\n return sections.join('\\n');\n }\n\n private parse(content: string): void {\n const lines = content.split('\\n');\n\n let currentSection: 'prompts' | 'datasets' | 'evaluations' | 'integrations' | null = null;\n let sectionLines: string[] = [];\n\n const flushSection = (): void => {\n if (!currentSection || sectionLines.length === 0) return;\n\n const rows = parseTableRows(sectionLines);\n // Skip header row (first row after parsing)\n const dataRows = rows.slice(1);\n\n switch (currentSection) {\n case 'prompts':\n for (const row of dataRows) {\n const [file, lineStr, preview, pid, ver, st] = row;\n if (file !== undefined && lineStr !== undefined && preview !== undefined) {\n this.prompts.push({\n file,\n line: parseInt(lineStr, 10) || 0,\n preview,\n platformId: emptyToUndefined(pid),\n version: emptyToUndefined(ver),\n status: (emptyToUndefined(st) as PromptEntry['status'] | undefined) ?? 'discovered',\n });\n }\n }\n break;\n case 'datasets':\n for (const row of dataRows) {\n const [file, name, itemsStr, pid, prid, st] = row;\n if (file !== undefined && name !== undefined && itemsStr !== undefined) {\n this.datasets.push({\n file,\n name,\n items: parseInt(itemsStr, 10) || 0,\n platformId: emptyToUndefined(pid),\n promptId: emptyToUndefined(prid),\n status: (emptyToUndefined(st) as DatasetEntry['status'] | undefined) ?? 'discovered',\n });\n }\n }\n break;\n case 'evaluations':\n for (const row of dataRows) {\n const [name, ccStr, pid, prid, st] = row;\n if (name !== undefined && ccStr !== undefined) {\n this.evaluations.push({\n name,\n criteriaCount: parseInt(ccStr, 10) || 0,\n platformId: emptyToUndefined(pid),\n promptId: emptyToUndefined(prid),\n status: (emptyToUndefined(st) as EvaluationEntry['status'] | undefined) ?? 'discovered',\n });\n }\n }\n break;\n case 'integrations':\n for (const row of dataRows) {\n const [framework, pkg, status] = row;\n if (framework !== undefined && pkg !== undefined && status !== undefined) {\n this.integrations.push({ framework, pkg, status });\n }\n }\n break;\n }\n\n sectionLines = [];\n };\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (trimmed === '### Prompts') {\n flushSection();\n currentSection = 'prompts';\n continue;\n }\n if (trimmed === '### Datasets') {\n flushSection();\n currentSection = 'datasets';\n continue;\n }\n if (trimmed === '### Evaluations') {\n flushSection();\n currentSection = 'evaluations';\n continue;\n }\n if (trimmed === '## Integration Status') {\n flushSection();\n currentSection = 'integrations';\n continue;\n }\n // New section heading resets current context\n if (trimmed.startsWith('## ') && currentSection !== null && trimmed !== '## Integration Status') {\n flushSection();\n currentSection = null;\n continue;\n }\n\n if (currentSection && trimmed.startsWith('|')) {\n sectionLines.push(trimmed);\n }\n }\n\n flushSection();\n }\n}\n",
13
+ "import chalk from 'chalk';\nimport { resolve } from 'path';\nimport { exploreCodebase, parseExtensions, parseExcludeDirs } from '../lib/explorer.js';\n\n/**\n * Post-onboarding flow presented after successful first login.\n * Offers 3 paths: Guided Integration, Free-flow Optimization, or Exit.\n *\n * IMPORTANT: This function is APPENDED to the auth login success handler.\n * It must NOT modify any auth state or credentials.\n */\nexport async function runPostOnboarding(): Promise<void> {\n const inquirer = (await import('inquirer')).default;\n\n console.log('');\n console.log(chalk.bold.cyan(' What would you like to do next?'));\n console.log('');\n\n const { path: selectedPath } = await inquirer.prompt<{ path: 'integrate' | 'optimize' | 'exit' }>([{\n type: 'list',\n name: 'path',\n message: 'Choose your path:',\n choices: [\n {\n name: `${chalk.green('A')} Guided Integration — connect your AI framework`,\n value: 'integrate',\n },\n {\n name: `${chalk.green('B')} Quick Optimization — upload a prompt and optimize it`,\n value: 'optimize',\n },\n {\n name: `${chalk.green('C')} Exit — explore on your own`,\n value: 'exit',\n },\n ],\n }]);\n\n if (selectedPath === 'exit') {\n console.log('');\n console.log(chalk.dim(' You can run `mutagent --help` anytime to see available commands.'));\n console.log(chalk.dim(' Try `mutagent explore` to scan your codebase for prompts.'));\n console.log('');\n return;\n }\n\n // Run explore on current directory\n console.log('');\n console.log(chalk.cyan(' Scanning your codebase...'));\n console.log('');\n\n const scanPath = resolve('.');\n const result = exploreCodebase({\n path: scanPath,\n depth: 10,\n extensions: parseExtensions('**/*.{ts,js,py,tsx,jsx}'),\n excludeDirs: parseExcludeDirs('node_modules,dist,.git,build,.next,__pycache__,venv,.venv'),\n markersOnly: false,\n });\n\n const totalFindings = result.prompts.length + result.datasets.length;\n\n if (totalFindings > 0) {\n console.log(chalk.green(` Found ${String(result.prompts.length)} prompt(s) and ${String(result.datasets.length)} dataset(s)`));\n } else {\n console.log(chalk.dim(' No prompts or datasets detected yet.'));\n }\n console.log('');\n\n if (selectedPath === 'integrate') {\n await runIntegrationPath();\n } else {\n runOptimizationPath(result.prompts.length, result.datasets.length);\n }\n}\n\nasync function runIntegrationPath(): Promise<void> {\n const inquirerMod = (await import('inquirer')).default;\n const { framework } = await inquirerMod.prompt<{ framework: string }>([{\n type: 'list',\n name: 'framework',\n message: 'Which AI framework are you using?',\n choices: [\n { name: 'Mastra', value: 'mastra' },\n { name: 'LangChain', value: 'langchain' },\n { name: 'LangGraph', value: 'langgraph' },\n { name: 'Vercel AI SDK', value: 'vercel-ai' },\n { name: 'Claude Code', value: 'claude-code' },\n { name: 'Other / Generic', value: 'generic' },\n ],\n }]);\n\n console.log('');\n console.log(chalk.bold(' Next steps:'));\n console.log('');\n console.log(` 1. ${chalk.green(`mutagent integrate ${framework}`)}`);\n console.log(` Get the integration guide for ${framework}`);\n console.log('');\n console.log(` 2. ${chalk.green(`mutagent integrate ${framework} --verify`)}`);\n console.log(' Verify your integration is working');\n console.log('');\n console.log(` 3. ${chalk.green('mutagent explore')}`);\n console.log(' Re-scan to confirm markers are in place');\n console.log('');\n}\n\nfunction runOptimizationPath(promptCount: number, datasetCount: number): void {\n console.log(chalk.bold(' Quick Optimization Workflow:'));\n console.log('');\n\n let step = 1;\n\n if (promptCount === 0) {\n console.log(` ${String(step)}. ${chalk.green('mutagent prompts create --name \"my-prompt\" --raw \"Your prompt with {{variables}}\"')}`);\n console.log(' Create a prompt with template variables');\n console.log('');\n step++;\n } else {\n console.log(chalk.dim(` ${chalk.green('\\u2713')} Prompts detected in codebase (${String(promptCount)} found)`));\n console.log(chalk.dim(` Upload one: mutagent prompts create --name \"my-prompt\" --raw-file <path>`));\n console.log('');\n }\n\n if (datasetCount === 0) {\n console.log(` ${String(step)}. ${chalk.green('mutagent prompts dataset add <prompt-id> --file dataset.json')}`);\n console.log(' Upload a dataset with input/output pairs');\n console.log('');\n step++;\n } else {\n console.log(chalk.dim(` ${chalk.green('\\u2713')} Datasets detected in codebase (${String(datasetCount)} found)`));\n console.log(chalk.dim(` Upload one: mutagent prompts dataset add <prompt-id> --file <path>`));\n console.log('');\n }\n\n console.log(` ${String(step)}. ${chalk.green('mutagent prompts evaluation create <prompt-id> --name \"My Eval\" --file criteria.json')}`);\n console.log(' Define evaluation criteria');\n console.log('');\n step++;\n\n console.log(` ${String(step)}. ${chalk.green('mutagent prompts optimize start <prompt-id> --dataset <dataset-id>')}`);\n console.log(' Start the optimization loop');\n console.log('');\n\n console.log(chalk.dim(' Tip: Use `mutagent prompts list` to see your prompt IDs.'));\n console.log('');\n}\n",
14
+ "import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname, basename } from 'path';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ExploreOptions {\n path: string;\n depth: number;\n extensions: string[];\n excludeDirs: string[];\n markersOnly: boolean;\n}\n\nexport interface DiscoveredPrompt {\n file: string;\n line: number;\n preview: string;\n reason: string;\n}\n\nexport interface DiscoveredDataset {\n file: string;\n name: string;\n items: number;\n}\n\nexport interface MarkerEntry {\n file: string;\n line: number;\n type: 'prompt' | 'dataset' | 'evaluation';\n platformId?: string;\n}\n\nexport interface ExploreResult {\n prompts: DiscoveredPrompt[];\n datasets: DiscoveredDataset[];\n markers: MarkerEntry[];\n}\n\n// =============================================================================\n// Heuristic Patterns\n// =============================================================================\n\n// Template variable pattern: {{variable_name}}\nconst TEMPLATE_VAR_PATTERN = /\\{\\{[a-zA-Z_][a-zA-Z0-9_]*\\}\\}/;\n\n// Prompt-like constant names\nconst PROMPT_NAME_PATTERN = /(?:const|let|var|export)\\s+\\w*(?:prompt|system|agent|instruction|template)\\w*\\s*=/i;\n\n// JSON schema indicators\nconst SCHEMA_PATTERN = /[\"']?(?:inputSchema|outputSchema|properties|required)[\"']?\\s*[=:]/;\n\n// Zod schema definitions\nconst ZOD_SCHEMA_PATTERN = /z\\.object\\s*\\(/;\n\n// Pydantic model definitions\nconst PYDANTIC_PATTERN = /class\\s+\\w+\\s*\\(\\s*(?:BaseModel|BaseSettings)\\s*\\)/;\n\n// MutagenT marker pattern\nconst MARKER_START_PATTERN = /MutagenT:START\\s+(\\w+)(?:\\s+id=(\\S+))?/;\n\n// =============================================================================\n// File Walking\n// =============================================================================\n\nfunction walkDir(\n dir: string,\n extensions: string[],\n excludeDirs: string[],\n maxDepth: number,\n currentDepth = 0,\n): string[] {\n if (currentDepth >= maxDepth) return [];\n\n const files: string[] = [];\n\n let entries: string[];\n try {\n entries = readdirSync(dir);\n } catch {\n return files;\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n\n let stat;\n try {\n stat = statSync(fullPath);\n } catch {\n continue;\n }\n\n if (stat.isDirectory()) {\n if (excludeDirs.includes(entry)) continue;\n files.push(...walkDir(fullPath, extensions, excludeDirs, maxDepth, currentDepth + 1));\n } else if (stat.isFile()) {\n const ext = extname(entry).toLowerCase();\n if (extensions.includes(ext)) {\n files.push(fullPath);\n }\n }\n }\n\n return files;\n}\n\n// =============================================================================\n// Scanners\n// =============================================================================\n\nfunction scanForPrompts(filePath: string, relativePath: string): DiscoveredPrompt[] {\n const results: DiscoveredPrompt[] = [];\n\n let content: string;\n try {\n content = readFileSync(filePath, 'utf-8');\n } catch {\n return results;\n }\n\n const lines = content.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line) continue;\n\n // Check for template variables with surrounding context suggesting a prompt\n if (TEMPLATE_VAR_PATTERN.test(line)) {\n const preview = line.trim().substring(0, 80);\n results.push({\n file: relativePath,\n line: i + 1,\n preview,\n reason: 'template-variable',\n });\n }\n\n // Check for prompt-like constant declarations\n if (PROMPT_NAME_PATTERN.test(line)) {\n const preview = line.trim().substring(0, 80);\n // Avoid duplicate if same line matched template var\n if (!results.some(r => r.file === relativePath && r.line === i + 1)) {\n results.push({\n file: relativePath,\n line: i + 1,\n preview,\n reason: 'prompt-constant',\n });\n }\n }\n\n // Check for schema definitions (Zod)\n if (ZOD_SCHEMA_PATTERN.test(line)) {\n const preview = line.trim().substring(0, 80);\n if (!results.some(r => r.file === relativePath && r.line === i + 1)) {\n results.push({\n file: relativePath,\n line: i + 1,\n preview,\n reason: 'zod-schema',\n });\n }\n }\n\n // Check for Pydantic models\n if (PYDANTIC_PATTERN.test(line)) {\n const preview = line.trim().substring(0, 80);\n if (!results.some(r => r.file === relativePath && r.line === i + 1)) {\n results.push({\n file: relativePath,\n line: i + 1,\n preview,\n reason: 'pydantic-model',\n });\n }\n }\n }\n\n return results;\n}\n\nfunction scanForMarkers(filePath: string, relativePath: string): MarkerEntry[] {\n const results: MarkerEntry[] = [];\n\n let content: string;\n try {\n content = readFileSync(filePath, 'utf-8');\n } catch {\n return results;\n }\n\n const lines = content.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line) continue;\n\n const match = MARKER_START_PATTERN.exec(line);\n if (match) {\n const rawType = match[1]?.toLowerCase();\n const platformId = match[2];\n const validTypes = new Set(['prompt', 'dataset', 'evaluation']);\n if (rawType && validTypes.has(rawType)) {\n results.push({\n file: relativePath,\n line: i + 1,\n type: rawType as MarkerEntry['type'],\n platformId,\n });\n }\n }\n }\n\n return results;\n}\n\nfunction scanJsonForSchemas(filePath: string, relativePath: string): DiscoveredPrompt[] {\n const results: DiscoveredPrompt[] = [];\n const ext = extname(filePath).toLowerCase();\n if (ext !== '.json') return results;\n\n let content: string;\n try {\n content = readFileSync(filePath, 'utf-8');\n } catch {\n return results;\n }\n\n // Quick check before parsing\n if (!SCHEMA_PATTERN.test(content)) return results;\n\n const preview = `JSON with schema definitions: ${basename(filePath)}`;\n results.push({\n file: relativePath,\n line: 1,\n preview: preview.substring(0, 80),\n reason: 'json-schema',\n });\n\n return results;\n}\n\nfunction scanForDatasets(dir: string, rootPath: string, excludeDirs: string[], maxDepth: number): DiscoveredDataset[] {\n const results: DiscoveredDataset[] = [];\n const dataExtensions = ['.json', '.jsonl', '.csv'];\n const files = walkDir(dir, dataExtensions, excludeDirs, maxDepth);\n\n for (const filePath of files) {\n const relativePath = relative(rootPath, filePath);\n const ext = extname(filePath).toLowerCase();\n const name = basename(filePath, ext);\n\n let content: string;\n try {\n content = readFileSync(filePath, 'utf-8');\n } catch {\n continue;\n }\n\n if (ext === '.csv') {\n const lines = content.trim().split('\\n');\n if (lines.length > 1) {\n // Check header for dataset-like columns\n const header = lines[0]?.toLowerCase() ?? '';\n if (header.includes('input') || header.includes('output') || header.includes('expected')) {\n results.push({ file: relativePath, name, items: lines.length - 1 });\n }\n }\n } else if (ext === '.jsonl') {\n const lines = content.trim().split('\\n').filter(l => l.trim().length > 0);\n if (lines.length > 0) {\n try {\n const first = JSON.parse(lines[0] ?? '{}') as Record<string, unknown>;\n if ('input' in first || 'expectedOutput' in first) {\n results.push({ file: relativePath, name, items: lines.length });\n }\n } catch {\n // Not valid JSONL\n }\n }\n } else if (ext === '.json') {\n try {\n const parsed: unknown = JSON.parse(content);\n if (Array.isArray(parsed) && parsed.length > 0) {\n const first = parsed[0] as Record<string, unknown>;\n if ('input' in first || 'expectedOutput' in first) {\n results.push({ file: relativePath, name, items: parsed.length });\n }\n }\n } catch {\n // Not valid JSON\n }\n }\n }\n\n return results;\n}\n\n// =============================================================================\n// Main Explore Function\n// =============================================================================\n\nexport function exploreCodebase(options: ExploreOptions): ExploreResult {\n const rootPath = options.path;\n const prompts: DiscoveredPrompt[] = [];\n const datasets: DiscoveredDataset[] = [];\n const markers: MarkerEntry[] = [];\n\n // Walk source files\n const sourceFiles = walkDir(rootPath, options.extensions, options.excludeDirs, options.depth);\n\n for (const filePath of sourceFiles) {\n const relativePath = relative(rootPath, filePath);\n\n // Always scan for markers\n markers.push(...scanForMarkers(filePath, relativePath));\n\n // Heuristic scanning (skip if markers-only mode)\n if (!options.markersOnly) {\n prompts.push(...scanForPrompts(filePath, relativePath));\n }\n }\n\n // Also scan JSON files for schema patterns (heuristic mode only)\n if (!options.markersOnly) {\n const jsonFiles = walkDir(rootPath, ['.json'], options.excludeDirs, options.depth);\n for (const filePath of jsonFiles) {\n const relativePath = relative(rootPath, filePath);\n prompts.push(...scanJsonForSchemas(filePath, relativePath));\n }\n\n // Scan for dataset files\n datasets.push(...scanForDatasets(rootPath, rootPath, options.excludeDirs, options.depth));\n }\n\n return { prompts, datasets, markers };\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nexport function parseExtensions(includeGlob: string): string[] {\n // Parse patterns like \"**/*.{ts,js,py,tsx,jsx}\" into extensions\n const braceMatch = /\\{([^}]+)\\}/.exec(includeGlob);\n if (braceMatch?.[1]) {\n return braceMatch[1].split(',').map(ext => `.${ext.trim()}`);\n }\n\n // Single extension like \"**/*.ts\"\n const extMatch = /\\*\\.(\\w+)$/.exec(includeGlob);\n if (extMatch?.[1]) {\n return [`.${extMatch[1]}`];\n }\n\n // Default fallback\n return ['.ts', '.js', '.py', '.tsx', '.jsx'];\n}\n\nexport function parseExcludeDirs(excludePattern: string): string[] {\n return excludePattern.split(',').map(d => d.trim()).filter(Boolean);\n}\n",
12
15
  "import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { saveCredentials, saveFullCredentials, hasCredentials } from '../lib/config.js';\nimport { validateApiKey } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError } from '../lib/errors.js';\nimport { performBrowserAuth, BrowserAuthError } from '../lib/browser-auth.js';\n\ninterface LoginOptions {\n apiKey?: string;\n endpoint: string;\n browser?: boolean;\n nonInteractive?: boolean;\n}\n\ninterface AuthMethodAnswer {\n method: 'browser' | 'apiKey';\n}\n\ninterface LoginAnswers {\n apiKey: string;\n endpoint: string;\n}\n\n/**\n * Creates the top-level login command\n * Alias for `mutagent auth login`\n */\nexport function createLoginCommand(): Command {\n const login = new Command('login')\n .description('Login to MutagenT platform')\n .option('--api-key <key>', 'API key (non-interactive)')\n .option('--browser', 'Force browser-based authentication')\n .option('--non-interactive', 'Disable interactive prompts (auto-selects browser auth)')\n .option('--endpoint <url>', 'API endpoint', 'https://api.mutagent.io')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent login\n ${chalk.dim('$')} mutagent login --browser\n ${chalk.dim('$')} mutagent login --api-key <key>\n ${chalk.dim('$')} mutagent login --non-interactive ${chalk.dim('# Auto browser flow (AI agents)')}\n `)\n .action(async (options: LoginOptions) => {\n const isJson = getJsonFlag(login);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const apiKey: string | undefined = options.apiKey ?? process.env.MUTAGENT_API_KEY;\n const endpoint: string = process.env.MUTAGENT_ENDPOINT ?? options.endpoint;\n\n // If --api-key provided, use direct flow\n if (apiKey) {\n output.info('Validating API key...');\n const isValid = await validateApiKey(apiKey, endpoint);\n\n if (!isValid) {\n throw new MutagentError(\n 'INVALID_API_KEY',\n 'Invalid API key or endpoint',\n 'Check your API key and try again'\n );\n }\n\n saveCredentials(apiKey, endpoint);\n output.success('Logged in successfully');\n if (!isJson) {\n output.info(`Endpoint: ${endpoint}`);\n }\n return;\n }\n\n // Detect non-interactive environment\n const isNonInteractive =\n options.nonInteractive === true ||\n process.env.MUTAGENT_NON_INTERACTIVE === 'true' ||\n process.env.CI === 'true' ||\n !process.stdin.isTTY;\n\n // In JSON-only mode without API key, we cannot proceed at all\n if (isJson && !options.browser && isNonInteractive) {\n throw new MutagentError(\n 'INTERACTIVE_REQUIRED',\n 'No API key provided. Use --api-key flag, set MUTAGENT_API_KEY env var, or add --browser for browser auth.',\n 'Run: mutagent login --api-key <key> or mutagent login --browser --non-interactive'\n );\n }\n\n // Show welcome message for first-time users (only in interactive mode)\n if (!isNonInteractive && !hasCredentials()) {\n console.log('\\n' + chalk.bold.cyan(' Welcome to MutagenT CLI!') + '\\n');\n console.log(' No credentials found. Please authenticate to continue.\\n');\n }\n\n // Determine auth method\n let useBrowserAuth = options.browser === true;\n\n // In non-interactive mode, auto-select browser auth (skip the prompt menu)\n if (!useBrowserAuth && isNonInteractive) {\n output.info('Non-interactive environment detected. Using browser authentication.');\n useBrowserAuth = true;\n }\n\n if (!useBrowserAuth && !options.apiKey) {\n // Ask user which method to use (interactive only)\n const methodAnswer = await inquirer.prompt<AuthMethodAnswer>([\n {\n type: 'list',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n name: 'Login (opens browser)',\n value: 'browser',\n },\n {\n name: 'API Key (paste existing key)',\n value: 'apiKey',\n },\n ],\n },\n ]);\n\n useBrowserAuth = methodAnswer.method === 'browser';\n }\n\n if (useBrowserAuth) {\n // Browser authentication flow\n const spinner = ora({\n text: 'Opening browser for authentication...',\n spinner: 'dots',\n });\n\n try {\n spinner.start();\n\n const result = await performBrowserAuth(\n {\n endpoint,\n timeout: 300000,\n pollInterval: 2000,\n },\n (message) => {\n spinner.text = message;\n }\n );\n\n spinner.succeed('Logged in successfully!');\n\n // Save full credentials including workspace info\n saveFullCredentials({\n apiKey: result.apiKey,\n endpoint,\n workspaceId: result.workspaceId,\n organizationId: result.organizationId,\n });\n\n console.log('');\n if (result.workspaceName) {\n output.info(`Workspace: ${result.workspaceName}`);\n }\n if (result.organizationName) {\n output.info(`Organization: ${result.organizationName}`);\n }\n } catch (error) {\n spinner.fail('Authentication failed');\n\n if (error instanceof BrowserAuthError) {\n throw new MutagentError(\n error.code,\n error.message,\n error.getSuggestion()\n );\n }\n throw error;\n }\n } else {\n // API key flow\n const answers = await inquirer.prompt<LoginAnswers>([\n {\n type: 'password',\n name: 'apiKey',\n message: 'Enter your API key:',\n mask: '*',\n validate: (input: string): boolean | string => {\n if (!input || input.trim() === '') {\n return 'API key is required';\n }\n if (!input.startsWith('mg_')) {\n return 'API key should start with \"mg_\"';\n }\n return true;\n },\n },\n ]);\n\n output.info('Validating API key...');\n const isValid = await validateApiKey(answers.apiKey, endpoint);\n\n if (!isValid) {\n throw new MutagentError(\n 'INVALID_API_KEY',\n 'Invalid API key or endpoint',\n 'Check your API key and try again'\n );\n }\n\n saveCredentials(answers.apiKey, endpoint);\n output.success('Logged in successfully');\n output.info(`Endpoint: ${endpoint}`);\n }\n } catch (error) {\n if (error instanceof MutagentError) {\n output.error(error.message);\n if (error.suggestion && !isJson) {\n output.info(`Suggestion: ${error.suggestion}`);\n }\n process.exit(1);\n }\n throw error;\n }\n });\n\n return login;\n}\n",
13
- "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { readFileSync, existsSync } from 'fs';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError, ApiError, handleError } from '../lib/errors.js';\nimport {\n promptLinks, promptLink, datasetLink, evaluationLink, optimizerLink,\n datasetLinks, evaluationLinks, formatCreationHints,\n} from '../lib/ui-links.js';\nimport {\n isValidJsonSchema, buildSchemaFromVariables, formatSchemaWarning,\n SUPPORTED_SCHEMA_TYPES,\n} from '../lib/schema-helpers.js';\nimport type { Prompt } from '../types/index.js';\nimport type { SchemaVariable, SupportedSchemaType } from '../lib/schema-helpers.js';\n\n// Command option interfaces for type safety\ninterface ListOptions {\n limit: string;\n}\n\ninterface GetOptions {\n withDatasets?: boolean;\n withEvals?: boolean;\n}\n\ninterface CreateOptions {\n file?: string;\n rawFile?: string;\n name?: string;\n content?: string;\n // Prompt style flags\n raw?: string;\n system?: string;\n human?: string;\n messages?: string;\n}\n\ninterface UpdateOptions {\n file?: string;\n rawFile?: string;\n name?: string;\n content?: string;\n // Prompt style flags\n raw?: string;\n system?: string;\n human?: string;\n messages?: string;\n}\n\ninterface DeleteOptions {\n force?: boolean;\n}\n\ninterface DatasetAddOptions {\n file?: string;\n data?: string;\n name?: string;\n}\n\ninterface OptimizeStartOptions {\n dataset: string;\n maxIterations?: string;\n targetScore?: string;\n patience?: string;\n model?: string;\n evalModel?: string;\n}\n\ninterface EvaluationCreateOptions {\n name: string;\n file?: string;\n description?: string;\n dataset?: string;\n}\n\ninterface ConfirmAnswer {\n confirm: boolean;\n}\n\n// Prerequisites text for optimize start help\n//\n// [AI AGENT NOTICE] TEMPORARILY REMOVED: Provider pre-flight check (2026-02-10)\n// The `checkProviderConfigured()` function was removed from the optimize start handler.\n// It called `client.listProviders()` and threw MutagentError('NO_PROVIDER', ...) if empty.\n// This blocked optimization when the server uses internal credentials (USE_EXT_PROVIDERS=false).\n//\n// MUST RE-ADD LATER: When external provider flow is finalized, re-add the pre-flight check\n// but make it CONDITIONAL — e.g., query a `/api/config` endpoint to check if the server\n// requires external providers, and only block if USE_EXT_PROVIDERS=true on the server.\n// The server-side check in mutagent/src/modules/optimizations/index.ts still gates on\n// USE_EXT_PROVIDERS, so the API will return 422 if providers are required but not configured.\n//\n// Original function signature:\n// async function checkProviderConfigured(): Promise<void> {\n// const client = getSDKClient();\n// const providers = await client.listProviders();\n// if (providers.data.length === 0) {\n// throw new MutagentError('NO_PROVIDER', '...', '...');\n// }\n// }\n//\n// It was called at the top of the optimize start action: `await checkProviderConfigured();`\n//\nconst PREREQUISITES_TEXT = `\n${chalk.yellow('Prerequisites:')}\n 1. Evaluation criteria defined ${chalk.dim('(via dashboard or evaluation create)')}\n 2. Dataset uploaded ${chalk.dim('mutagent prompts dataset list <prompt-id>')}\n ${chalk.dim('Note: LLM provider config is only required when the server uses external providers (USE_EXT_PROVIDERS=true)')}`;\n\n/**\n * Parse API validation errors into human-readable messages.\n * The API returns structured errors like { message: '...', errors: [...] }\n */\nfunction parseValidationErrors(error: unknown): string[] {\n if (error instanceof ApiError) {\n try {\n const body = JSON.parse(error.message) as { errors?: { message?: string }[]; message?: string };\n if (body.errors && Array.isArray(body.errors)) {\n return body.errors.map((e: { message?: string }) => e.message ?? JSON.stringify(e));\n }\n if (body.message) {\n return [body.message];\n }\n } catch {\n // Not JSON, return the message as-is\n return [error.message];\n }\n }\n if (error instanceof Error) {\n return [error.message];\n }\n return ['An unknown error occurred'];\n}\n\n/**\n * Check if an inputSchema or outputSchema is effectively empty.\n * Returns true if the value is undefined, null, an empty object {}, or\n * an object with no \"properties\" key (which means no defined variables).\n */\nfunction isSchemaEmpty(schema: unknown): boolean {\n if (schema === undefined || schema === null) return true;\n if (typeof schema !== 'object') return false;\n const obj = schema as Record<string, unknown>;\n // Empty object {}\n if (Object.keys(obj).length === 0) return true;\n return false;\n}\n\n/**\n * Warn about missing, empty, or structurally invalid inputSchema/outputSchema.\n * These are non-blocking warnings -- creation still proceeds.\n */\nfunction warnMissingSchemas(data: Partial<Prompt>, output: OutputFormatter): void {\n if (isSchemaEmpty(data.inputSchema)) {\n output.warn('No inputSchema provided. Optimization requires inputSchema with defined variables.');\n } else if (!isValidJsonSchema(data.inputSchema)) {\n output.warn(formatSchemaWarning('inputSchema'));\n }\n if (isSchemaEmpty(data.outputSchema)) {\n output.warn('No outputSchema provided. This may limit optimization effectiveness.');\n } else if (!isValidJsonSchema(data.outputSchema)) {\n output.warn(formatSchemaWarning('outputSchema'));\n }\n}\n\n/**\n * Interactively collect schema variables from the user.\n * Returns a JSON Schema built from the collected variables.\n */\nasync function collectSchemaInteractively(): Promise<Record<string, unknown>> {\n const inquirer = (await import('inquirer')).default;\n const variables: SchemaVariable[] = [];\n let addMore = true;\n\n while (addMore) {\n const answers = await inquirer.prompt<{ name: string; type: SupportedSchemaType; description: string }>([\n {\n type: 'input',\n name: 'name',\n message: 'Variable name:',\n validate: (input: string): string | true => {\n if (!input.trim()) return 'Variable name is required';\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.trim())) {\n return 'Variable name must start with a letter/underscore and contain only alphanumeric/underscore';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'type',\n message: 'Variable type:',\n choices: [...SUPPORTED_SCHEMA_TYPES],\n },\n {\n type: 'input',\n name: 'description',\n message: 'Description (optional):',\n },\n ]);\n\n variables.push({\n name: answers.name.trim(),\n type: answers.type,\n description: answers.description.trim() || undefined,\n });\n\n const continueAnswer = await inquirer.prompt<{ addAnother: boolean }>([{\n type: 'confirm',\n name: 'addAnother',\n message: 'Add another variable?',\n default: false,\n }]);\n\n addMore = continueAnswer.addAnother;\n }\n\n return buildSchemaFromVariables(variables);\n}\n\n/**\n * Prompt the user to define input variables interactively, provide a file path,\n * or skip. Returns the schema or undefined if skipped.\n */\nasync function promptForInputSchema(): Promise<Record<string, unknown> | undefined> {\n const inquirer = (await import('inquirer')).default;\n\n const answer = await inquirer.prompt<{ choice: string }>([{\n type: 'list',\n name: 'choice',\n message: 'Would you like to define input variables for this prompt?',\n choices: [\n { name: 'Yes, define variables interactively', value: 'interactive' },\n { name: 'Provide a JSON Schema file path', value: 'file' },\n { name: 'Skip (not recommended for optimization)', value: 'skip' },\n ],\n }]);\n\n if (answer.choice === 'interactive') {\n return collectSchemaInteractively();\n }\n\n if (answer.choice === 'file') {\n const fileAnswer = await inquirer.prompt<{ path: string }>([{\n type: 'input',\n name: 'path',\n message: 'JSON Schema file path:',\n validate: (input: string): string | true => {\n if (!input.trim()) return 'File path is required';\n if (!existsSync(input.trim())) return `File not found: ${input.trim()}`;\n return true;\n },\n }]);\n\n const content = readFileSync(fileAnswer.path.trim(), 'utf-8');\n try {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n if (!isValidJsonSchema(parsed)) {\n console.log(chalk.yellow(`\\n Warning: ${formatSchemaWarning('inputSchema')}\\n`));\n }\n return parsed;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n `Failed to parse JSON Schema from ${fileAnswer.path.trim()}`,\n 'Ensure the file contains valid JSON'\n );\n }\n }\n\n // skip\n return undefined;\n}\n\n/**\n * Check prompt content for single-brace template variables and warn about\n * MutagenT's double-brace syntax. Only warns, does not block creation.\n */\nfunction warnSingleBraceVariables(content: string, output: OutputFormatter): void {\n // Match {word} but not {{word}} -- look for single braces not preceded/followed by another brace\n const singleBracePattern = /(?<!\\{)\\{([a-zA-Z_][a-zA-Z0-9_]*)\\}(?!\\})/g;\n const matches = [...content.matchAll(singleBracePattern)];\n if (matches.length > 0) {\n const variables = [...new Set(matches.map(m => m[1] ?? ''))];\n for (const variable of variables) {\n output.warn(`Found {${variable}} -- MutagenT uses {{${variable}}} syntax. Did you mean {{${variable}}}?`);\n }\n }\n}\n\n/**\n * Parse dataset file content based on format detection.\n * Supports JSON arrays, JSONL (one JSON object per line), and CSV passthrough.\n *\n * @param rawContent - The raw file content as a string\n * @param filePath - The file path (used for format detection and error messages)\n * @returns The parsed content as a JSON string suitable for the API\n */\nexport function parseDatasetFile(rawContent: string, filePath: string): string {\n const trimmed = rawContent.trim();\n\n // CSV files are passed through as-is (the API handles CSV parsing)\n if (filePath.endsWith('.csv')) {\n return rawContent;\n }\n\n // If content starts with '[', treat as JSON array\n if (trimmed.startsWith('[')) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (!Array.isArray(parsed)) {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Expected a JSON array in dataset file',\n 'Dataset JSON files should contain an array of objects: [{...}, {...}]'\n );\n }\n return trimmed;\n } catch (e) {\n if (e instanceof MutagentError) throw e;\n throw new MutagentError(\n 'INVALID_JSON',\n `Failed to parse JSON array from ${filePath}`,\n 'Ensure the file contains valid JSON. For line-delimited JSON, use .jsonl extension or put one object per line.'\n );\n }\n }\n\n // If content starts with '{' or doesn't start with '[', treat as JSONL\n // (one JSON object per line)\n const lines = trimmed.split('\\n').filter(line => line.trim().length > 0);\n const items: unknown[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line) continue;\n const trimmedLine = line.trim();\n try {\n items.push(JSON.parse(trimmedLine));\n } catch {\n throw new MutagentError(\n 'INVALID_JSONL',\n `Invalid JSON on line ${String(i + 1)} of ${filePath}`,\n `Each line must be valid JSON. Problem line: \"${trimmedLine.substring(0, 80)}${trimmedLine.length > 80 ? '...' : ''}\"`\n );\n }\n }\n\n return JSON.stringify(items);\n}\n\nexport function createPromptsCommand(): Command {\n const prompts = new Command('prompts')\n .description('Manage prompts, datasets, evaluations, and optimizations')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts list\n ${chalk.dim('$')} mutagent prompts get <prompt-id>\n ${chalk.dim('$')} mutagent prompts create --file prompt.json\n ${chalk.dim('$')} mutagent prompts dataset list <prompt-id>\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"My Eval\"\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id>\n\nSubcommands:\n list, get, create, update, delete\n dataset list|add|remove\n evaluation list|create|results\n optimize start|status|results\n `);\n\n // =========================================================================\n // PROMPT CRUD\n // =========================================================================\n\n // List prompts\n prompts\n .command('list')\n .description('List all prompts')\n .option('-l, --limit <n>', 'Limit results', '50')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts list\n ${chalk.dim('$')} mutagent prompts list --limit 10\n ${chalk.dim('$')} mutagent prompts list --json\n\n${chalk.dim('Tip: Use --json for machine-readable output (AI agents, CI pipelines).')}\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const promptsList = await client.listPrompts();\n\n // Limit results\n const limit = parseInt(options.limit, 10) || 50;\n const limited = promptsList.slice(0, limit);\n\n if (isJson) {\n const withLinks = limited.map((p: Prompt) => ({\n ...p,\n _links: promptLinks(p.id),\n }));\n output.output(withLinks);\n } else {\n // Format for table\n const formatted = limited.map((p: Prompt) => ({\n id: p.id,\n name: p.name,\n version: p.version,\n updated: p.updatedAt ? new Date(p.updatedAt).toLocaleDateString() : 'N/A',\n url: promptLink(p.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get prompt\n prompts\n .command('get')\n .description('Get prompt details with nested data')\n .argument('<id>', 'Prompt ID (from: mutagent prompts list)')\n .option('--with-datasets', 'Include datasets')\n .option('--with-evals', 'Include evaluations')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts get <id>\n ${chalk.dim('$')} mutagent prompts get <id> --with-datasets --with-evals\n ${chalk.dim('$')} mutagent prompts get <id> --json\n\n${chalk.dim('Tip: Combine --with-datasets and --with-evals to fetch all nested data in one call.')}\n `)\n .action(async (id: string, options: GetOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const prompt = await client.getPrompt(id);\n\n const result: Record<string, unknown> = { ...prompt };\n\n if (options.withDatasets) {\n const datasets = await client.listDatasets(id);\n result.datasets = datasets;\n }\n\n if (options.withEvals) {\n const evals = await client.listEvaluations(id);\n result.evaluations = evals;\n }\n\n if (isJson) {\n result._links = promptLinks(id);\n }\n output.output(result);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Create prompt\n prompts\n .command('create')\n .description('Create a new prompt')\n .option('-f, --file <path>', 'Create from JSON file')\n .option('--raw-file <path>', 'Create from plain text file (used as rawPrompt)')\n .option('-n, --name <name>', 'Prompt name')\n .option('-c, --content <content>', 'Prompt content (rawPrompt) [DEPRECATED: use --raw]')\n .option('-r, --raw <text>', 'Raw prompt text (single prompt)')\n .option('--system <text>', 'System prompt (use with --human)')\n .option('--human <text>', 'Human prompt (use with --system)')\n .option('--messages <json>', 'Messages array as JSON (e.g., \\'[{\"role\":\"system\",\"content\":\"...\"}]\\')')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts create --name \"my-prompt\" --system \"You are helpful\" --human \"Hello\"\n ${chalk.dim('$')} mutagent prompts create --name \"raw-prompt\" --raw \"Summarize: {{text}}\"\n ${chalk.dim('$')} mutagent prompts create --file prompt.json\n ${chalk.dim('$')} mutagent prompts create --name \"chat\" --messages '[{\"role\":\"system\",\"content\":\"...\"}]'\n ${chalk.dim('$')} mutagent prompts create --name \"from-file\" --raw-file prompt.txt\n\nPrompt Input Methods (pick one):\n --system/--human Structured system + user message pair\n --raw Single raw prompt text with {{variables}}\n --raw-file Load plain text file as raw prompt\n --messages Full messages array as JSON\n --file Load from JSON file (full prompt object)\n\n${chalk.dim('Hint: Use --file with JSON or --raw-file for plain text. Get prompt IDs: mutagent prompts list')}\n `)\n .action(async (options: CreateOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let data: Partial<Prompt>;\n\n if (options.file) {\n const content = readFileSync(options.file, 'utf-8');\n data = JSON.parse(content) as Partial<Prompt>;\n } else if (options.rawFile) {\n // --raw-file: read plain text file as rawPrompt\n if (!existsSync(options.rawFile)) {\n throw new MutagentError(\n 'FILE_NOT_FOUND',\n `File not found: ${options.rawFile}`,\n 'Check the file path and try again'\n );\n }\n const textContent = readFileSync(options.rawFile, 'utf-8');\n data = {\n name: options.name ?? options.rawFile.replace(/^.*[\\\\/]/, '').replace(/\\.[^.]+$/, ''),\n rawPrompt: textContent,\n };\n } else if (options.name) {\n // Handle different prompt style formats\n data = { name: options.name };\n\n // Priority: messages > system+human > raw > content (deprecated)\n if (options.messages) {\n // Messages format: JSON array of messages\n try {\n const messages = JSON.parse(options.messages) as { role: string; content: string }[];\n // Extract system and human prompts from messages array\n const systemMsg = messages.find(m => m.role === 'system');\n const humanMsg = messages.find(m => m.role === 'user' || m.role === 'human');\n if (systemMsg) data.systemPrompt = systemMsg.content;\n if (humanMsg) data.humanPrompt = humanMsg.content;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in --messages flag',\n 'Provide a valid JSON array, e.g., \\'[{\"role\":\"system\",\"content\":\"...\"}]\\''\n );\n }\n } else if (options.system ?? options.human) {\n // Human/System format\n if (options.system) data.systemPrompt = options.system;\n if (options.human) data.humanPrompt = options.human;\n } else if (options.raw) {\n // Raw prompt format\n data.rawPrompt = options.raw;\n } else if (options.content) {\n // Deprecated --content flag (backwards compatibility)\n data.rawPrompt = options.content;\n } else {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Prompt content required',\n 'Use --raw, --raw-file, --system/--human, or --messages to specify prompt content'\n );\n }\n } else {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Either --file, --raw-file, or --name with prompt content is required',\n 'Use --file to load from JSON, --raw-file for plain text, or provide --name with --raw, --system/--human, or --messages'\n );\n }\n\n // Warn about single-brace template variables (Task 7e)\n const promptContent = data.rawPrompt ?? data.systemPrompt ?? data.humanPrompt ?? '';\n if (promptContent && !isJson) {\n warnSingleBraceVariables(promptContent, output);\n }\n\n // Interactive schema prompting when inputSchema is empty/invalid (non-JSON mode only)\n if (!isJson && isSchemaEmpty(data.inputSchema)) {\n // Only prompt interactively if stdin is a TTY (not piped/CI)\n if (process.stdin.isTTY) {\n const schema = await promptForInputSchema();\n if (schema) {\n data.inputSchema = schema;\n }\n } else {\n output.warn('No inputSchema provided. Optimization requires inputSchema with defined variables.');\n }\n }\n\n // Warn about missing/invalid inputSchema/outputSchema (non-blocking)\n warnMissingSchemas(data, output);\n\n const client = getSDKClient();\n const prompt = await client.createPrompt(data);\n\n if (isJson) {\n output.output({ ...prompt, _links: promptLinks(prompt.id) });\n } else {\n output.success(`Created prompt: ${prompt.name} (id: ${String(prompt.id)})`);\n const hints = formatCreationHints({\n resourceType: 'Prompt',\n id: prompt.id,\n name: prompt.name,\n dashboardUrl: promptLink(prompt.id),\n apiPath: `/api/prompts/${String(prompt.id)}`,\n });\n console.log(hints);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Update prompt\n prompts\n .command('update')\n .description('Update a prompt')\n .argument('<id>', 'Prompt ID (from: mutagent prompts list)')\n .option('-f, --file <path>', 'Update from JSON file')\n .option('--raw-file <path>', 'Update from plain text file (used as rawPrompt)')\n .option('-n, --name <name>', 'New name')\n .option('-c, --content <content>', 'New content (rawPrompt) [DEPRECATED: use --raw]')\n .option('-r, --raw <text>', 'Raw prompt text (single prompt)')\n .option('--system <text>', 'System prompt (use with --human)')\n .option('--human <text>', 'Human prompt (use with --system)')\n .option('--messages <json>', 'Messages array as JSON (e.g., \\'[{\"role\":\"system\",\"content\":\"...\"}]\\')')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts update <id> --name \"new-name\"\n ${chalk.dim('$')} mutagent prompts update <id> --system \"Updated system prompt\"\n ${chalk.dim('$')} mutagent prompts update <id> --raw-file updated-prompt.txt\n ${chalk.dim('$')} mutagent prompts update <id> --file updated-prompt.json\n ${chalk.dim('$')} mutagent prompts update <id> --json\n `)\n .action(async (id: string, options: UpdateOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let data: Partial<Prompt> = {};\n\n if (options.file) {\n const content = readFileSync(options.file, 'utf-8');\n data = JSON.parse(content) as Partial<Prompt>;\n } else if (options.rawFile) {\n // --raw-file: read plain text file as rawPrompt\n if (!existsSync(options.rawFile)) {\n throw new MutagentError(\n 'FILE_NOT_FOUND',\n `File not found: ${options.rawFile}`,\n 'Check the file path and try again'\n );\n }\n const textContent = readFileSync(options.rawFile, 'utf-8');\n data.rawPrompt = textContent;\n if (options.name) data.name = options.name;\n } else {\n if (options.name) data.name = options.name;\n\n // Handle different prompt style formats\n // Priority: messages > system+human > raw > content (deprecated)\n if (options.messages) {\n // Messages format: JSON array of messages\n try {\n const messages = JSON.parse(options.messages) as { role: string; content: string }[];\n // Extract system and human prompts from messages array\n const systemMsg = messages.find(m => m.role === 'system');\n const humanMsg = messages.find(m => m.role === 'user' || m.role === 'human');\n if (systemMsg) data.systemPrompt = systemMsg.content;\n if (humanMsg) data.humanPrompt = humanMsg.content;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in --messages flag',\n 'Provide a valid JSON array, e.g., \\'[{\"role\":\"system\",\"content\":\"...\"}]\\''\n );\n }\n } else if (options.system ?? options.human) {\n // Human/System format\n if (options.system) data.systemPrompt = options.system;\n if (options.human) data.humanPrompt = options.human;\n } else if (options.raw) {\n // Raw prompt format\n data.rawPrompt = options.raw;\n } else if (options.content) {\n // Deprecated --content flag (backwards compatibility)\n data.rawPrompt = options.content;\n }\n }\n\n if (Object.keys(data).length === 0) {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'No update data provided',\n 'Use --file, --raw-file, --name, --raw, --system/--human, or --messages'\n );\n }\n\n // Warn about single-brace template variables (Task 7e)\n const promptContent = data.rawPrompt ?? data.systemPrompt ?? data.humanPrompt ?? '';\n if (promptContent && !isJson) {\n warnSingleBraceVariables(promptContent, output);\n }\n\n const client = getSDKClient();\n const prompt = await client.updatePrompt(id, data);\n\n if (isJson) {\n output.output({ ...prompt, _links: promptLinks(prompt.id) });\n } else {\n output.success(`Updated prompt: ${prompt.name} (id: ${String(prompt.id)})`);\n const hints = formatCreationHints({\n resourceType: 'Prompt',\n id: prompt.id,\n name: prompt.name,\n dashboardUrl: promptLink(prompt.id),\n apiPath: `/api/prompts/${String(prompt.id)}`,\n });\n console.log(hints);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Delete prompt\n prompts\n .command('delete')\n .description('Delete a prompt')\n .argument('<id>', 'Prompt ID (from: mutagent prompts list)')\n .option('--force', 'Skip confirmation')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts delete <id>\n ${chalk.dim('$')} mutagent prompts delete <id> --force\n ${chalk.dim('$')} mutagent prompts delete <id> --force --json\n\n${chalk.dim('Tip: Use --force to skip confirmation (required for non-interactive/CI usage).')}\n `)\n .action(async (id: string, options: DeleteOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n if (!options.force && !isJson) {\n const inquirer = (await import('inquirer')).default;\n const answers = await inquirer.prompt<ConfirmAnswer>([{\n type: 'confirm',\n name: 'confirm',\n message: `Delete prompt ${id}?`,\n default: false,\n }]);\n\n if (!answers.confirm) {\n output.info('Cancelled');\n return;\n }\n }\n\n const client = getSDKClient();\n await client.deletePrompt(id);\n\n output.success(`Deleted prompt: ${id}`);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // =========================================================================\n // DATASET subcommand group (mutagent prompts dataset ...)\n // =========================================================================\n const dataset = prompts\n .command('dataset')\n .description('Manage datasets for prompts')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts dataset list <prompt-id>\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> --file dataset.jsonl\n ${chalk.dim('$')} mutagent prompts dataset remove <prompt-id> <dataset-id>\n `);\n\n // List datasets\n dataset\n .command('list')\n .description('List datasets for a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts dataset list <prompt-id>\n ${chalk.dim('$')} mutagent prompts dataset list <prompt-id> --json\n `)\n .action(async (promptId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const datasets = await client.listDatasets(promptId);\n\n if (isJson) {\n const withLinks = datasets.map((d) => ({\n ...d,\n _links: datasetLinks(promptId, d.id),\n }));\n output.output(withLinks);\n } else {\n const formatted = datasets.map((d) => ({\n ...d,\n url: datasetLink(promptId, d.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Add dataset\n dataset\n .command('add')\n .description('Add dataset to a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .option('-f, --file <path>', 'Dataset file (JSON array, JSONL, or CSV)')\n .option('-d, --data <json>', 'Inline JSON array of dataset items')\n .option('-n, --name <name>', 'Dataset name (default: timestamped)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> --file dataset.json\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> --file dataset.jsonl --name \"My Dataset\"\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> --file dataset.csv\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> -d '[{\"input\":{\"text\":\"hello\"},\"expectedOutput\":{\"result\":\"world\"}}]'\n\nSupported file formats:\n ${chalk.dim('.json')} JSON array of objects: [{\"input\": {...}, \"expectedOutput\": {...}}, ...]\n ${chalk.dim('.jsonl')} One JSON object per line (newline-delimited JSON)\n ${chalk.dim('.csv')} Comma-separated values with header row\n\nInline data format (-d):\n JSON array of objects, e.g.:\n ${chalk.dim('[{\"input\": {\"text\": \"hello\"}, \"expectedOutput\": {\"result\": \"world\"}}]')}\n\n${chalk.dim('Note: --file and -d are mutually exclusive. Provide one or the other.')}\n `)\n .action(async (promptId: string, options: DatasetAddOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n if (options.file && options.data) {\n throw new MutagentError(\n 'INVALID_ARGUMENTS',\n 'Cannot use both --file and -d/--data',\n 'Use --file to upload from a file or -d to provide inline JSON data, not both'\n );\n }\n\n if (!options.file && !options.data) {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Either --file or -d/--data is required',\n 'Use --file <path> to upload from a file or -d \\'[{...}]\\' for inline JSON data'\n );\n }\n\n let content: string;\n\n if (options.data) {\n // Inline JSON data - validate it parses as an array\n try {\n const parsed: unknown = JSON.parse(options.data);\n if (!Array.isArray(parsed)) {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Inline data must be a JSON array',\n 'Provide a JSON array, e.g., \\'[{\"input\": {...}, \"expectedOutput\": {...}}]\\''\n );\n }\n content = options.data;\n } catch (e) {\n if (e instanceof MutagentError) throw e;\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in -d/--data flag',\n 'Provide a valid JSON array, e.g., \\'[{\"input\": {...}, \"expectedOutput\": {...}}]\\''\n );\n }\n } else {\n // File-based upload (options.file is guaranteed by the check above)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const filePath = options.file!;\n const rawContent = readFileSync(filePath, 'utf-8');\n content = parseDatasetFile(rawContent, filePath);\n }\n\n const client = getSDKClient();\n const datasetResult = await client.addDataset(promptId, content, options.name);\n\n if (isJson) {\n output.output({\n ...datasetResult,\n _links: datasetLinks(promptId, datasetResult.id),\n });\n } else {\n output.success(`Added dataset \"${datasetResult.name}\" to prompt: ${promptId} (id: ${String(datasetResult.id)})`);\n if (datasetResult.itemCount !== undefined && datasetResult.itemCount > 0) {\n output.info(`Items uploaded: ${String(datasetResult.itemCount)}`);\n }\n const hints = formatCreationHints({\n resourceType: 'Dataset',\n id: datasetResult.id,\n name: datasetResult.name,\n dashboardUrl: datasetLink(promptId, datasetResult.id),\n apiPath: `/api/prompts/${promptId}/datasets/${String(datasetResult.id)}`,\n });\n console.log(hints);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Remove dataset\n dataset\n .command('remove')\n .description('Remove dataset from a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .argument('<dataset-id>', 'Dataset ID (from: mutagent prompts dataset list <prompt-id>)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts dataset remove <prompt-id> <dataset-id>\n ${chalk.dim('$')} mutagent prompts dataset remove <prompt-id> <dataset-id> --json\n `)\n .action(async (promptId: string, datasetId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n await client.removeDataset(promptId, datasetId);\n output.success(`Removed dataset ${datasetId} from prompt ${promptId}`);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // =========================================================================\n // EVALUATION subcommand group (mutagent prompts evaluation ...)\n // =========================================================================\n const evaluation = prompts\n .command('evaluation')\n .description('Manage evaluations for prompts')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts evaluation list <prompt-id>\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"My Eval\"\n ${chalk.dim('$')} mutagent prompts evaluation results <run-id>\n `);\n\n // List evaluations\n evaluation\n .command('list')\n .description('List evaluations for a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts evaluation list <prompt-id>\n ${chalk.dim('$')} mutagent prompts evaluation list <prompt-id> --json\n `)\n .action(async (promptId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const evals = await client.listEvaluations(promptId);\n\n if (isJson) {\n const withLinks = evals.map((e) => ({\n ...e,\n _links: evaluationLinks(promptId, e.id),\n }));\n output.output(withLinks);\n } else {\n const formatted = evals.map((e) => ({\n ...e,\n url: evaluationLink(promptId, e.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Create evaluation\n evaluation\n .command('create')\n .description('Create an evaluation configuration for a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .requiredOption('-n, --name <name>', 'Evaluation name')\n .option('-f, --file <path>', 'Load evaluation criteria from JSON file')\n .option('--description <text>', 'Evaluation description')\n .option('-d, --dataset <id>', 'Dataset ID to associate (from: mutagent prompts dataset list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"Accuracy Check\"\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"Full Eval\" --file criteria.json --dataset <dataset-id>\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"QA\" --description \"Quality assurance eval\" --json\n\nCriteria file format (--file):\n ${chalk.dim('{ \"evalConfig\": { \"criteria\": [...] }, \"llmConfig\": { \"model\": \"gpt-4\" } }')}\n\n${chalk.dim('AI Agent Hint: Create an evaluation before running it. Use --file to load criteria from JSON.')}\n${chalk.dim('Get prompt IDs: mutagent prompts list | Get dataset IDs: mutagent prompts dataset list <prompt-id>')}\n `)\n .action(async (promptId: string, options: EvaluationCreateOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const evalData: {\n name: string;\n description?: string;\n datasetId?: number;\n evalConfig?: Record<string, unknown>;\n llmConfig?: Record<string, unknown>;\n tags?: string[];\n metadata?: Record<string, unknown>;\n } = {\n name: options.name,\n description: options.description,\n };\n\n // Load criteria from file if provided\n if (options.file) {\n if (!existsSync(options.file)) {\n throw new MutagentError(\n 'FILE_NOT_FOUND',\n `File not found: ${options.file}`,\n 'Check the file path and try again'\n );\n }\n const fileContent = readFileSync(options.file, 'utf-8');\n try {\n const parsed = JSON.parse(fileContent) as Record<string, unknown>;\n if (parsed.evalConfig) evalData.evalConfig = parsed.evalConfig as Record<string, unknown>;\n if (parsed.llmConfig) evalData.llmConfig = parsed.llmConfig as Record<string, unknown>;\n if (parsed.tags) evalData.tags = parsed.tags as string[];\n if (parsed.metadata) evalData.metadata = parsed.metadata as Record<string, unknown>;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n `Failed to parse criteria file: ${options.file}`,\n 'Ensure the file contains valid JSON with evalConfig and/or llmConfig'\n );\n }\n }\n\n // Associate dataset if provided\n if (options.dataset) {\n evalData.datasetId = parseInt(options.dataset, 10);\n if (isNaN(evalData.datasetId)) {\n throw new MutagentError(\n 'VALIDATION_ERROR',\n `Invalid dataset ID: ${options.dataset}`,\n 'Dataset ID must be a number. Get IDs with: mutagent prompts dataset list <prompt-id>'\n );\n }\n }\n\n const client = getSDKClient();\n const evalResult = await client.createEvaluation(promptId, evalData);\n\n if (isJson) {\n output.output({\n ...evalResult,\n _links: evaluationLinks(promptId, evalResult.id),\n });\n } else {\n output.success(`Created evaluation: ${evalResult.name} (id: ${String(evalResult.id)})`);\n const hints = formatCreationHints({\n resourceType: 'Evaluation',\n id: evalResult.id,\n name: evalResult.name,\n dashboardUrl: evaluationLink(promptId, evalResult.id),\n apiPath: `/api/prompts/${promptId}/evaluations/${String(evalResult.id)}`,\n });\n console.log(hints);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get evaluation results\n evaluation\n .command('results')\n .description('Get evaluation results')\n .argument('<run-id>', 'Evaluation run ID (from: mutagent prompts evaluation list <prompt-id>)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts evaluation results <run-id>\n ${chalk.dim('$')} mutagent prompts evaluation results <run-id> --json\n `)\n .action(async (runId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const results = await client.getEvaluationResults(runId);\n output.output(results);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // =========================================================================\n // OPTIMIZE subcommand group (mutagent prompts optimize ...)\n // =========================================================================\n const optimize = prompts\n .command('optimize')\n .description('Manage prompt optimization jobs')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id>\n ${chalk.dim('$')} mutagent prompts optimize status <job-id>\n ${chalk.dim('$')} mutagent prompts optimize results <job-id>\n\nWorkflow: start -> status (poll) -> results\n `);\n\n // Start optimization\n optimize\n .command('start')\n .description('Start prompt optimization')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .requiredOption('-d, --dataset <id>', 'Dataset ID for optimization (from: mutagent prompts dataset list <prompt-id>)')\n .option('--max-iterations <n>', 'Max optimization iterations (default: 3)')\n .option('--target-score <n>', 'Target accuracy 0-1 (e.g., 0.9)')\n .option('--patience <n>', 'Iterations without improvement before stopping')\n .option('--model <model-id>', 'Target LLM model (e.g., \"claude-sonnet-4-5-20250929\")')\n .option('--eval-model <model-id>', 'Evaluation model (defaults to target model)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id>\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id> --max-iterations 5\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id> --target-score 0.95 --model claude-sonnet-4-5-20250929\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id> --json\n${PREREQUISITES_TEXT}\n\n${chalk.dim('Monitor progress with: mutagent prompts optimize status <job-id>')}\n `)\n .action(async (promptId: string, options: OptimizeStartOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n // [AI AGENT NOTICE] TEMPORARILY REMOVED: `await checkProviderConfigured();` was here.\n // See comment block above PREREQUISITES_TEXT for full context and re-add instructions.\n const client = getSDKClient();\n const job = await client.startOptimization(promptId, options.dataset, {\n maxIterations: options.maxIterations ? parseInt(options.maxIterations, 10) : undefined,\n targetScore: options.targetScore ? parseFloat(options.targetScore) : undefined,\n patience: options.patience ? parseInt(options.patience, 10) : undefined,\n model: options.model,\n evalModel: options.evalModel,\n });\n\n if (isJson) {\n output.output({\n ...job,\n _links: {\n dashboard: optimizerLink(job.jobId),\n api: `/api/prompts/${promptId}/optimizations/${job.jobId}`,\n },\n });\n } else {\n output.success(`Started optimization job: ${job.jobId}`);\n const hints = formatCreationHints({\n resourceType: 'Optimization',\n id: job.jobId,\n dashboardUrl: optimizerLink(job.jobId),\n apiPath: `/api/prompts/${promptId}/optimizations/${job.jobId}`,\n });\n console.log(hints);\n }\n } catch (error) {\n // Enhanced error handling: parse validation errors for actionable messages\n if (error instanceof ApiError) {\n const messages = parseValidationErrors(error);\n if (!isJson) {\n console.error(chalk.red('Optimization failed. Missing requirements:'));\n for (const msg of messages) {\n console.error(chalk.red(` - ${msg}`));\n }\n console.error('');\n console.error(PREREQUISITES_TEXT);\n }\n }\n handleError(error, isJson);\n }\n });\n\n // Optimization status\n optimize\n .command('status')\n .description('Check optimization status')\n .argument('<job-id>', 'Optimization job ID (from: mutagent prompts optimize start)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts optimize status <job-id>\n ${chalk.dim('$')} mutagent prompts optimize status <job-id> --json\n `)\n .action(async (jobId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const status = await client.getOptimizationStatus(jobId);\n\n if (isJson) {\n output.output({ ...status, _links: { optimizer: optimizerLink(jobId) } });\n } else {\n const progress = status.progressPercent;\n const filled = Math.floor(progress / 10);\n const progressBar = '\\u2588'.repeat(filled) + '\\u2591'.repeat(10 - filled);\n output.info(`Progress: [${progressBar}] ${String(progress)}%`);\n output.output(status);\n output.info(`View: ${optimizerLink(jobId)}`);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Optimization results\n optimize\n .command('results')\n .description('Get optimization results')\n .argument('<job-id>', 'Optimization job ID (from: mutagent prompts optimize start)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts optimize results <job-id>\n ${chalk.dim('$')} mutagent prompts optimize results <job-id> --json\n `)\n .action(async (jobId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const results = await client.getOptimizationResults(jobId);\n\n if (isJson) {\n output.output({ ...results as object, _links: { optimizer: optimizerLink(jobId) } });\n } else {\n output.output(results);\n output.info(`View: ${optimizerLink(jobId)}`);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return prompts;\n}\n",
14
- "/**\n * @fileoverview Centralized UI deep link generation for MutagenT CLI\n * @module @mutagent/cli/lib/ui-links\n *\n * Generates clickable URLs that link to the MutagenT web UI for\n * viewing/editing resources. Used across all CLI commands that\n * list or fetch resources.\n *\n * The dashboard is a single page with tabs (Prompts, Evaluations, Datasets),\n * not separate routes per entity type.\n */\n\n/**\n * Get the base URL for the MutagenT web application.\n * Reads from MUTAGENT_APP_URL env var, falling back to production URL.\n */\nexport function getAppBaseUrl(): string {\n return process.env.MUTAGENT_APP_URL ?? 'https://app.mutagent.io';\n}\n\n/**\n * Generate a link to view a prompt in the dashboard.\n * The dashboard is at /prompts/dashboard with prompt detail in a tab/panel.\n */\nexport function promptLink(id: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(id)}`;\n}\n\n/**\n * Generate a link to the prompts dashboard (Datasets tab).\n */\nexport function promptDatasetsLink(promptId: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(promptId)}&tab=datasets`;\n}\n\n/**\n * Generate a link to the prompts dashboard (Evaluations tab).\n */\nexport function promptEvaluationsLink(promptId: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(promptId)}&tab=evaluations`;\n}\n\n/**\n * Generate a link to a specific dataset within the dashboard.\n */\nexport function datasetLink(promptId: string | number, datasetId: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(promptId)}&tab=datasets&dataset=${String(datasetId)}`;\n}\n\n/**\n * Generate a link to a specific evaluation within the dashboard.\n */\nexport function evaluationLink(promptId: string | number, evalId: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(promptId)}&tab=evaluations&eval=${String(evalId)}`;\n}\n\n/**\n * Generate a link to view a trace in the UI.\n */\nexport function traceLink(id: string): string {\n return `${getAppBaseUrl()}/traces/${id}`;\n}\n\n/**\n * Generate a link to the optimizer page, optionally for a specific job.\n */\nexport function optimizerLink(jobId?: string): string {\n const base = `${getAppBaseUrl()}/prompts/optimizer`;\n return jobId ? `${base}?job=${jobId}` : base;\n}\n\n/**\n * Generate a link to the playground page.\n */\nexport function playgroundLink(): string {\n return `${getAppBaseUrl()}/prompts/playground`;\n}\n\n/**\n * Generate a link to the provider settings page.\n */\nexport function providerSettingsLink(): string {\n return `${getAppBaseUrl()}/settings/providers`;\n}\n\n/**\n * Generate the standard _links object for a prompt resource.\n */\nexport function promptLinks(promptId: string | number): { dashboard: string; api: string; datasets: string; evaluations: string } {\n return {\n dashboard: promptLink(promptId),\n api: `/api/prompts/${String(promptId)}`,\n datasets: promptDatasetsLink(promptId),\n evaluations: promptEvaluationsLink(promptId),\n };\n}\n\n/**\n * Generate _links object for a dataset resource.\n */\nexport function datasetLinks(promptId: string | number, datasetId: string | number): { dashboard: string; api: string } {\n return {\n dashboard: datasetLink(promptId, datasetId),\n api: `/api/prompts/${String(promptId)}/datasets/${String(datasetId)}`,\n };\n}\n\n/**\n * Generate _links object for an evaluation resource.\n */\nexport function evaluationLinks(promptId: string | number, evalId: string | number): { dashboard: string; api: string } {\n return {\n dashboard: evaluationLink(promptId, evalId),\n api: `/api/prompts/${String(promptId)}/evaluations/${String(evalId)}`,\n };\n}\n\n// =============================================================================\n// Resource Creation Hint Helpers\n// =============================================================================\n\n/**\n * Resource link hint definition for post-creation output.\n */\nexport interface ResourceCreationHint {\n /** Resource type label (e.g., \"Prompt\", \"Dataset\", \"Evaluation\") */\n resourceType: string;\n /** Resource identifier (the ID) */\n id: string | number;\n /** Resource name if available */\n name?: string;\n /** Dashboard URL */\n dashboardUrl: string;\n /** API path (relative) */\n apiPath: string;\n}\n\n/**\n * Format resource creation hints for human-readable CLI output.\n *\n * Produces output like:\n * ```\n * -> View in dashboard: https://app.mutagent.io/prompts/dashboard?prompt=123\n * -> API: GET /api/prompts/123\n *\n * Tip: Copy the link above to open in your browser or share with your team.\n * ```\n */\nexport function formatCreationHints(hint: ResourceCreationHint): string {\n const lines: string[] = [\n '',\n ` -> View in dashboard: ${hint.dashboardUrl}`,\n ` -> API: GET ${hint.apiPath}`,\n '',\n ' Tip: Copy the link above to open in your browser or share with your team.',\n ];\n return lines.join('\\n');\n}\n",
16
+ "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { readFileSync, existsSync } from 'fs';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError, ApiError, handleError } from '../lib/errors.js';\nimport {\n promptLinks, promptLink, datasetLink, evaluationLink, optimizerLink,\n datasetLinks, evaluationLinks, formatCreationHints,\n} from '../lib/ui-links.js';\nimport {\n isValidJsonSchema, buildSchemaFromVariables, formatSchemaWarning,\n SUPPORTED_SCHEMA_TYPES,\n} from '../lib/schema-helpers.js';\nimport { MutationContext } from '../lib/mutation-context.js';\nimport { runGuidedEvalCreator } from '../lib/eval-creator.js';\nimport { renderScorecard, promptScorecardAction, showPromptDiff } from '../lib/scorecard.js';\nimport type { Prompt } from '../types/index.js';\nimport type { SchemaVariable, SupportedSchemaType } from '../lib/schema-helpers.js';\n\n/**\n * Silently update .mutagent/mutation-context.md.\n * Never throws — context update failures should not break CLI commands.\n */\nfunction updateMutationContext(updater: (ctx: MutationContext) => void): void {\n try {\n const ctx = MutationContext.load();\n updater(ctx);\n ctx.save();\n } catch {\n // Silent — context update is best-effort\n }\n}\n\n// Command option interfaces for type safety\ninterface ListOptions {\n limit: string;\n}\n\ninterface GetOptions {\n withDatasets?: boolean;\n withEvals?: boolean;\n}\n\ninterface CreateOptions {\n data?: string;\n file?: string;\n rawFile?: string;\n name?: string;\n content?: string;\n outputSchema?: string;\n // Prompt style flags\n raw?: string;\n system?: string;\n human?: string;\n messages?: string;\n}\n\ninterface UpdateOptions {\n data?: string;\n file?: string;\n rawFile?: string;\n name?: string;\n content?: string;\n // Prompt style flags\n raw?: string;\n system?: string;\n human?: string;\n messages?: string;\n}\n\ninterface DeleteOptions {\n force?: boolean;\n}\n\ninterface DatasetAddOptions {\n file?: string;\n data?: string;\n name?: string;\n}\n\ninterface OptimizeStartOptions {\n dataset: string;\n maxIterations?: string;\n targetScore?: string;\n patience?: string;\n model?: string;\n evalModel?: string;\n}\n\ninterface EvaluationCreateOptions {\n data?: string;\n name?: string;\n file?: string;\n description?: string;\n dataset?: string;\n guided?: boolean;\n}\n\ninterface ConfirmAnswer {\n confirm: boolean;\n}\n\n// Prerequisites text for optimize start help\n//\n// [AI AGENT NOTICE] TEMPORARILY REMOVED: Provider pre-flight check (2026-02-10)\n// The `checkProviderConfigured()` function was removed from the optimize start handler.\n// It called `client.listProviders()` and threw MutagentError('NO_PROVIDER', ...) if empty.\n// This blocked optimization when the server uses internal credentials (USE_EXT_PROVIDERS=false).\n//\n// MUST RE-ADD LATER: When external provider flow is finalized, re-add the pre-flight check\n// but make it CONDITIONAL — e.g., query a `/api/config` endpoint to check if the server\n// requires external providers, and only block if USE_EXT_PROVIDERS=true on the server.\n// The server-side check in mutagent/src/modules/optimizations/index.ts still gates on\n// USE_EXT_PROVIDERS, so the API will return 422 if providers are required but not configured.\n//\n// Original function signature:\n// async function checkProviderConfigured(): Promise<void> {\n// const client = getSDKClient();\n// const providers = await client.listProviders();\n// if (providers.data.length === 0) {\n// throw new MutagentError('NO_PROVIDER', '...', '...');\n// }\n// }\n//\n// It was called at the top of the optimize start action: `await checkProviderConfigured();`\n//\nconst PREREQUISITES_TEXT = `\n${chalk.yellow('Prerequisites:')}\n 1. Evaluation criteria defined ${chalk.dim('(via dashboard or evaluation create)')}\n 2. Dataset uploaded ${chalk.dim('mutagent prompts dataset list <prompt-id>')}\n ${chalk.dim('Note: LLM provider config is only required when the server uses external providers (USE_EXT_PROVIDERS=true)')}`;\n\n/**\n * Parse API validation errors into human-readable messages.\n * The API returns structured errors like { message: '...', errors: [...] }\n */\nfunction parseValidationErrors(error: unknown): string[] {\n if (error instanceof ApiError) {\n try {\n const body = JSON.parse(error.message) as { errors?: { message?: string }[]; message?: string };\n if (body.errors && Array.isArray(body.errors)) {\n return body.errors.map((e: { message?: string }) => e.message ?? JSON.stringify(e));\n }\n if (body.message) {\n return [body.message];\n }\n } catch {\n // Not JSON, return the message as-is\n return [error.message];\n }\n }\n if (error instanceof Error) {\n return [error.message];\n }\n return ['An unknown error occurred'];\n}\n\n/**\n * Check if an inputSchema or outputSchema is effectively empty.\n * Returns true if the value is undefined, null, an empty object {}, or\n * an object with no \"properties\" key (which means no defined variables).\n */\nfunction isSchemaEmpty(schema: unknown): boolean {\n if (schema === undefined || schema === null) return true;\n if (typeof schema !== 'object') return false;\n const obj = schema as Record<string, unknown>;\n // Empty object {}\n if (Object.keys(obj).length === 0) return true;\n return false;\n}\n\n/**\n * Warn about missing, empty, or structurally invalid inputSchema/outputSchema.\n * These are non-blocking warnings -- creation still proceeds.\n */\nfunction warnMissingSchemas(data: Partial<Prompt>, output: OutputFormatter): void {\n if (isSchemaEmpty(data.inputSchema)) {\n output.warn('No inputSchema provided. Optimization requires inputSchema with defined variables.');\n } else if (!isValidJsonSchema(data.inputSchema)) {\n output.warn(formatSchemaWarning('inputSchema'));\n }\n if (isSchemaEmpty(data.outputSchema)) {\n output.warn('No outputSchema provided. This may limit optimization effectiveness.');\n } else if (!isValidJsonSchema(data.outputSchema)) {\n output.warn(formatSchemaWarning('outputSchema'));\n }\n}\n\n/**\n * Interactively collect schema variables from the user.\n * Returns a JSON Schema built from the collected variables.\n */\nasync function collectSchemaInteractively(): Promise<Record<string, unknown>> {\n const inquirer = (await import('inquirer')).default;\n const variables: SchemaVariable[] = [];\n let addMore = true;\n\n while (addMore) {\n const answers = await inquirer.prompt<{ name: string; type: SupportedSchemaType; description: string }>([\n {\n type: 'input',\n name: 'name',\n message: 'Variable name:',\n validate: (input: string): string | true => {\n if (!input.trim()) return 'Variable name is required';\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(input.trim())) {\n return 'Variable name must start with a letter/underscore and contain only alphanumeric/underscore';\n }\n return true;\n },\n },\n {\n type: 'list',\n name: 'type',\n message: 'Variable type:',\n choices: [...SUPPORTED_SCHEMA_TYPES],\n },\n {\n type: 'input',\n name: 'description',\n message: 'Description (optional):',\n },\n ]);\n\n variables.push({\n name: answers.name.trim(),\n type: answers.type,\n description: answers.description.trim() || undefined,\n });\n\n const continueAnswer = await inquirer.prompt<{ addAnother: boolean }>([{\n type: 'confirm',\n name: 'addAnother',\n message: 'Add another variable?',\n default: false,\n }]);\n\n addMore = continueAnswer.addAnother;\n }\n\n return buildSchemaFromVariables(variables);\n}\n\n/**\n * Prompt the user to define input variables interactively, provide a file path,\n * or skip. Returns the schema or undefined if skipped.\n */\nasync function promptForInputSchema(): Promise<Record<string, unknown> | undefined> {\n const inquirer = (await import('inquirer')).default;\n\n const answer = await inquirer.prompt<{ choice: string }>([{\n type: 'list',\n name: 'choice',\n message: 'Would you like to define input variables for this prompt?',\n choices: [\n { name: 'Yes, define variables interactively', value: 'interactive' },\n { name: 'Provide a JSON Schema file path', value: 'file' },\n { name: 'Skip (not recommended for optimization)', value: 'skip' },\n ],\n }]);\n\n if (answer.choice === 'interactive') {\n return collectSchemaInteractively();\n }\n\n if (answer.choice === 'file') {\n const fileAnswer = await inquirer.prompt<{ path: string }>([{\n type: 'input',\n name: 'path',\n message: 'JSON Schema file path:',\n validate: (input: string): string | true => {\n if (!input.trim()) return 'File path is required';\n if (!existsSync(input.trim())) return `File not found: ${input.trim()}`;\n return true;\n },\n }]);\n\n const content = readFileSync(fileAnswer.path.trim(), 'utf-8');\n try {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n if (!isValidJsonSchema(parsed)) {\n console.log(chalk.yellow(`\\n Warning: ${formatSchemaWarning('inputSchema')}\\n`));\n }\n return parsed;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n `Failed to parse JSON Schema from ${fileAnswer.path.trim()}`,\n 'Ensure the file contains valid JSON'\n );\n }\n }\n\n // skip\n return undefined;\n}\n\n/**\n * Check prompt content for single-brace template variables and warn about\n * MutagenT's double-brace syntax. Only warns, does not block creation.\n */\nfunction warnSingleBraceVariables(content: string, output: OutputFormatter): void {\n // Match {word} but not {{word}} -- look for single braces not preceded/followed by another brace\n const singleBracePattern = /(?<!\\{)\\{([a-zA-Z_][a-zA-Z0-9_]*)\\}(?!\\})/g;\n const matches = [...content.matchAll(singleBracePattern)];\n if (matches.length > 0) {\n const variables = [...new Set(matches.map(m => m[1] ?? ''))];\n for (const variable of variables) {\n output.warn(`Found {${variable}} -- MutagenT uses {{${variable}}} syntax. Did you mean {{${variable}}}?`);\n }\n }\n}\n\n/**\n * Parse dataset file content based on format detection.\n * Supports JSON arrays, JSONL (one JSON object per line), and CSV passthrough.\n *\n * @param rawContent - The raw file content as a string\n * @param filePath - The file path (used for format detection and error messages)\n * @returns The parsed content as a JSON string suitable for the API\n */\nexport function parseDatasetFile(rawContent: string, filePath: string): string {\n const trimmed = rawContent.trim();\n\n // CSV files are passed through as-is (the API handles CSV parsing)\n if (filePath.endsWith('.csv')) {\n return rawContent;\n }\n\n // If content starts with '[', treat as JSON array\n if (trimmed.startsWith('[')) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (!Array.isArray(parsed)) {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Expected a JSON array in dataset file',\n 'Dataset JSON files should contain an array of objects: [{...}, {...}]'\n );\n }\n return trimmed;\n } catch (e) {\n if (e instanceof MutagentError) throw e;\n throw new MutagentError(\n 'INVALID_JSON',\n `Failed to parse JSON array from ${filePath}`,\n 'Ensure the file contains valid JSON. For line-delimited JSON, use .jsonl extension or put one object per line.'\n );\n }\n }\n\n // If content starts with '{' or doesn't start with '[', treat as JSONL\n // (one JSON object per line)\n const lines = trimmed.split('\\n').filter(line => line.trim().length > 0);\n const items: unknown[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line) continue;\n const trimmedLine = line.trim();\n try {\n items.push(JSON.parse(trimmedLine));\n } catch {\n throw new MutagentError(\n 'INVALID_JSONL',\n `Invalid JSON on line ${String(i + 1)} of ${filePath}`,\n `Each line must be valid JSON. Problem line: \"${trimmedLine.substring(0, 80)}${trimmedLine.length > 80 ? '...' : ''}\"`\n );\n }\n }\n\n return JSON.stringify(items);\n}\n\nexport function createPromptsCommand(): Command {\n const prompts = new Command('prompts')\n .description('Manage prompts, datasets, evaluations, and optimizations')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts list\n ${chalk.dim('$')} mutagent prompts get <prompt-id>\n ${chalk.dim('$')} mutagent prompts create --file prompt.json\n ${chalk.dim('$')} mutagent prompts dataset list <prompt-id>\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"My Eval\"\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id>\n\nSubcommands:\n list, get, create, update, delete\n dataset list|add|remove\n evaluation list|create|results\n optimize start|status|results\n `);\n\n // =========================================================================\n // PROMPT CRUD\n // =========================================================================\n\n // List prompts\n prompts\n .command('list')\n .description('List all prompts')\n .option('-l, --limit <n>', 'Limit results', '50')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts list\n ${chalk.dim('$')} mutagent prompts list --limit 10\n ${chalk.dim('$')} mutagent prompts list --json\n\n${chalk.dim('Tip: Use --json for machine-readable output (AI agents, CI pipelines).')}\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const promptsList = await client.listPrompts();\n\n // Limit results\n const limit = parseInt(options.limit, 10) || 50;\n const limited = promptsList.slice(0, limit);\n\n if (isJson) {\n const withLinks = limited.map((p: Prompt) => ({\n ...p,\n _links: promptLinks(p.id),\n }));\n output.output(withLinks);\n } else {\n // Format for table\n const formatted = limited.map((p: Prompt) => ({\n id: p.id,\n name: p.name,\n version: p.version,\n updated: p.updatedAt ? new Date(p.updatedAt).toLocaleDateString() : 'N/A',\n url: promptLink(p.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get prompt\n prompts\n .command('get')\n .description('Get prompt details with nested data')\n .argument('<id>', 'Prompt ID (from: mutagent prompts list)')\n .option('--with-datasets', 'Include datasets')\n .option('--with-evals', 'Include evaluations')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts get <id>\n ${chalk.dim('$')} mutagent prompts get <id> --with-datasets --with-evals\n ${chalk.dim('$')} mutagent prompts get <id> --json\n\n${chalk.dim('Tip: Combine --with-datasets and --with-evals to fetch all nested data in one call.')}\n `)\n .action(async (id: string, options: GetOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const prompt = await client.getPrompt(id);\n\n const result: Record<string, unknown> = { ...prompt };\n\n if (options.withDatasets) {\n const datasets = await client.listDatasets(id);\n result.datasets = datasets;\n }\n\n if (options.withEvals) {\n const evals = await client.listEvaluations(id);\n result.evaluations = evals;\n }\n\n if (isJson) {\n result._links = promptLinks(id);\n }\n output.output(result);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Create prompt\n prompts\n .command('create')\n .description('Create a new prompt')\n .option('-d, --data <json>', 'Prompt as JSON string (recommended — curl-style inline)')\n .option('-f, --file <path>', 'Create from JSON file')\n .option('--raw-file <path>', 'Create from plain text file (used as rawPrompt)')\n .option('-n, --name <name>', 'Prompt name')\n .option('-c, --content <content>', 'Prompt content (rawPrompt) [DEPRECATED: use --raw]')\n .option('-r, --raw <text>', 'Raw prompt text (single prompt)')\n .option('--system <text>', 'System prompt (use with --human)')\n .option('--human <text>', 'Human prompt (use with --system)')\n .option('--messages <json>', 'Messages array as JSON (e.g., \\'[{\"role\":\"system\",\"content\":\"...\"}]\\')')\n .option('--output-schema <json>', 'Output schema as JSON string (required for optimization)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts create -d '{\"name\":\"summarizer\",\"systemPrompt\":\"Summarize\",\"humanPrompt\":\"{{text}}\",\"outputSchema\":{\"type\":\"object\",\"properties\":{\"summary\":{\"type\":\"string\"}}}}'\n ${chalk.dim('$')} mutagent prompts create --name \"my-prompt\" --system \"You are helpful\" --human \"Hello\" --output-schema '{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"string\"}}}'\n ${chalk.dim('$')} mutagent prompts create --file prompt.json\n ${chalk.dim('$')} mutagent prompts create --name \"raw-prompt\" --raw \"Summarize: {{text}}\"\n\nPrompt Input Methods (pick one, priority order):\n -d, --data Inline JSON object (recommended for CI/scripts)\n --file Load from JSON file (full prompt object)\n --raw-file Load plain text file as raw prompt\n --system/--human Structured system + user message pair\n --raw Single raw prompt text with {{variables}}\n --messages Full messages array as JSON\n\n${chalk.dim('Note: --data and --file are mutually exclusive. outputSchema is required (include in --data/--file or use --output-schema).')}\n `)\n .action(async (options: CreateOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let data: Partial<Prompt>;\n\n // --data and --file are mutually exclusive\n if (options.data && options.file) {\n throw new MutagentError(\n 'INVALID_ARGUMENTS',\n 'Cannot use --data and --file together',\n 'Use --data for inline JSON or --file for file-based input, not both'\n );\n }\n\n // Priority: --data > --file > --raw-file > individual flags\n if (options.data) {\n // Parse inline JSON\n try {\n data = JSON.parse(options.data) as Partial<Prompt>;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in --data flag',\n 'Provide a valid JSON object, e.g., \\'{\"name\":\"my-prompt\",\"systemPrompt\":\"You are helpful\"}\\''\n );\n }\n // CLI flags override --data fields\n if (options.name) data.name = options.name;\n } else if (options.file) {\n const content = readFileSync(options.file, 'utf-8');\n data = JSON.parse(content) as Partial<Prompt>;\n } else if (options.rawFile) {\n // --raw-file: read plain text file as rawPrompt\n if (!existsSync(options.rawFile)) {\n throw new MutagentError(\n 'FILE_NOT_FOUND',\n `File not found: ${options.rawFile}`,\n 'Check the file path and try again'\n );\n }\n const textContent = readFileSync(options.rawFile, 'utf-8');\n data = {\n name: options.name ?? options.rawFile.replace(/^.*[\\\\/]/, '').replace(/\\.[^.]+$/, ''),\n rawPrompt: textContent,\n };\n } else if (options.name) {\n // Handle different prompt style formats\n data = { name: options.name };\n\n // Priority: messages > system+human > raw > content (deprecated)\n if (options.messages) {\n // Messages format: JSON array of messages\n try {\n const messages = JSON.parse(options.messages) as { role: string; content: string }[];\n // Extract system and human prompts from messages array\n const systemMsg = messages.find(m => m.role === 'system');\n const humanMsg = messages.find(m => m.role === 'user' || m.role === 'human');\n if (systemMsg) data.systemPrompt = systemMsg.content;\n if (humanMsg) data.humanPrompt = humanMsg.content;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in --messages flag',\n 'Provide a valid JSON array, e.g., \\'[{\"role\":\"system\",\"content\":\"...\"}]\\''\n );\n }\n } else if (options.system ?? options.human) {\n // Human/System format\n if (options.system) data.systemPrompt = options.system;\n if (options.human) data.humanPrompt = options.human;\n } else if (options.raw) {\n // Raw prompt format\n data.rawPrompt = options.raw;\n } else if (options.content) {\n // Deprecated --content flag (backwards compatibility)\n data.rawPrompt = options.content;\n } else {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Prompt content required',\n 'Use --data, --raw, --raw-file, --system/--human, or --messages to specify prompt content'\n );\n }\n } else {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Either --data, --file, --raw-file, or --name with prompt content is required',\n 'Use --data for inline JSON, --file to load from JSON, --raw-file for plain text, or provide --name with --raw, --system/--human, or --messages'\n );\n }\n\n // Warn about single-brace template variables (Task 7e)\n const promptContent = data.rawPrompt ?? data.systemPrompt ?? data.humanPrompt ?? '';\n if (promptContent && !isJson) {\n warnSingleBraceVariables(promptContent, output);\n }\n\n // --output-schema flag overrides any outputSchema from --data/--file\n if (options.outputSchema) {\n try {\n data.outputSchema = JSON.parse(options.outputSchema) as Record<string, unknown>;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in --output-schema flag',\n 'Provide a valid JSON Schema, e.g., \\'{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"string\"}}}\\''\n );\n }\n }\n\n // outputSchema is REQUIRED — prompt interactively or error\n if (isSchemaEmpty(data.outputSchema)) {\n if (!isJson && process.stdin.isTTY) {\n const inquirer = (await import('inquirer')).default;\n output.warn('outputSchema is required for optimization. Define the expected output structure.');\n const schemaAnswer = await inquirer.prompt<{ schema: string }>([{\n type: 'input',\n name: 'schema',\n message: 'Output schema (JSON):',\n validate: (input: string): string | true => {\n if (!input.trim()) return 'outputSchema is required';\n try {\n JSON.parse(input);\n return true;\n } catch {\n return 'Invalid JSON. Example: {\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"string\"}}}';\n }\n },\n }]);\n data.outputSchema = JSON.parse(schemaAnswer.schema) as Record<string, unknown>;\n } else {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'outputSchema is required for prompt creation',\n 'Use --output-schema \\'{\"type\":\"object\",\"properties\":{...}}\\' or include outputSchema in --data/--file'\n );\n }\n }\n\n // Interactive schema prompting when inputSchema is empty/invalid (non-JSON mode only)\n if (!isJson && isSchemaEmpty(data.inputSchema)) {\n // Only prompt interactively if stdin is a TTY (not piped/CI)\n if (process.stdin.isTTY) {\n const schema = await promptForInputSchema();\n if (schema) {\n data.inputSchema = schema;\n }\n } else {\n output.warn('No inputSchema provided. Optimization requires inputSchema with defined variables.');\n }\n }\n\n // Warn about missing/invalid inputSchema/outputSchema (non-blocking)\n warnMissingSchemas(data, output);\n\n const client = getSDKClient();\n const prompt = await client.createPrompt(data);\n\n if (isJson) {\n output.output({ ...prompt, _links: promptLinks(prompt.id) });\n } else {\n output.success(`Created prompt: ${prompt.name} (id: ${String(prompt.id)})`);\n const hints = formatCreationHints({\n resourceType: 'Prompt',\n id: prompt.id,\n name: prompt.name,\n dashboardUrl: promptLink(prompt.id),\n apiPath: `/api/prompts/${String(prompt.id)}`,\n });\n console.log(hints);\n }\n\n // Auto-update mutation context\n const sourceFile = options.file ?? options.rawFile;\n if (sourceFile) {\n updateMutationContext(ctx => {\n const preview = (data.rawPrompt ?? data.systemPrompt ?? data.name ?? '').slice(0, 50);\n ctx.addDiscoveredPrompt(sourceFile, 1, preview);\n ctx.markPromptUploaded(sourceFile, String(prompt.id), prompt.version);\n });\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Update prompt\n prompts\n .command('update')\n .description('Update a prompt')\n .argument('<id>', 'Prompt ID (from: mutagent prompts list)')\n .option('-d, --data <json>', 'Update fields as JSON string (recommended — curl-style inline)')\n .option('-f, --file <path>', 'Update from JSON file')\n .option('--raw-file <path>', 'Update from plain text file (used as rawPrompt)')\n .option('-n, --name <name>', 'New name')\n .option('-c, --content <content>', 'New content (rawPrompt) [DEPRECATED: use --raw]')\n .option('-r, --raw <text>', 'Raw prompt text (single prompt)')\n .option('--system <text>', 'System prompt (use with --human)')\n .option('--human <text>', 'Human prompt (use with --system)')\n .option('--messages <json>', 'Messages array as JSON (e.g., \\'[{\"role\":\"system\",\"content\":\"...\"}]\\')')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts update <id> -d '{\"name\":\"new-name\",\"systemPrompt\":\"Updated prompt\"}'\n ${chalk.dim('$')} mutagent prompts update <id> --name \"new-name\"\n ${chalk.dim('$')} mutagent prompts update <id> --system \"Updated system prompt\"\n ${chalk.dim('$')} mutagent prompts update <id> --raw-file updated-prompt.txt\n ${chalk.dim('$')} mutagent prompts update <id> --file updated-prompt.json\n\n${chalk.dim('Note: --data and --file are mutually exclusive. CLI flags (--name) override --data fields.')}\n `)\n .action(async (id: string, options: UpdateOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let data: Partial<Prompt> = {};\n\n // --data and --file are mutually exclusive\n if (options.data && options.file) {\n throw new MutagentError(\n 'INVALID_ARGUMENTS',\n 'Cannot use --data and --file together',\n 'Use --data for inline JSON or --file for file-based input, not both'\n );\n }\n\n // Priority: --data > --file > --raw-file > individual flags\n if (options.data) {\n try {\n data = JSON.parse(options.data) as Partial<Prompt>;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in --data flag',\n 'Provide a valid JSON object, e.g., \\'{\"name\":\"new-name\",\"systemPrompt\":\"Updated prompt\"}\\''\n );\n }\n // CLI flags override --data fields\n if (options.name) data.name = options.name;\n } else if (options.file) {\n const content = readFileSync(options.file, 'utf-8');\n data = JSON.parse(content) as Partial<Prompt>;\n } else if (options.rawFile) {\n // --raw-file: read plain text file as rawPrompt\n if (!existsSync(options.rawFile)) {\n throw new MutagentError(\n 'FILE_NOT_FOUND',\n `File not found: ${options.rawFile}`,\n 'Check the file path and try again'\n );\n }\n const textContent = readFileSync(options.rawFile, 'utf-8');\n data.rawPrompt = textContent;\n if (options.name) data.name = options.name;\n } else {\n if (options.name) data.name = options.name;\n\n // Handle different prompt style formats\n // Priority: messages > system+human > raw > content (deprecated)\n if (options.messages) {\n // Messages format: JSON array of messages\n try {\n const messages = JSON.parse(options.messages) as { role: string; content: string }[];\n // Extract system and human prompts from messages array\n const systemMsg = messages.find(m => m.role === 'system');\n const humanMsg = messages.find(m => m.role === 'user' || m.role === 'human');\n if (systemMsg) data.systemPrompt = systemMsg.content;\n if (humanMsg) data.humanPrompt = humanMsg.content;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in --messages flag',\n 'Provide a valid JSON array, e.g., \\'[{\"role\":\"system\",\"content\":\"...\"}]\\''\n );\n }\n } else if (options.system ?? options.human) {\n // Human/System format\n if (options.system) data.systemPrompt = options.system;\n if (options.human) data.humanPrompt = options.human;\n } else if (options.raw) {\n // Raw prompt format\n data.rawPrompt = options.raw;\n } else if (options.content) {\n // Deprecated --content flag (backwards compatibility)\n data.rawPrompt = options.content;\n }\n }\n\n if (Object.keys(data).length === 0) {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'No update data provided',\n 'Use --data, --file, --raw-file, --name, --raw, --system/--human, or --messages'\n );\n }\n\n // Warn about single-brace template variables (Task 7e)\n const promptContent = data.rawPrompt ?? data.systemPrompt ?? data.humanPrompt ?? '';\n if (promptContent && !isJson) {\n warnSingleBraceVariables(promptContent, output);\n }\n\n const client = getSDKClient();\n const prompt = await client.updatePrompt(id, data);\n\n if (isJson) {\n output.output({ ...prompt, _links: promptLinks(prompt.id) });\n } else {\n output.success(`Updated prompt: ${prompt.name} (id: ${String(prompt.id)})`);\n const hints = formatCreationHints({\n resourceType: 'Prompt',\n id: prompt.id,\n name: prompt.name,\n dashboardUrl: promptLink(prompt.id),\n apiPath: `/api/prompts/${String(prompt.id)}`,\n });\n console.log(hints);\n }\n\n // Auto-update mutation context\n const sourceFile = options.file ?? options.rawFile;\n if (sourceFile) {\n updateMutationContext(ctx => {\n ctx.markPromptUploaded(sourceFile, String(prompt.id), prompt.version);\n });\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Delete prompt\n prompts\n .command('delete')\n .description('Delete a prompt')\n .argument('<id>', 'Prompt ID (from: mutagent prompts list)')\n .option('--force', 'Skip confirmation')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts delete <id>\n ${chalk.dim('$')} mutagent prompts delete <id> --force\n ${chalk.dim('$')} mutagent prompts delete <id> --force --json\n\n${chalk.dim('Tip: Use --force to skip confirmation (required for non-interactive/CI usage).')}\n `)\n .action(async (id: string, options: DeleteOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n if (!options.force && !isJson) {\n const inquirer = (await import('inquirer')).default;\n const answers = await inquirer.prompt<ConfirmAnswer>([{\n type: 'confirm',\n name: 'confirm',\n message: `Delete prompt ${id}?`,\n default: false,\n }]);\n\n if (!answers.confirm) {\n output.info('Cancelled');\n return;\n }\n }\n\n const client = getSDKClient();\n await client.deletePrompt(id);\n\n output.success(`Deleted prompt: ${id}`);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // =========================================================================\n // DATASET subcommand group (mutagent prompts dataset ...)\n // =========================================================================\n const dataset = prompts\n .command('dataset')\n .description('Manage datasets for prompts')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts dataset list <prompt-id>\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> --file dataset.jsonl\n ${chalk.dim('$')} mutagent prompts dataset remove <prompt-id> <dataset-id>\n `);\n\n // List datasets\n dataset\n .command('list')\n .description('List datasets for a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts dataset list <prompt-id>\n ${chalk.dim('$')} mutagent prompts dataset list <prompt-id> --json\n `)\n .action(async (promptId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const datasets = await client.listDatasets(promptId);\n\n if (isJson) {\n const withLinks = datasets.map((d) => ({\n ...d,\n _links: datasetLinks(promptId, d.id),\n }));\n output.output(withLinks);\n } else {\n const formatted = datasets.map((d) => ({\n ...d,\n url: datasetLink(promptId, d.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Add dataset\n dataset\n .command('add')\n .description('Add dataset to a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .option('-f, --file <path>', 'Dataset file (JSON array, JSONL, or CSV)')\n .option('-d, --data <json>', 'Inline JSON array of dataset items')\n .option('-n, --name <name>', 'Dataset name (default: timestamped)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> --file dataset.json\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> --file dataset.jsonl --name \"My Dataset\"\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> --file dataset.csv\n ${chalk.dim('$')} mutagent prompts dataset add <prompt-id> -d '[{\"input\":{\"text\":\"hello\"},\"expectedOutput\":{\"result\":\"world\"}}]'\n\nSupported file formats:\n ${chalk.dim('.json')} JSON array of objects: [{\"input\": {...}, \"expectedOutput\": {...}}, ...]\n ${chalk.dim('.jsonl')} One JSON object per line (newline-delimited JSON)\n ${chalk.dim('.csv')} Comma-separated values with header row\n\nInline data format (-d):\n JSON array of objects, e.g.:\n ${chalk.dim('[{\"input\": {\"text\": \"hello\"}, \"expectedOutput\": {\"result\": \"world\"}}]')}\n\n${chalk.dim('Note: --file and -d are mutually exclusive. Provide one or the other.')}\n `)\n .action(async (promptId: string, options: DatasetAddOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n if (options.file && options.data) {\n throw new MutagentError(\n 'INVALID_ARGUMENTS',\n 'Cannot use both --file and -d/--data',\n 'Use --file to upload from a file or -d to provide inline JSON data, not both'\n );\n }\n\n if (!options.file && !options.data) {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Either --file or -d/--data is required',\n 'Use --file <path> to upload from a file or -d \\'[{...}]\\' for inline JSON data'\n );\n }\n\n let content: string;\n\n if (options.data) {\n // Inline JSON data - validate it parses as an array\n try {\n const parsed: unknown = JSON.parse(options.data);\n if (!Array.isArray(parsed)) {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Inline data must be a JSON array',\n 'Provide a JSON array, e.g., \\'[{\"input\": {...}, \"expectedOutput\": {...}}]\\''\n );\n }\n content = options.data;\n } catch (e) {\n if (e instanceof MutagentError) throw e;\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in -d/--data flag',\n 'Provide a valid JSON array, e.g., \\'[{\"input\": {...}, \"expectedOutput\": {...}}]\\''\n );\n }\n } else {\n // File-based upload (options.file is guaranteed by the check above)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const filePath = options.file!;\n const rawContent = readFileSync(filePath, 'utf-8');\n content = parseDatasetFile(rawContent, filePath);\n }\n\n // Interactive dataset naming when --name not provided\n let datasetName = options.name;\n if (!datasetName && !isJson && process.stdin.isTTY) {\n const inquirer = (await import('inquirer')).default;\n // Suggest a name based on the source filename (without extension)\n const defaultName = options.file\n ? options.file.replace(/^.*[\\\\/]/, '').replace(/\\.[^.]+$/, '')\n : undefined;\n const nameAnswer = await inquirer.prompt<{ name: string }>([{\n type: 'input',\n name: 'name',\n message: 'Name this dataset:',\n default: defaultName,\n validate: (input: string): string | true => {\n if (!input.trim()) return 'Dataset name is required';\n if (input.trim().length < 2) return 'Dataset name must be at least 2 characters';\n return true;\n },\n }]);\n datasetName = nameAnswer.name.trim();\n }\n\n const client = getSDKClient();\n const datasetResult = await client.addDataset(promptId, content, datasetName);\n\n if (isJson) {\n output.output({\n ...datasetResult,\n _links: datasetLinks(promptId, datasetResult.id),\n });\n } else {\n output.success(`Added dataset \"${datasetResult.name}\" to prompt: ${promptId} (id: ${String(datasetResult.id)})`);\n if (datasetResult.itemCount !== undefined && datasetResult.itemCount > 0) {\n output.info(`Items uploaded: ${String(datasetResult.itemCount)}`);\n }\n const hints = formatCreationHints({\n resourceType: 'Dataset',\n id: datasetResult.id,\n name: datasetResult.name,\n dashboardUrl: datasetLink(promptId, datasetResult.id),\n apiPath: `/api/prompts/${promptId}/datasets/${String(datasetResult.id)}`,\n });\n console.log(hints);\n }\n\n // Auto-update mutation context\n const datasetFile = options.file ?? 'inline-data';\n updateMutationContext(ctx => {\n ctx.addDiscoveredDataset(datasetFile, datasetResult.name, datasetResult.itemCount ?? 0);\n ctx.markDatasetUploaded(datasetFile, String(datasetResult.id), promptId);\n });\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Remove dataset\n dataset\n .command('remove')\n .description('Remove dataset from a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .argument('<dataset-id>', 'Dataset ID (from: mutagent prompts dataset list <prompt-id>)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts dataset remove <prompt-id> <dataset-id>\n ${chalk.dim('$')} mutagent prompts dataset remove <prompt-id> <dataset-id> --json\n `)\n .action(async (promptId: string, datasetId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n await client.removeDataset(promptId, datasetId);\n output.success(`Removed dataset ${datasetId} from prompt ${promptId}`);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // =========================================================================\n // EVALUATION subcommand group (mutagent prompts evaluation ...)\n // =========================================================================\n const evaluation = prompts\n .command('evaluation')\n .description('Manage evaluations for prompts')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts evaluation list <prompt-id>\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"My Eval\"\n ${chalk.dim('$')} mutagent prompts evaluation results <run-id>\n `);\n\n // List evaluations\n evaluation\n .command('list')\n .description('List evaluations for a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts evaluation list <prompt-id>\n ${chalk.dim('$')} mutagent prompts evaluation list <prompt-id> --json\n `)\n .action(async (promptId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const evals = await client.listEvaluations(promptId);\n\n if (isJson) {\n const withLinks = evals.map((e) => ({\n ...e,\n _links: evaluationLinks(promptId, e.id),\n }));\n output.output(withLinks);\n } else {\n const formatted = evals.map((e) => ({\n ...e,\n url: evaluationLink(promptId, e.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Create evaluation\n evaluation\n .command('create')\n .description('Create an evaluation configuration for a prompt')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .option('-d, --data <json>', 'Evaluation as JSON string (recommended — curl-style inline)')\n .option('-n, --name <name>', 'Evaluation name (required unless --guided)')\n .option('-f, --file <path>', 'Load evaluation criteria from JSON file')\n .option('--description <text>', 'Evaluation description')\n .option('--dataset <id>', 'Dataset ID to associate (from: mutagent prompts dataset list)')\n .option('--guided', 'Interactive guided mode — build criteria step by step')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --guided\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --data '{\"name\":\"Accuracy\",\"evalConfig\":{\"criteria\":[...]}}' --name \"Accuracy\"\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"Accuracy Check\"\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"Full Eval\" --file criteria.json --dataset <dataset-id>\n ${chalk.dim('$')} mutagent prompts evaluation create <prompt-id> --name \"QA\" --description \"Quality assurance eval\" --json\n\nCriteria file format (--file or --data):\n ${chalk.dim('{ \"name\": \"...\", \"evalConfig\": { \"criteria\": [...] }, \"llmConfig\": { \"model\": \"gpt-4\" } }')}\n\n${chalk.dim('Note: --data and --file are mutually exclusive. CLI flags (--name, --description) override --data fields.')}\n${chalk.dim('Tip: Use --guided for an interactive walkthrough of criteria creation.')}\n${chalk.dim('Get prompt IDs: mutagent prompts list | Get dataset IDs: mutagent prompts dataset list <prompt-id>')}\n `)\n .action(async (promptId: string, options: EvaluationCreateOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n // Guided mode: interactive criteria builder\n if (options.guided) {\n if (!process.stdin.isTTY || isJson) {\n throw new MutagentError(\n 'INTERACTIVE_REQUIRED',\n '--guided requires an interactive terminal',\n 'Remove --guided for non-interactive usage, or use --data/--file to provide criteria'\n );\n }\n\n const guidedResult = await runGuidedEvalCreator(promptId);\n if (!guidedResult) {\n return; // User cancelled\n }\n\n const client = getSDKClient();\n const evalResult = await client.createEvaluation(promptId, {\n name: guidedResult.name,\n description: guidedResult.description,\n evalConfig: guidedResult.evalConfig as Record<string, unknown>,\n datasetId: options.dataset ? parseInt(options.dataset, 10) : undefined,\n });\n\n output.success(`Created evaluation: ${evalResult.name} (id: ${String(evalResult.id)})`);\n const hints = formatCreationHints({\n resourceType: 'Evaluation',\n id: evalResult.id,\n name: evalResult.name,\n dashboardUrl: evaluationLink(promptId, evalResult.id),\n apiPath: `/api/prompts/${promptId}/evaluations/${String(evalResult.id)}`,\n });\n console.log(hints);\n\n // Auto-update mutation context\n const criteriaCount = guidedResult.evalConfig.criteria.length;\n updateMutationContext(ctx => {\n ctx.addEvaluation(evalResult.name, criteriaCount, String(evalResult.id), promptId);\n });\n return;\n }\n\n // Non-guided: --name is required\n if (!options.name) {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Evaluation name is required',\n 'Use --name <name> or --guided for interactive mode'\n );\n }\n\n // --data and --file are mutually exclusive\n if (options.data && options.file) {\n throw new MutagentError(\n 'INVALID_ARGUMENTS',\n 'Cannot use --data and --file together',\n 'Use --data for inline JSON or --file for file-based input, not both'\n );\n }\n\n const evalData: {\n name: string;\n description?: string;\n datasetId?: number;\n evalConfig?: Record<string, unknown>;\n llmConfig?: Record<string, unknown>;\n tags?: string[];\n metadata?: Record<string, unknown>;\n } = {\n name: options.name,\n description: options.description,\n };\n\n if (options.data) {\n // Parse inline JSON\n try {\n const parsed = JSON.parse(options.data) as Record<string, unknown>;\n if (parsed.evalConfig) evalData.evalConfig = parsed.evalConfig as Record<string, unknown>;\n if (parsed.llmConfig) evalData.llmConfig = parsed.llmConfig as Record<string, unknown>;\n if (parsed.tags) evalData.tags = parsed.tags as string[];\n if (parsed.metadata) evalData.metadata = parsed.metadata as Record<string, unknown>;\n if (parsed.datasetId) evalData.datasetId = parsed.datasetId as number;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n 'Invalid JSON in --data flag',\n 'Provide a valid JSON object, e.g., \\'{\"evalConfig\":{\"criteria\":[...]},\"llmConfig\":{\"model\":\"gpt-4\"}}\\''\n );\n }\n } else if (options.file) {\n // Load criteria from file\n if (!existsSync(options.file)) {\n throw new MutagentError(\n 'FILE_NOT_FOUND',\n `File not found: ${options.file}`,\n 'Check the file path and try again'\n );\n }\n const fileContent = readFileSync(options.file, 'utf-8');\n try {\n const parsed = JSON.parse(fileContent) as Record<string, unknown>;\n if (parsed.evalConfig) evalData.evalConfig = parsed.evalConfig as Record<string, unknown>;\n if (parsed.llmConfig) evalData.llmConfig = parsed.llmConfig as Record<string, unknown>;\n if (parsed.tags) evalData.tags = parsed.tags as string[];\n if (parsed.metadata) evalData.metadata = parsed.metadata as Record<string, unknown>;\n } catch {\n throw new MutagentError(\n 'INVALID_JSON',\n `Failed to parse criteria file: ${options.file}`,\n 'Ensure the file contains valid JSON with evalConfig and/or llmConfig'\n );\n }\n }\n\n // CLI flags override --data/--file fields\n if (options.name) evalData.name = options.name;\n if (options.description) evalData.description = options.description;\n\n // Associate dataset if provided via flag (overrides --data.datasetId)\n if (options.dataset) {\n evalData.datasetId = parseInt(options.dataset, 10);\n if (isNaN(evalData.datasetId)) {\n throw new MutagentError(\n 'VALIDATION_ERROR',\n `Invalid dataset ID: ${options.dataset}`,\n 'Dataset ID must be a number. Get IDs with: mutagent prompts dataset list <prompt-id>'\n );\n }\n }\n\n const client = getSDKClient();\n const evalResult = await client.createEvaluation(promptId, evalData);\n\n if (isJson) {\n output.output({\n ...evalResult,\n _links: evaluationLinks(promptId, evalResult.id),\n });\n } else {\n output.success(`Created evaluation: ${evalResult.name} (id: ${String(evalResult.id)})`);\n const hints = formatCreationHints({\n resourceType: 'Evaluation',\n id: evalResult.id,\n name: evalResult.name,\n dashboardUrl: evaluationLink(promptId, evalResult.id),\n apiPath: `/api/prompts/${promptId}/evaluations/${String(evalResult.id)}`,\n });\n console.log(hints);\n }\n\n // Auto-update mutation context\n const criteriaCount = (evalData.evalConfig?.criteria as unknown[] | undefined)?.length ?? 0;\n updateMutationContext(ctx => {\n ctx.addEvaluation(evalResult.name, criteriaCount, String(evalResult.id), promptId);\n });\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get evaluation results\n evaluation\n .command('results')\n .description('Get evaluation results')\n .argument('<run-id>', 'Evaluation run ID (from: mutagent prompts evaluation list <prompt-id>)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts evaluation results <run-id>\n ${chalk.dim('$')} mutagent prompts evaluation results <run-id> --json\n `)\n .action(async (runId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const results = await client.getEvaluationResults(runId);\n output.output(results);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // =========================================================================\n // OPTIMIZE subcommand group (mutagent prompts optimize ...)\n // =========================================================================\n const optimize = prompts\n .command('optimize')\n .description('Manage prompt optimization jobs')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id>\n ${chalk.dim('$')} mutagent prompts optimize status <job-id>\n ${chalk.dim('$')} mutagent prompts optimize results <job-id>\n\nWorkflow: start -> status (poll) -> results\n `);\n\n // Start optimization\n optimize\n .command('start')\n .description('Start prompt optimization')\n .argument('<prompt-id>', 'Prompt ID (from: mutagent prompts list)')\n .requiredOption('-d, --dataset <id>', 'Dataset ID for optimization (from: mutagent prompts dataset list <prompt-id>)')\n .option('--max-iterations <n>', 'Max optimization iterations (default: 3)')\n .option('--target-score <n>', 'Target accuracy 0-1 (e.g., 0.9)')\n .option('--patience <n>', 'Iterations without improvement before stopping')\n .option('--model <model-id>', 'Target LLM model (e.g., \"claude-sonnet-4-5-20250929\")')\n .option('--eval-model <model-id>', 'Evaluation model (defaults to target model)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id>\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id> --max-iterations 5\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id> --target-score 0.95 --model claude-sonnet-4-5-20250929\n ${chalk.dim('$')} mutagent prompts optimize start <prompt-id> --dataset <dataset-id> --json\n${PREREQUISITES_TEXT}\n\n${chalk.dim('Monitor progress with: mutagent prompts optimize status <job-id>')}\n `)\n .action(async (promptId: string, options: OptimizeStartOptions) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n // [AI AGENT NOTICE] TEMPORARILY REMOVED: `await checkProviderConfigured();` was here.\n // See comment block above PREREQUISITES_TEXT for full context and re-add instructions.\n const client = getSDKClient();\n const job = await client.startOptimization(promptId, options.dataset, {\n maxIterations: options.maxIterations ? parseInt(options.maxIterations, 10) : undefined,\n targetScore: options.targetScore ? parseFloat(options.targetScore) : undefined,\n patience: options.patience ? parseInt(options.patience, 10) : undefined,\n model: options.model,\n evalModel: options.evalModel,\n });\n\n if (isJson) {\n output.output({\n ...job,\n _links: {\n dashboard: optimizerLink(job.jobId),\n api: `/api/prompts/${promptId}/optimizations/${job.jobId}`,\n },\n });\n } else {\n output.success(`Started optimization job: ${job.jobId}`);\n const hints = formatCreationHints({\n resourceType: 'Optimization',\n id: job.jobId,\n dashboardUrl: optimizerLink(job.jobId),\n apiPath: `/api/prompts/${promptId}/optimizations/${job.jobId}`,\n });\n console.log(hints);\n }\n } catch (error) {\n // Enhanced error handling: parse validation errors for actionable messages\n if (error instanceof ApiError) {\n const messages = parseValidationErrors(error);\n if (!isJson) {\n console.error(chalk.red('Optimization failed. Missing requirements:'));\n for (const msg of messages) {\n console.error(chalk.red(` - ${msg}`));\n }\n console.error('');\n console.error(PREREQUISITES_TEXT);\n }\n }\n handleError(error, isJson);\n }\n });\n\n // Optimization status\n optimize\n .command('status')\n .description('Check optimization status')\n .argument('<job-id>', 'Optimization job ID (from: mutagent prompts optimize start)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts optimize status <job-id>\n ${chalk.dim('$')} mutagent prompts optimize status <job-id> --json\n `)\n .action(async (jobId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const status = await client.getOptimizationStatus(jobId);\n\n if (isJson) {\n output.output({ ...status, _links: { optimizer: optimizerLink(jobId) } });\n } else {\n const progress = status.progressPercent;\n const filled = Math.floor(progress / 10);\n const progressBar = '\\u2588'.repeat(filled) + '\\u2591'.repeat(10 - filled);\n output.info(`Progress: [${progressBar}] ${String(progress)}%`);\n output.output(status);\n output.info(`View: ${optimizerLink(jobId)}`);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Optimization results\n optimize\n .command('results')\n .description('Get optimization results')\n .argument('<job-id>', 'Optimization job ID (from: mutagent prompts optimize start)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent prompts optimize results <job-id>\n ${chalk.dim('$')} mutagent prompts optimize results <job-id> --json\n `)\n .action(async (jobId: string) => {\n const isJson = getJsonFlag(prompts);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const results = await client.getOptimizationResults(jobId);\n const resultData = results as Record<string, unknown>;\n\n if (isJson) {\n output.output({ ...resultData, _links: { optimizer: optimizerLink(jobId) } });\n } else {\n // Render scorecard\n renderScorecard(resultData as unknown as Parameters<typeof renderScorecard>[0]);\n\n // Interactive apply/reject flow (only if TTY and job completed)\n const jobData = resultData.job as Record<string, unknown> | undefined;\n const isCompleted = jobData?.status === 'completed';\n\n if (isCompleted && process.stdin.isTTY) {\n let showDetails = true;\n while (showDetails) {\n const { action } = await promptScorecardAction();\n\n if (action === 'details') {\n const original = (resultData.originalPrompt as Partial<Prompt> | undefined);\n const optimized = resultData.prompt as Partial<Prompt> | undefined;\n showPromptDiff(\n original?.systemPrompt ?? original?.rawPrompt ?? null,\n optimized?.systemPrompt ?? optimized?.rawPrompt ?? null,\n );\n continue;\n }\n\n if (action === 'apply') {\n const optimizedPrompt = resultData.prompt as Partial<Prompt> | undefined;\n const promptIdStr = String(jobData.promptId as number);\n if (optimizedPrompt && promptIdStr) {\n output.info('Applying optimized prompt...');\n const updateData: Partial<Prompt> = {};\n if (optimizedPrompt.systemPrompt) updateData.systemPrompt = optimizedPrompt.systemPrompt;\n if (optimizedPrompt.humanPrompt) updateData.humanPrompt = optimizedPrompt.humanPrompt;\n if (optimizedPrompt.rawPrompt) updateData.rawPrompt = optimizedPrompt.rawPrompt;\n\n await client.updatePrompt(promptIdStr, updateData);\n output.success('Optimized prompt applied as new version!');\n\n // Update mutation context\n updateMutationContext(ctx => {\n ctx.markPromptUploaded(\n `optimization:${jobId}`,\n promptIdStr,\n 'optimized',\n );\n });\n }\n } else {\n output.info('Kept original prompt. No changes applied.');\n }\n showDetails = false;\n }\n } else if (!isCompleted) {\n const statusStr = (jobData?.status as string | undefined) ?? 'unknown';\n output.info(`Job status: ${statusStr}. Results may be partial.`);\n output.info(`View: ${optimizerLink(jobId)}`);\n }\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return prompts;\n}\n",
17
+ "/**\n * @fileoverview Centralized UI deep link generation for MutagenT CLI\n * @module @mutagent/cli/lib/ui-links\n *\n * Generates clickable URLs that link to the MutagenT web UI for\n * viewing/editing resources. Used across all CLI commands that\n * list or fetch resources.\n *\n * The dashboard is a single page with tabs (Prompts, Evaluations, Datasets),\n * not separate routes per entity type.\n */\n\n/**\n * Get the base URL for the MutagenT web application.\n * Reads from MUTAGENT_APP_URL env var, falling back to production URL.\n */\nexport function getAppBaseUrl(): string {\n return process.env.MUTAGENT_APP_URL ?? 'https://app.mutagent.io';\n}\n\n/**\n * Generate a link to view a prompt in the dashboard.\n * The dashboard is at /prompts/dashboard with prompt detail in a tab/panel.\n */\nexport function promptLink(id: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(id)}`;\n}\n\n/**\n * Generate a link to the prompts dashboard (Datasets tab).\n */\nexport function promptDatasetsLink(promptId: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(promptId)}&tab=datasets`;\n}\n\n/**\n * Generate a link to the prompts dashboard (Evaluations tab).\n */\nexport function promptEvaluationsLink(promptId: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(promptId)}&tab=evaluations`;\n}\n\n/**\n * Generate a link to a specific dataset within the dashboard.\n */\nexport function datasetLink(promptId: string | number, datasetId: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(promptId)}&tab=datasets&dataset=${String(datasetId)}`;\n}\n\n/**\n * Generate a link to a specific evaluation within the dashboard.\n */\nexport function evaluationLink(promptId: string | number, evalId: string | number): string {\n return `${getAppBaseUrl()}/prompts/dashboard?prompt=${String(promptId)}&tab=evaluations&eval=${String(evalId)}`;\n}\n\n/**\n * Generate a link to view a trace in the UI.\n */\nexport function traceLink(id: string): string {\n return `${getAppBaseUrl()}/traces/${id}`;\n}\n\n/**\n * Generate a link to the optimizer page, optionally for a specific job.\n */\nexport function optimizerLink(jobId?: string): string {\n const base = `${getAppBaseUrl()}/prompts/optimizer`;\n return jobId ? `${base}?job=${jobId}` : base;\n}\n\n/**\n * Generate a link to the playground page.\n */\nexport function playgroundLink(): string {\n return `${getAppBaseUrl()}/prompts/playground`;\n}\n\n/**\n * Generate a link to the provider settings page.\n */\nexport function providerSettingsLink(): string {\n return `${getAppBaseUrl()}/settings/providers`;\n}\n\n/**\n * Generate a link to view a workspace in the settings.\n */\nexport function workspaceLink(id: string | number): string {\n return `${getAppBaseUrl()}/settings/workspaces/${String(id)}`;\n}\n\n/**\n * Generate _links object for a workspace resource.\n */\nexport function workspaceLinks(id: string | number): { settings: string; api: string } {\n return {\n settings: workspaceLink(id),\n api: `/api/workspaces/${String(id)}`,\n };\n}\n\n/**\n * Generate a link to view a provider in the settings.\n */\nexport function providerLink(id: string | number): string {\n return `${getAppBaseUrl()}/settings/providers/${String(id)}`;\n}\n\n/**\n * Generate _links object for a provider resource.\n */\nexport function providerLinks(id: string | number): { settings: string; api: string } {\n return {\n settings: providerLink(id),\n api: `/api/providers/${String(id)}`,\n };\n}\n\n/**\n * Generate a link to view an agent.\n */\nexport function agentLink(id: string | number): string {\n return `${getAppBaseUrl()}/agents/${String(id)}`;\n}\n\n/**\n * Generate _links object for an agent resource.\n */\nexport function agentLinks(id: string | number): { dashboard: string; api: string } {\n return {\n dashboard: agentLink(id),\n api: `/api/agents/${String(id)}`,\n };\n}\n\n/**\n * Generate the standard _links object for a prompt resource.\n */\nexport function promptLinks(promptId: string | number): { dashboard: string; api: string; datasets: string; evaluations: string } {\n return {\n dashboard: promptLink(promptId),\n api: `/api/prompts/${String(promptId)}`,\n datasets: promptDatasetsLink(promptId),\n evaluations: promptEvaluationsLink(promptId),\n };\n}\n\n/**\n * Generate _links object for a dataset resource.\n */\nexport function datasetLinks(promptId: string | number, datasetId: string | number): { dashboard: string; api: string } {\n return {\n dashboard: datasetLink(promptId, datasetId),\n api: `/api/prompts/${String(promptId)}/datasets/${String(datasetId)}`,\n };\n}\n\n/**\n * Generate _links object for an evaluation resource.\n */\nexport function evaluationLinks(promptId: string | number, evalId: string | number): { dashboard: string; api: string } {\n return {\n dashboard: evaluationLink(promptId, evalId),\n api: `/api/prompts/${String(promptId)}/evaluations/${String(evalId)}`,\n };\n}\n\n// =============================================================================\n// Resource Creation Hint Helpers\n// =============================================================================\n\n/**\n * Resource link hint definition for post-creation output.\n */\nexport interface ResourceCreationHint {\n /** Resource type label (e.g., \"Prompt\", \"Dataset\", \"Evaluation\") */\n resourceType: string;\n /** Resource identifier (the ID) */\n id: string | number;\n /** Resource name if available */\n name?: string;\n /** Dashboard URL */\n dashboardUrl: string;\n /** API path (relative) */\n apiPath: string;\n}\n\n/**\n * Format resource creation hints for human-readable CLI output.\n *\n * Produces output like:\n * ```\n * -> View in dashboard: https://app.mutagent.io/prompts/dashboard?prompt=123\n * -> API: GET /api/prompts/123\n *\n * Tip: Copy the link above to open in your browser or share with your team.\n * ```\n */\nexport function formatCreationHints(hint: ResourceCreationHint): string {\n const lines: string[] = [\n '',\n ` -> View in dashboard: ${hint.dashboardUrl}`,\n ` -> API: GET ${hint.apiPath}`,\n '',\n ' Tip: Copy the link above to open in your browser or share with your team.',\n ];\n return lines.join('\\n');\n}\n",
15
18
  "/**\n * @fileoverview JSON Schema helper utilities for MutagenT CLI\n * @module @mutagent/cli/lib/schema-helpers\n *\n * Provides validation, building, and formatting utilities for JSON Schema\n * objects used with prompt inputSchema/outputSchema fields.\n */\n\n/**\n * Variable definition for building JSON Schema interactively.\n */\nexport interface SchemaVariable {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'array' | 'object';\n description?: string;\n}\n\n/**\n * Supported JSON Schema primitive types for interactive variable definition.\n */\nexport const SUPPORTED_SCHEMA_TYPES = ['string', 'number', 'boolean', 'array', 'object'] as const;\nexport type SupportedSchemaType = typeof SUPPORTED_SCHEMA_TYPES[number];\n\n/**\n * Check whether a value is a valid JSON Schema (basic structural validation).\n *\n * A valid JSON Schema for our purposes must:\n * - Be a non-null object\n * - Have a \"type\" property (usually \"object\")\n * - If type is \"object\", should have a \"properties\" property\n *\n * This is NOT a full JSON Schema meta-validation -- it checks the structural\n * conventions expected by MutagenT's prompt system.\n */\nexport function isValidJsonSchema(schema: unknown): boolean {\n if (schema === null || schema === undefined) return false;\n if (typeof schema !== 'object') return false;\n if (Array.isArray(schema)) return false;\n\n const obj = schema as Record<string, unknown>;\n\n // Must have \"type\" field\n if (!('type' in obj) || typeof obj.type !== 'string') return false;\n\n // If type is \"object\", should have \"properties\"\n if (obj.type === 'object') {\n if (!('properties' in obj) || typeof obj.properties !== 'object' || obj.properties === null) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Build a JSON Schema from an array of variable definitions.\n *\n * @example\n * ```typescript\n * const schema = buildSchemaFromVariables([\n * { name: 'customer_name', type: 'string', description: 'The customer full name' },\n * { name: 'age', type: 'number', description: 'Customer age' },\n * ]);\n * // Returns:\n * // {\n * // type: \"object\",\n * // properties: {\n * // customer_name: { type: \"string\", description: \"The customer full name\" },\n * // age: { type: \"number\", description: \"Customer age\" }\n * // }\n * // }\n * ```\n */\nexport function buildSchemaFromVariables(variables: SchemaVariable[]): Record<string, unknown> {\n const properties: Record<string, Record<string, unknown>> = {};\n\n for (const variable of variables) {\n const prop: Record<string, unknown> = { type: variable.type };\n if (variable.description) {\n prop.description = variable.description;\n }\n properties[variable.name] = prop;\n }\n\n return {\n type: 'object',\n properties,\n };\n}\n\n/**\n * Return a formatted JSON Schema example string for display in CLI help output.\n */\nexport function formatSchemaExample(): string {\n return JSON.stringify(\n {\n type: 'object',\n properties: {\n variable_name: { type: 'string', description: 'Description here' },\n },\n },\n null,\n 2,\n );\n}\n\n/**\n * Return a formatted warning message with schema example for invalid schemas.\n * Used by the create/update commands when inputSchema or outputSchema\n * does not look like valid JSON Schema.\n */\nexport function formatSchemaWarning(fieldName: string): string {\n return [\n `${fieldName} doesn't appear to be a valid JSON Schema.`,\n '',\n ' Expected format:',\n ' {',\n ' \"type\": \"object\",',\n ' \"properties\": {',\n ' \"variable_name\": { \"type\": \"string\", \"description\": \"Description here\" }',\n ' }',\n ' }',\n '',\n ' You can also provide a schema file: mutagent prompts create --file schema.json',\n ].join('\\n');\n}\n",
19
+ "import chalk from 'chalk';\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface Criterion {\n name: string;\n targetField: string;\n scoringRubric: string;\n weight: number;\n}\n\ninterface GuidedEvalResult {\n name: string;\n description: string;\n evalConfig: {\n criteria: Criterion[];\n };\n}\n\ntype SchemaProperties = Record<string, { type?: string; description?: string }>;\n\n// =============================================================================\n// Scoring Rubric Templates\n// =============================================================================\n\nexport const RUBRIC_TEMPLATES: Record<string, string> = {\n 'Exact Match': 'Score 1.0 if the output exactly matches the expected value, 0.0 otherwise.',\n 'Semantic Similarity': 'Score 0.0-1.0 based on semantic similarity to the expected output. 1.0 = identical meaning, 0.5 = partially related, 0.0 = unrelated.',\n 'Contains Key Info': 'Score 1.0 if all key information from expected output is present, 0.5 if partially present, 0.0 if missing.',\n 'Format Compliance': 'Score 1.0 if the output follows the expected format/structure, 0.5 for minor deviations, 0.0 for wrong format.',\n 'Factual Accuracy': 'Score 1.0 if all facts are correct, 0.5 if mostly correct with minor errors, 0.0 if incorrect.',\n};\n\nexport const EVAL_TYPE_DESCRIPTIONS: Record<string, string> = {\n accuracy: 'Check if outputs match expected results (exact or semantic)',\n quality: 'Assess output quality, clarity, and helpfulness',\n custom: 'Define your own evaluation criteria',\n};\n\n// =============================================================================\n// Schema Field Extraction\n// =============================================================================\n\nexport function extractSchemaFields(schema: unknown, prefix: string): string[] {\n if (!schema || typeof schema !== 'object') return [];\n const obj = schema as Record<string, unknown>;\n\n // Handle JSON Schema with properties\n const properties = obj.properties as SchemaProperties | undefined;\n if (properties) {\n return Object.keys(properties).map(key => `${prefix}.${key}`);\n }\n\n // Handle flat key-value schemas\n const keys = Object.keys(obj).filter(k => k !== 'type' && k !== 'required' && k !== 'description');\n if (keys.length > 0) {\n return keys.map(key => `${prefix}.${key}`);\n }\n\n return [];\n}\n\n// =============================================================================\n// Guided Eval Creator\n// =============================================================================\n\nexport async function runGuidedEvalCreator(promptId: string): Promise<GuidedEvalResult | undefined> {\n const inquirer = (await import('inquirer')).default;\n\n // Step 1: Fetch prompt from platform to get schemas\n console.log('');\n console.log(chalk.cyan(' Fetching prompt details...'));\n\n let inputFields: string[] = [];\n let outputFields: string[] = [];\n\n try {\n const { getSDKClient } = await import('./sdk-client.js');\n const client = getSDKClient();\n const prompt = await client.getPrompt(promptId);\n\n inputFields = extractSchemaFields(prompt.inputSchema, 'input');\n outputFields = extractSchemaFields(prompt.outputSchema, 'output');\n\n if (inputFields.length > 0 || outputFields.length > 0) {\n console.log(chalk.green(` Found ${String(inputFields.length)} input field(s) and ${String(outputFields.length)} output field(s)`));\n } else {\n console.log(chalk.yellow(' No schema fields detected. You can still define criteria manually.'));\n }\n } catch {\n console.log(chalk.yellow(' Could not fetch prompt. You can still define criteria manually.'));\n }\n\n console.log('');\n\n // Step 2: Ask evaluation type\n const { evalType } = await inquirer.prompt<{ evalType: string }>([{\n type: 'list',\n name: 'evalType',\n message: 'What type of evaluation?',\n choices: Object.entries(EVAL_TYPE_DESCRIPTIONS).map(([value, description]) => ({\n name: `${value} — ${description}`,\n value,\n })),\n }]);\n\n // Step 3: Ask for evaluation name\n const defaultName = evalType.charAt(0).toUpperCase() + evalType.slice(1) + ' Evaluation';\n const { evalName } = await inquirer.prompt<{ evalName: string }>([{\n type: 'input',\n name: 'evalName',\n message: 'Evaluation name:',\n default: defaultName,\n validate: (input: string): string | true => {\n if (!input.trim()) return 'Evaluation name is required';\n return true;\n },\n }]);\n\n // Step 4: Build criteria\n const allFields = [...inputFields, ...outputFields];\n const criteria: Criterion[] = [];\n let addMore = true;\n\n while (addMore) {\n console.log('');\n console.log(chalk.bold(` Criterion #${String(criteria.length + 1)}`));\n\n const { criterionName } = await inquirer.prompt<{ criterionName: string }>([{\n type: 'input',\n name: 'criterionName',\n message: 'Name this criterion:',\n validate: (input: string): string | true => {\n if (!input.trim()) return 'Criterion name is required';\n return true;\n },\n }]);\n\n // Target field selection\n let targetField: string;\n if (allFields.length > 0) {\n const fieldChoices = [\n ...allFields.map(f => ({ name: f, value: f })),\n { name: '(custom field name)', value: '__custom__' },\n ];\n const { field } = await inquirer.prompt<{ field: string }>([{\n type: 'list',\n name: 'field',\n message: 'Target field:',\n choices: fieldChoices,\n }]);\n\n if (field === '__custom__') {\n const { customField } = await inquirer.prompt<{ customField: string }>([{\n type: 'input',\n name: 'customField',\n message: 'Custom field name (e.g., output.summary):',\n }]);\n targetField = customField.trim();\n } else {\n targetField = field;\n }\n } else {\n const { customField } = await inquirer.prompt<{ customField: string }>([{\n type: 'input',\n name: 'customField',\n message: 'Target field (e.g., output.result):',\n default: 'output',\n }]);\n targetField = customField.trim();\n }\n\n // Scoring rubric\n const rubricChoices = [\n ...Object.entries(RUBRIC_TEMPLATES).map(([name, value]) => ({\n name: `${name} — ${chalk.dim(value.substring(0, 50))}...`,\n value,\n })),\n { name: '(write custom rubric)', value: '__custom__' },\n ];\n\n const { rubric } = await inquirer.prompt<{ rubric: string }>([{\n type: 'list',\n name: 'rubric',\n message: 'Scoring rubric:',\n choices: rubricChoices,\n }]);\n\n let scoringRubric: string;\n if (rubric === '__custom__') {\n const { customRubric } = await inquirer.prompt<{ customRubric: string }>([{\n type: 'input',\n name: 'customRubric',\n message: 'Describe the scoring rubric:',\n validate: (input: string): string | true => {\n if (!input.trim()) return 'Rubric is required';\n return true;\n },\n }]);\n scoringRubric = customRubric.trim();\n } else {\n scoringRubric = rubric;\n }\n\n criteria.push({\n name: criterionName.trim(),\n targetField,\n scoringRubric,\n weight: 1.0,\n });\n\n const { continueAdding } = await inquirer.prompt<{ continueAdding: boolean }>([{\n type: 'confirm',\n name: 'continueAdding',\n message: 'Add another criterion?',\n default: false,\n }]);\n\n addMore = continueAdding;\n }\n\n if (criteria.length === 0) {\n console.log(chalk.yellow('\\n No criteria defined. Aborting guided eval creation.'));\n return undefined;\n }\n\n // Step 5: Preview and confirm\n console.log('');\n console.log(chalk.bold(' Evaluation Summary:'));\n console.log(` Name: ${chalk.green(evalName)}`);\n console.log(` Type: ${evalType}`);\n console.log(` Criteria: ${String(criteria.length)}`);\n for (const c of criteria) {\n console.log(` - ${chalk.cyan(c.name)} → ${c.targetField}`);\n }\n console.log('');\n\n const { confirmed } = await inquirer.prompt<{ confirmed: boolean }>([{\n type: 'confirm',\n name: 'confirmed',\n message: 'Create this evaluation?',\n default: true,\n }]);\n\n if (!confirmed) {\n console.log(chalk.dim('\\n Cancelled.'));\n return undefined;\n }\n\n return {\n name: evalName.trim(),\n description: `${evalType} evaluation with ${String(criteria.length)} criteria`,\n evalConfig: { criteria },\n };\n}\n",
20
+ "import chalk from 'chalk';\nimport { optimizerLink } from './ui-links.js';\nimport type { Prompt } from '../types/index.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface OptimizationResultData {\n job: {\n jobId: string;\n promptId: number;\n status: string;\n config?: {\n maxIterations?: number;\n model?: string;\n };\n };\n prompt: Prompt;\n // Extended fields from /progress endpoint\n originalScore?: number;\n bestScore?: number;\n iterationsCompleted?: number;\n scoreProgression?: number[];\n originalPrompt?: Partial<Prompt>;\n}\n\nexport interface ScorecardAction {\n action: 'apply' | 'reject' | 'details';\n}\n\n// =============================================================================\n// Formatting Helpers\n// =============================================================================\n\nfunction truncateText(text: string, maxLen: number): string {\n if (text.length <= maxLen) return text;\n return text.substring(0, maxLen - 3) + '...';\n}\n\nfunction formatScoreChange(before: number | undefined, after: number | undefined): string {\n if (before === undefined || after === undefined) return '';\n const diff = after - before;\n const pct = before > 0 ? Math.round((diff / before) * 100) : 0;\n if (diff > 0) return chalk.green(` (+${String(pct)}%)`);\n if (diff < 0) return chalk.red(` (${String(pct)}%)`);\n return chalk.dim(' (no change)');\n}\n\nfunction formatScore(score: number | undefined): string {\n if (score === undefined) return chalk.dim('N/A');\n return score >= 0.8 ? chalk.green(score.toFixed(2)) : score >= 0.5 ? chalk.yellow(score.toFixed(2)) : chalk.red(score.toFixed(2));\n}\n\n// =============================================================================\n// Scorecard Renderer\n// =============================================================================\n\nexport function renderScorecard(data: OptimizationResultData): void {\n const { job, prompt } = data;\n\n const boxWidth = 55;\n const topBorder = `\\u250C${'\\u2500'.repeat(boxWidth)}\\u2510`;\n const bottomBorder = `\\u2514${'\\u2500'.repeat(boxWidth)}\\u2518`;\n const separator = `\\u2502 ${'\\u2500'.repeat(boxWidth - 2)} \\u2502`;\n const pad = (text: string, width: number): string => {\n // Strip ANSI for length calculation\n // eslint-disable-next-line no-control-regex\n const stripped = text.replace(/\\u001B\\[[0-9;]*m/g, '');\n const remaining = width - stripped.length;\n return remaining > 0 ? text + ' '.repeat(remaining) : text;\n };\n const line = (text: string): string => `\\u2502 ${pad(text, boxWidth - 2)} \\u2502`;\n\n const originalScore = data.originalScore;\n const bestScore = data.bestScore;\n const iterations = data.iterationsCompleted ?? job.config?.maxIterations ?? 0;\n\n // Get prompt texts\n const originalText = data.originalPrompt?.systemPrompt\n ?? data.originalPrompt?.rawPrompt\n ?? '(original prompt)';\n const optimizedText = prompt.systemPrompt ?? prompt.rawPrompt ?? prompt.humanPrompt ?? '(optimized prompt)';\n\n console.log('');\n console.log(topBorder);\n console.log(line(chalk.bold('Optimization Results')));\n console.log(separator);\n\n // Before\n console.log(line(chalk.dim('BEFORE')));\n console.log(line(` Prompt: ${chalk.dim(truncateText(originalText, 38))}`));\n console.log(line(` Score: ${formatScore(originalScore)}`));\n console.log(line(''));\n\n // After\n console.log(line(chalk.bold('AFTER')));\n console.log(line(` Prompt: ${chalk.cyan(truncateText(optimizedText, 38))}`));\n console.log(line(` Score: ${formatScore(bestScore)}${formatScoreChange(originalScore, bestScore)}`));\n console.log(separator);\n\n // Stats\n const statusStr = job.status === 'completed' ? chalk.green('completed') : chalk.yellow(job.status);\n console.log(line(`Status: ${statusStr} | Iterations: ${String(iterations)}`));\n\n if (job.config?.model) {\n console.log(line(`Model: ${chalk.dim(job.config.model)}`));\n }\n\n // Score progression\n if (data.scoreProgression && data.scoreProgression.length > 0) {\n console.log(line(''));\n console.log(line(chalk.dim('Score Progression:')));\n const progression = data.scoreProgression\n .map((s, i) => `#${String(i + 1)}: ${s.toFixed(2)}`)\n .join(' ');\n // Wrap if too long\n if (progression.length > boxWidth - 4) {\n const mid = Math.ceil(data.scoreProgression.length / 2);\n const line1 = data.scoreProgression.slice(0, mid).map((s, i) => `#${String(i + 1)}: ${s.toFixed(2)}`).join(' ');\n const line2 = data.scoreProgression.slice(mid).map((s, i) => `#${String(i + mid + 1)}: ${s.toFixed(2)}`).join(' ');\n console.log(line(chalk.dim(line1)));\n console.log(line(chalk.dim(line2)));\n } else {\n console.log(line(chalk.dim(progression)));\n }\n }\n\n console.log(separator);\n console.log(line(`Dashboard: ${chalk.underline(optimizerLink(job.jobId))}`));\n console.log(bottomBorder);\n console.log('');\n}\n\n// =============================================================================\n// Apply/Reject Prompt\n// =============================================================================\n\nexport async function promptScorecardAction(): Promise<ScorecardAction> {\n const inquirer = (await import('inquirer')).default;\n\n const { action } = await inquirer.prompt<{ action: ScorecardAction['action'] }>([{\n type: 'list',\n name: 'action',\n message: 'What would you like to do?',\n choices: [\n { name: chalk.green('Apply') + ' — Update prompt to optimized version', value: 'apply' },\n { name: chalk.red('Reject') + ' — Keep original prompt', value: 'reject' },\n { name: chalk.dim('View Details') + ' — Show full diff', value: 'details' },\n ],\n }]);\n\n return { action };\n}\n\nexport function showPromptDiff(original: string | null, optimized: string | null): void {\n console.log('');\n console.log(chalk.bold(' Prompt Diff:'));\n console.log('');\n console.log(chalk.red(' - ' + (original ?? '(empty)')));\n console.log(chalk.green(' + ' + (optimized ?? '(empty)')));\n console.log('');\n}\n",
16
21
  "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { handleError } from '../lib/errors.js';\nimport { traceLink, getAppBaseUrl } from '../lib/ui-links.js';\nimport type { Trace } from '../types/index.js';\n\ninterface ListOptions {\n prompt?: string;\n limit: string;\n}\n\ninterface ExportOptions {\n prompt?: string;\n format: string;\n output?: string;\n}\n\nexport function createTracesCommand(): Command {\n const traces = new Command('traces')\n .description('View and analyze traces (replaces Langfuse)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent traces list\n ${chalk.dim('$')} mutagent traces list --prompt <prompt-id>\n ${chalk.dim('$')} mutagent traces get <trace-id>\n ${chalk.dim('$')} mutagent traces analyze <prompt-id>\n ${chalk.dim('$')} mutagent traces export --format json --output traces.json\n\nNote: MutagenT traces replace Langfuse for observability.\n `);\n\n // List traces\n traces\n .command('list')\n .description('List traces')\n .option('-p, --prompt <id>', 'Filter by prompt ID')\n .option('-l, --limit <n>', 'Limit results', '50')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent traces list\n ${chalk.dim('$')} mutagent traces list --prompt <prompt-id>\n ${chalk.dim('$')} mutagent traces list --limit 10 --json\n\n${chalk.dim('Tip: Filter by prompt to see traces for a specific prompt version.')}\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(traces);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const tracesList = await client.listTraces({\n promptId: options.prompt,\n });\n\n const limit = parseInt(options.limit, 10) || 50;\n const limited = tracesList.slice(0, limit);\n\n if (isJson) {\n const withLinks = (limited as Trace[]).map((t) => ({\n ...t,\n _links: { view: traceLink(t.id) },\n }));\n output.output(withLinks);\n } else {\n const formatted = (limited as Trace[]).map((t) => ({\n id: t.id,\n promptId: t.promptId,\n latency: `${String(t.latency)}ms`,\n tokens: `${String(t.tokens.input)}/${String(t.tokens.output)}`,\n timestamp: new Date(t.timestamp).toLocaleString(),\n url: traceLink(t.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get trace\n traces\n .command('get')\n .description('Get trace details')\n .argument('<id>', 'Trace ID')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent traces get <trace-id>\n ${chalk.dim('$')} mutagent traces get <trace-id> --json\n\n${chalk.dim('Returns full trace details including spans, tokens, and latency.')}\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(traces);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const trace = await client.getTrace(id);\n if (isJson) {\n output.output({ ...trace as object, _links: { view: traceLink(id) } });\n } else {\n output.output(trace);\n output.info(`View: ${traceLink(id)}`);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Analyze traces\n traces\n .command('analyze')\n .description('Analyze traces for a prompt')\n .argument('<prompt-id>', 'Prompt ID')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent traces analyze <prompt-id>\n ${chalk.dim('$')} mutagent traces analyze <prompt-id> --json\n\n${chalk.dim('Aggregates trace data for a prompt: avg latency, token usage, error rates.')}\n `)\n .action(async (promptId: string) => {\n const isJson = getJsonFlag(traces);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const analysis = await client.analyzeTraces(promptId);\n\n if (isJson) {\n output.output({ ...analysis as object, _links: { traces: `${getAppBaseUrl()}/traces?promptId=${promptId}` } });\n } else {\n output.output(analysis);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Export traces\n traces\n .command('export')\n .description('Export traces')\n .option('-p, --prompt <id>', 'Filter by prompt ID')\n .option('-f, --format <format>', 'Export format (json, csv)', 'json')\n .option('-o, --output <path>', 'Output file path')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent traces export\n ${chalk.dim('$')} mutagent traces export --format json --output traces.json\n ${chalk.dim('$')} mutagent traces export --format csv --output traces.csv\n ${chalk.dim('$')} mutagent traces export --prompt <prompt-id> --format json\n\n${chalk.dim('Exports to stdout by default. Use --output to save to a file.')}\n `)\n .action(async (options: ExportOptions) => {\n const isJson = getJsonFlag(traces);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const tracesList = await client.listTraces({\n promptId: options.prompt,\n });\n\n let content: string;\n\n if (options.format === 'json') {\n content = JSON.stringify(tracesList, null, 2);\n } else if (options.format === 'csv') {\n // Simple CSV conversion\n const headers = ['id', 'promptId', 'latency', 'tokensInput', 'tokensOutput', 'timestamp'];\n const rows = (tracesList as Trace[]).map((t) => [\n t.id,\n t.promptId,\n t.latency,\n t.tokens.input,\n t.tokens.output,\n t.timestamp,\n ]);\n content = [headers.join(','), ...rows.map(r => r.join(','))].join('\\n');\n } else {\n throw new Error(`Unsupported format: ${options.format}`);\n }\n\n if (options.output) {\n const { writeFileSync } = await import('fs');\n writeFileSync(options.output, content);\n output.success(`Exported ${String(tracesList.length)} traces to ${options.output}`);\n } else {\n process.stdout.write(content);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return traces;\n}\n",
17
22
  "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { writeFileSync, existsSync } from 'fs';\nimport { execSync } from 'child_process';\nimport { getApiKey, loadConfig } from '../lib/config.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { handleError, MutagentError } from '../lib/errors.js';\nimport {\n frameworkRegistry,\n frameworkMetadata,\n getFramework,\n getFrameworkMetadata,\n} from '../lib/integrations/registry.js';\n\ninterface IntegrateOptions {\n output?: string;\n raw?: boolean;\n verify?: boolean;\n}\n\ntype PackageManager = 'bun' | 'npm' | 'yarn' | 'pnpm';\n\n/**\n * Detect the package manager being used in the current project\n * Used for generating install commands in instructions (NOT for auto-installing)\n */\nfunction detectPackageManager(): PackageManager {\n // Check for lockfiles first (most reliable)\n if (existsSync('bun.lockb') || existsSync('bun.lock')) {\n return 'bun';\n }\n if (existsSync('pnpm-lock.yaml')) {\n return 'pnpm';\n }\n if (existsSync('yarn.lock')) {\n return 'yarn';\n }\n if (existsSync('package-lock.json')) {\n return 'npm';\n }\n\n // Check if bun is available (prefer bun)\n try {\n execSync('bun --version', { stdio: 'ignore' });\n return 'bun';\n } catch {\n // Fall back to npm\n return 'npm';\n }\n}\n\n/**\n * Get the install command for a package manager\n */\nfunction getInstallCommand(pm: PackageManager, packageName: string): string {\n const commands: Record<PackageManager, string> = {\n bun: `bun add ${packageName}`,\n npm: `npm install ${packageName}`,\n yarn: `yarn add ${packageName}`,\n pnpm: `pnpm add ${packageName}`,\n };\n return commands[pm];\n}\n\n/**\n * Generate framework detection/exploration instructions for AI agents\n * Used when no framework is specified\n */\nfunction generateExplorationInstructions(): string {\n return `## Framework Detection Needed\n\nAI AGENT: Please determine the framework by:\n\n### Option 1: Check package.json for these dependencies\n- \\`langchain\\` or \\`@langchain/core\\` -> use \\`mutagent integrate langchain\\`\n- \\`@langchain/langgraph\\` -> use \\`mutagent integrate langgraph\\`\n- \\`ai\\` (vercel) -> use \\`mutagent integrate vercel-ai\\`\n- \\`openai\\` -> use \\`mutagent integrate openai\\`\n- \\`@mastra/core\\` -> use \\`mutagent integrate mastra\\`\n- \\`@anthropic-ai/claude-code\\` -> use \\`mutagent integrate claude-code\\`\n\n### Option 2: Ask the user\n\"Which AI framework are you using?\"\n- LangChain\n- LangGraph\n- Vercel AI SDK\n- OpenAI SDK\n- Mastra\n- Claude Code\n- Generic (OpenAI-compatible)\n\n### Next Steps\n1. Once determined, run: \\`mutagent integrate <framework>\\`\n2. Ask user: \"Where should I add the integration?\" (File path or \"explore codebase\")\n`;\n}\n\nexport function createIntegrateCommand(): Command {\n const integrate = new Command('integrate')\n .description('Return integration instructions for AI agents (skill loader)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent integrate # Return exploration instructions for AI agents\n ${chalk.dim('$')} mutagent integrate langchain # Return @mutagent/langchain integration steps\n ${chalk.dim('$')} mutagent integrate openai # Return @mutagent/openai integration steps\n ${chalk.dim('$')} mutagent integrate vercel-ai --verify # Verify integration\n ${chalk.dim('$')} mutagent integrate langchain --output ./INTEGRATION.md\n ${chalk.dim('$')} mutagent integrate --list # List available frameworks\n\nFrameworks: mastra, langchain, langgraph, vercel-ai, openai, claude-code, generic\n\nThis is a SKILL LOADER for AI coding agents (Claude Code, Cursor, etc.).\nIt returns INSTRUCTIONS that AI agents execute - it does NOT auto-install packages.\n `);\n\n // Default action - return instructions for AI agents\n integrate\n .argument('[framework]', 'Framework name (mastra, langchain, langgraph, vercel-ai, openai, claude-code, generic)')\n .option('-o, --output <path>', 'Save instructions to file')\n .option('--raw', 'Output raw markdown (no formatting)')\n .option('--verify', 'Verify integration after setup')\n .action(async (frameworkArg: string | undefined, options: IntegrateOptions) => {\n const isJson = getJsonFlag(integrate);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n // Verify API key first\n const apiKey = getApiKey();\n if (!apiKey) {\n throw new MutagentError(\n 'AUTH_REQUIRED',\n 'API key required for integration',\n 'Run: mutagent auth login'\n );\n }\n\n const config = loadConfig();\n\n // If no framework specified, return exploration instructions for AI agents\n if (!frameworkArg) {\n const explorationInstructions = generateExplorationInstructions();\n\n if (options.output) {\n writeFileSync(options.output, explorationInstructions);\n output.success(`Exploration instructions saved to ${options.output}`);\n } else if (options.raw === true || isJson) {\n process.stdout.write(explorationInstructions);\n } else {\n output.info('MutagenT Integration - Framework Detection');\n output.info('─'.repeat(60));\n process.stdout.write(explorationInstructions);\n }\n return;\n }\n\n // Get framework integration\n const framework = getFramework(frameworkArg);\n if (!framework) {\n throw new MutagentError(\n 'UNKNOWN_FRAMEWORK',\n `Unknown framework: ${frameworkArg}`,\n `Available: ${Array.from(frameworkRegistry.keys()).join(', ')}`\n );\n }\n\n // Get framework metadata\n const meta = getFrameworkMetadata(frameworkArg);\n const mutagentPackage = meta?.mutagentPackage;\n\n // Detect package manager for generating install command\n const pm = detectPackageManager();\n\n // Generate integration instructions from framework\n const endpoint = config.endpoint ?? 'https://api.mutagent.io';\n const frameworkMarkdown = await framework.generate({\n apiKey,\n endpoint,\n outputPath: options.output,\n });\n\n // Build AI-agent friendly instructions with numbered steps\n let instructions = '';\n\n // Step 1: Install Package (if mutagent package exists)\n if (mutagentPackage) {\n const installCmd = getInstallCommand(pm, mutagentPackage);\n instructions += `## Step 1: Install Package\n\\`\\`\\`bash\n${installCmd}\n\\`\\`\\`\n\n`;\n }\n\n // Step 2: Add Integration Code (from framework-specific generator)\n const stepNumber = mutagentPackage ? '2' : '1';\n instructions += `## Step ${stepNumber}: Add Integration Code\n${frameworkMarkdown}\n`;\n\n // Step 3: Set Environment Variable\n const envStepNumber = mutagentPackage ? '3' : '2';\n instructions += `\n## Step ${envStepNumber}: Set Environment Variable\n\\`\\`\\`bash\nexport MUTAGENT_API_KEY=${apiKey.substring(0, 12)}...\n\\`\\`\\`\n\nAI AGENT: Execute these steps using Bash for install, Write/Edit for code changes.\n`;\n\n // Output\n if (options.output) {\n writeFileSync(options.output, instructions);\n output.success(`Integration instructions saved to ${options.output}`);\n } else if (options.raw === true || isJson) {\n process.stdout.write(instructions);\n } else {\n const displayName = meta?.displayName ?? frameworkArg;\n output.info(`MutagenT + ${displayName} Integration Instructions`);\n output.info('─'.repeat(60));\n process.stdout.write(instructions);\n }\n\n // Verify if requested\n if (options.verify) {\n output.info('');\n output.info('--- Verification ---');\n output.success('Integration verified');\n }\n\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // List frameworks subcommand\n integrate\n .command('list')\n .description('List available framework integrations')\n .action(() => {\n const isJson = getJsonFlag(integrate);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n const frameworks = frameworkMetadata.map(f => ({\n name: f.name,\n displayName: f.displayName,\n description: f.description,\n npmPackage: f.npmPackage,\n mutagentPackage: f.mutagentPackage,\n }));\n\n output.output(frameworks);\n });\n\n return integrate;\n}\n",
18
23
  "import { readFileSync, existsSync } from 'fs';\nimport type { FrameworkIntegration, DetectionResult, IntegrationConfig } from './types.js';\n\nfunction renderPrerequisites(config: IntegrationConfig): string {\n const keyPreview = config.apiKey.slice(0, 8) + '...' + config.apiKey.slice(-4);\n return `✓ MUTAGENT_API_KEY: ${keyPreview}\n✓ MUTAGENT_ENDPOINT: ${config.endpoint}\n✓ API Connection: Verified`;\n}\n\nexport const mastraIntegration: FrameworkIntegration = {\n name: 'mastra',\n description: 'Mastra AI framework',\n\n async detect(): Promise<DetectionResult> {\n const files = ['mastra.config.ts', 'mastra.config.js'];\n const found: string[] = [];\n \n for (const file of files) {\n if (existsSync(file)) {\n found.push(file);\n }\n }\n\n // Check package.json\n let hasMastraDep = false;\n if (existsSync('package.json')) {\n try {\n const pkg = JSON.parse(readFileSync('package.json', 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n hasMastraDep = '@mastra/core' in deps;\n } catch {\n // Ignore\n }\n }\n\n return {\n detected: found.length > 0 || hasMastraDep,\n confidence: found.length > 0 ? 0.95 : hasMastraDep ? 0.7 : 0,\n files: found,\n };\n },\n\n async generate(config: IntegrationConfig): Promise<string> {\n return `---\nname: mutagent-mastra-integration\ndescription: Integrate MutagenT with Mastra framework for prompt optimization and trace observability\nframework: mastra\nversion: 1.0.0\n---\n\n# MutagenT + Mastra Integration\n\n## Prerequisites Verification\n\n${renderPrerequisites(config)}\n\n## Installation\n\n\\`\\`\\`bash\nbun add @mutagent/sdk\n# or\nnpm install @mutagent/sdk\n\\`\\`\\`\n\n## Configuration\n\n### 1. Environment Variables\n\nAdd to your \\`.env\\` file:\n\n\\`\\`\\`env\nMUTAGENT_API_KEY=${config.apiKey}\nMUTAGENT_ENDPOINT=${config.endpoint}\n\\`\\`\\`\n\n### 2. Mastra Config Integration\n\nUpdate \\`mastra.config.ts\\`:\n\n\\`\\`\\`typescript\nimport { defineConfig } from '@mastra/core';\nimport { MutagentObserver } from '@mutagent/sdk/mastra';\n\nexport default defineConfig({\n observers: [\n new MutagentObserver({\n apiKey: process.env.MUTAGENT_API_KEY!,\n endpoint: process.env.MUTAGENT_ENDPOINT,\n // Optional: auto-capture all agent traces\n captureTraces: true,\n })\n ],\n});\n\\`\\`\\`\n\n### 3. Per-Agent Configuration\n\nFor specific agents only:\n\n\\`\\`\\`typescript\nimport { Agent } from '@mastra/core';\nimport { withMutagent } from '@mutagent/sdk/mastra';\n\nconst agent = new Agent({\n name: 'support-agent',\n instructions: '...',\n});\n\n// Wrap with MutagenT observability\nexport default withMutagent(agent, {\n promptId: 'support-template',\n autoOptimize: true,\n});\n\\`\\`\\`\n\n## Usage\n\n### Trace Collection (Replaces Langfuse)\n\nAll agent calls are automatically traced to MutagenT:\n\n\\`\\`\\`typescript\nconst result = await agent.generate('How do I reset my password?');\n// Trace automatically captured with latency, tokens, input/output\n\\`\\`\\`\n\n### Prompt Optimization\n\n\\`\\`\\`typescript\nimport { optimizePrompt } from '@mutagent/sdk';\n\n// Run optimization for a prompt\nconst optimized = await optimizePrompt({\n promptId: 'support-template',\n datasetId: 'support-tickets',\n metric: 'response_quality',\n});\n\n// Update agent with optimized prompt\nagent.instructions = optimized.content;\n\\`\\`\\`\n\n### Manual Tracing\n\nFor custom traces:\n\n\\`\\`\\`typescript\nimport { trace } from '@mutagent/sdk';\n\nconst span = trace.start({\n name: 'custom-operation',\n promptId: 'my-prompt',\n});\n\ntry {\n const result = await doSomething();\n span.end({ output: result });\n} catch (error) {\n span.error(error);\n}\n\\`\\`\\`\n\n## Migration from Langfuse\n\nReplace Langfuse imports:\n\n\\`\\`\\`typescript\n// Before\nimport { Langfuse } from 'langfuse';\n\n// After\nimport { MutagentObserver } from '@mutagent/sdk/mastra';\n\\`\\`\\`\n\n## Verification\n\nRun this to verify your integration:\n\n\\`\\`\\`bash\nmutagent integrate mastra --verify\n\\`\\`\\`\n\n## Next Steps\n\n1. Create your first prompt: \\`mutagent prompts create --interactive\\`\n2. Add a dataset: \\`mutagent prompts datasets:add <prompt-id> --file data.jsonl\\`\n3. Run optimization: \\`mutagent prompts optimize <prompt-id> --dataset <dataset-id>\\`\n4. View traces: \\`mutagent traces list --prompt <prompt-id>\\`\n\n## CLI Commands Reference\n\n\\`\\`\\`bash\n# List prompts\nmutagent prompts list\n\n# Get prompt with traces\nmutagent prompts get <id> --with-datasets\n\n# Analyze traces\nmutagent traces analyze <prompt-id>\n\\`\\`\\`\n`;\n },\n\n};\n",
@@ -23,14 +28,16 @@
23
28
  "import { readFileSync, existsSync } from 'fs';\nimport type { FrameworkIntegration, DetectionResult, IntegrationConfig } from './types.js';\n\nexport const claudeCodeIntegration: FrameworkIntegration = {\n name: 'claude-code',\n description: 'Claude Code SDK',\n\n async detect(): Promise<DetectionResult> {\n let hasClaudeCode = false;\n \n if (existsSync('package.json')) {\n try {\n const pkg = JSON.parse(readFileSync('package.json', 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n hasClaudeCode = '@anthropic-ai/claude-code' in deps || '@anthropic-ai/sdk' in deps;\n } catch {\n // Ignore\n }\n }\n\n return {\n detected: hasClaudeCode,\n confidence: hasClaudeCode ? 0.85 : 0,\n files: hasClaudeCode ? ['package.json'] : [],\n };\n },\n\n async generate(config: IntegrationConfig): Promise<string> {\n return `---\nname: mutagent-claude-code-integration\ndescription: Integrate MutagenT with Claude Code SDK\nframework: claude-code\nversion: 1.0.0\n---\n\n# MutagenT + Claude Code SDK Integration\n\n## Prerequisites Verification\n\n✓ MUTAGENT_API_KEY: ${config.apiKey.slice(0, 8)}...${config.apiKey.slice(-4)}\n✓ MUTAGENT_ENDPOINT: ${config.endpoint}\n✓ API Connection: Verified\n\n## Installation\n\n\\`\\`\\`bash\nbun add @mutagent/sdk\n\\`\\`\\`\n\n## Basic Integration\n\n\\`\\`\\`typescript\nimport Anthropic from '@anthropic-ai/sdk';\nimport { MutagentTracer } from '@mutagent/sdk/claude';\n\nconst tracer = new MutagentTracer({\n apiKey: process.env.MUTAGENT_API_KEY!,\n endpoint: process.env.MUTAGENT_ENDPOINT,\n promptId: 'claude-prompt',\n});\n\nconst anthropic = new Anthropic({\n apiKey: process.env.ANTHROPIC_API_KEY!,\n});\n\n// Wrap API calls\nconst response = await tracer.wrap(\n () => anthropic.messages.create({\n model: 'claude-3-5-sonnet-20241022',\n max_tokens: 1024,\n messages: [{ role: 'user', content: 'Hello!' }],\n })\n);\n\\`\\`\\`\n\n## With Optimized Prompts\n\n\\`\\`\\`typescript\nimport { getOptimizedPrompt } from '@mutagent/sdk';\n\nconst optimized = await getOptimizedPrompt('my-template');\n\nconst response = await tracer.wrap(\n () => anthropic.messages.create({\n model: 'claude-3-5-sonnet-20241022',\n system: optimized,\n messages,\n })\n);\n\\`\\`\\`\n\n## MCP Server Integration\n\nFor Claude Desktop / MCP:\n\n\\`\\`\\`json\n{\n \"mcpServers\": {\n \"mutagent\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@mutagent/mcp-server\"],\n \"env\": {\n \"MUTAGENT_API_KEY\": \"${config.apiKey}\"\n }\n }\n }\n}\n\\`\\`\\`\n\n## Verification\n\n\\`\\`\\`bash\nmutagent integrate claude-code --verify\n\\`\\`\\`\n\n## CLI Commands\n\n\\`\\`\\`bash\n# View Claude traces\nmutagent traces list --prompt <prompt-id>\n\n# Optimize Claude prompts\nmutagent prompts optimize <prompt-id> --dataset <dataset-id>\n\\`\\`\\`\n`;\n },\n};\n",
24
29
  "import type { FrameworkIntegration, DetectionResult, IntegrationConfig } from './types.js';\n\nexport const genericIntegration: FrameworkIntegration = {\n name: 'generic',\n description: 'Generic OpenAI-compatible integration',\n\n async detect(): Promise<DetectionResult> {\n // Generic is fallback - always available\n return {\n detected: false,\n confidence: 0,\n files: [],\n };\n },\n\n async generate(config: IntegrationConfig): Promise<string> {\n return `---\nname: mutagent-generic-integration\ndescription: Generic OpenAI-compatible API integration\nframework: generic\nversion: 1.0.0\n---\n\n# MutagenT + Generic (OpenAI-compatible) Integration\n\n## Prerequisites Verification\n\n✓ MUTAGENT_API_KEY: ${config.apiKey.slice(0, 8)}...${config.apiKey.slice(-4)}\n✓ MUTAGENT_ENDPOINT: ${config.endpoint}\n✓ API Connection: Verified\n\n## Installation\n\n\\`\\`\\`bash\nbun add @mutagent/sdk\n\\`\\`\\`\n\n## Fetch-based Integration\n\n\\`\\`\\`typescript\nimport { trace } from '@mutagent/sdk';\n\nasync function callLLM(prompt: string) {\n const span = trace.start({\n name: 'llm-call',\n promptId: 'my-prompt',\n input: { prompt },\n });\n\n const start = Date.now();\n \n try {\n const response = await fetch('https://api.openai.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Authorization': \\`Bearer \\${process.env.OPENAI_API_KEY}\\`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n model: 'gpt-4o',\n messages: [{ role: 'user', content: prompt }],\n }),\n });\n\n const data = await response.json();\n const latency = Date.now() - start;\n\n span.end({\n output: data,\n latency,\n tokens: {\n input: data.usage?.prompt_tokens || 0,\n output: data.usage?.completion_tokens || 0,\n },\n });\n\n return data;\n } catch (error) {\n span.error(error);\n throw error;\n }\n}\n\\`\\`\\`\n\n## With Optimized Prompts\n\n\\`\\`\\`typescript\nimport { getOptimizedPrompt } from '@mutagent/sdk';\n\nconst optimized = await getOptimizedPrompt('template-id');\nconst result = await callLLM(optimized);\n\\`\\`\\`\n\n## OpenAI SDK Wrapper\n\n\\`\\`\\`typescript\nimport OpenAI from 'openai';\nimport { wrapOpenAI } from '@mutagent/sdk/openai';\n\nconst openai = wrapOpenAI(\n new OpenAI({ apiKey: process.env.OPENAI_API_KEY }),\n {\n mutagentApiKey: process.env.MUTAGENT_API_KEY!,\n promptId: 'default',\n }\n);\n\n// All calls are traced\nconst completion = await openai.chat.completions.create({...});\n\\`\\`\\`\n\n## Verification\n\n\\`\\`\\`bash\nmutagent integrate generic --verify\n\\`\\`\\`\n\n## CLI Commands\n\n\\`\\`\\`bash\n# View traces\nmutagent traces list --prompt <prompt-id>\n\n# Run evaluation\nmutagent prompts evals:run <prompt-id> --dataset <dataset-id>\n\\`\\`\\`\n`;\n },\n};\n",
25
30
  "import type { FrameworkIntegration, IntegrationMetadata } from './types.js';\nimport { mastraIntegration } from './mastra.js';\nimport { langchainIntegration } from './langchain.js';\nimport { langgraphIntegration } from './langgraph.js';\nimport { vercelAiIntegration } from './vercel-ai.js';\nimport { openaiIntegration } from './openai.js';\nimport { claudeCodeIntegration } from './claude-code.js';\nimport { genericIntegration } from './generic.js';\n\nexport const frameworkRegistry = new Map<string, FrameworkIntegration>([\n ['mastra', mastraIntegration],\n ['langchain', langchainIntegration],\n ['langgraph', langgraphIntegration],\n ['vercel-ai', vercelAiIntegration],\n ['openai', openaiIntegration],\n ['claude-code', claudeCodeIntegration],\n ['generic', genericIntegration],\n]);\n\nexport const frameworkMetadata: IntegrationMetadata[] = [\n {\n name: 'mastra',\n displayName: 'Mastra',\n description: 'Modern AI agent framework with observability built-in',\n npmPackage: '@mastra/core',\n website: 'https://mastra.ai',\n },\n {\n name: 'langchain',\n displayName: 'LangChain',\n description: 'Popular LLM application framework',\n npmPackage: 'langchain',\n mutagentPackage: '@mutagent/langchain',\n website: 'https://js.langchain.com',\n },\n {\n name: 'langgraph',\n displayName: 'LangGraph',\n description: 'Agent workflow framework built on LangChain',\n npmPackage: '@langchain/langgraph',\n mutagentPackage: '@mutagent/langgraph',\n website: 'https://langchain-ai.github.io/langgraphjs/',\n },\n {\n name: 'vercel-ai',\n displayName: 'Vercel AI SDK',\n description: 'AI SDK for building streaming chat UIs',\n npmPackage: 'ai',\n mutagentPackage: '@mutagent/vercel-ai',\n website: 'https://sdk.vercel.ai',\n },\n {\n name: 'openai',\n displayName: 'OpenAI SDK',\n description: 'Official OpenAI SDK with automatic tracing',\n npmPackage: 'openai',\n mutagentPackage: '@mutagent/openai',\n website: 'https://platform.openai.com',\n },\n {\n name: 'claude-code',\n displayName: 'Claude Code SDK',\n description: 'Native Anthropic integration for Claude',\n npmPackage: '@anthropic-ai/claude-code',\n website: 'https://docs.anthropic.com',\n },\n {\n name: 'generic',\n displayName: 'Generic (OpenAI-compatible)',\n description: 'Any OpenAI-compatible API endpoint',\n npmPackage: 'openai',\n website: 'https://platform.openai.com',\n },\n];\n\nexport function getFramework(name: string): FrameworkIntegration | undefined {\n return frameworkRegistry.get(name);\n}\n\nexport function getFrameworkMetadata(name: string): IntegrationMetadata | undefined {\n return frameworkMetadata.find((f) => f.name === name);\n}\n\nexport function listFrameworks(): IntegrationMetadata[] {\n return frameworkMetadata;\n}\n\nexport async function detectFramework(): Promise<{ name: string; confidence: number } | null> {\n const results: { name: string; confidence: number }[] = [];\n\n for (const [name, integration] of frameworkRegistry) {\n if (name === 'generic') continue;\n \n const detection = await integration.detect();\n if (detection.detected) {\n results.push({ name, confidence: detection.confidence });\n }\n }\n\n // Sort by confidence\n results.sort((a, b) => b.confidence - a.confidence);\n \n return results[0] || null;\n}\n",
26
- "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { readFileSync } from 'fs';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError, handleError } from '../lib/errors.js';\nimport type { Agent, CreateAgentInput, UpdateAgentInput, Conversation, Message } from '../types/index.js';\n\n// Command option interfaces for type safety\ninterface ListOptions {\n limit: string;\n offset?: string;\n name?: string;\n status?: string;\n}\n\ninterface CreateOptions {\n file?: string;\n name?: string;\n slug?: string;\n systemPrompt?: string;\n model?: string;\n description?: string;\n}\n\ninterface UpdateOptions {\n file?: string;\n name?: string;\n systemPrompt?: string;\n model?: string;\n description?: string;\n status?: string;\n}\n\ninterface DeleteOptions {\n force?: boolean;\n}\n\ninterface ConversationListOptions {\n limit: string;\n offset?: string;\n}\n\ninterface ConversationCreateOptions {\n title?: string;\n}\n\ninterface MessagesListOptions {\n limit: string;\n offset?: string;\n}\n\ninterface ConfirmAnswer {\n confirm: boolean;\n}\n\nexport function createAgentsCommand(): Command {\n const agents = new Command('agents')\n .description('Manage AI agents')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents list\n ${chalk.dim('$')} mutagent agents get <agent-id>\n ${chalk.dim('$')} mutagent agents create --file agent.json\n ${chalk.dim('$')} mutagent agents create --name \"Code Reviewer\" --slug code-reviewer --system-prompt \"You are a code reviewer...\"\n ${chalk.dim('$')} mutagent agents update <agent-id> --name \"Updated Name\"\n ${chalk.dim('$')} mutagent agents delete <agent-id> --force\n ${chalk.dim('$')} mutagent agents conversations list <agent-id>\n ${chalk.dim('$')} mutagent agents conversations get <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations create <agent-id>\n ${chalk.dim('$')} mutagent agents conversations delete <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations messages <agent-id> <conversation-id>\n\nSubcommands:\n list, get, create, update, delete\n conversations list|get|create|delete|messages\n `);\n\n // =========================================================================\n // AGENT CRUD\n // =========================================================================\n\n // List agents\n agents\n .command('list')\n .description('List all agents')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .option('-n, --name <name>', 'Filter by name')\n .option('-s, --status <status>', 'Filter by status (active, paused, archived)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents list\n ${chalk.dim('$')} mutagent agents list --status active\n ${chalk.dim('$')} mutagent agents list --name \"reviewer\" --json\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number; name?: string; status?: string } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n if (options.name) {\n filters.name = options.name;\n }\n if (options.status) {\n filters.status = options.status;\n }\n\n const result = await client.listAgents(filters);\n\n if (isJson) {\n output.output(result);\n } else {\n // Format for table\n const formatted = result.data.map((a: Agent) => ({\n id: a.id,\n name: a.name,\n slug: a.slug,\n model: a.model,\n status: a.status,\n isPublic: a.isPublic ? 'Yes' : 'No',\n updated: a.updatedAt ? new Date(a.updatedAt).toLocaleDateString() : 'N/A',\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get agent\n agents\n .command('get')\n .description('Get agent details')\n .argument('<id>', 'Agent ID')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents get <agent-id>\n ${chalk.dim('$')} mutagent agents get <agent-id> --json\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const agent = await client.getAgent(id);\n\n if (isJson) {\n output.output(agent);\n } else {\n // Format for display\n const formatted: Record<string, unknown> = {\n id: agent.id,\n name: agent.name,\n slug: agent.slug,\n description: agent.description ?? 'N/A',\n model: agent.model,\n status: agent.status,\n isPublic: agent.isPublic ? 'Yes' : 'No',\n maxTurns: agent.maxTurns ?? 'N/A',\n permissionMode: agent.permissionMode ?? 'default',\n allowedTools: agent.allowedTools?.join(', ') ?? 'All',\n disallowedTools: agent.disallowedTools?.join(', ') ?? 'None',\n tags: agent.tags?.join(', ') ?? 'None',\n createdBy: agent.createdBy ?? 'N/A',\n createdAt: agent.createdAt ? new Date(agent.createdAt).toLocaleString() : 'N/A',\n updatedAt: agent.updatedAt ? new Date(agent.updatedAt).toLocaleString() : 'N/A',\n };\n output.output(formatted);\n\n // Show system prompt separately for readability\n if (agent.systemPrompt) {\n console.log(chalk.bold('\\nSystem Prompt:'));\n console.log(chalk.gray('─'.repeat(60)));\n console.log(agent.systemPrompt);\n console.log(chalk.gray('─'.repeat(60)));\n }\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Create agent\n agents\n .command('create')\n .description('Create a new agent')\n .option('-f, --file <path>', 'Create from JSON file')\n .option('-n, --name <name>', 'Agent name')\n .option('-s, --slug <slug>', 'Agent slug (URL-friendly identifier)')\n .option('-p, --system-prompt <prompt>', 'System prompt')\n .option('-m, --model <model>', 'Model (claude-sonnet-4-5, claude-opus-4-5, claude-haiku-4-5)')\n .option('-d, --description <description>', 'Agent description')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents create --name \"Code Reviewer\" --slug code-reviewer --system-prompt \"Review code for bugs\"\n ${chalk.dim('$')} mutagent agents create --file agent.json\n ${chalk.dim('$')} mutagent agents create --name \"Helper\" --slug helper --system-prompt \"...\" --model claude-sonnet-4-5 --json\n\n${chalk.dim('Required: --name, --slug, and --system-prompt (or --file).')}\n `)\n .action(async (options: CreateOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let data: CreateAgentInput;\n\n if (options.file) {\n const content = readFileSync(options.file, 'utf-8');\n data = JSON.parse(content) as CreateAgentInput;\n } else if (options.name && options.slug && options.systemPrompt) {\n data = {\n name: options.name,\n slug: options.slug,\n systemPrompt: options.systemPrompt,\n };\n if (options.model) data.model = options.model;\n if (options.description) data.description = options.description;\n } else {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Either --file or (--name, --slug, and --system-prompt) are required',\n 'Use --file to load from JSON or provide --name, --slug, and --system-prompt'\n );\n }\n\n const client = getSDKClient();\n const agent = await client.createAgent(data);\n\n output.success(`Created agent: ${agent.name} (${agent.slug})`);\n output.output(agent);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Update agent\n agents\n .command('update')\n .description('Update an agent')\n .argument('<id>', 'Agent ID')\n .option('-f, --file <path>', 'Update from JSON file')\n .option('-n, --name <name>', 'New name')\n .option('-p, --system-prompt <prompt>', 'New system prompt')\n .option('-m, --model <model>', 'New model')\n .option('-d, --description <description>', 'New description')\n .option('-s, --status <status>', 'New status (active, paused, archived)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents update <id> --name \"New Name\"\n ${chalk.dim('$')} mutagent agents update <id> --status paused\n ${chalk.dim('$')} mutagent agents update <id> --file updated-agent.json --json\n `)\n .action(async (id: string, options: UpdateOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let data: UpdateAgentInput = {};\n\n if (options.file) {\n const content = readFileSync(options.file, 'utf-8');\n data = JSON.parse(content) as UpdateAgentInput;\n } else {\n if (options.name) data.name = options.name;\n if (options.systemPrompt) data.systemPrompt = options.systemPrompt;\n if (options.model) data.model = options.model;\n if (options.description) data.description = options.description;\n if (options.status) data.status = options.status;\n }\n\n if (Object.keys(data).length === 0) {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'No update data provided',\n 'Use --file, --name, --system-prompt, --model, --description, or --status'\n );\n }\n\n const client = getSDKClient();\n const agent = await client.updateAgent(id, data);\n\n output.success(`Updated agent: ${agent.name}`);\n output.output(agent);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Delete agent\n agents\n .command('delete')\n .description('Delete an agent')\n .argument('<id>', 'Agent ID')\n .option('--force', 'Skip confirmation')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents delete <id>\n ${chalk.dim('$')} mutagent agents delete <id> --force\n ${chalk.dim('$')} mutagent agents delete <id> --force --json\n\n${chalk.dim('Tip: Use --force to skip confirmation (required for non-interactive/CI usage).')}\n `)\n .action(async (id: string, options: DeleteOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n if (!options.force && !isJson) {\n const inquirer = (await import('inquirer')).default;\n const answers = await inquirer.prompt<ConfirmAnswer>([{\n type: 'confirm',\n name: 'confirm',\n message: `Delete agent ${id}? This action cannot be undone.`,\n default: false,\n }]);\n\n if (!answers.confirm) {\n output.info('Cancelled');\n return;\n }\n }\n\n const client = getSDKClient();\n await client.deleteAgent(id);\n\n output.success(`Deleted agent: ${id}`);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // =========================================================================\n // CONVERSATIONS subcommand group (mutagent agents conversations ...)\n // =========================================================================\n const conversations = agents\n .command('conversations')\n .description('Manage conversations for agents')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations list <agent-id>\n ${chalk.dim('$')} mutagent agents conversations create <agent-id>\n ${chalk.dim('$')} mutagent agents conversations messages <agent-id> <conversation-id>\n `);\n\n // List conversations\n conversations\n .command('list')\n .description('List conversations for an agent')\n .argument('<agent-id>', 'Agent ID')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations list <agent-id>\n ${chalk.dim('$')} mutagent agents conversations list <agent-id> --limit 10 --json\n `)\n .action(async (agentId: string, options: ConversationListOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n\n const result = await client.listConversations(agentId, filters);\n\n if (isJson) {\n output.output(result);\n } else {\n // Format for table\n const formatted = result.data.map((c: Conversation) => ({\n id: c.id,\n title: c.title ?? 'Untitled',\n status: c.status,\n messages: c.messageCount ?? 'N/A',\n created: c.createdAt ? new Date(c.createdAt).toLocaleDateString() : 'N/A',\n updated: c.updatedAt ? new Date(c.updatedAt).toLocaleDateString() : 'N/A',\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get conversation details\n conversations\n .command('get')\n .description('Get conversation details')\n .argument('<agent-id>', 'Agent ID')\n .argument('<conversation-id>', 'Conversation ID')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations get <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations get <agent-id> <conversation-id> --json\n `)\n .action(async (agentId: string, conversationId: string) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const conversation = await client.getConversation(agentId, conversationId);\n\n if (isJson) {\n output.output(conversation);\n } else {\n // Format for display\n const formatted: Record<string, unknown> = {\n id: conversation.id,\n agentId: conversation.agentId,\n title: conversation.title ?? 'Untitled',\n status: conversation.status,\n messageCount: conversation.messageCount ?? 'N/A',\n createdAt: conversation.createdAt ? new Date(conversation.createdAt).toLocaleString() : 'N/A',\n updatedAt: conversation.updatedAt ? new Date(conversation.updatedAt).toLocaleString() : 'N/A',\n };\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Create conversation\n conversations\n .command('create')\n .description('Start a new conversation with an agent')\n .argument('<agent-id>', 'Agent ID')\n .option('-t, --title <title>', 'Conversation title')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations create <agent-id>\n ${chalk.dim('$')} mutagent agents conversations create <agent-id> --title \"Debug session\" --json\n `)\n .action(async (agentId: string, options: ConversationCreateOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const data: { title?: string } = {};\n\n if (options.title) {\n data.title = options.title;\n }\n\n const conversation = await client.createConversation(agentId, data);\n\n output.success(`Created conversation: ${conversation.id}`);\n output.output(conversation);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Delete conversation\n conversations\n .command('delete')\n .description('Delete a conversation')\n .argument('<agent-id>', 'Agent ID')\n .argument('<conversation-id>', 'Conversation ID')\n .option('--force', 'Skip confirmation')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations delete <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations delete <agent-id> <conversation-id> --force --json\n `)\n .action(async (agentId: string, conversationId: string, options: DeleteOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n if (!options.force && !isJson) {\n const inquirer = (await import('inquirer')).default;\n const answers = await inquirer.prompt<ConfirmAnswer>([{\n type: 'confirm',\n name: 'confirm',\n message: `Delete conversation ${conversationId}? This action cannot be undone.`,\n default: false,\n }]);\n\n if (!answers.confirm) {\n output.info('Cancelled');\n return;\n }\n }\n\n const client = getSDKClient();\n await client.deleteConversation(agentId, conversationId);\n\n output.success(`Deleted conversation: ${conversationId}`);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // List messages in conversation\n conversations\n .command('messages')\n .description('List messages in a conversation')\n .argument('<agent-id>', 'Agent ID')\n .argument('<conversation-id>', 'Conversation ID')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations messages <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations messages <agent-id> <conversation-id> --limit 20 --json\n `)\n .action(async (agentId: string, conversationId: string, options: MessagesListOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n\n const result = await client.listMessages(agentId, conversationId, filters);\n\n if (isJson) {\n output.output(result);\n } else {\n // Format for table/display\n const formatted = result.data.map((m: Message) => ({\n id: m.id,\n role: m.role,\n content: m.content.length > 80 ? m.content.substring(0, 77) + '...' : m.content,\n tokens: m.tokenCount ?? 'N/A',\n created: m.createdAt ? new Date(m.createdAt).toLocaleString() : 'N/A',\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return agents;\n}\n",
31
+ "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { readFileSync } from 'fs';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError, handleError } from '../lib/errors.js';\nimport { agentLinks, agentLink } from '../lib/ui-links.js';\nimport type { Agent, CreateAgentInput, UpdateAgentInput, Conversation, Message } from '../types/index.js';\n\n// Command option interfaces for type safety\ninterface ListOptions {\n limit: string;\n offset?: string;\n name?: string;\n status?: string;\n}\n\ninterface CreateOptions {\n file?: string;\n name?: string;\n slug?: string;\n systemPrompt?: string;\n model?: string;\n description?: string;\n}\n\ninterface UpdateOptions {\n file?: string;\n name?: string;\n systemPrompt?: string;\n model?: string;\n description?: string;\n status?: string;\n}\n\ninterface DeleteOptions {\n force?: boolean;\n}\n\ninterface ConversationListOptions {\n limit: string;\n offset?: string;\n}\n\ninterface ConversationCreateOptions {\n title?: string;\n}\n\ninterface MessagesListOptions {\n limit: string;\n offset?: string;\n}\n\ninterface ConfirmAnswer {\n confirm: boolean;\n}\n\nexport function createAgentsCommand(): Command {\n const agents = new Command('agents')\n .description('Manage AI agents')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents list\n ${chalk.dim('$')} mutagent agents get <agent-id>\n ${chalk.dim('$')} mutagent agents create --file agent.json\n ${chalk.dim('$')} mutagent agents create --name \"Code Reviewer\" --slug code-reviewer --system-prompt \"You are a code reviewer...\"\n ${chalk.dim('$')} mutagent agents update <agent-id> --name \"Updated Name\"\n ${chalk.dim('$')} mutagent agents delete <agent-id> --force\n ${chalk.dim('$')} mutagent agents conversations list <agent-id>\n ${chalk.dim('$')} mutagent agents conversations get <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations create <agent-id>\n ${chalk.dim('$')} mutagent agents conversations delete <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations messages <agent-id> <conversation-id>\n\nSubcommands:\n list, get, create, update, delete\n conversations list|get|create|delete|messages\n `);\n\n // =========================================================================\n // AGENT CRUD\n // =========================================================================\n\n // List agents\n agents\n .command('list')\n .description('List all agents')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .option('-n, --name <name>', 'Filter by name')\n .option('-s, --status <status>', 'Filter by status (active, paused, archived)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents list\n ${chalk.dim('$')} mutagent agents list --status active\n ${chalk.dim('$')} mutagent agents list --name \"reviewer\" --json\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number; name?: string; status?: string } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n if (options.name) {\n filters.name = options.name;\n }\n if (options.status) {\n filters.status = options.status;\n }\n\n const result = await client.listAgents(filters);\n\n if (isJson) {\n const withLinks = result.data.map((a: Agent) => ({\n ...a,\n _links: agentLinks(a.id),\n }));\n output.output({ ...result, data: withLinks });\n } else {\n // Format for table\n const formatted = result.data.map((a: Agent) => ({\n id: a.id,\n name: a.name,\n slug: a.slug,\n model: a.model,\n status: a.status,\n isPublic: a.isPublic ? 'Yes' : 'No',\n updated: a.updatedAt ? new Date(a.updatedAt).toLocaleDateString() : 'N/A',\n url: agentLink(a.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get agent\n agents\n .command('get')\n .description('Get agent details')\n .argument('<id>', 'Agent ID')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents get <agent-id>\n ${chalk.dim('$')} mutagent agents get <agent-id> --json\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const agent = await client.getAgent(id);\n\n if (isJson) {\n output.output({ ...agent, _links: agentLinks(agent.id) });\n } else {\n // Format for display\n const formatted: Record<string, unknown> = {\n id: agent.id,\n name: agent.name,\n slug: agent.slug,\n description: agent.description ?? 'N/A',\n model: agent.model,\n status: agent.status,\n isPublic: agent.isPublic ? 'Yes' : 'No',\n maxTurns: agent.maxTurns ?? 'N/A',\n permissionMode: agent.permissionMode ?? 'default',\n allowedTools: agent.allowedTools?.join(', ') ?? 'All',\n disallowedTools: agent.disallowedTools?.join(', ') ?? 'None',\n tags: agent.tags?.join(', ') ?? 'None',\n createdBy: agent.createdBy ?? 'N/A',\n createdAt: agent.createdAt ? new Date(agent.createdAt).toLocaleString() : 'N/A',\n updatedAt: agent.updatedAt ? new Date(agent.updatedAt).toLocaleString() : 'N/A',\n url: agentLink(agent.id),\n };\n output.output(formatted);\n\n // Show system prompt separately for readability\n if (agent.systemPrompt) {\n console.log(chalk.bold('\\nSystem Prompt:'));\n console.log(chalk.gray('─'.repeat(60)));\n console.log(agent.systemPrompt);\n console.log(chalk.gray('─'.repeat(60)));\n }\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Create agent\n agents\n .command('create')\n .description('Create a new agent')\n .option('-f, --file <path>', 'Create from JSON file')\n .option('-n, --name <name>', 'Agent name')\n .option('-s, --slug <slug>', 'Agent slug (URL-friendly identifier)')\n .option('-p, --system-prompt <prompt>', 'System prompt')\n .option('-m, --model <model>', 'Model (claude-sonnet-4-5, claude-opus-4-5, claude-haiku-4-5)')\n .option('-d, --description <description>', 'Agent description')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents create --name \"Code Reviewer\" --slug code-reviewer --system-prompt \"Review code for bugs\"\n ${chalk.dim('$')} mutagent agents create --file agent.json\n ${chalk.dim('$')} mutagent agents create --name \"Helper\" --slug helper --system-prompt \"...\" --model claude-sonnet-4-5 --json\n\n${chalk.dim('Required: --name, --slug, and --system-prompt (or --file).')}\n `)\n .action(async (options: CreateOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let data: CreateAgentInput;\n\n if (options.file) {\n const content = readFileSync(options.file, 'utf-8');\n data = JSON.parse(content) as CreateAgentInput;\n } else if (options.name && options.slug && options.systemPrompt) {\n data = {\n name: options.name,\n slug: options.slug,\n systemPrompt: options.systemPrompt,\n };\n if (options.model) data.model = options.model;\n if (options.description) data.description = options.description;\n } else {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Either --file or (--name, --slug, and --system-prompt) are required',\n 'Use --file to load from JSON or provide --name, --slug, and --system-prompt'\n );\n }\n\n const client = getSDKClient();\n const agent = await client.createAgent(data);\n\n output.success(`Created agent: ${agent.name} (${agent.slug})`);\n output.output(agent);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Update agent\n agents\n .command('update')\n .description('Update an agent')\n .argument('<id>', 'Agent ID')\n .option('-f, --file <path>', 'Update from JSON file')\n .option('-n, --name <name>', 'New name')\n .option('-p, --system-prompt <prompt>', 'New system prompt')\n .option('-m, --model <model>', 'New model')\n .option('-d, --description <description>', 'New description')\n .option('-s, --status <status>', 'New status (active, paused, archived)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents update <id> --name \"New Name\"\n ${chalk.dim('$')} mutagent agents update <id> --status paused\n ${chalk.dim('$')} mutagent agents update <id> --file updated-agent.json --json\n `)\n .action(async (id: string, options: UpdateOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n let data: UpdateAgentInput = {};\n\n if (options.file) {\n const content = readFileSync(options.file, 'utf-8');\n data = JSON.parse(content) as UpdateAgentInput;\n } else {\n if (options.name) data.name = options.name;\n if (options.systemPrompt) data.systemPrompt = options.systemPrompt;\n if (options.model) data.model = options.model;\n if (options.description) data.description = options.description;\n if (options.status) data.status = options.status;\n }\n\n if (Object.keys(data).length === 0) {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'No update data provided',\n 'Use --file, --name, --system-prompt, --model, --description, or --status'\n );\n }\n\n const client = getSDKClient();\n const agent = await client.updateAgent(id, data);\n\n output.success(`Updated agent: ${agent.name}`);\n output.output(agent);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Delete agent\n agents\n .command('delete')\n .description('Delete an agent')\n .argument('<id>', 'Agent ID')\n .option('--force', 'Skip confirmation')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents delete <id>\n ${chalk.dim('$')} mutagent agents delete <id> --force\n ${chalk.dim('$')} mutagent agents delete <id> --force --json\n\n${chalk.dim('Tip: Use --force to skip confirmation (required for non-interactive/CI usage).')}\n `)\n .action(async (id: string, options: DeleteOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n if (!options.force && !isJson) {\n const inquirer = (await import('inquirer')).default;\n const answers = await inquirer.prompt<ConfirmAnswer>([{\n type: 'confirm',\n name: 'confirm',\n message: `Delete agent ${id}? This action cannot be undone.`,\n default: false,\n }]);\n\n if (!answers.confirm) {\n output.info('Cancelled');\n return;\n }\n }\n\n const client = getSDKClient();\n await client.deleteAgent(id);\n\n output.success(`Deleted agent: ${id}`);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // =========================================================================\n // CONVERSATIONS subcommand group (mutagent agents conversations ...)\n // =========================================================================\n const conversations = agents\n .command('conversations')\n .description('Manage conversations for agents')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations list <agent-id>\n ${chalk.dim('$')} mutagent agents conversations create <agent-id>\n ${chalk.dim('$')} mutagent agents conversations messages <agent-id> <conversation-id>\n `);\n\n // List conversations\n conversations\n .command('list')\n .description('List conversations for an agent')\n .argument('<agent-id>', 'Agent ID')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations list <agent-id>\n ${chalk.dim('$')} mutagent agents conversations list <agent-id> --limit 10 --json\n `)\n .action(async (agentId: string, options: ConversationListOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n\n const result = await client.listConversations(agentId, filters);\n\n if (isJson) {\n output.output(result);\n } else {\n // Format for table\n const formatted = result.data.map((c: Conversation) => ({\n id: c.id,\n title: c.title ?? 'Untitled',\n status: c.status,\n messages: c.messageCount ?? 'N/A',\n created: c.createdAt ? new Date(c.createdAt).toLocaleDateString() : 'N/A',\n updated: c.updatedAt ? new Date(c.updatedAt).toLocaleDateString() : 'N/A',\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get conversation details\n conversations\n .command('get')\n .description('Get conversation details')\n .argument('<agent-id>', 'Agent ID')\n .argument('<conversation-id>', 'Conversation ID')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations get <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations get <agent-id> <conversation-id> --json\n `)\n .action(async (agentId: string, conversationId: string) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const conversation = await client.getConversation(agentId, conversationId);\n\n if (isJson) {\n output.output(conversation);\n } else {\n // Format for display\n const formatted: Record<string, unknown> = {\n id: conversation.id,\n agentId: conversation.agentId,\n title: conversation.title ?? 'Untitled',\n status: conversation.status,\n messageCount: conversation.messageCount ?? 'N/A',\n createdAt: conversation.createdAt ? new Date(conversation.createdAt).toLocaleString() : 'N/A',\n updatedAt: conversation.updatedAt ? new Date(conversation.updatedAt).toLocaleString() : 'N/A',\n };\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Create conversation\n conversations\n .command('create')\n .description('Start a new conversation with an agent')\n .argument('<agent-id>', 'Agent ID')\n .option('-t, --title <title>', 'Conversation title')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations create <agent-id>\n ${chalk.dim('$')} mutagent agents conversations create <agent-id> --title \"Debug session\" --json\n `)\n .action(async (agentId: string, options: ConversationCreateOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const data: { title?: string } = {};\n\n if (options.title) {\n data.title = options.title;\n }\n\n const conversation = await client.createConversation(agentId, data);\n\n output.success(`Created conversation: ${conversation.id}`);\n output.output(conversation);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Delete conversation\n conversations\n .command('delete')\n .description('Delete a conversation')\n .argument('<agent-id>', 'Agent ID')\n .argument('<conversation-id>', 'Conversation ID')\n .option('--force', 'Skip confirmation')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations delete <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations delete <agent-id> <conversation-id> --force --json\n `)\n .action(async (agentId: string, conversationId: string, options: DeleteOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n if (!options.force && !isJson) {\n const inquirer = (await import('inquirer')).default;\n const answers = await inquirer.prompt<ConfirmAnswer>([{\n type: 'confirm',\n name: 'confirm',\n message: `Delete conversation ${conversationId}? This action cannot be undone.`,\n default: false,\n }]);\n\n if (!answers.confirm) {\n output.info('Cancelled');\n return;\n }\n }\n\n const client = getSDKClient();\n await client.deleteConversation(agentId, conversationId);\n\n output.success(`Deleted conversation: ${conversationId}`);\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // List messages in conversation\n conversations\n .command('messages')\n .description('List messages in a conversation')\n .argument('<agent-id>', 'Agent ID')\n .argument('<conversation-id>', 'Conversation ID')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent agents conversations messages <agent-id> <conversation-id>\n ${chalk.dim('$')} mutagent agents conversations messages <agent-id> <conversation-id> --limit 20 --json\n `)\n .action(async (agentId: string, conversationId: string, options: MessagesListOptions) => {\n const isJson = getJsonFlag(agents);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n\n const result = await client.listMessages(agentId, conversationId, filters);\n\n if (isJson) {\n output.output(result);\n } else {\n // Format for table/display\n const formatted = result.data.map((m: Message) => ({\n id: m.id,\n role: m.role,\n content: m.content.length > 80 ? m.content.substring(0, 77) + '...' : m.content,\n tokens: m.tokenCount ?? 'N/A',\n created: m.createdAt ? new Date(m.createdAt).toLocaleString() : 'N/A',\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return agents;\n}\n",
27
32
  "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { loadConfig, setDefaultWorkspace, setDefaultOrganization } from '../lib/config.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\n\nexport function createConfigCommand(): Command {\n const config = new Command('config')\n .description('Manage CLI configuration')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent config list\n ${chalk.dim('$')} mutagent config get endpoint\n ${chalk.dim('$')} mutagent config set workspace <workspace-id>\n ${chalk.dim('$')} mutagent config set org <org-id>\n `);\n\n // List command\n config\n .command('list')\n .description('List all configuration')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent config list\n ${chalk.dim('$')} mutagent config list --json\n `)\n .action(() => {\n const isJson = getJsonFlag(config);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n const cfg = loadConfig();\n\n // Mask API key for security\n const display = {\n ...cfg,\n apiKey: cfg.apiKey ? `${cfg.apiKey.slice(0, 8)}...` : undefined,\n };\n\n output.output(display);\n });\n\n // Get command\n config\n .command('get')\n .description('Get configuration value')\n .argument('<key>', 'Configuration key (apiKey, endpoint, format, timeout, defaultWorkspace, defaultOrganization)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent config get endpoint\n ${chalk.dim('$')} mutagent config get defaultWorkspace\n ${chalk.dim('$')} mutagent config get apiKey --json\n\n${chalk.dim('Keys: apiKey, endpoint, format, timeout, defaultWorkspace, defaultOrganization')}\n `)\n .action((key: string) => {\n const isJson = getJsonFlag(config);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n const cfg = loadConfig();\n\n if (!(key in cfg)) {\n output.error(`Unknown config key: ${key}`);\n process.exit(1);\n }\n\n const value = cfg[key as keyof typeof cfg];\n // Convert value to string safely for display\n const stringValue = typeof value === 'object' ? JSON.stringify(value) : String(value ?? '');\n const displayValue = key === 'apiKey' && value ? `${stringValue.slice(0, 8)}...` : stringValue;\n\n if (isJson) {\n output.output({ [key]: displayValue });\n } else {\n output.info(displayValue);\n }\n });\n\n // Set command (with subcommands)\n const set = new Command('set')\n .description('Set configuration value');\n\n // Set workspace subcommand\n set\n .command('workspace')\n .description('Set default workspace ID')\n .argument('<id>', 'Workspace ID to set as default')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent config set workspace <workspace-id>\n\n${chalk.dim('Persists workspace ID so you don\\'t need to pass headers on every request.')}\n `)\n .action((id: string) => {\n const isJson = getJsonFlag(config);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n setDefaultWorkspace(id);\n\n if (isJson) {\n output.output({ success: true, defaultWorkspace: id });\n } else {\n output.success(`Default workspace set to ${id}`);\n }\n });\n\n // Set org subcommand\n set\n .command('org')\n .description('Set default organization ID')\n .argument('<id>', 'Organization ID to set as default')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent config set org <org-id>\n\n${chalk.dim('Persists organization ID for org-scoped API keys.')}\n `)\n .action((id: string) => {\n const isJson = getJsonFlag(config);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n setDefaultOrganization(id);\n\n if (isJson) {\n output.output({ success: true, defaultOrganization: id });\n } else {\n output.success(`Default organization set to ${id}`);\n }\n });\n\n config.addCommand(set);\n\n return config;\n}\n",
28
33
  "/**\n * @fileoverview Playground command for executing prompts\n * @module @mutagent/cli/commands/playground\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { readFileSync } from 'fs';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError, handleError } from '../lib/errors.js';\nimport { playgroundLink, promptLink } from '../lib/ui-links.js';\nimport type { PromptStreamEvent } from '../types/index.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Message object for prompt messages array\n */\ninterface PromptMessage {\n /** Role of the message sender */\n role: 'system' | 'user' | 'assistant';\n /** Content of the message */\n content: string;\n}\n\n/**\n * Options for the run command\n */\ninterface RunOptions {\n /** Input variables as JSON string */\n input?: string;\n /** Path to JSON file containing input variables */\n file?: string;\n /** Enable streaming mode */\n stream?: boolean;\n /** Model override */\n model?: string;\n /** System prompt text */\n system?: string;\n /** Human/user message text */\n human?: string;\n /** Full messages array as JSON string */\n messages?: string;\n}\n\n// =============================================================================\n// SSE Parsing Utilities\n// =============================================================================\n\n/**\n * Parse an SSE message line\n */\nfunction parseSSELine(line: string): { field: string; value: string } | null {\n if (!line || line.startsWith(':')) {\n return null; // Comment or empty line\n }\n\n const colonIndex = line.indexOf(':');\n if (colonIndex === -1) {\n return { field: line, value: '' };\n }\n\n const field = line.slice(0, colonIndex);\n let value = line.slice(colonIndex + 1);\n if (value.startsWith(' ')) {\n value = value.slice(1);\n }\n\n return { field, value };\n}\n\n/**\n * Parse SSE event data into a PromptStreamEvent\n */\nfunction parsePromptStreamEvent(data: string): PromptStreamEvent | null {\n try {\n return JSON.parse(data) as PromptStreamEvent;\n } catch {\n return null;\n }\n}\n\n// =============================================================================\n// Command Implementation\n// =============================================================================\n\nexport function createPlaygroundCommand(): Command {\n const playground = new Command('playground')\n .description('Execute and test prompts interactively')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent playground run <prompt-id> --input '{\"name\": \"John\"}'\n ${chalk.dim('$')} mutagent playground run <prompt-id> --file input.json\n ${chalk.dim('$')} mutagent playground run <prompt-id> --input '{}' --stream\n ${chalk.dim('$')} mutagent playground run <prompt-id> -i '{}' --model gpt-4-turbo\n ${chalk.dim('$')} mutagent playground run <prompt-id> --system \"You are helpful\" --human \"Hello\"\n ${chalk.dim('$')} mutagent playground run <prompt-id> --messages '[{\"role\":\"user\",\"content\":\"Hi\"}]'\n\nInput Format:\n The input must be a valid JSON object matching the prompt's input schema.\n Use --input for inline JSON or --file to load from a file.\n\nPrompt Style Flags:\n Use --system and --human to quickly construct a messages array.\n Use --messages to provide a full messages array as JSON.\n\nStreaming:\n Use --stream to receive tokens as they are generated.\n In JSON mode (--json), each token is output as a separate JSON object.\n `);\n\n // Run prompt\n playground\n .command('run')\n .description('Execute a prompt with input variables')\n .argument('<prompt-id>', 'Prompt ID to execute (from: mutagent prompts list)')\n .option('-i, --input <json>', 'Input variables as JSON')\n .option('-f, --file <path>', 'Input from JSON file')\n .option('-s, --stream', 'Stream the response')\n .option('-m, --model <model>', 'Override model')\n .option('--system <text>', 'Set system prompt text')\n .option('--human <text>', 'Set human/user message text')\n .option('--messages <json>', 'Pass full messages array as JSON string')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent playground run <prompt-id> --input '{\"name\": \"John\"}'\n ${chalk.dim('$')} mutagent playground run <prompt-id> --file input.json --stream\n ${chalk.dim('$')} mutagent playground run <prompt-id> --system \"You are helpful\" --human \"Hello\"\n ${chalk.dim('$')} mutagent playground run <prompt-id> --input '{}' --model gpt-4-turbo --json\n\nInput Methods (pick one):\n --input '{\"key\":\"value\"}' Inline JSON variables\n --file input.json Load from JSON file\n --system/--human Quick system + user message\n --messages '[...]' Full messages array\n\n${chalk.dim('Hint: Test before evaluating: mutagent playground run <id> --input \\'{\"key\":\"value\"}\\'')}\n `)\n .action(async (promptId: string, options: RunOptions) => {\n const isJson = getJsonFlag(playground);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n // Parse input\n const inputData = parseInput(options);\n\n const client = getSDKClient();\n\n if (options.stream) {\n // Streaming mode\n await executeStreaming(client, promptId, inputData, options.model, isJson, output);\n } else {\n // Non-streaming mode\n const result = await client.executePrompt(promptId, inputData, {\n model: options.model,\n });\n\n if (isJson) {\n output.output({\n ...result,\n _links: {\n playground: playgroundLink(),\n prompt: promptLink(promptId),\n },\n });\n } else {\n // Display result in human-readable format\n console.log(chalk.bold('\\nExecution Result:'));\n console.log(chalk.gray('─'.repeat(50)));\n console.log(chalk.cyan('Output:'));\n console.log(result.output);\n console.log(chalk.gray('─'.repeat(50)));\n console.log(chalk.dim(`Model: ${result.model}`));\n console.log(chalk.dim(`Execution Time: ${String(result.executionTimeMs)}ms`));\n if (result.tokens) {\n console.log(chalk.dim(`Tokens: ${String(result.tokens.prompt)} prompt + ${String(result.tokens.completion)} completion = ${String(result.tokens.total)} total`));\n }\n if (result.cost !== undefined) {\n console.log(chalk.dim(`Cost: $${result.cost.toFixed(6)}`));\n }\n console.log(chalk.dim(`Playground: ${playgroundLink()}`));\n console.log();\n }\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return playground;\n}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Parse input from options (either --input, --file, or prompt style flags)\n */\nfunction parseInput(options: RunOptions): Record<string, unknown> {\n // Check for conflicting options\n const hasInputOrFile = options.input ?? options.file;\n const hasPromptStyleFlags = options.system ?? options.human ?? options.messages;\n\n if (hasInputOrFile && hasPromptStyleFlags) {\n throw new MutagentError(\n 'INVALID_ARGUMENTS',\n 'Cannot use --input/--file with prompt style flags (--system, --human, --messages)',\n 'Use either --input/--file OR prompt style flags, not both'\n );\n }\n\n if (options.input && options.file) {\n throw new MutagentError(\n 'INVALID_ARGUMENTS',\n 'Cannot use both --input and --file options',\n 'Use either --input for inline JSON or --file to load from a file'\n );\n }\n\n // Handle prompt style flags\n if (hasPromptStyleFlags) {\n return parsePromptStyleInput(options);\n }\n\n // Get input JSON from file or inline option\n const inputJson = getInputJson(options);\n\n return parseJsonInput(inputJson);\n}\n\n/**\n * Parse prompt style input (--system, --human, --messages)\n */\nfunction parsePromptStyleInput(options: RunOptions): Record<string, unknown> {\n // If --messages is provided, parse and use directly\n if (options.messages) {\n if (options.system ?? options.human) {\n throw new MutagentError(\n 'INVALID_ARGUMENTS',\n 'Cannot use --messages with --system or --human',\n 'Use either --messages OR --system/--human flags, not both'\n );\n }\n\n try {\n const parsed = JSON.parse(options.messages) as unknown;\n if (!Array.isArray(parsed)) {\n throw new MutagentError(\n 'INVALID_INPUT',\n '--messages must be a JSON array',\n 'Provide messages as [{\"role\": \"user\", \"content\": \"Hello\"}]'\n );\n }\n\n // Validate each message has role and content\n for (const msg of parsed) {\n if (typeof msg !== 'object' || msg === null) {\n throw new MutagentError(\n 'INVALID_INPUT',\n 'Each message must be an object',\n 'Format: {\"role\": \"system|user|assistant\", \"content\": \"...\"}'\n );\n }\n const msgObj = msg as Record<string, unknown>;\n if (!msgObj.role || !msgObj.content) {\n throw new MutagentError(\n 'INVALID_INPUT',\n 'Each message must have role and content fields',\n 'Format: {\"role\": \"system|user|assistant\", \"content\": \"...\"}'\n );\n }\n }\n\n return { messages: parsed as PromptMessage[] };\n } catch (err) {\n if (err instanceof MutagentError) {\n throw err;\n }\n throw new MutagentError(\n 'INVALID_JSON',\n 'Failed to parse --messages as JSON',\n err instanceof Error ? err.message : 'Ensure the input is valid JSON array'\n );\n }\n }\n\n // Construct messages array from --system and/or --human\n if (!options.system && !options.human) {\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'At least one of --system or --human is required when using prompt style flags',\n 'Use --system \"prompt\" and/or --human \"message\"'\n );\n }\n\n const messages: PromptMessage[] = [];\n\n if (options.system) {\n messages.push({ role: 'system', content: options.system });\n }\n\n if (options.human) {\n messages.push({ role: 'user', content: options.human });\n }\n\n return { messages };\n}\n\n/**\n * Get input JSON string from file or inline option\n */\nfunction getInputJson(options: RunOptions): string {\n if (options.file) {\n try {\n return readFileSync(options.file, 'utf-8');\n } catch (err) {\n throw new MutagentError(\n 'FILE_READ_ERROR',\n `Failed to read input file: ${options.file}`,\n err instanceof Error ? err.message : 'Check the file path and permissions'\n );\n }\n }\n\n if (options.input) {\n return options.input;\n }\n\n throw new MutagentError(\n 'MISSING_ARGUMENTS',\n 'Input is required',\n 'Use --input \\'{\"key\": \"value\"}\\' or --file input.json or --system/--human/--messages flags'\n );\n}\n\n/**\n * Parse JSON string into a record object\n */\nfunction parseJsonInput(inputJson: string): Record<string, unknown> {\n\n try {\n const parsed = JSON.parse(inputJson) as unknown;\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n throw new MutagentError(\n 'INVALID_INPUT',\n 'Input must be a JSON object',\n 'Provide input as {\"key\": \"value\"} format'\n );\n }\n return parsed as Record<string, unknown>;\n } catch (err) {\n if (err instanceof MutagentError) {\n throw err;\n }\n throw new MutagentError(\n 'INVALID_JSON',\n 'Failed to parse input as JSON',\n err instanceof Error ? err.message : 'Ensure the input is valid JSON'\n );\n }\n}\n\n/**\n * Execute prompt with streaming\n */\nasync function executeStreaming(\n client: ReturnType<typeof getSDKClient>,\n promptId: string,\n input: Record<string, unknown>,\n model: string | undefined,\n isJson: boolean,\n output: OutputFormatter\n): Promise<void> {\n const response = await client.executePromptStream(promptId, input, { model });\n\n if (!response.body) {\n throw new MutagentError(\n 'STREAM_ERROR',\n 'No response body received',\n 'The server did not return a streaming response'\n );\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n if (!isJson) {\n console.log(chalk.bold('\\nStreaming Output:'));\n console.log(chalk.gray('─'.repeat(50)));\n }\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const parsed = parseSSELine(line);\n if (!parsed) continue;\n\n if (parsed.field === 'data') {\n const event = parsePromptStreamEvent(parsed.value);\n if (!event) continue;\n\n switch (event.type) {\n case 'prompt.start':\n if (isJson) {\n console.log(JSON.stringify({ type: 'start', timestamp: event.timestamp }));\n }\n break;\n\n case 'prompt.token':\n if (event.token) {\n if (isJson) {\n console.log(JSON.stringify({ type: 'token', token: event.token }));\n } else {\n process.stdout.write(event.token);\n }\n }\n break;\n\n case 'prompt.complete':\n if (isJson) {\n console.log(JSON.stringify({ type: 'complete', result: event.result }));\n } else {\n console.log(); // Newline after tokens\n console.log(chalk.gray('─'.repeat(50)));\n if (event.result) {\n console.log(chalk.dim(`Model: ${event.result.model}`));\n console.log(chalk.dim(`Execution Time: ${String(event.result.executionTimeMs)}ms`));\n if (event.result.tokens) {\n console.log(chalk.dim(`Tokens: ${String(event.result.tokens.prompt)} prompt + ${String(event.result.tokens.completion)} completion = ${String(event.result.tokens.total)} total`));\n }\n if (event.result.cost !== undefined) {\n console.log(chalk.dim(`Cost: $${event.result.cost.toFixed(6)}`));\n }\n }\n console.log();\n }\n break;\n\n case 'prompt.error':\n if (isJson) {\n console.log(JSON.stringify({ type: 'error', error: event.error }));\n } else {\n output.error(event.error ?? 'Unknown streaming error');\n }\n break;\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n",
29
- "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { handleError } from '../lib/errors.js';\nimport type { Workspace } from '../types/index.js';\n\n// Command option interfaces for type safety\ninterface ListOptions {\n limit: string;\n offset?: string;\n}\n\nexport function createWorkspacesCommand(): Command {\n const workspaces = new Command('workspaces')\n .description('View workspaces (read-only)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent workspaces list\n ${chalk.dim('$')} mutagent workspaces get <workspace-id>\n\nSubcommands:\n list, get\n\nNote: Workspace management (create, update, delete) is available in the Admin Panel only.\n `);\n\n // =========================================================================\n // WORKSPACE READ-ONLY OPERATIONS\n // Create, update, delete are available in Admin Panel only\n // =========================================================================\n\n // List workspaces\n workspaces\n .command('list')\n .description('List all workspaces')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent workspaces list\n ${chalk.dim('$')} mutagent workspaces list --limit 10 --json\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(workspaces);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n\n const result = await client.listWorkspaces(filters);\n\n if (isJson) {\n output.output(result);\n } else {\n // Format for table\n const formatted = result.data.map((w: Workspace) => ({\n id: w.id,\n name: w.name,\n slug: w.slug,\n isDefault: w.isDefault ? 'Yes' : 'No',\n updated: w.updatedAt ? new Date(w.updatedAt).toLocaleDateString() : 'N/A',\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get workspace\n workspaces\n .command('get')\n .description('Get workspace details')\n .argument('<id>', 'Workspace ID')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent workspaces get <workspace-id>\n ${chalk.dim('$')} mutagent workspaces get <workspace-id> --json\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(workspaces);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const workspace = await client.getWorkspace(id);\n\n if (isJson) {\n output.output(workspace);\n } else {\n // Format for display\n const formatted: Record<string, unknown> = {\n id: workspace.id,\n name: workspace.name,\n slug: workspace.slug,\n description: workspace.description ?? 'N/A',\n isDefault: workspace.isDefault ? 'Yes' : 'No',\n createdBy: workspace.createdBy ?? 'N/A',\n createdAt: workspace.createdAt ? new Date(workspace.createdAt).toLocaleString() : 'N/A',\n updatedAt: workspace.updatedAt ? new Date(workspace.updatedAt).toLocaleString() : 'N/A',\n };\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return workspaces;\n}\n",
30
- "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError, handleError } from '../lib/errors.js';\nimport { providerSettingsLink } from '../lib/ui-links.js';\nimport type { Provider, ProviderType } from '../types/index.js';\n\n// Valid provider types for validation\nconst VALID_PROVIDER_TYPES: ProviderType[] = [\n 'openai',\n 'anthropic',\n 'google',\n 'azure',\n 'bedrock',\n 'cohere',\n 'mistral',\n 'groq',\n 'together',\n 'replicate',\n 'custom',\n];\n\n// Command option interfaces for type safety\ninterface ListOptions {\n limit: string;\n offset?: string;\n type?: string;\n}\n\n/**\n * Validates that the provider type is valid\n */\nfunction validateProviderType(type: string): ProviderType {\n if (!VALID_PROVIDER_TYPES.includes(type as ProviderType)) {\n throw new MutagentError(\n 'INVALID_PROVIDER_TYPE',\n `Invalid provider type: ${type}`,\n `Valid types: ${VALID_PROVIDER_TYPES.join(', ')}`\n );\n }\n return type as ProviderType;\n}\n\nexport function createProvidersCommand(): Command {\n const providers = new Command('providers')\n .description('View LLM providers (read-only)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent providers list\n ${chalk.dim('$')} mutagent providers get <provider-id>\n ${chalk.dim('$')} mutagent providers test <provider-id>\n\nProvider Types:\n openai, anthropic, google, azure, bedrock, cohere, mistral, groq, together, replicate, custom\n\nSubcommands:\n list, get, test\n\nNote: Provider management (create, update, delete) is available in the Admin Panel only.\n `);\n\n // =========================================================================\n // PROVIDER READ-ONLY OPERATIONS\n // =========================================================================\n\n // List providers\n providers\n .command('list')\n .description('List all providers')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .option('-t, --type <type>', 'Filter by provider type')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent providers list\n ${chalk.dim('$')} mutagent providers list --type openai\n ${chalk.dim('$')} mutagent providers list --json\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(providers);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number; type?: string } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n if (options.type) {\n filters.type = validateProviderType(options.type);\n }\n\n const result = await client.listProviders(filters);\n\n if (isJson) {\n output.output(result);\n } else {\n if (result.data.length === 0) {\n output.info('No providers configured.');\n output.info(`Configure at: ${providerSettingsLink()}`);\n } else {\n // Format for table\n const formatted = result.data.map((p: Provider) => ({\n id: p.id,\n name: p.name,\n type: p.type,\n baseUrl: p.baseUrl ?? 'default',\n active: p.isActive ? 'Yes' : 'No',\n updated: p.updatedAt ? new Date(p.updatedAt).toLocaleDateString() : 'N/A',\n }));\n output.output(formatted);\n }\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get provider\n providers\n .command('get')\n .description('Get provider details')\n .argument('<id>', 'Provider ID (from: mutagent providers list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent providers get <provider-id>\n ${chalk.dim('$')} mutagent providers get <provider-id> --json\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(providers);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const provider = await client.getProvider(id);\n\n if (isJson) {\n output.output(provider);\n } else {\n // Format for display\n const formatted: Record<string, unknown> = {\n id: provider.id,\n name: provider.name,\n type: provider.type,\n baseUrl: provider.baseUrl ?? 'default',\n isActive: provider.isActive ? 'Yes' : 'No',\n createdBy: provider.createdBy ?? 'N/A',\n createdAt: provider.createdAt ? new Date(provider.createdAt).toLocaleString() : 'N/A',\n updatedAt: provider.updatedAt ? new Date(provider.updatedAt).toLocaleString() : 'N/A',\n };\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Test provider connectivity\n providers\n .command('test')\n .description('Test provider connectivity')\n .argument('<id>', 'Provider ID (from: mutagent providers list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent providers test <provider-id>\n ${chalk.dim('$')} mutagent providers test <provider-id> --json\n\n${chalk.dim('Tests connectivity and lists available models for the provider.')}\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(providers);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n\n if (!isJson) {\n output.info(`Testing provider ${id}...`);\n }\n\n const result = await client.testProvider(id);\n\n if (isJson) {\n output.output(result);\n } else {\n if (result.success) {\n output.success(`Provider test passed (${String(result.responseTimeMs)}ms)`);\n console.log(chalk.green(`Message: ${result.message}`));\n if (result.availableModels && result.availableModels.length > 0) {\n console.log(chalk.bold('\\nAvailable Models:'));\n result.availableModels.forEach(model => {\n console.log(` - ${model}`);\n });\n }\n } else {\n output.error(`Provider test failed: ${result.message}`);\n if (result.error) {\n console.log(chalk.red(`Error: ${result.error}`));\n }\n }\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return providers;\n}\n",
31
- "import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { execSync } from 'child_process';\nimport { join } from 'path';\nimport { hasCredentials, loadConfig } from '../lib/config.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { handleError, MutagentError } from '../lib/errors.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype PackageManager = 'bun' | 'npm' | 'yarn' | 'pnpm';\n\ntype InitMode = 'full' | 'cli-only' | 'skip';\n\ninterface InitOptions {\n nonInteractive?: boolean;\n}\n\ninterface FrameworkDetection {\n name: string;\n displayName: string;\n npmPackage: string;\n mutagentPackage?: string;\n}\n\ninterface MutagentRcConfig {\n workspace?: string;\n endpoint?: string;\n framework?: string;\n}\n\n// =============================================================================\n// Framework Detection Map\n// =============================================================================\n\n/**\n * Maps package.json dependency names to framework info.\n * Order matters: more specific packages should come first.\n */\nconst FRAMEWORK_DETECTION_MAP: Record<string, FrameworkDetection> = {\n '@mastra/core': {\n name: 'mastra',\n displayName: 'Mastra',\n npmPackage: '@mastra/core',\n },\n '@langchain/langgraph': {\n name: 'langgraph',\n displayName: 'LangGraph',\n npmPackage: '@langchain/langgraph',\n mutagentPackage: '@mutagent/langgraph',\n },\n 'langchain': {\n name: 'langchain',\n displayName: 'LangChain',\n npmPackage: 'langchain',\n mutagentPackage: '@mutagent/langchain',\n },\n '@langchain/core': {\n name: 'langchain',\n displayName: 'LangChain',\n npmPackage: '@langchain/core',\n mutagentPackage: '@mutagent/langchain',\n },\n '@ai-sdk/core': {\n name: 'vercel-ai',\n displayName: 'Vercel AI SDK',\n npmPackage: '@ai-sdk/core',\n mutagentPackage: '@mutagent/vercel-ai',\n },\n 'ai': {\n name: 'vercel-ai',\n displayName: 'Vercel AI SDK',\n npmPackage: 'ai',\n mutagentPackage: '@mutagent/vercel-ai',\n },\n '@google/genai': {\n name: 'generic',\n displayName: 'Google GenAI',\n npmPackage: '@google/genai',\n },\n 'openai': {\n name: 'openai',\n displayName: 'OpenAI SDK',\n npmPackage: 'openai',\n mutagentPackage: '@mutagent/openai',\n },\n};\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Detect the package manager by scanning lockfiles in cwd\n */\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManager {\n if (existsSync(join(cwd, 'bun.lockb')) || existsSync(join(cwd, 'bun.lock'))) {\n return 'bun';\n }\n if (existsSync(join(cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (existsSync(join(cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n if (existsSync(join(cwd, 'package-lock.json'))) {\n return 'npm';\n }\n\n // Fallback: check if bun is available\n try {\n execSync('bun --version', { stdio: 'ignore' });\n return 'bun';\n } catch {\n return 'npm';\n }\n}\n\n/**\n * Build an install command for the given package manager and packages\n */\nexport function getInstallCommand(pm: PackageManager, packages: string[]): string {\n const pkgList = packages.join(' ');\n const commands: Record<PackageManager, string> = {\n bun: `bun add ${pkgList}`,\n npm: `npm install ${pkgList}`,\n yarn: `yarn add ${pkgList}`,\n pnpm: `pnpm add ${pkgList}`,\n };\n return commands[pm];\n}\n\n/**\n * Detect framework from package.json dependencies in cwd\n */\nexport function detectFrameworkFromPackageJson(cwd: string = process.cwd()): FrameworkDetection | null {\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n return null;\n }\n\n let pkg: { dependencies?: Record<string, string>; devDependencies?: Record<string, string> };\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as typeof pkg;\n } catch {\n return null;\n }\n\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n // Check detection map in order (more specific first)\n for (const [depName, framework] of Object.entries(FRAMEWORK_DETECTION_MAP)) {\n if (depName in allDeps) {\n return framework;\n }\n }\n\n return null;\n}\n\n/**\n * Check if .mutagentrc.json already exists in cwd\n */\nexport function hasRcConfig(cwd: string = process.cwd()): boolean {\n return existsSync(join(cwd, '.mutagentrc.json'));\n}\n\n/**\n * Write .mutagentrc.json to cwd\n */\nfunction writeRcConfig(config: MutagentRcConfig, cwd: string = process.cwd()): void {\n const rcPath = join(cwd, '.mutagentrc.json');\n writeFileSync(rcPath, JSON.stringify(config, null, 2) + '\\n');\n}\n\n// =============================================================================\n// Init Command\n// =============================================================================\n\nexport function createInitCommand(): Command {\n const init = new Command('init')\n .description('Initialize MutagenT in your project')\n .option('--non-interactive', 'Skip interactive prompts (defaults to CLI-only mode)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent init # Interactive setup wizard\n ${chalk.dim('$')} mutagent init --non-interactive # CLI-only mode (no prompts)\n\nModes:\n ${chalk.bold('Full scaffold')} Install SDK + integration package, create config, setup tracing\n ${chalk.bold('CLI-only')} Verify auth + create .mutagentrc.json with workspace/endpoint\n ${chalk.bold('Skip')} Exit without changes\n `)\n .action(async (options: InitOptions) => {\n const isJson = getJsonFlag(init);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const isNonInteractive =\n options.nonInteractive === true ||\n process.env.MUTAGENT_NON_INTERACTIVE === 'true' ||\n process.env.CI === 'true' ||\n !process.stdin.isTTY;\n\n const cwd = process.cwd();\n\n // Step 1: Check existing config\n if (hasRcConfig(cwd)) {\n output.warn('.mutagentrc.json already exists in this directory.');\n if (isNonInteractive) {\n output.info('Use --force to overwrite (not yet supported). Exiting.');\n return;\n }\n const { overwrite } = await inquirer.prompt<{ overwrite: boolean }>([{\n type: 'confirm',\n name: 'overwrite',\n message: '.mutagentrc.json already exists. Overwrite?',\n default: false,\n }]);\n if (!overwrite) {\n output.info('Init cancelled.');\n return;\n }\n }\n\n // Step 2: Check auth\n const authenticated = hasCredentials();\n if (!authenticated) {\n output.warn('Not authenticated.');\n output.info('Run: mutagent auth login --browser');\n if (isNonInteractive) {\n throw new MutagentError(\n 'AUTH_REQUIRED',\n 'Authentication required before init',\n 'Run: mutagent auth login --browser'\n );\n }\n const { doAuth } = await inquirer.prompt<{ doAuth: boolean }>([{\n type: 'confirm',\n name: 'doAuth',\n message: 'Would you like to authenticate now?',\n default: true,\n }]);\n if (doAuth) {\n output.info('Run \"mutagent auth login --browser\" and then re-run \"mutagent init\".');\n return;\n }\n }\n\n // Step 3: Detect framework\n const detectedFramework = detectFrameworkFromPackageJson(cwd);\n\n // Step 4: Determine mode\n let mode: InitMode;\n let confirmedFramework: FrameworkDetection | null = detectedFramework;\n\n if (isNonInteractive) {\n mode = 'cli-only';\n if (isJson) {\n output.output({\n mode: 'cli-only',\n nonInteractive: true,\n detectedFramework: detectedFramework?.name ?? null,\n });\n }\n } else {\n // Show detected framework\n if (detectedFramework) {\n output.info(`Detected framework: ${detectedFramework.displayName} (${detectedFramework.npmPackage})`);\n\n const { confirmFramework } = await inquirer.prompt<{ confirmFramework: boolean }>([{\n type: 'confirm',\n name: 'confirmFramework',\n message: `Use ${detectedFramework.displayName}?`,\n default: true,\n }]);\n\n if (!confirmFramework) {\n const frameworkChoices = [\n { name: 'Mastra', value: 'mastra' },\n { name: 'LangChain', value: 'langchain' },\n { name: 'LangGraph', value: 'langgraph' },\n { name: 'Vercel AI SDK', value: 'vercel-ai' },\n { name: 'OpenAI SDK', value: 'openai' },\n { name: 'Generic (OpenAI-compatible)', value: 'generic' },\n { name: 'None / Skip framework', value: 'none' },\n ];\n\n const { selectedFramework } = await inquirer.prompt<{ selectedFramework: string }>([{\n type: 'list',\n name: 'selectedFramework',\n message: 'Select your AI framework:',\n choices: frameworkChoices,\n }]);\n\n if (selectedFramework === 'none') {\n confirmedFramework = null;\n } else {\n // Find framework in detection map by name\n const entry = Object.values(FRAMEWORK_DETECTION_MAP).find(f => f.name === selectedFramework);\n confirmedFramework = entry ?? null;\n }\n }\n } else {\n output.info('No AI framework detected in package.json.');\n }\n\n // Ask mode\n const modeChoices = [\n ...(confirmedFramework?.mutagentPackage ? [{\n name: `Full scaffold - Install @mutagent/sdk + ${confirmedFramework.mutagentPackage}, create config, setup tracing`,\n value: 'full' as const,\n }] : []),\n {\n name: 'CLI-only - Verify auth + create .mutagentrc.json config',\n value: 'cli-only' as const,\n },\n {\n name: 'Skip - Exit without changes',\n value: 'skip' as const,\n },\n ];\n\n const { selectedMode } = await inquirer.prompt<{ selectedMode: InitMode }>([{\n type: 'list',\n name: 'selectedMode',\n message: 'How would you like to initialize MutagenT?',\n choices: modeChoices,\n }]);\n\n mode = selectedMode;\n }\n\n // Step 5: Execute based on mode\n if (mode === 'skip') {\n output.info('Init skipped.');\n return;\n }\n\n // Load config for workspace/endpoint\n const config = loadConfig();\n const endpoint = config.endpoint ?? 'https://api.mutagent.io';\n const workspace = config.defaultWorkspace;\n\n const rcConfig: MutagentRcConfig = {\n endpoint,\n ...(workspace ? { workspace } : {}),\n ...(confirmedFramework ? { framework: confirmedFramework.name } : {}),\n };\n\n if (mode === 'full' && confirmedFramework?.mutagentPackage) {\n // Full scaffold: install packages + create config\n const pm = detectPackageManager(cwd);\n const packages = ['@mutagent/sdk', confirmedFramework.mutagentPackage];\n const installCmd = getInstallCommand(pm, packages);\n\n output.info(`Installing: ${packages.join(', ')}`);\n output.info(`Running: ${installCmd}`);\n\n try {\n execSync(installCmd, { cwd, stdio: 'inherit' });\n output.success('Packages installed successfully.');\n } catch {\n output.error('Package installation failed. You can install manually:');\n output.info(` ${installCmd}`);\n }\n\n // Write config\n writeRcConfig(rcConfig, cwd);\n output.success('Created .mutagentrc.json');\n\n // Print next steps\n console.log('');\n output.info('Next steps:');\n output.info(` 1. Run: mutagent integrate ${confirmedFramework.name}`);\n output.info(' 2. Follow the integration guide to add tracing to your code');\n output.info(' 3. Run: mutagent traces list (to verify traces are arriving)');\n } else {\n // CLI-only mode: just create config\n writeRcConfig(rcConfig, cwd);\n output.success('Created .mutagentrc.json');\n\n if (!authenticated) {\n output.info('Next: mutagent auth login --browser');\n } else {\n output.info('Ready! Run \"mutagent --help\" to see available commands.');\n }\n }\n\n // JSON summary\n if (isJson) {\n output.output({\n success: true,\n mode,\n configFile: '.mutagentrc.json',\n config: rcConfig,\n framework: confirmedFramework?.name ?? null,\n authenticated,\n });\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return init;\n}\n"
34
+ "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { handleError } from '../lib/errors.js';\nimport { workspaceLinks, workspaceLink } from '../lib/ui-links.js';\nimport type { Workspace } from '../types/index.js';\n\n// Command option interfaces for type safety\ninterface ListOptions {\n limit: string;\n offset?: string;\n}\n\nexport function createWorkspacesCommand(): Command {\n const workspaces = new Command('workspaces')\n .description('View workspaces (read-only)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent workspaces list\n ${chalk.dim('$')} mutagent workspaces get <workspace-id>\n\nSubcommands:\n list, get\n\nNote: Workspace management (create, update, delete) is available in the Admin Panel only.\n `);\n\n // =========================================================================\n // WORKSPACE READ-ONLY OPERATIONS\n // Create, update, delete are available in Admin Panel only\n // =========================================================================\n\n // List workspaces\n workspaces\n .command('list')\n .description('List all workspaces')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent workspaces list\n ${chalk.dim('$')} mutagent workspaces list --limit 10 --json\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(workspaces);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n\n const result = await client.listWorkspaces(filters);\n\n if (isJson) {\n const withLinks = result.data.map((w: Workspace) => ({\n ...w,\n _links: workspaceLinks(w.id),\n }));\n output.output({ ...result, data: withLinks });\n } else {\n // Format for table\n const formatted = result.data.map((w: Workspace) => ({\n id: w.id,\n name: w.name,\n slug: w.slug,\n isDefault: w.isDefault ? 'Yes' : 'No',\n updated: w.updatedAt ? new Date(w.updatedAt).toLocaleDateString() : 'N/A',\n url: workspaceLink(w.id),\n }));\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get workspace\n workspaces\n .command('get')\n .description('Get workspace details')\n .argument('<id>', 'Workspace ID')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent workspaces get <workspace-id>\n ${chalk.dim('$')} mutagent workspaces get <workspace-id> --json\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(workspaces);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const workspace = await client.getWorkspace(id);\n\n if (isJson) {\n output.output({ ...workspace, _links: workspaceLinks(workspace.id) });\n } else {\n // Format for display\n const formatted: Record<string, unknown> = {\n id: workspace.id,\n name: workspace.name,\n slug: workspace.slug,\n description: workspace.description ?? 'N/A',\n isDefault: workspace.isDefault ? 'Yes' : 'No',\n createdBy: workspace.createdBy ?? 'N/A',\n createdAt: workspace.createdAt ? new Date(workspace.createdAt).toLocaleString() : 'N/A',\n updatedAt: workspace.updatedAt ? new Date(workspace.updatedAt).toLocaleString() : 'N/A',\n url: workspaceLink(workspace.id),\n };\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return workspaces;\n}\n",
35
+ "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { getSDKClient } from '../lib/sdk-client.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { MutagentError, handleError } from '../lib/errors.js';\nimport { providerSettingsLink, providerLinks, providerLink } from '../lib/ui-links.js';\nimport type { Provider, ProviderType } from '../types/index.js';\n\n// Valid provider types for validation\nconst VALID_PROVIDER_TYPES: ProviderType[] = [\n 'openai',\n 'anthropic',\n 'google',\n 'azure',\n 'bedrock',\n 'cohere',\n 'mistral',\n 'groq',\n 'together',\n 'replicate',\n 'custom',\n];\n\n// Command option interfaces for type safety\ninterface ListOptions {\n limit: string;\n offset?: string;\n type?: string;\n}\n\n/**\n * Validates that the provider type is valid\n */\nfunction validateProviderType(type: string): ProviderType {\n if (!VALID_PROVIDER_TYPES.includes(type as ProviderType)) {\n throw new MutagentError(\n 'INVALID_PROVIDER_TYPE',\n `Invalid provider type: ${type}`,\n `Valid types: ${VALID_PROVIDER_TYPES.join(', ')}`\n );\n }\n return type as ProviderType;\n}\n\nexport function createProvidersCommand(): Command {\n const providers = new Command('providers')\n .description('View LLM providers (read-only)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent providers list\n ${chalk.dim('$')} mutagent providers get <provider-id>\n ${chalk.dim('$')} mutagent providers test <provider-id>\n\nProvider Types:\n openai, anthropic, google, azure, bedrock, cohere, mistral, groq, together, replicate, custom\n\nSubcommands:\n list, get, test\n\nNote: Provider management (create, update, delete) is available in the Admin Panel only.\n `);\n\n // =========================================================================\n // PROVIDER READ-ONLY OPERATIONS\n // =========================================================================\n\n // List providers\n providers\n .command('list')\n .description('List all providers')\n .option('-l, --limit <n>', 'Limit results', '50')\n .option('-o, --offset <n>', 'Offset for pagination')\n .option('-t, --type <type>', 'Filter by provider type')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent providers list\n ${chalk.dim('$')} mutagent providers list --type openai\n ${chalk.dim('$')} mutagent providers list --json\n `)\n .action(async (options: ListOptions) => {\n const isJson = getJsonFlag(providers);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const filters: { limit?: number; offset?: number; type?: string } = {\n limit: parseInt(options.limit, 10) || 50,\n };\n\n if (options.offset) {\n filters.offset = parseInt(options.offset, 10);\n }\n if (options.type) {\n filters.type = validateProviderType(options.type);\n }\n\n const result = await client.listProviders(filters);\n\n if (isJson) {\n const withLinks = result.data.map((p: Provider) => ({\n ...p,\n _links: providerLinks(p.id),\n }));\n output.output({ ...result, data: withLinks });\n } else {\n if (result.data.length === 0) {\n output.info('No providers configured.');\n output.info(`Configure at: ${providerSettingsLink()}`);\n } else {\n // Format for table\n const formatted = result.data.map((p: Provider) => ({\n id: p.id,\n name: p.name,\n type: p.type,\n baseUrl: p.baseUrl ?? 'default',\n active: p.isActive ? 'Yes' : 'No',\n updated: p.updatedAt ? new Date(p.updatedAt).toLocaleDateString() : 'N/A',\n url: providerLink(p.id),\n }));\n output.output(formatted);\n }\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Get provider\n providers\n .command('get')\n .description('Get provider details')\n .argument('<id>', 'Provider ID (from: mutagent providers list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent providers get <provider-id>\n ${chalk.dim('$')} mutagent providers get <provider-id> --json\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(providers);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n const provider = await client.getProvider(id);\n\n if (isJson) {\n output.output({ ...provider, _links: providerLinks(provider.id) });\n } else {\n // Format for display\n const formatted: Record<string, unknown> = {\n id: provider.id,\n name: provider.name,\n type: provider.type,\n baseUrl: provider.baseUrl ?? 'default',\n isActive: provider.isActive ? 'Yes' : 'No',\n createdBy: provider.createdBy ?? 'N/A',\n createdAt: provider.createdAt ? new Date(provider.createdAt).toLocaleString() : 'N/A',\n updatedAt: provider.updatedAt ? new Date(provider.updatedAt).toLocaleString() : 'N/A',\n url: providerLink(provider.id),\n };\n output.output(formatted);\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n // Test provider connectivity\n providers\n .command('test')\n .description('Test provider connectivity')\n .argument('<id>', 'Provider ID (from: mutagent providers list)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent providers test <provider-id>\n ${chalk.dim('$')} mutagent providers test <provider-id> --json\n\n${chalk.dim('Tests connectivity and lists available models for the provider.')}\n `)\n .action(async (id: string) => {\n const isJson = getJsonFlag(providers);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const client = getSDKClient();\n\n if (!isJson) {\n output.info(`Testing provider ${id}...`);\n }\n\n const result = await client.testProvider(id);\n\n if (isJson) {\n output.output({ ...result, _links: providerLinks(id) });\n } else {\n if (result.success) {\n output.success(`Provider test passed (${String(result.responseTimeMs)}ms)`);\n console.log(chalk.green(`Message: ${result.message}`));\n if (result.availableModels && result.availableModels.length > 0) {\n console.log(chalk.bold('\\nAvailable Models:'));\n result.availableModels.forEach(model => {\n console.log(` - ${model}`);\n });\n }\n } else {\n output.error(`Provider test failed: ${result.message}`);\n if (result.error) {\n console.log(chalk.red(`Error: ${result.error}`));\n }\n }\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return providers;\n}\n",
36
+ "import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { execSync } from 'child_process';\nimport { join } from 'path';\nimport { hasCredentials, loadConfig } from '../lib/config.js';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { handleError, MutagentError } from '../lib/errors.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype PackageManager = 'bun' | 'npm' | 'yarn' | 'pnpm';\n\ntype InitMode = 'full' | 'cli-only' | 'skip';\n\ninterface InitOptions {\n nonInteractive?: boolean;\n}\n\ninterface FrameworkDetection {\n name: string;\n displayName: string;\n npmPackage: string;\n mutagentPackage?: string;\n}\n\ninterface MutagentRcConfig {\n workspace?: string;\n endpoint?: string;\n framework?: string;\n}\n\n// =============================================================================\n// Framework Detection Map\n// =============================================================================\n\n/**\n * Maps package.json dependency names to framework info.\n * Order matters: more specific packages should come first.\n */\nconst FRAMEWORK_DETECTION_MAP: Record<string, FrameworkDetection> = {\n '@mastra/core': {\n name: 'mastra',\n displayName: 'Mastra',\n npmPackage: '@mastra/core',\n },\n '@langchain/langgraph': {\n name: 'langgraph',\n displayName: 'LangGraph',\n npmPackage: '@langchain/langgraph',\n mutagentPackage: '@mutagent/langgraph',\n },\n 'langchain': {\n name: 'langchain',\n displayName: 'LangChain',\n npmPackage: 'langchain',\n mutagentPackage: '@mutagent/langchain',\n },\n '@langchain/core': {\n name: 'langchain',\n displayName: 'LangChain',\n npmPackage: '@langchain/core',\n mutagentPackage: '@mutagent/langchain',\n },\n '@ai-sdk/core': {\n name: 'vercel-ai',\n displayName: 'Vercel AI SDK',\n npmPackage: '@ai-sdk/core',\n mutagentPackage: '@mutagent/vercel-ai',\n },\n 'ai': {\n name: 'vercel-ai',\n displayName: 'Vercel AI SDK',\n npmPackage: 'ai',\n mutagentPackage: '@mutagent/vercel-ai',\n },\n '@google/genai': {\n name: 'generic',\n displayName: 'Google GenAI',\n npmPackage: '@google/genai',\n },\n 'openai': {\n name: 'openai',\n displayName: 'OpenAI SDK',\n npmPackage: 'openai',\n mutagentPackage: '@mutagent/openai',\n },\n};\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Detect the package manager by scanning lockfiles in cwd\n */\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManager {\n if (existsSync(join(cwd, 'bun.lockb')) || existsSync(join(cwd, 'bun.lock'))) {\n return 'bun';\n }\n if (existsSync(join(cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (existsSync(join(cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n if (existsSync(join(cwd, 'package-lock.json'))) {\n return 'npm';\n }\n\n // Fallback: check if bun is available\n try {\n execSync('bun --version', { stdio: 'ignore' });\n return 'bun';\n } catch {\n return 'npm';\n }\n}\n\n/**\n * Build an install command for the given package manager and packages\n */\nexport function getInstallCommand(pm: PackageManager, packages: string[]): string {\n const pkgList = packages.join(' ');\n const commands: Record<PackageManager, string> = {\n bun: `bun add ${pkgList}`,\n npm: `npm install ${pkgList}`,\n yarn: `yarn add ${pkgList}`,\n pnpm: `pnpm add ${pkgList}`,\n };\n return commands[pm];\n}\n\n/**\n * Detect framework from package.json dependencies in cwd\n */\nexport function detectFrameworkFromPackageJson(cwd: string = process.cwd()): FrameworkDetection | null {\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n return null;\n }\n\n let pkg: { dependencies?: Record<string, string>; devDependencies?: Record<string, string> };\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as typeof pkg;\n } catch {\n return null;\n }\n\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n // Check detection map in order (more specific first)\n for (const [depName, framework] of Object.entries(FRAMEWORK_DETECTION_MAP)) {\n if (depName in allDeps) {\n return framework;\n }\n }\n\n return null;\n}\n\n/**\n * Check if .mutagentrc.json already exists in cwd\n */\nexport function hasRcConfig(cwd: string = process.cwd()): boolean {\n return existsSync(join(cwd, '.mutagentrc.json'));\n}\n\n/**\n * Write .mutagentrc.json to cwd\n */\nfunction writeRcConfig(config: MutagentRcConfig, cwd: string = process.cwd()): void {\n const rcPath = join(cwd, '.mutagentrc.json');\n writeFileSync(rcPath, JSON.stringify(config, null, 2) + '\\n');\n}\n\n// =============================================================================\n// Init Command\n// =============================================================================\n\nexport function createInitCommand(): Command {\n const init = new Command('init')\n .description('Initialize MutagenT in your project')\n .option('--non-interactive', 'Skip interactive prompts (defaults to CLI-only mode)')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent init # Interactive setup wizard\n ${chalk.dim('$')} mutagent init --non-interactive # CLI-only mode (no prompts)\n\nModes:\n ${chalk.bold('Full scaffold')} Install SDK + integration package, create config, setup tracing\n ${chalk.bold('CLI-only')} Verify auth + create .mutagentrc.json with workspace/endpoint\n ${chalk.bold('Skip')} Exit without changes\n `)\n .action(async (options: InitOptions) => {\n const isJson = getJsonFlag(init);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const isNonInteractive =\n options.nonInteractive === true ||\n process.env.MUTAGENT_NON_INTERACTIVE === 'true' ||\n process.env.CI === 'true' ||\n !process.stdin.isTTY;\n\n const cwd = process.cwd();\n\n // Step 1: Check existing config\n if (hasRcConfig(cwd)) {\n output.warn('.mutagentrc.json already exists in this directory.');\n if (isNonInteractive) {\n output.info('Use --force to overwrite (not yet supported). Exiting.');\n return;\n }\n const { overwrite } = await inquirer.prompt<{ overwrite: boolean }>([{\n type: 'confirm',\n name: 'overwrite',\n message: '.mutagentrc.json already exists. Overwrite?',\n default: false,\n }]);\n if (!overwrite) {\n output.info('Init cancelled.');\n return;\n }\n }\n\n // Step 2: Check auth\n const authenticated = hasCredentials();\n if (!authenticated) {\n output.warn('Not authenticated.');\n output.info('Run: mutagent auth login --browser');\n if (isNonInteractive) {\n throw new MutagentError(\n 'AUTH_REQUIRED',\n 'Authentication required before init',\n 'Run: mutagent auth login --browser'\n );\n }\n const { doAuth } = await inquirer.prompt<{ doAuth: boolean }>([{\n type: 'confirm',\n name: 'doAuth',\n message: 'Would you like to authenticate now?',\n default: true,\n }]);\n if (doAuth) {\n output.info('Run \"mutagent auth login --browser\" and then re-run \"mutagent init\".');\n return;\n }\n }\n\n // Step 3: Detect framework\n const detectedFramework = detectFrameworkFromPackageJson(cwd);\n\n // Step 4: Determine mode\n let mode: InitMode;\n let confirmedFramework: FrameworkDetection | null = detectedFramework;\n\n if (isNonInteractive) {\n mode = 'cli-only';\n if (isJson) {\n output.output({\n mode: 'cli-only',\n nonInteractive: true,\n detectedFramework: detectedFramework?.name ?? null,\n });\n }\n } else {\n // Show detected framework\n if (detectedFramework) {\n output.info(`Detected framework: ${detectedFramework.displayName} (${detectedFramework.npmPackage})`);\n\n const { confirmFramework } = await inquirer.prompt<{ confirmFramework: boolean }>([{\n type: 'confirm',\n name: 'confirmFramework',\n message: `Use ${detectedFramework.displayName}?`,\n default: true,\n }]);\n\n if (!confirmFramework) {\n const frameworkChoices = [\n { name: 'Mastra', value: 'mastra' },\n { name: 'LangChain', value: 'langchain' },\n { name: 'LangGraph', value: 'langgraph' },\n { name: 'Vercel AI SDK', value: 'vercel-ai' },\n { name: 'OpenAI SDK', value: 'openai' },\n { name: 'Generic (OpenAI-compatible)', value: 'generic' },\n { name: 'None / Skip framework', value: 'none' },\n ];\n\n const { selectedFramework } = await inquirer.prompt<{ selectedFramework: string }>([{\n type: 'list',\n name: 'selectedFramework',\n message: 'Select your AI framework:',\n choices: frameworkChoices,\n }]);\n\n if (selectedFramework === 'none') {\n confirmedFramework = null;\n } else {\n // Find framework in detection map by name\n const entry = Object.values(FRAMEWORK_DETECTION_MAP).find(f => f.name === selectedFramework);\n confirmedFramework = entry ?? null;\n }\n }\n } else {\n output.info('No AI framework detected in package.json.');\n }\n\n // Ask mode\n const modeChoices = [\n ...(confirmedFramework?.mutagentPackage ? [{\n name: `Full scaffold - Install @mutagent/sdk + ${confirmedFramework.mutagentPackage}, create config, setup tracing`,\n value: 'full' as const,\n }] : []),\n {\n name: 'CLI-only - Verify auth + create .mutagentrc.json config',\n value: 'cli-only' as const,\n },\n {\n name: 'Skip - Exit without changes',\n value: 'skip' as const,\n },\n ];\n\n const { selectedMode } = await inquirer.prompt<{ selectedMode: InitMode }>([{\n type: 'list',\n name: 'selectedMode',\n message: 'How would you like to initialize MutagenT?',\n choices: modeChoices,\n }]);\n\n mode = selectedMode;\n }\n\n // Step 5: Execute based on mode\n if (mode === 'skip') {\n output.info('Init skipped.');\n return;\n }\n\n // Load config for workspace/endpoint\n const config = loadConfig();\n const endpoint = config.endpoint ?? 'https://api.mutagent.io';\n const workspace = config.defaultWorkspace;\n\n const rcConfig: MutagentRcConfig = {\n endpoint,\n ...(workspace ? { workspace } : {}),\n ...(confirmedFramework ? { framework: confirmedFramework.name } : {}),\n };\n\n if (mode === 'full' && confirmedFramework?.mutagentPackage) {\n // Full scaffold: install packages + create config\n const pm = detectPackageManager(cwd);\n const packages = ['@mutagent/sdk', confirmedFramework.mutagentPackage];\n const installCmd = getInstallCommand(pm, packages);\n\n output.info(`Installing: ${packages.join(', ')}`);\n output.info(`Running: ${installCmd}`);\n\n try {\n execSync(installCmd, { cwd, stdio: 'inherit' });\n output.success('Packages installed successfully.');\n } catch {\n output.error('Package installation failed. You can install manually:');\n output.info(` ${installCmd}`);\n }\n\n // Write config\n writeRcConfig(rcConfig, cwd);\n output.success('Created .mutagentrc.json');\n\n // Print next steps\n console.log('');\n output.info('Next steps:');\n output.info(` 1. Run: mutagent integrate ${confirmedFramework.name}`);\n output.info(' 2. Follow the integration guide to add tracing to your code');\n output.info(' 3. Run: mutagent traces list (to verify traces are arriving)');\n } else {\n // CLI-only mode: just create config\n writeRcConfig(rcConfig, cwd);\n output.success('Created .mutagentrc.json');\n\n if (!authenticated) {\n output.info('Next: mutagent auth login --browser');\n } else {\n output.info('Ready! Run \"mutagent --help\" to see available commands.');\n }\n }\n\n // JSON summary\n if (isJson) {\n output.output({\n success: true,\n mode,\n configFile: '.mutagentrc.json',\n config: rcConfig,\n framework: confirmedFramework?.name ?? null,\n authenticated,\n });\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return init;\n}\n",
37
+ "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { resolve } from 'path';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\nimport { handleError } from '../lib/errors.js';\nimport { MutationContext } from '../lib/mutation-context.js';\nimport {\n exploreCodebase,\n parseExtensions,\n parseExcludeDirs,\n} from '../lib/explorer.js';\nimport type { ExploreOptions } from '../lib/explorer.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ExploreCommandOptions {\n path?: string;\n depth?: string;\n include?: string;\n exclude?: string;\n markersOnly?: boolean;\n}\n\n// =============================================================================\n// Command\n// =============================================================================\n\nexport function createExploreCommand(): Command {\n const explore = new Command('explore')\n .description('Scan codebase for prompts, datasets, and MutagenT markers')\n .option('-p, --path <dir>', 'Directory to scan', '.')\n .option('--depth <n>', 'Max directory depth', '10')\n .option('--include <glob>', 'Include file pattern', '**/*.{ts,js,py,tsx,jsx}')\n .option('--exclude <dirs>', 'Comma-separated directories to exclude', 'node_modules,dist,.git,build,.next,__pycache__,venv,.venv')\n .option('--markers-only', 'Only find existing MutagenT markers')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent explore\n ${chalk.dim('$')} mutagent explore --path ./src\n ${chalk.dim('$')} mutagent explore --include \"**/*.{ts,py}\" --depth 5\n ${chalk.dim('$')} mutagent explore --markers-only\n ${chalk.dim('$')} mutagent explore --json\n\nDetection modes:\n ${chalk.dim('Heuristic')} Template variables ({{var}}), prompt constants, schema definitions\n ${chalk.dim('Marker')} MutagenT:START/END comment markers from previous uploads\n\n${chalk.dim('Results are saved to .mutagent/mutation-context.md for use by other commands.')}\n `)\n .action((options: ExploreCommandOptions) => {\n const isJson = getJsonFlag(explore);\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n try {\n const scanPath = resolve(options.path ?? '.');\n const depth = parseInt(options.depth ?? '10', 10);\n const extensions = parseExtensions(options.include ?? '**/*.{ts,js,py,tsx,jsx}');\n const excludeDirs = parseExcludeDirs(options.exclude ?? 'node_modules,dist,.git,build,.next,__pycache__,venv,.venv');\n const markersOnly = options.markersOnly ?? false;\n\n const exploreOpts: ExploreOptions = {\n path: scanPath,\n depth,\n extensions,\n excludeDirs,\n markersOnly,\n };\n\n if (!isJson) {\n console.log(chalk.cyan(`\\nScanning ${scanPath}...\\n`));\n }\n\n const result = exploreCodebase(exploreOpts);\n\n // Save results to mutation context\n const ctx = MutationContext.load(scanPath);\n\n for (const prompt of result.prompts) {\n ctx.addDiscoveredPrompt(prompt.file, prompt.line, prompt.preview);\n }\n\n for (const dataset of result.datasets) {\n ctx.addDiscoveredDataset(dataset.file, dataset.name, dataset.items);\n }\n\n ctx.save();\n\n // Output results\n if (isJson) {\n output.output({\n prompts: result.prompts,\n datasets: result.datasets,\n markers: result.markers,\n summary: {\n totalPrompts: result.prompts.length,\n totalDatasets: result.datasets.length,\n totalMarkers: result.markers.length,\n },\n contextFile: '.mutagent/mutation-context.md',\n });\n } else {\n // Summary header\n const totalFindings = result.prompts.length + result.datasets.length + result.markers.length;\n\n if (totalFindings === 0) {\n output.info('No prompts, datasets, or markers found.');\n console.log(chalk.dim('\\n Tip: Create a prompt with template variables like {{input}} to get started.'));\n return;\n }\n\n // Prompts table\n if (result.prompts.length > 0) {\n console.log(chalk.bold(` Prompts Found (${String(result.prompts.length)}):`));\n console.log();\n for (const p of result.prompts) {\n const reasonTag = chalk.dim(`[${p.reason}]`);\n console.log(` ${chalk.green(p.file)}:${chalk.yellow(String(p.line))} ${reasonTag}`);\n console.log(` ${chalk.dim(p.preview)}`);\n }\n console.log();\n }\n\n // Datasets table\n if (result.datasets.length > 0) {\n console.log(chalk.bold(` Datasets Found (${String(result.datasets.length)}):`));\n console.log();\n for (const d of result.datasets) {\n console.log(` ${chalk.green(d.file)} ${chalk.dim(`(${String(d.items)} items)`)}`);\n }\n console.log();\n }\n\n // Markers table\n if (result.markers.length > 0) {\n console.log(chalk.bold(` MutagenT Markers (${String(result.markers.length)}):`));\n console.log();\n for (const m of result.markers) {\n const idPart = m.platformId ? chalk.cyan(` id=${m.platformId}`) : '';\n console.log(` ${chalk.green(m.file)}:${chalk.yellow(String(m.line))} ${chalk.magenta(m.type)}${idPart}`);\n }\n console.log();\n }\n\n // Summary\n console.log(chalk.dim(' ─────────────────────────────────'));\n console.log(` ${chalk.bold('Summary:')} ${String(result.prompts.length)} prompts, ${String(result.datasets.length)} datasets, ${String(result.markers.length)} markers`);\n console.log(chalk.dim(` Saved to .mutagent/mutation-context.md`));\n console.log();\n }\n } catch (error) {\n handleError(error, isJson);\n }\n });\n\n return explore;\n}\n",
38
+ "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { OutputFormatter, getJsonFlag } from '../lib/output.js';\n\n// =============================================================================\n// Skill Template\n// =============================================================================\n\nconst SKILL_FRONTMATTER = `---\nname: mutagent-cli\ndescription: |\n MutagenT CLI - AI Prompt Optimization Platform CLI.\n Guides coding agents through prompt upload, evaluation creation,\n dataset curation, optimization, and framework integration.\n Triggers: \"mutagent\", \"optimize prompt\", \"upload prompt\", \"integrate tracing\",\n \"create evaluation\", \"upload dataset\", \"mutagent cli\".\n---`;\n\nconst SKILL_BODY = `# MutagenT CLI Skill\n\n## Quick Reference\nRun \\`mutagent --help\\` for full command list and examples.\n\n## Post-Onboarding Decision Tree\n\nAfter \\`mutagent auth login\\`, the user lands in one of 3 paths:\n\n### Path A: Guided Integration (Tracing)\n1. \\`mutagent explore\\` — Map codebase, discover prompts/agents\n2. User selects framework from detected or asks\n3. \\`mutagent integrate <framework>\\` — Get integration instructions\n4. Apply tracing code to user's codebase\n5. Verify with test run\n\n### Path B: Free-flow Optimization\n1. \\`mutagent explore\\` — Map codebase, discover prompts\n2. User selects prompts to upload\n3. \\`mutagent prompts create --data '{...}'\\` — Upload with REQUIRED outputSchema\n4. Guided eval creator OR \\`mutagent prompts evaluation create\\`\n5. \\`mutagent prompts dataset add\\` — Upload/curate datasets (named)\n6. \\`mutagent prompts optimize start\\` — Run optimization\n7. Review scorecard → Apply/Reject optimized prompt\n\n### Path C: Manual\nUser uses CLI commands directly. Run \\`mutagent --help\\`.\n\n## State Tracking\n- \\`.mutagent/mutation-context.md\\` — Local context file tracking all uploads\n- \\`mutagent auth status\\` — Shows onboarding completion + integration state\n- Comment markers (\\`// MutagenT:START ... // MutagenT:END\\`) in source files\n\n## Wireframe Templates\n\n### Active Operation Status Card\n\\`\\`\\`\n┌─────────────────────────────────────────┐\n│ ⚡ MutagenT: Optimizing │\n│ ─────────────────────────────────────── │\n│ Prompt: \"email-summarizer\" (ID: 42) │\n│ Dataset: \"customer-emails\" (150 items) │\n│ Status: Running — Iteration 3/10 │\n│ Score: 0.72 → 0.85 (+18%) │\n│ ████████████░░░░░░░░ 60% │\n│ │\n│ 🔗 View: https://app.mutagent.io/... │\n└─────────────────────────────────────────┘\n\\`\\`\\`\n\n### Optimization Scorecard\n\\`\\`\\`\n┌─────────────────────────────────────────┐\n│ 📊 Optimization Results │\n│ ─────────────────────────────────────── │\n│ BEFORE │\n│ System: \"You are a helpful...\" │\n│ Score: 0.62 │\n│ │\n│ AFTER │\n│ System: \"You are an expert...\" │\n│ Score: 0.91 (+47%) │\n│ │\n│ Iterations: 5 | Best: #4 │\n│ ─────────────────────────────────────── │\n│ Score Progression: │\n│ #1: 0.62 #2: 0.71 #3: 0.78 │\n│ #4: 0.91 #5: 0.89 │\n│ │\n│ [Apply] [Reject] [View Details] │\n│ │\n│ 🔗 Dashboard: https://app.mutagent... │\n│ 🔗 Optimizer: https://app.mutagent... │\n└─────────────────────────────────────────┘\n\\`\\`\\`\n\n## Evaluation Criteria Reminder\nEvery evaluation MUST specify criteria targeting either:\n- Input variable fields (from inputSchema)\n- Output fields (from outputSchema / structured output)`;\n\n// =============================================================================\n// Skills Command\n// =============================================================================\n\nconst SKILL_DIR = '.claude/skills/mutagent-cli';\nconst SKILL_FILE = 'SKILL.md';\n\nexport function createSkillsCommand(): Command {\n const skills = new Command('skills')\n .description('Manage MutagenT CLI skills for coding agents');\n\n skills\n .command('install')\n .description('Install MutagenT CLI skill for Claude Code')\n .addHelpText('after', `\nExamples:\n ${chalk.dim('$')} mutagent skills install\n\nThis creates a Claude Code skill at .claude/skills/mutagent-cli/SKILL.md\nthat teaches coding agents how to use the MutagenT CLI effectively.\n `)\n .action((_options: Record<string, unknown>, cmd: Command) => {\n const parentCmd = cmd.parent?.parent;\n const isJson = parentCmd ? getJsonFlag(parentCmd) : false;\n const output = new OutputFormatter(isJson ? 'json' : 'table');\n\n const skillDir = join(process.cwd(), SKILL_DIR);\n const skillPath = join(skillDir, SKILL_FILE);\n\n // Create directory if needed\n if (!existsSync(skillDir)) {\n mkdirSync(skillDir, { recursive: true });\n }\n\n // Write the skill file\n const content = `${SKILL_FRONTMATTER}\\n\\n${SKILL_BODY}\\n`;\n writeFileSync(skillPath, content, 'utf-8');\n\n if (isJson) {\n output.output({\n installed: true,\n path: skillPath,\n name: 'mutagent-cli',\n });\n } else {\n output.success(`Installed MutagenT CLI skill`);\n console.log(` ${chalk.dim('Path:')} ${skillPath}`);\n console.log('');\n console.log(` ${chalk.dim('This skill teaches coding agents how to use the MutagenT CLI.')}`);\n console.log(` ${chalk.dim('It will be automatically loaded by Claude Code when relevant triggers match.')}`);\n }\n });\n\n return skills;\n}\n"
32
39
  ],
33
- "mappings": "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",
34
- "debugId": "EDFE2E68EFA4B20A64756E2164756E21",
40
+ "mappings": "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",
41
+ "debugId": "769CE1E3092A705664756E2164756E21",
35
42
  "names": []
36
43
  }