mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-16 10:16:49 +00:00
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:
@@ -17,6 +17,8 @@ export interface ProviderPreset {
|
|||||||
apiKeyPlaceholder: string;
|
apiKeyPlaceholder: string;
|
||||||
apiKeyHint: string;
|
apiKeyHint: string;
|
||||||
category: PresetCategory;
|
category: PresetCategory;
|
||||||
|
/** Whether API key is required (false for local providers like Ollama) */
|
||||||
|
requiresApiKey?: boolean;
|
||||||
/** Additional env vars for thinking mode, etc. */
|
/** Additional env vars for thinking mode, etc. */
|
||||||
extraEnv?: Record<string, string>;
|
extraEnv?: Record<string, string>;
|
||||||
/** Enable always thinking mode */
|
/** Enable always thinking mode */
|
||||||
@@ -42,6 +44,7 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [
|
|||||||
apiKeyPlaceholder: 'sk-or-...',
|
apiKeyPlaceholder: 'sk-or-...',
|
||||||
apiKeyHint: 'Get your API key at openrouter.ai/keys',
|
apiKeyHint: 'Get your API key at openrouter.ai/keys',
|
||||||
category: 'recommended',
|
category: 'recommended',
|
||||||
|
requiresApiKey: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'ollama',
|
id: 'ollama',
|
||||||
@@ -53,6 +56,7 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [
|
|||||||
apiKeyPlaceholder: 'ollama',
|
apiKeyPlaceholder: 'ollama',
|
||||||
apiKeyHint: 'Install Ollama from ollama.com - no API key needed for local',
|
apiKeyHint: 'Install Ollama from ollama.com - no API key needed for local',
|
||||||
category: 'recommended',
|
category: 'recommended',
|
||||||
|
requiresApiKey: false,
|
||||||
},
|
},
|
||||||
// Alternative providers
|
// Alternative providers
|
||||||
{
|
{
|
||||||
@@ -152,6 +156,7 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [
|
|||||||
apiKeyPlaceholder: 'YOUR_OLLAMA_CLOUD_API_KEY',
|
apiKeyPlaceholder: 'YOUR_OLLAMA_CLOUD_API_KEY',
|
||||||
apiKeyHint: 'Get your API key at ollama.com',
|
apiKeyHint: 'Get your API key at ollama.com',
|
||||||
category: 'alternative',
|
category: 'alternative',
|
||||||
|
requiresApiKey: true,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -181,9 +181,15 @@ async function handleCreate(args: string[]): Promise<void> {
|
|||||||
console.log(dim('Note: For OpenRouter, ANTHROPIC_API_KEY should be empty.'));
|
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;
|
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';
|
const keyPrompt = preset?.apiKeyHint ? `API Key (${preset.apiKeyHint})` : 'API Key';
|
||||||
apiKey = await InteractivePrompt.password(keyPrompt);
|
apiKey = await InteractivePrompt.password(keyPrompt);
|
||||||
if (!apiKey) {
|
if (!apiKey) {
|
||||||
|
|||||||
Reference in New Issue
Block a user