UNPKG

rawi

Version:

Rawi (راوي) is the developer-friendly AI CLI that brings the power of 11 major AI providers directly to your terminal. With seamless shell integration, persistent conversations, and 200+ specialized prompt templates, Rawi transforms your command line into

1 lines 20.3 kB
{"version":3,"sources":["/home/mkabumattar/work/withrawi/rawi/dist/chunk-RTOSUPNZ.cjs","../src/cli/commands/configure.command.ts"],"names":["createConfigureCommand","command","Command","chalk","options","configManager","ConfigManager","profiles","profile"],"mappings":"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","file":"/home/mkabumattar/work/withrawi/rawi/dist/chunk-RTOSUPNZ.cjs","sourcesContent":[null,"import chalk from 'chalk';\nimport {Command} from 'commander';\nimport {ConfigManager} from '../../core/configs/managers/config.manager.js';\nimport type {\n AnthropicSettings,\n AzureSettings,\n BedrockSettings,\n CerebrasSettings,\n ConfigureOptions,\n DeepSeekSettings,\n GoogleSettings,\n LMStudioSettings,\n MistralSettings,\n OllamaSettings,\n OpenAISettings,\n RawiCredentials,\n SupportedLanguage,\n XAISettings,\n} from '../../core/shared/types.js';\n\nexport const createConfigureCommand = (): Command => {\n const command = new Command('configure');\n\n command\n .description(\n [\n chalk.bold('Configure AI provider settings and manage profiles.'),\n '',\n chalk.gray(\n 'Set up providers, models, credentials, and advanced options.',\n ),\n chalk.gray('Supports interactive and manual configuration.'),\n chalk.gray('Use --list to see all profiles, --show for details.'),\n '─'.repeat(80),\n ].join('\\n'),\n )\n .option(\n '-p, --profile <profile>',\n chalk.white('Profile name to configure'),\n 'default',\n )\n .option(\n '--provider <provider>',\n chalk.white(\n 'AI provider (openai, anthropic, google, ollama, xai, azure, bedrock, deepseek, mistral, cerebras, lmstudio)',\n ),\n )\n .option('--model <model>', chalk.white('AI model name'))\n .option(\n '--api-key <apiKey>',\n chalk.white('API key for the provider (not needed for Ollama)'),\n )\n .option(\n '--base-url <baseURL>',\n chalk.white('Base URL for provider API (see docs for defaults)'),\n )\n .option(\n '--resource-name <resourceName>',\n chalk.white('Resource name for Azure OpenAI (required for Azure)'),\n )\n .option(\n '--api-version <apiVersion>',\n chalk.white('API version for Azure OpenAI (default: 2024-10-01-preview)'),\n )\n .option(\n '--region <region>',\n chalk.white('AWS region for Amazon Bedrock (default: us-east-1)'),\n )\n .option(\n '--access-key-id <accessKeyId>',\n chalk.white('AWS access key ID for Amazon Bedrock'),\n )\n .option(\n '--secret-access-key <secretAccessKey>',\n chalk.white('AWS secret access key for Amazon Bedrock'),\n )\n .option(\n '--session-token <sessionToken>',\n chalk.white('AWS session token for Amazon Bedrock (optional)'),\n )\n .option(\n '--use-provider-chain',\n chalk.white(\n 'Use AWS credential provider chain instead of explicit credentials',\n ),\n )\n .option(\n '--temperature <temperature>',\n chalk.white('Sampling temperature (0-2, higher = more creative)'),\n Number.parseFloat,\n )\n .option(\n '--max-tokens <maxTokens>',\n chalk.white('Maximum tokens for response'),\n Number.parseInt,\n )\n .option(\n '--language <language>',\n chalk.white('Language (english, arabic)'),\n 'english',\n )\n .option(\n '-s, --show',\n chalk.white('Show current configuration for the selected profile'),\n )\n .option('-l, --list', chalk.white('List all configuration profiles'))\n .option(\n '-d, --delete <profile>',\n chalk.white('Delete a configuration profile'),\n )\n .addHelpText(\n 'after',\n [\n chalk.bold.cyan('\\nSee also:'),\n chalk.gray(' rawi provider --list'),\n chalk.gray(' rawi act --list'),\n chalk.gray(' rawi ask --profile <profile>'),\n chalk.gray(' rawi configure --show --profile <profile>'),\n '',\n chalk.dim('For more examples, see: docs/configuration.md'),\n ].join('\\n'),\n )\n .action(async (options) => {\n const configManager = new ConfigManager();\n\n try {\n if (options.show) {\n configManager.showConfig(\n options.profile === 'default' ? undefined : options.profile,\n );\n return;\n }\n\n if (options.list) {\n const profiles = configManager.listProfiles();\n if (profiles.length === 0) {\n console.log(chalk.yellow('No configuration profiles found.'));\n return;\n }\n console.log(chalk.bold('Available profiles:'));\n profiles.forEach((profile) => {\n console.log(` - ${profile}`);\n return;\n });\n return;\n }\n\n if (options.delete) {\n const success = configManager.deleteProfile(options.delete);\n if (success) {\n console.log(\n chalk.green(`Profile '${options.delete}' deleted successfully.`),\n );\n } else {\n console.log(\n chalk.red(`Failed to delete profile '${options.delete}'.`),\n );\n }\n return;\n }\n\n if (options.language) {\n const validLanguages: SupportedLanguage[] = ['english', 'arabic'];\n if (!validLanguages.includes(options.language as SupportedLanguage)) {\n console.error(chalk.red(`Invalid language: ${options.language}`));\n console.log(\n chalk.yellow('Available languages:'),\n validLanguages.join(', '),\n );\n return;\n }\n }\n\n const configureOptions: ConfigureOptions = {\n profile: options.profile,\n provider: options.provider,\n model: options.model,\n apiKey: options.apiKey,\n baseURL: options.baseUrl,\n resourceName: options.resourceName,\n apiVersion: options.apiVersion,\n region: options.region,\n accessKeyId: options.accessKeyId,\n secretAccessKey: options.secretAccessKey,\n sessionToken: options.sessionToken,\n useProviderChain: options.useProviderChain,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n language: options.language as SupportedLanguage,\n };\n\n if (options.provider) {\n let requiredOptions: boolean;\n let credentials: RawiCredentials;\n\n if (options.provider === 'ollama') {\n requiredOptions = Boolean(options.model);\n\n const providerSettings: OllamaSettings = {};\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings:\n Object.keys(providerSettings).length > 0\n ? providerSettings\n : undefined,\n };\n } else if (options.provider === 'azure') {\n requiredOptions = Boolean(\n options.provider &&\n options.model &&\n options.apiKey &&\n options.resourceName,\n );\n\n if (!requiredOptions) {\n if (!options.model) {\n console.error(\n 'For Azure, you must specify your deployment name using --model',\n );\n }\n if (!options.resourceName) {\n console.error(\n 'For Azure, you must specify your resource name using --resource-name',\n );\n }\n if (!options.apiKey) {\n console.error(\n 'For Azure, you must specify your API key using --api-key',\n );\n }\n }\n\n const providerSettings: AzureSettings = {\n resourceName: options.resourceName,\n };\n\n if (options.apiVersion) {\n providerSettings.apiVersion = options.apiVersion;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n apiKey: options.apiKey,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings: providerSettings,\n };\n } else if (options.provider === 'bedrock') {\n const hasExplicitCredentials = Boolean(\n options.accessKeyId && options.secretAccessKey,\n );\n const hasProviderChain = Boolean(options.useProviderChain);\n\n requiredOptions = Boolean(\n options.provider &&\n options.model &&\n (hasExplicitCredentials || hasProviderChain),\n );\n\n if (!requiredOptions) {\n if (!options.model) {\n console.error(\n 'For Bedrock, you must specify a model using --model',\n );\n }\n if (!hasExplicitCredentials && !hasProviderChain) {\n console.error(\n 'For Bedrock, you must either:\\n' +\n ' - Provide explicit credentials: --access-key-id and --secret-access-key\\n' +\n ' - Use provider chain: --use-provider-chain',\n );\n }\n }\n\n const providerSettings: BedrockSettings = {};\n\n if (options.region) {\n providerSettings.region = options.region;\n }\n\n if (hasProviderChain) {\n providerSettings.useProviderChain = true;\n } else if (hasExplicitCredentials) {\n providerSettings.accessKeyId = options.accessKeyId;\n providerSettings.secretAccessKey = options.secretAccessKey;\n if (options.sessionToken) {\n providerSettings.sessionToken = options.sessionToken;\n }\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings:\n Object.keys(providerSettings).length > 0\n ? providerSettings\n : undefined,\n };\n } else if (options.provider === 'xai') {\n requiredOptions = Boolean(options.model && options.apiKey);\n\n const providerSettings: XAISettings = {\n apiKey: options.apiKey,\n };\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings: providerSettings,\n };\n } else if (options.provider === 'openai') {\n requiredOptions = Boolean(options.model && options.apiKey);\n\n const providerSettings: OpenAISettings = {\n apiKey: options.apiKey,\n };\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings: providerSettings,\n };\n } else if (options.provider === 'anthropic') {\n requiredOptions = Boolean(options.model && options.apiKey);\n\n const providerSettings: AnthropicSettings = {\n apiKey: options.apiKey,\n };\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings: providerSettings,\n };\n } else if (options.provider === 'google') {\n requiredOptions = Boolean(options.model && options.apiKey);\n\n const providerSettings: GoogleSettings = {\n apiKey: options.apiKey,\n };\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings: providerSettings,\n };\n } else if (options.provider === 'deepseek') {\n requiredOptions = Boolean(options.model && options.apiKey);\n\n const providerSettings: DeepSeekSettings = {\n apiKey: options.apiKey,\n };\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings: providerSettings,\n };\n } else if (options.provider === 'mistral') {\n requiredOptions = Boolean(options.model && options.apiKey);\n\n const providerSettings: MistralSettings = {\n apiKey: options.apiKey,\n };\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings: providerSettings,\n };\n } else if (options.provider === 'cerebras') {\n requiredOptions = Boolean(options.model && options.apiKey);\n\n const providerSettings: CerebrasSettings = {\n apiKey: options.apiKey,\n };\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n providerSettings: providerSettings,\n };\n } else if (options.provider === 'lmstudio') {\n requiredOptions = Boolean(options.model);\n\n const providerSettings: LMStudioSettings = {};\n if (options.baseUrl) {\n providerSettings.baseURL = options.baseUrl;\n }\n\n credentials = {\n provider: options.provider,\n model: options.model,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n };\n\n if (Object.keys(providerSettings).length > 0) {\n credentials.providerSettings = providerSettings;\n } else {\n credentials.providerSettings = undefined;\n }\n } else {\n requiredOptions = Boolean(\n options.provider && options.model && options.apiKey,\n );\n\n credentials = {\n provider: options.provider,\n model: options.model,\n apiKey: options.apiKey,\n temperature: options.temperature || 0.7,\n maxTokens: options.maxTokens || 2048,\n language: (options.language as SupportedLanguage) || 'english',\n };\n }\n\n if (requiredOptions) {\n configManager.manualConfigure(credentials, options.profile);\n } else {\n await configManager.interactiveConfigure(configureOptions);\n }\n } else {\n await configManager.interactiveConfigure(configureOptions);\n }\n } catch (error) {\n console.error('Configuration failed:', error);\n process.exit(1);\n }\n });\n\n return command;\n};\n"]}