fix(api): skip API key prompt for local Ollama preset

Local Ollama doesn't require an API key, but the CLI was still
prompting for one. This adds a `requiresApiKey` property to provider
presets to control whether the API key step is required.

- Add `requiresApiKey` property to ProviderPreset interface
- Set `requiresApiKey: false` for local Ollama (no key needed)
- Set `requiresApiKey: true` for OpenRouter and Ollama Cloud
- Skip API key prompt and show info message when not required

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Huynh Duc Dung
2026-01-22 17:21:50 +08:00
co-authored by Claude
parent c9604be5e1
commit ef2c8bba12
2 changed files with 13 additions and 2 deletions
+5
View File
@@ -17,6 +17,8 @@ export interface ProviderPreset {
apiKeyPlaceholder: string;
apiKeyHint: string;
category: PresetCategory;
/** Whether API key is required (false for local providers like Ollama) */
requiresApiKey?: boolean;
/** Additional env vars for thinking mode, etc. */
extraEnv?: Record<string, string>;
/** Enable always thinking mode */
@@ -42,6 +44,7 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [
apiKeyPlaceholder: 'sk-or-...',
apiKeyHint: 'Get your API key at openrouter.ai/keys',
category: 'recommended',
requiresApiKey: true,
},
{
id: 'ollama',
@@ -53,6 +56,7 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [
apiKeyPlaceholder: 'ollama',
apiKeyHint: 'Install Ollama from ollama.com - no API key needed for local',
category: 'recommended',
requiresApiKey: false,
},
// Alternative providers
{
@@ -152,6 +156,7 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [
apiKeyPlaceholder: 'YOUR_OLLAMA_CLOUD_API_KEY',
apiKeyHint: 'Get your API key at ollama.com',
category: 'alternative',
requiresApiKey: true,
},
];
+8 -2
View File
@@ -181,9 +181,15 @@ async function handleCreate(args: string[]): Promise<void> {
console.log(dim('Note: For OpenRouter, ANTHROPIC_API_KEY should be empty.'));
}
// Step 3: API Key
// Step 3: API Key (skip if preset doesn't require one)
let apiKey = parsedArgs.apiKey;
if (!apiKey) {
const requiresApiKey = preset?.requiresApiKey !== false;
if (!requiresApiKey) {
// Preset doesn't require API key (e.g., local Ollama)
console.log(info('No API key required for local Ollama'));
apiKey = ''; // Empty string for local providers
} else if (!apiKey) {
const keyPrompt = preset?.apiKeyHint ? `API Key (${preset.apiKeyHint})` : 'API Key';
apiKey = await InteractivePrompt.password(keyPrompt);
if (!apiKey) {