190 lines
4.6 KiB
JavaScript
190 lines
4.6 KiB
JavaScript
export function getPrompts(config) {
|
|
const prompts = [];
|
|
|
|
if (!config.name) {
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'name',
|
|
message: 'Project name:',
|
|
default: 'my-open-lovable',
|
|
validate: (input) => {
|
|
if (!input || input.trim() === '') {
|
|
return 'Project name is required';
|
|
}
|
|
if (!/^[a-z0-9-_]+$/i.test(input)) {
|
|
return 'Project name can only contain letters, numbers, hyphens, and underscores';
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
|
|
if (!config.sandbox) {
|
|
prompts.push({
|
|
type: 'list',
|
|
name: 'sandbox',
|
|
message: 'Choose your sandbox provider:',
|
|
choices: [
|
|
{
|
|
name: 'E2B - Full-featured development sandboxes',
|
|
value: 'e2b',
|
|
short: 'E2B'
|
|
},
|
|
{
|
|
name: 'Vercel - Lightweight ephemeral VMs',
|
|
value: 'vercel',
|
|
short: 'Vercel'
|
|
}
|
|
],
|
|
default: 'e2b'
|
|
});
|
|
}
|
|
|
|
prompts.push({
|
|
type: 'confirm',
|
|
name: 'configureEnv',
|
|
message: 'Would you like to configure API keys now?',
|
|
default: true
|
|
});
|
|
|
|
return prompts;
|
|
}
|
|
|
|
export function getEnvPrompts(provider) {
|
|
const prompts = [];
|
|
|
|
// Always include Firecrawl API key
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'firecrawlApiKey',
|
|
message: 'Firecrawl API key (for web scraping):',
|
|
validate: (input) => {
|
|
if (!input || input.trim() === '') {
|
|
return 'Firecrawl API key is required for web scraping functionality';
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
|
|
if (provider === 'e2b') {
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'e2bApiKey',
|
|
message: 'E2B API key:',
|
|
validate: (input) => {
|
|
if (!input || input.trim() === '') {
|
|
return 'E2B API key is required';
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
} else if (provider === 'vercel') {
|
|
prompts.push({
|
|
type: 'list',
|
|
name: 'vercelAuthMethod',
|
|
message: 'Vercel authentication method:',
|
|
choices: [
|
|
{
|
|
name: 'OIDC Token (automatic in Vercel environment)',
|
|
value: 'oidc',
|
|
short: 'OIDC'
|
|
},
|
|
{
|
|
name: 'Personal Access Token',
|
|
value: 'pat',
|
|
short: 'PAT'
|
|
}
|
|
]
|
|
});
|
|
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'vercelTeamId',
|
|
message: 'Vercel Team ID:',
|
|
when: (answers) => answers.vercelAuthMethod === 'pat',
|
|
validate: (input) => {
|
|
if (!input || input.trim() === '') {
|
|
return 'Team ID is required for PAT authentication';
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'vercelProjectId',
|
|
message: 'Vercel Project ID:',
|
|
when: (answers) => answers.vercelAuthMethod === 'pat',
|
|
validate: (input) => {
|
|
if (!input || input.trim() === '') {
|
|
return 'Project ID is required for PAT authentication';
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'vercelToken',
|
|
message: 'Vercel Access Token:',
|
|
when: (answers) => answers.vercelAuthMethod === 'pat',
|
|
validate: (input) => {
|
|
if (!input || input.trim() === '') {
|
|
return 'Access token is required for PAT authentication';
|
|
}
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
|
|
// Optional AI provider keys
|
|
prompts.push({
|
|
type: 'confirm',
|
|
name: 'addAiKeys',
|
|
message: 'Would you like to add AI provider API keys?',
|
|
default: true
|
|
});
|
|
|
|
prompts.push({
|
|
type: 'checkbox',
|
|
name: 'aiProviders',
|
|
message: 'Select AI providers to configure:',
|
|
when: (answers) => answers.addAiKeys,
|
|
choices: [
|
|
{ name: 'Anthropic (Claude)', value: 'anthropic' },
|
|
{ name: 'OpenAI (GPT)', value: 'openai' },
|
|
{ name: 'Google (Gemini)', value: 'gemini' },
|
|
{ name: 'Groq', value: 'groq' }
|
|
]
|
|
});
|
|
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'anthropicApiKey',
|
|
message: 'Anthropic API key:',
|
|
when: (answers) => answers.aiProviders && answers.aiProviders.includes('anthropic')
|
|
});
|
|
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'openaiApiKey',
|
|
message: 'OpenAI API key:',
|
|
when: (answers) => answers.aiProviders && answers.aiProviders.includes('openai')
|
|
});
|
|
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'geminiApiKey',
|
|
message: 'Gemini API key:',
|
|
when: (answers) => answers.aiProviders && answers.aiProviders.includes('gemini')
|
|
});
|
|
|
|
prompts.push({
|
|
type: 'input',
|
|
name: 'groqApiKey',
|
|
message: 'Groq API key:',
|
|
when: (answers) => answers.aiProviders && answers.aiProviders.includes('groq')
|
|
});
|
|
|
|
return prompts;
|
|
} |