@syntero/orca-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,310 @@
1
+ #!/usr/bin/env node
2
+ import * as readline from 'readline';
3
+ import { createRequire } from 'module';
4
+ import updateNotifier from 'update-notifier';
5
+ import { Provider, loadSettings, saveSettings } from './settings.js';
6
+ import { createLLMClient, configureProvider, listAvailableModels, selectModel, } from './providers.js';
7
+ import { runAssistant } from './assistant.js';
8
+ import { Colors, color, promptInput, CancelledError } from './utils.js';
9
+ // Check for updates and auto-install if available
10
+ const require = createRequire(import.meta.url);
11
+ const pkg = require('../package.json');
12
+ const notifier = updateNotifier({ pkg, updateCheckInterval: 0 }); // Check every time
13
+ if (notifier.update && notifier.update.latest !== pkg.version) {
14
+ console.log(`Updating ${pkg.name} from ${pkg.version} to ${notifier.update.latest}...`);
15
+ const { execSync } = await import('child_process');
16
+ try {
17
+ execSync(`npm install -g ${pkg.name}@latest`, { stdio: 'inherit' });
18
+ console.log('Update complete. Please restart the application.\n');
19
+ process.exit(0);
20
+ }
21
+ catch {
22
+ console.log('Auto-update failed. Run manually: npm install -g ' + pkg.name);
23
+ }
24
+ }
25
+ /**
26
+ * Handle slash commands.
27
+ */
28
+ async function handleCommand(command, settings) {
29
+ const parts = command.trim().split(/\s+/);
30
+ const cmd = parts[0].toLowerCase();
31
+ const args = parts.slice(1).join(' ');
32
+ if (cmd === '/login') {
33
+ await configureProvider(settings);
34
+ return { handled: true, message: color('Configuration updated. Reconnecting...', Colors.green) };
35
+ }
36
+ if (cmd === '/settings') {
37
+ return { handled: true, message: `\n${settings.getMaskedDisplay()}\n` };
38
+ }
39
+ if (cmd === '/provider') {
40
+ const validProviders = [Provider.ANTHROPIC, Provider.OPENAI, Provider.AZURE];
41
+ if (validProviders.includes(args)) {
42
+ if (args === Provider.ANTHROPIC && !settings.anthropic.api_key) {
43
+ return {
44
+ handled: true,
45
+ message: color('Anthropic not configured. Run /login first.', Colors.yellow),
46
+ };
47
+ }
48
+ else if (args === Provider.OPENAI && !settings.openai.api_key) {
49
+ return {
50
+ handled: true,
51
+ message: color('OpenAI not configured. Run /login first.', Colors.yellow),
52
+ };
53
+ }
54
+ else if (args === Provider.AZURE && !settings.isConfigured()) {
55
+ return {
56
+ handled: true,
57
+ message: color('Azure not configured. Run /login first.', Colors.yellow),
58
+ };
59
+ }
60
+ settings.provider = args;
61
+ saveSettings(settings);
62
+ return { handled: true, message: color(`Switched to ${args}`, Colors.green) };
63
+ }
64
+ else {
65
+ return { handled: true, message: 'Available providers: anthropic, openai, azure' };
66
+ }
67
+ }
68
+ if (cmd === '/models') {
69
+ const modelsList = await listAvailableModels(settings);
70
+ return { handled: true, message: modelsList };
71
+ }
72
+ if (cmd === '/model') {
73
+ try {
74
+ if (settings.provider === Provider.ANTHROPIC) {
75
+ settings.anthropic.model = await selectModel(settings.provider, settings.anthropic.model);
76
+ }
77
+ else if (settings.provider === Provider.OPENAI) {
78
+ settings.openai.model = await selectModel(settings.provider, settings.openai.model, settings.openai.api_key);
79
+ }
80
+ else if (settings.provider === Provider.AZURE) {
81
+ const newDeployment = await promptInput('Deployment name', settings.azure.deployment);
82
+ if (newDeployment) {
83
+ settings.azure.deployment = newDeployment;
84
+ }
85
+ }
86
+ saveSettings(settings);
87
+ return { handled: true, message: color('Model updated.', Colors.green) };
88
+ }
89
+ catch (e) {
90
+ if (e instanceof CancelledError) {
91
+ return { handled: true, message: color('Cancelled.', Colors.yellow) };
92
+ }
93
+ throw e;
94
+ }
95
+ }
96
+ if (cmd === '/help') {
97
+ const helpText = `
98
+ Available commands:
99
+ /login Configure LLM credentials
100
+ /settings Show current settings
101
+ /models List available models
102
+ /model Change model for current provider
103
+ /provider <name> Switch provider (anthropic, openai, azure)
104
+ /clear Clear conversation
105
+ /help Show this help
106
+ quit, exit Exit
107
+ `;
108
+ return { handled: true, message: helpText };
109
+ }
110
+ if (cmd === '/clear') {
111
+ return { handled: true, message: '__CLEAR__' };
112
+ }
113
+ return { handled: false };
114
+ }
115
+ /**
116
+ * Run in interactive conversation mode.
117
+ */
118
+ async function interactiveMode(settings) {
119
+ console.log(color('\nOrca Deployment Assistant', Colors.bold));
120
+ console.log(color('='.repeat(40), Colors.dim));
121
+ console.log(`Provider: ${color(settings.provider, Colors.cyan)}`);
122
+ console.log('Type /help for commands, /login to configure credentials.\n');
123
+ let client = createLLMClient(settings);
124
+ let messages = [];
125
+ const rl = readline.createInterface({
126
+ input: process.stdin,
127
+ output: process.stdout,
128
+ });
129
+ // Handle Ctrl+C gracefully
130
+ const handleSigint = () => {
131
+ console.log('\nGoodbye!');
132
+ rl.close();
133
+ process.exit(0);
134
+ };
135
+ process.on('SIGINT', handleSigint);
136
+ const promptUser = () => {
137
+ return new Promise((resolve) => {
138
+ rl.question(color('\nYou: ', Colors.green), (answer) => {
139
+ resolve(answer.trim());
140
+ });
141
+ });
142
+ };
143
+ while (true) {
144
+ let userInput;
145
+ try {
146
+ userInput = await promptUser();
147
+ }
148
+ catch {
149
+ console.log('\nGoodbye!');
150
+ break;
151
+ }
152
+ if (!userInput) {
153
+ continue;
154
+ }
155
+ if (['quit', 'exit', 'q'].includes(userInput.toLowerCase())) {
156
+ console.log('Goodbye!');
157
+ break;
158
+ }
159
+ // Handle slash commands
160
+ if (userInput.startsWith('/')) {
161
+ const result = await handleCommand(userInput, settings);
162
+ if (result.handled) {
163
+ if (result.message === '__CLEAR__') {
164
+ messages = [];
165
+ console.log(color('Conversation cleared.', Colors.dim));
166
+ }
167
+ else if (result.message) {
168
+ console.log(result.message);
169
+ }
170
+ // Recreate client if settings changed
171
+ if (['/login', '/provider', '/model'].some((cmd) => userInput.startsWith(cmd))) {
172
+ client = createLLMClient(settings);
173
+ }
174
+ continue;
175
+ }
176
+ }
177
+ process.stdout.write(color('\nAssistant: ', Colors.blue));
178
+ try {
179
+ const generator = runAssistant(client, settings, userInput, messages);
180
+ let result = await generator.next();
181
+ while (!result.done) {
182
+ process.stdout.write(result.value);
183
+ result = await generator.next();
184
+ }
185
+ // Update messages with the returned value
186
+ if (result.value) {
187
+ messages = result.value;
188
+ }
189
+ console.log();
190
+ }
191
+ catch (e) {
192
+ console.log(color(`\nError: ${e instanceof Error ? e.message : String(e)}`, Colors.red));
193
+ if (e instanceof Error && e.stack) {
194
+ console.error(e.stack);
195
+ }
196
+ }
197
+ }
198
+ rl.close();
199
+ process.removeListener('SIGINT', handleSigint);
200
+ }
201
+ /**
202
+ * Run a single query and exit.
203
+ */
204
+ async function singleQueryMode(settings, query) {
205
+ console.log(color('Orca Deployment Assistant', Colors.bold));
206
+ console.log(color(`Provider: ${settings.provider}`, Colors.dim));
207
+ console.log(color(`\nQuery: ${query}\n`, Colors.dim));
208
+ const client = createLLMClient(settings);
209
+ try {
210
+ const generator = runAssistant(client, settings, query);
211
+ let result = await generator.next();
212
+ while (!result.done) {
213
+ process.stdout.write(result.value);
214
+ result = await generator.next();
215
+ }
216
+ console.log();
217
+ }
218
+ catch (e) {
219
+ console.log(color(`\nError: ${e instanceof Error ? e.message : String(e)}`, Colors.red));
220
+ process.exit(1);
221
+ }
222
+ }
223
+ /**
224
+ * Parse command line arguments.
225
+ */
226
+ function parseArgs() {
227
+ const args = process.argv.slice(2);
228
+ const result = {
229
+ query: undefined,
230
+ interactive: false,
231
+ deploymentDir: undefined,
232
+ login: false,
233
+ };
234
+ for (let i = 0; i < args.length; i++) {
235
+ const arg = args[i];
236
+ if (arg === '-i' || arg === '--interactive') {
237
+ result.interactive = true;
238
+ }
239
+ else if (arg === '-d' || arg === '--deployment-dir') {
240
+ result.deploymentDir = args[++i];
241
+ }
242
+ else if (arg === '--login') {
243
+ result.login = true;
244
+ }
245
+ else if (arg === '-h' || arg === '--help') {
246
+ console.log(`
247
+ Orca Deployment Assistant - LLM-powered troubleshooting
248
+
249
+ Usage:
250
+ orca [options] [query]
251
+
252
+ Options:
253
+ -i, --interactive Force interactive mode
254
+ -d, --deployment-dir Path to deployment directory
255
+ --login Configure LLM credentials
256
+ -h, --help Show this help
257
+
258
+ Examples:
259
+ orca "Why is the backend restarting?"
260
+ orca --interactive
261
+ orca # Interactive mode (default)
262
+ `);
263
+ process.exit(0);
264
+ }
265
+ else if (!arg.startsWith('-')) {
266
+ result.query = arg;
267
+ }
268
+ }
269
+ return result;
270
+ }
271
+ /**
272
+ * Main entry point.
273
+ */
274
+ async function main() {
275
+ const args = parseArgs();
276
+ // Set deployment directory if provided
277
+ if (args.deploymentDir) {
278
+ process.env.DEPLOYMENT_DIR = args.deploymentDir;
279
+ }
280
+ // Load settings
281
+ const settings = loadSettings();
282
+ // Handle --login flag
283
+ if (args.login) {
284
+ await configureProvider(settings);
285
+ return;
286
+ }
287
+ // Check if configured, prompt if not
288
+ if (!settings.isConfigured()) {
289
+ console.log(color('Welcome to Orca Deployment Assistant!', Colors.bold));
290
+ console.log(color("First, let's configure your LLM provider.\n", Colors.dim));
291
+ const configured = await configureProvider(settings);
292
+ if (!configured) {
293
+ process.exit(1);
294
+ }
295
+ console.log();
296
+ }
297
+ // Run appropriate mode
298
+ if (args.query && !args.interactive) {
299
+ await singleQueryMode(settings, args.query);
300
+ }
301
+ else {
302
+ await interactiveMode(settings);
303
+ }
304
+ }
305
+ // Run main
306
+ main().catch((e) => {
307
+ console.error(color(`Fatal error: ${e.message}`, Colors.red));
308
+ process.exit(1);
309
+ });
310
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import OpenAI, { AzureOpenAI } from 'openai';
3
+ import { Settings } from './settings.js';
4
+ export type LLMClient = Anthropic | OpenAI | AzureOpenAI;
5
+ /**
6
+ * Create the appropriate LLM client based on settings.
7
+ */
8
+ export declare function createLLMClient(settings: Settings): LLMClient;
9
+ /**
10
+ * Fetch available models from OpenAI API.
11
+ */
12
+ export declare function fetchOpenAIModels(apiKey: string): Promise<Array<[string, string]>>;
13
+ /**
14
+ * List available models for all providers.
15
+ */
16
+ export declare function listAvailableModels(settings: Settings): Promise<string>;
17
+ /**
18
+ * Interactive model selection for a provider.
19
+ */
20
+ export declare function selectModel(provider: string, current: string, apiKey?: string): Promise<string>;
21
+ /**
22
+ * Configure credentials for a provider.
23
+ * Returns true if configuration was saved, false if cancelled.
24
+ */
25
+ export declare function configureProvider(settings: Settings, provider?: string): Promise<boolean>;
26
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAwC,MAAM,eAAe,CAAC;AAI/E,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAEzD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAgB7D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CA0CxF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC7E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAiFjB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/F"}
@@ -0,0 +1,283 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import OpenAI, { AzureOpenAI } from 'openai';
3
+ import { Provider, KNOWN_MODELS, saveSettings } from './settings.js';
4
+ import { Colors, color, promptInput, CancelledError } from './utils.js';
5
+ import * as readline from 'readline';
6
+ /**
7
+ * Create the appropriate LLM client based on settings.
8
+ */
9
+ export function createLLMClient(settings) {
10
+ const provider = settings.provider;
11
+ if (provider === Provider.ANTHROPIC) {
12
+ return new Anthropic({ apiKey: settings.anthropic.api_key });
13
+ }
14
+ else if (provider === Provider.OPENAI) {
15
+ return new OpenAI({ apiKey: settings.openai.api_key });
16
+ }
17
+ else if (provider === Provider.AZURE) {
18
+ return new AzureOpenAI({
19
+ apiKey: settings.azure.api_key,
20
+ endpoint: settings.azure.endpoint,
21
+ apiVersion: settings.azure.api_version,
22
+ });
23
+ }
24
+ else {
25
+ throw new Error(`Unknown provider: ${provider}`);
26
+ }
27
+ }
28
+ /**
29
+ * Fetch available models from OpenAI API.
30
+ */
31
+ export async function fetchOpenAIModels(apiKey) {
32
+ try {
33
+ const client = new OpenAI({ apiKey });
34
+ const models = await client.models.list();
35
+ // Filter for chat models (gpt-*)
36
+ const chatModels = [];
37
+ for (const model of models.data) {
38
+ if (model.id.startsWith('gpt-')) {
39
+ // Skip deprecated/fine-tuned models
40
+ if (model.id.includes('instruct') || model.id.includes('ft:')) {
41
+ continue;
42
+ }
43
+ chatModels.push([model.id, 'OpenAI model']);
44
+ }
45
+ }
46
+ // Sort: newer models first (by name heuristic)
47
+ chatModels.sort((a, b) => {
48
+ const scoreA = a[0].includes('gpt-5')
49
+ ? -5
50
+ : a[0].includes('gpt-4o')
51
+ ? -4
52
+ : a[0].includes('gpt-4')
53
+ ? -3
54
+ : 0;
55
+ const scoreB = b[0].includes('gpt-5')
56
+ ? -5
57
+ : b[0].includes('gpt-4o')
58
+ ? -4
59
+ : b[0].includes('gpt-4')
60
+ ? -3
61
+ : 0;
62
+ if (scoreA !== scoreB)
63
+ return scoreA - scoreB;
64
+ return a[0].localeCompare(b[0]);
65
+ });
66
+ return chatModels.slice(0, 10); // Limit to top 10
67
+ }
68
+ catch (e) {
69
+ console.log(color(`Could not fetch models from API: ${e}`, Colors.yellow));
70
+ return [];
71
+ }
72
+ }
73
+ /**
74
+ * List available models for all providers.
75
+ */
76
+ export async function listAvailableModels(settings) {
77
+ const lines = [];
78
+ for (const provider of [Provider.ANTHROPIC, Provider.OPENAI, Provider.AZURE]) {
79
+ const isCurrent = provider === settings.provider;
80
+ const marker = isCurrent ? color(' (active)', Colors.green) : '';
81
+ lines.push(`\n${color(provider.toUpperCase(), Colors.bold)}${marker}`);
82
+ if (provider === Provider.ANTHROPIC) {
83
+ for (const [modelId, desc] of KNOWN_MODELS.anthropic) {
84
+ const current = modelId === settings.anthropic.model ? ' <--' : '';
85
+ lines.push(` ${modelId}: ${desc}${current}`);
86
+ }
87
+ }
88
+ else if (provider === Provider.OPENAI) {
89
+ if (settings.openai.api_key) {
90
+ const apiModels = await fetchOpenAIModels(settings.openai.api_key);
91
+ if (apiModels.length > 0) {
92
+ lines.push(color(' (from API)', Colors.dim));
93
+ for (const [modelId] of apiModels.slice(0, 8)) {
94
+ const current = modelId === settings.openai.model ? ' <--' : '';
95
+ lines.push(` ${modelId}${current}`);
96
+ }
97
+ }
98
+ else {
99
+ for (const [modelId, desc] of KNOWN_MODELS.openai) {
100
+ const current = modelId === settings.openai.model ? ' <--' : '';
101
+ lines.push(` ${modelId}: ${desc}${current}`);
102
+ }
103
+ }
104
+ }
105
+ else {
106
+ lines.push(color(' (configure API key to see available models)', Colors.dim));
107
+ }
108
+ }
109
+ else if (provider === Provider.AZURE) {
110
+ if (settings.azure.deployment) {
111
+ lines.push(` Deployment: ${settings.azure.deployment}`);
112
+ }
113
+ else {
114
+ lines.push(color(' (deployments are configured per Azure resource)', Colors.dim));
115
+ }
116
+ }
117
+ }
118
+ return lines.join('\n');
119
+ }
120
+ /**
121
+ * Interactive model selection for a provider.
122
+ */
123
+ export async function selectModel(provider, current, apiKey) {
124
+ let models;
125
+ if (provider === Provider.ANTHROPIC) {
126
+ models = KNOWN_MODELS.anthropic;
127
+ }
128
+ else if (provider === Provider.OPENAI) {
129
+ if (apiKey) {
130
+ const apiModels = await fetchOpenAIModels(apiKey);
131
+ models = apiModels.length > 0 ? apiModels : KNOWN_MODELS.openai;
132
+ }
133
+ else {
134
+ models = KNOWN_MODELS.openai;
135
+ }
136
+ }
137
+ else {
138
+ return current; // Azure uses deployment names
139
+ }
140
+ console.log(color('\nAvailable models:', Colors.dim));
141
+ for (let i = 0; i < models.length; i++) {
142
+ const [modelId, desc] = models[i];
143
+ const marker = modelId === current ? ' (current)' : '';
144
+ console.log(` ${i + 1}. ${modelId}${marker}`);
145
+ if (desc && !desc.startsWith('OpenAI')) {
146
+ console.log(color(` ${desc}`, Colors.dim));
147
+ }
148
+ }
149
+ console.log(` ${models.length + 1}. Enter custom model ID`);
150
+ console.log(color(' q. Cancel', Colors.dim));
151
+ const rl = readline.createInterface({
152
+ input: process.stdin,
153
+ output: process.stdout,
154
+ });
155
+ return new Promise((resolve, reject) => {
156
+ const handleSigint = () => {
157
+ rl.close();
158
+ process.stdout.write('\n');
159
+ reject(new CancelledError());
160
+ };
161
+ rl.once('SIGINT', handleSigint);
162
+ rl.question(`\nChoice [1-${models.length + 1}, Enter for current, q to cancel]: `, async (answer) => {
163
+ rl.removeListener('SIGINT', handleSigint);
164
+ rl.close();
165
+ const choice = answer.trim();
166
+ if (['q', 'quit', 'cancel'].includes(choice.toLowerCase())) {
167
+ reject(new CancelledError());
168
+ return;
169
+ }
170
+ if (!choice) {
171
+ resolve(current);
172
+ return;
173
+ }
174
+ const idx = parseInt(choice, 10) - 1;
175
+ if (!isNaN(idx) && idx >= 0 && idx < models.length) {
176
+ resolve(models[idx][0]);
177
+ return;
178
+ }
179
+ else if (!isNaN(idx) && idx === models.length) {
180
+ try {
181
+ const custom = await promptInput('Enter model ID', current);
182
+ resolve(custom || current);
183
+ }
184
+ catch {
185
+ reject(new CancelledError());
186
+ }
187
+ return;
188
+ }
189
+ // Assume they typed a model ID directly
190
+ if (choice) {
191
+ resolve(choice);
192
+ return;
193
+ }
194
+ resolve(current);
195
+ });
196
+ });
197
+ }
198
+ /**
199
+ * Configure credentials for a provider.
200
+ * Returns true if configuration was saved, false if cancelled.
201
+ */
202
+ export async function configureProvider(settings, provider) {
203
+ try {
204
+ return await _configureProviderImpl(settings, provider);
205
+ }
206
+ catch (e) {
207
+ if (e instanceof CancelledError) {
208
+ console.log(color('\nConfiguration cancelled.', Colors.yellow));
209
+ return false;
210
+ }
211
+ throw e;
212
+ }
213
+ }
214
+ async function _configureProviderImpl(settings, provider) {
215
+ if (!provider) {
216
+ console.log(color('\nSelect LLM Provider:', Colors.bold));
217
+ console.log(' 1. Anthropic (Claude)');
218
+ console.log(' 2. OpenAI (GPT)');
219
+ console.log(' 3. Azure OpenAI');
220
+ console.log(color(' q. Cancel', Colors.dim));
221
+ const rl = readline.createInterface({
222
+ input: process.stdin,
223
+ output: process.stdout,
224
+ });
225
+ provider = await new Promise((resolve, reject) => {
226
+ const handleSigint = () => {
227
+ rl.close();
228
+ process.stdout.write('\n');
229
+ reject(new CancelledError());
230
+ };
231
+ rl.once('SIGINT', handleSigint);
232
+ rl.question('\nChoice [1-3]: ', (answer) => {
233
+ rl.removeListener('SIGINT', handleSigint);
234
+ rl.close();
235
+ const choice = answer.trim();
236
+ if (['q', 'quit', 'cancel'].includes(choice.toLowerCase())) {
237
+ reject(new CancelledError());
238
+ return;
239
+ }
240
+ const providerMap = {
241
+ '1': Provider.ANTHROPIC,
242
+ '2': Provider.OPENAI,
243
+ '3': Provider.AZURE,
244
+ };
245
+ resolve(providerMap[choice]);
246
+ });
247
+ });
248
+ if (!provider) {
249
+ console.log(color('Invalid choice.', Colors.red));
250
+ return false;
251
+ }
252
+ }
253
+ settings.provider = provider;
254
+ console.log(color(`\nConfiguring ${provider.toUpperCase()}:`, Colors.bold));
255
+ if (provider === Provider.ANTHROPIC) {
256
+ settings.anthropic.api_key = await promptInput('API Key (sk-ant-...)', settings.anthropic.api_key, { secret: true });
257
+ settings.anthropic.model = await selectModel(provider, settings.anthropic.model);
258
+ }
259
+ else if (provider === Provider.OPENAI) {
260
+ settings.openai.api_key = await promptInput('API Key (sk-...)', settings.openai.api_key, { secret: true });
261
+ // Fetch models from API with the new key
262
+ settings.openai.model = await selectModel(provider, settings.openai.model, settings.openai.api_key);
263
+ }
264
+ else if (provider === Provider.AZURE) {
265
+ console.log(color('\nAzure OpenAI requires:', Colors.dim));
266
+ console.log(color(' - Endpoint: Your Azure OpenAI resource endpoint', Colors.dim));
267
+ console.log(color(' - API Key: Your Azure API key', Colors.dim));
268
+ console.log(color(' - Deployment: The name of your model deployment', Colors.dim));
269
+ console.log();
270
+ settings.azure.endpoint = await promptInput('Endpoint (https://xxx.openai.azure.com/)', settings.azure.endpoint);
271
+ // Ensure endpoint ends with /
272
+ if (settings.azure.endpoint && !settings.azure.endpoint.endsWith('/')) {
273
+ settings.azure.endpoint += '/';
274
+ }
275
+ settings.azure.api_key = await promptInput('API Key', settings.azure.api_key, { secret: true });
276
+ settings.azure.api_version = await promptInput('API Version', settings.azure.api_version);
277
+ settings.azure.deployment = await promptInput('Deployment name', settings.azure.deployment);
278
+ }
279
+ saveSettings(settings);
280
+ console.log(color('\nSettings saved!', Colors.green));
281
+ return true;
282
+ }
283
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}