{"version":3,"sources":["/home/mkabumattar/work/withrawi/rawi/dist/chunk-6UQYRNYT.cjs","../src/cli/commands/exec/actions/index.ts"],"names":["validateCredentials","profile","credentials","ConfigManager","error"],"mappings":"AAAA;AACA,wDAA+C,wDAAgD,wDAAyC,wDAAyC,wDAAyC,gECD3M,4CACK,4EACF,MAclB,SAAsBA,CAAAA,CACpBC,CAAAA,CAC6C,CAC7C,GAAI,CAEF,IAAMC,CAAAA,CADgB,IAAIC,wBAAAA,CAAc,CAAA,CACN,cAAA,CAAeF,CAAO,CAAA,CAExD,OAAKC,CAAAA,CAOD,CAACA,CAAAA,CAAY,QAAA,EAAY,CAACA,CAAAA,CAAY,KAAA,CACjC,CACL,OAAA,CAAS,CAAA,CAAA,CACT,KAAA,CAAO,CAAA,iCAAA,EAAoCD,CAAO,CAAA,6BAAA,CACpD,CAAA,CAGK,CAAC,OAAA,CAAS,CAAA,CAAI,CAAA,CAbZ,CACL,OAAA,CAAS,CAAA,CAAA,CACT,KAAA,CAAO,CAAA,kCAAA,EAAqCA,CAAO,CAAA,CAAA,CACrD,CAWJ,CAAA,KAAA,CAASG,CAAAA,CAAO,CACd,MAAO,CACL,OAAA,CAAS,CAAA,CAAA,CACT,KAAA,CAAO,CAAA,gCAAA,EAAmCA,EAAAA,WAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,CAAC,CAAA,CAAA;AA2JxD;AAAA;AACA;AAAA;AAAA;AA8C9C;AD3OgpB","file":"/home/mkabumattar/work/withrawi/rawi/dist/chunk-6UQYRNYT.cjs","sourcesContent":[null,"import os from 'node:os';\nimport {input} from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport {ConfigManager} from '../../../../core/configs/managers/config.manager.js';\nimport type {DatabaseManager} from '../../../../core/database/manager.js';\nimport {\n  executeCommand,\n  formatExecutionResult,\n  generateCommand,\n  validateCommand,\n} from '../../../../core/exec/index.js';\nimport {createConfirmationPrompt} from '../../../../core/exec/prompts.js';\nimport {DEFAULT_PROFILE} from '../../../../core/shared/constants.js';\nimport type {RawiCredentials} from '../../../../core/shared/index.js';\nimport type {ExecOptions, ExecResult} from '../types.js';\n\nexport async function validateCredentials(\n  profile: string,\n): Promise<{isValid: boolean; error?: string}> {\n  try {\n    const configManager = new ConfigManager();\n    const credentials = configManager.getCredentials(profile);\n\n    if (!credentials) {\n      return {\n        isValid: false,\n        error: `No credentials found for profile '${profile}'`,\n      };\n    }\n\n    if (!credentials.provider || !credentials.model) {\n      return {\n        isValid: false,\n        error: `Invalid credentials for profile '${profile}' - missing provider or model`,\n      };\n    }\n\n    return {isValid: true};\n  } catch (error) {\n    return {\n      isValid: false,\n      error: `Failed to validate credentials: ${error instanceof Error ? error.message : String(error)}`,\n    };\n  }\n}\n\nexport async function validateProfile(\n  profile: string,\n): Promise<{isValid: boolean; error?: string}> {\n  try {\n    const configManager = new ConfigManager();\n    const credentials = configManager.getCredentials(profile);\n\n    if (!credentials) {\n      return {\n        isValid: false,\n        error: `Profile '${profile}' not found. Run 'rawi configure --profile ${profile}' to set it up.`,\n      };\n    }\n\n    return {isValid: true};\n  } catch (error) {\n    return {\n      isValid: false,\n      error: `Failed to validate profile: ${error instanceof Error ? error.message : String(error)}`,\n    };\n  }\n}\n\nexport async function getProviderCredentials(\n  profile: string,\n): Promise<RawiCredentials> {\n  const configManager = new ConfigManager();\n  const credentials = configManager.getCredentials(profile);\n\n  if (!credentials) {\n    throw new Error(\n      `No credentials found for profile '${profile}'. Run 'rawi configure --profile ${profile}' to set it up.`,\n    );\n  }\n\n  if (!credentials.provider || !credentials.model) {\n    throw new Error(\n      `Invalid credentials for profile '${profile}' - missing provider or model`,\n    );\n  }\n\n  return credentials;\n}\n\nexport async function processExecCommand(\n  description: string,\n  options: ExecOptions,\n): Promise<ExecResult> {\n  console.log(chalk.dim('🤖 Generating command...'));\n\n  const credentials = await getProviderCredentials(\n    options.profile || DEFAULT_PROFILE,\n  );\n\n  if (options.verbose) {\n    console.log(chalk.dim(`🔧 Using provider: ${credentials.provider}`));\n    console.log(chalk.dim(`🤖 Using model: ${credentials.model}`));\n    console.log(\n      chalk.dim(`💻 OS: ${os.platform()} ${os.release()} (${os.type()})`),\n    );\n  }\n\n  const generated = await generateCommand({\n    credentials,\n    description,\n    timeout: options.timeout ? Number(options.timeout) : undefined,\n  });\n\n  console.log(chalk.cyan(`🤖 Generated command: ${generated.command}`));\n\n  const validation = validateCommand(generated.command);\n\n  if (!validation.isValid) {\n    throw new Error(\n      `Invalid command generated: ${validation.warnings.join(', ')}`,\n    );\n  }\n\n  if (validation.warnings.length > 0) {\n    console.log(chalk.yellow('⚠️ Warnings:'));\n    for (const warning of validation.warnings) {\n      console.log(chalk.yellow(`  - ${warning}`));\n    }\n  }\n\n  if ((validation.isDangerous || options.confirm) && !options.dryRun) {\n    const shouldProceed = await input({\n      message: createConfirmationPrompt(generated.command),\n      default: 'N',\n    });\n\n    if (\n      shouldProceed.toLowerCase() !== 'y' &&\n      shouldProceed.toLowerCase() !== 'yes'\n    ) {\n      console.log(chalk.yellow('❌ Command execution cancelled.'));\n      return {\n        command: generated.command,\n        stdout: undefined,\n        stderr: 'Execution cancelled by user',\n        exitCode: 1,\n        executionTime: 0,\n        success: false,\n      };\n    }\n  }\n\n  console.log(chalk.dim('⚡ Executing command...'));\n\n  const result = await executeCommand({\n    command: generated.command,\n    shell: options.shell,\n    cwd: options.workingDirectory,\n    timeout: options.timeout ? Number(options.timeout) : undefined,\n    dryRun: options.dryRun,\n    interactive: options.interactive,\n    copyCommand: options.copyCommand,\n  });\n\n  return result;\n}\n\nexport async function saveExecSession(\n  dbManager: DatabaseManager,\n  description: string,\n  result: ExecResult,\n  options: ExecOptions,\n): Promise<string> {\n  try {\n    const sessionId = await dbManager.createSession(\n      options.profile || DEFAULT_PROFILE,\n      `Exec: ${description}`,\n      'exec',\n    );\n\n    await dbManager.addMessage(\n      sessionId,\n      'user',\n      description,\n      'exec',\n      'command-generator',\n      undefined,\n      undefined,\n      {\n        type: 'exec_request',\n        timestamp: new Date().toISOString(),\n      },\n    );\n\n    const assistantContent = result.success\n      ? `Generated command: \\`${result.command}\\`\\n\\nExecution result:\\n${result.stdout || 'Command executed successfully'}`\n      : `Generated command: \\`${result.command}\\`\\n\\nExecution failed:\\n${result.stderr || 'Unknown error'}`;\n\n    await dbManager.addMessage(\n      sessionId,\n      'assistant',\n      assistantContent,\n      'exec',\n      'command-generator',\n      undefined,\n      undefined,\n      {\n        type: 'exec_result',\n        command: result.command,\n        success: result.success,\n        exitCode: result.exitCode,\n        executionTime: result.executionTime,\n        timestamp: new Date().toISOString(),\n      },\n    );\n\n    return sessionId;\n  } catch (error) {\n    console.error('Failed to save exec session to database:', error);\n    return `exec-${Date.now()}`;\n  }\n}\n\nexport async function displayExecResult(\n  result: ExecResult,\n  verbose: boolean,\n): Promise<void> {\n  if (verbose) {\n    console.log(formatExecutionResult(result));\n  } else {\n    if (result.success) {\n      console.log(chalk.green('✅ Command executed successfully'));\n      if (result.stdout) {\n        console.log(result.stdout);\n      }\n    } else {\n      console.log(chalk.red('❌ Command execution failed'));\n      if (result.stderr) {\n        console.error(result.stderr);\n      }\n    }\n  }\n}\n"]}