primellm 1.2.0 → 1.2.1

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 CHANGED
@@ -26,16 +26,12 @@ const TOOLS = {
26
26
  package: '@anthropic-ai/claude-code',
27
27
  envKeyName: 'ANTHROPIC_API_KEY',
28
28
  envBaseName: 'ANTHROPIC_BASE_URL',
29
- configDir: '.claude',
30
- configFile: 'settings.json',
31
29
  },
32
30
  'Codex': {
33
31
  command: 'codex',
34
32
  package: '@openai/codex',
35
33
  envKeyName: 'OPENAI_API_KEY',
36
34
  envBaseName: 'OPENAI_BASE_URL',
37
- configDir: '.codex',
38
- configFile: 'config.json',
39
35
  },
40
36
  };
41
37
  // ============================================================================
@@ -69,6 +65,9 @@ function commandExists(cmd) {
69
65
  return false;
70
66
  }
71
67
  }
68
+ function isWindows() {
69
+ return (0, os_1.platform)() === 'win32';
70
+ }
72
71
  // ============================================================================
73
72
  // ASCII ART & DISPLAY
74
73
  // ============================================================================
@@ -95,59 +94,128 @@ function displaySystemInfo() {
95
94
  console.log();
96
95
  }
97
96
  // ============================================================================
98
- // CONFIGURATION
97
+ // SHELL PROFILE CONFIGURATION
99
98
  // ============================================================================
100
- function getConfigPath(tool) {
99
+ function getShellProfilePath() {
101
100
  const home = (0, os_1.homedir)();
102
- const toolInfo = TOOLS[tool];
103
- const dir = (0, path_1.join)(home, toolInfo.configDir);
104
- const file = (0, path_1.join)(dir, toolInfo.configFile);
105
- return { dir, file };
101
+ if (isWindows()) {
102
+ // PowerShell profile path
103
+ return (0, path_1.join)(home, 'Documents', 'WindowsPowerShell', 'Microsoft.PowerShell_profile.ps1');
104
+ }
105
+ // Unix-like systems
106
+ const shell = process.env.SHELL || '';
107
+ if (shell.includes('zsh')) {
108
+ return (0, path_1.join)(home, '.zshrc');
109
+ }
110
+ else if (shell.includes('fish')) {
111
+ return (0, path_1.join)(home, '.config', 'fish', 'config.fish');
112
+ }
113
+ else {
114
+ // Default to bash
115
+ return (0, path_1.join)(home, '.bashrc');
116
+ }
106
117
  }
107
- function readExistingConfig(tool) {
108
- const { file } = getConfigPath(tool);
118
+ function readShellProfile() {
119
+ const profilePath = getShellProfilePath();
109
120
  try {
110
- if ((0, fs_1.existsSync)(file)) {
111
- const content = (0, fs_1.readFileSync)(file, 'utf8');
112
- return JSON.parse(content);
121
+ if ((0, fs_1.existsSync)(profilePath)) {
122
+ return (0, fs_1.readFileSync)(profilePath, 'utf8');
113
123
  }
114
124
  }
115
125
  catch {
116
- // Config doesn't exist or is invalid
126
+ // Profile doesn't exist
117
127
  }
118
- return null;
128
+ return '';
119
129
  }
120
- function writeConfig(tool, apiKey) {
121
- const { dir, file } = getConfigPath(tool);
130
+ function checkExistingEnvVars(tool) {
122
131
  const toolInfo = TOOLS[tool];
123
- // Create directory if it doesn't exist
124
- if (!(0, fs_1.existsSync)(dir)) {
125
- (0, fs_1.mkdirSync)(dir, { recursive: true });
132
+ const profileContent = readShellProfile();
133
+ let apiKey = null;
134
+ let baseUrl = null;
135
+ // Check environment variables first
136
+ apiKey = process.env[toolInfo.envKeyName] || null;
137
+ baseUrl = process.env[toolInfo.envBaseName] || null;
138
+ // If not in env, try to parse from profile
139
+ if (!apiKey) {
140
+ const keyMatch = profileContent.match(new RegExp(`${toolInfo.envKeyName}[=\\s'"]+([^'"\n]+)`));
141
+ if (keyMatch)
142
+ apiKey = keyMatch[1].trim();
143
+ }
144
+ if (!baseUrl) {
145
+ const baseMatch = profileContent.match(new RegExp(`${toolInfo.envBaseName}[=\\s'"]+([^'"\n]+)`));
146
+ if (baseMatch)
147
+ baseUrl = baseMatch[1].trim();
126
148
  }
127
- // Read existing config
128
- const existing = readExistingConfig(tool) || {};
129
- if (tool === 'Claude Code') {
130
- // Claude Code uses settings.json with env block
131
- const config = {
132
- ...existing,
133
- env: {
134
- ...existing.env,
135
- [toolInfo.envKeyName]: apiKey,
136
- [toolInfo.envBaseName]: PRIMELLM_BASE_URL,
137
- },
138
- };
139
- (0, fs_1.writeFileSync)(file, JSON.stringify(config, null, 2));
149
+ return { apiKey, baseUrl };
150
+ }
151
+ function writeToShellProfile(tool, apiKey) {
152
+ const profilePath = getShellProfilePath();
153
+ const toolInfo = TOOLS[tool];
154
+ // Ensure directory exists (for PowerShell on Windows)
155
+ const profileDir = (0, path_1.join)(profilePath, '..');
156
+ if (!(0, fs_1.existsSync)(profileDir)) {
157
+ (0, fs_1.mkdirSync)(profileDir, { recursive: true });
158
+ }
159
+ // Read existing profile content
160
+ let profileContent = '';
161
+ try {
162
+ if ((0, fs_1.existsSync)(profilePath)) {
163
+ profileContent = (0, fs_1.readFileSync)(profilePath, 'utf8');
164
+ }
165
+ }
166
+ catch {
167
+ // File doesn't exist, will create new
168
+ }
169
+ // Remove existing PrimeLLM configuration for this tool
170
+ const startMarker = `# PrimeLLM Configuration for ${tool}`;
171
+ const endMarker = `# End PrimeLLM Configuration for ${tool}`;
172
+ const startIndex = profileContent.indexOf(startMarker);
173
+ const endIndex = profileContent.indexOf(endMarker);
174
+ if (startIndex !== -1 && endIndex !== -1) {
175
+ profileContent = profileContent.substring(0, startIndex) +
176
+ profileContent.substring(endIndex + endMarker.length);
177
+ }
178
+ // Build new configuration block
179
+ let configBlock;
180
+ if (isWindows()) {
181
+ // PowerShell syntax
182
+ configBlock = `
183
+ ${startMarker}
184
+ $env:${toolInfo.envKeyName} = '${apiKey}'
185
+ $env:${toolInfo.envBaseName} = '${PRIMELLM_BASE_URL}'
186
+ ${endMarker}
187
+ `;
140
188
  }
141
189
  else {
142
- // Codex uses config.json with direct properties
143
- const config = {
144
- ...existing,
145
- apiKey: apiKey,
146
- baseUrl: PRIMELLM_BASE_URL,
147
- };
148
- (0, fs_1.writeFileSync)(file, JSON.stringify(config, null, 2));
190
+ const shell = process.env.SHELL || '';
191
+ if (shell.includes('fish')) {
192
+ // Fish shell syntax
193
+ configBlock = `
194
+ ${startMarker}
195
+ set -gx ${toolInfo.envKeyName} '${apiKey}'
196
+ set -gx ${toolInfo.envBaseName} '${PRIMELLM_BASE_URL}'
197
+ ${endMarker}
198
+ `;
199
+ }
200
+ else {
201
+ // Bash/Zsh syntax
202
+ configBlock = `
203
+ ${startMarker}
204
+ export ${toolInfo.envKeyName}='${apiKey}'
205
+ export ${toolInfo.envBaseName}='${PRIMELLM_BASE_URL}'
206
+ ${endMarker}
207
+ `;
208
+ }
149
209
  }
150
- return file;
210
+ // Append configuration
211
+ profileContent = profileContent.trimEnd() + '\n' + configBlock;
212
+ (0, fs_1.writeFileSync)(profilePath, profileContent);
213
+ return profilePath;
214
+ }
215
+ function setCurrentSessionEnv(tool, apiKey) {
216
+ const toolInfo = TOOLS[tool];
217
+ process.env[toolInfo.envKeyName] = apiKey;
218
+ process.env[toolInfo.envBaseName] = PRIMELLM_BASE_URL;
151
219
  }
152
220
  // ============================================================================
153
221
  // TOOL INSTALLATION
@@ -228,33 +296,23 @@ async function main() {
228
296
  }
229
297
  console.log();
230
298
  // ============ STEP 3: Check Existing Config ============
231
- const existing = readExistingConfig(selectedTool);
232
- if (existing) {
233
- const envConfig = existing.env;
234
- const directConfig = existing;
235
- const existingKey = selectedTool === 'Claude Code'
236
- ? envConfig?.[toolInfo.envKeyName]
237
- : directConfig?.apiKey;
238
- const existingBase = selectedTool === 'Claude Code'
239
- ? envConfig?.[toolInfo.envBaseName]
240
- : directConfig?.baseUrl;
241
- if (existingKey || existingBase) {
242
- console.log(chalk_1.default.yellow('⚠ Existing configuration found:\n'));
243
- console.log(chalk_1.default.gray(` API Key: ${existingKey ? maskApiKey(existingKey) : '(not set)'}`));
244
- console.log(chalk_1.default.gray(` Base URL: ${existingBase || '(not set)'}`));
245
- console.log();
246
- const { confirmOverwrite } = await prompt({
247
- type: 'confirm',
248
- name: 'confirmOverwrite',
249
- message: 'Do you want to overwrite this configuration?',
250
- initial: true,
251
- });
252
- if (!confirmOverwrite) {
253
- console.log(chalk_1.default.yellow('\n⚠ Configuration cancelled.'));
254
- process.exit(0);
255
- }
256
- console.log();
299
+ const existing = checkExistingEnvVars(selectedTool);
300
+ if (existing.apiKey || existing.baseUrl) {
301
+ console.log(chalk_1.default.yellow('⚠ Existing configuration found:\n'));
302
+ console.log(chalk_1.default.gray(` API Key: ${existing.apiKey ? maskApiKey(existing.apiKey) : '(not set)'}`));
303
+ console.log(chalk_1.default.gray(` Base URL: ${existing.baseUrl || '(not set)'}`));
304
+ console.log();
305
+ const { confirmOverwrite } = await prompt({
306
+ type: 'confirm',
307
+ name: 'confirmOverwrite',
308
+ message: 'Do you want to overwrite this configuration?',
309
+ initial: true,
310
+ });
311
+ if (!confirmOverwrite) {
312
+ console.log(chalk_1.default.yellow('\n⚠ Configuration cancelled.'));
313
+ process.exit(0);
257
314
  }
315
+ console.log();
258
316
  }
259
317
  // ============ STEP 4: API Key ============
260
318
  console.log(chalk_1.default.white.bold('🔑 API Key Configuration\n'));
@@ -293,19 +351,29 @@ async function main() {
293
351
  apiKey = inputApiKey;
294
352
  console.log(chalk_1.default.green(`✓ API key validated: ${maskApiKey(apiKey)}`));
295
353
  console.log();
296
- // ============ STEP 5: Write Configuration ============
297
- const writeSpinner = (0, ora_1.default)('Writing configuration...').start();
354
+ // ============ STEP 5: Write Configuration to Shell Profile ============
355
+ const writeSpinner = (0, ora_1.default)('Writing configuration to shell profile...').start();
298
356
  try {
299
- const configFile = writeConfig(selectedTool, apiKey);
300
- writeSpinner.succeed(chalk_1.default.green('Configuration saved'));
357
+ // Write to shell profile
358
+ const profilePath = writeToShellProfile(selectedTool, apiKey);
359
+ // Also set for current session
360
+ setCurrentSessionEnv(selectedTool, apiKey);
361
+ writeSpinner.succeed(chalk_1.default.green('Configuration saved to shell profile'));
301
362
  console.log();
302
363
  console.log(chalk_1.default.gray('━'.repeat(60)));
303
364
  console.log();
304
365
  console.log(chalk_1.default.green.bold('✅ PrimeLLM configured successfully!'));
305
366
  console.log();
306
- console.log(chalk_1.default.gray(`Config file: ${configFile}`));
367
+ console.log(chalk_1.default.gray(`Profile updated: ${profilePath}`));
307
368
  console.log(chalk_1.default.gray(`Base URL: ${PRIMELLM_BASE_URL}`));
308
369
  console.log();
370
+ // Show what was set
371
+ console.log(chalk_1.default.white('Environment variables configured:'));
372
+ console.log(chalk_1.default.cyan(` ${toolInfo.envKeyName}=${maskApiKey(apiKey)}`));
373
+ console.log(chalk_1.default.cyan(` ${toolInfo.envBaseName}=${PRIMELLM_BASE_URL}`));
374
+ console.log();
375
+ console.log(chalk_1.default.yellow.bold('⚠ IMPORTANT: Open a new terminal for changes to take effect!'));
376
+ console.log();
309
377
  console.log(chalk_1.default.white('You can now use:'));
310
378
  console.log(chalk_1.default.cyan(` ${toolInfo.command}`));
311
379
  console.log(chalk_1.default.white('with PrimeLLM as the backend.'));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "primellm",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Configure Claude Code and Codex to use PrimeLLM as the backend",
5
5
  "bin": {
6
6
  "primellm": "./dist/index.js"
@@ -43,4 +43,4 @@
43
43
  "@types/node": "^20.11.0",
44
44
  "typescript": "^5.3.0"
45
45
  }
46
- }
46
+ }
package/src/index.ts CHANGED
@@ -5,7 +5,7 @@ import figlet from 'figlet';
5
5
  import ora from 'ora';
6
6
  import { execSync } from 'child_process';
7
7
  import { platform, homedir } from 'os';
8
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
8
+ import { existsSync, readFileSync, writeFileSync, appendFileSync, mkdirSync } from 'fs';
9
9
  import { join } from 'path';
10
10
  import open from 'open';
11
11
  import Enquirer from 'enquirer';
@@ -26,16 +26,12 @@ const TOOLS = {
26
26
  package: '@anthropic-ai/claude-code',
27
27
  envKeyName: 'ANTHROPIC_API_KEY',
28
28
  envBaseName: 'ANTHROPIC_BASE_URL',
29
- configDir: '.claude',
30
- configFile: 'settings.json',
31
29
  },
32
30
  'Codex': {
33
31
  command: 'codex',
34
32
  package: '@openai/codex',
35
33
  envKeyName: 'OPENAI_API_KEY',
36
34
  envBaseName: 'OPENAI_BASE_URL',
37
- configDir: '.codex',
38
- configFile: 'config.json',
39
35
  },
40
36
  } as const;
41
37
 
@@ -76,6 +72,10 @@ function commandExists(cmd: string): boolean {
76
72
  }
77
73
  }
78
74
 
75
+ function isWindows(): boolean {
76
+ return platform() === 'win32';
77
+ }
78
+
79
79
  // ============================================================================
80
80
  // ASCII ART & DISPLAY
81
81
  // ============================================================================
@@ -109,75 +109,143 @@ function displaySystemInfo(): void {
109
109
  }
110
110
 
111
111
  // ============================================================================
112
- // CONFIGURATION
112
+ // SHELL PROFILE CONFIGURATION
113
113
  // ============================================================================
114
114
 
115
- function getConfigPath(tool: ToolName): { dir: string; file: string } {
115
+ function getShellProfilePath(): string {
116
116
  const home = homedir();
117
- const toolInfo = TOOLS[tool];
118
- const dir = join(home, toolInfo.configDir);
119
- const file = join(dir, toolInfo.configFile);
120
- return { dir, file };
121
- }
122
117
 
123
- interface ClaudeSettings {
124
- env?: Record<string, string>;
125
- [key: string]: unknown;
126
- }
118
+ if (isWindows()) {
119
+ // PowerShell profile path
120
+ return join(home, 'Documents', 'WindowsPowerShell', 'Microsoft.PowerShell_profile.ps1');
121
+ }
122
+
123
+ // Unix-like systems
124
+ const shell = process.env.SHELL || '';
127
125
 
128
- interface CodexConfig {
129
- apiKey?: string;
130
- baseUrl?: string;
131
- [key: string]: unknown;
126
+ if (shell.includes('zsh')) {
127
+ return join(home, '.zshrc');
128
+ } else if (shell.includes('fish')) {
129
+ return join(home, '.config', 'fish', 'config.fish');
130
+ } else {
131
+ // Default to bash
132
+ return join(home, '.bashrc');
133
+ }
132
134
  }
133
135
 
134
- function readExistingConfig(tool: ToolName): ClaudeSettings | CodexConfig | null {
135
- const { file } = getConfigPath(tool);
136
+ function readShellProfile(): string {
137
+ const profilePath = getShellProfilePath();
136
138
  try {
137
- if (existsSync(file)) {
138
- const content = readFileSync(file, 'utf8');
139
- return JSON.parse(content);
139
+ if (existsSync(profilePath)) {
140
+ return readFileSync(profilePath, 'utf8');
140
141
  }
141
142
  } catch {
142
- // Config doesn't exist or is invalid
143
+ // Profile doesn't exist
143
144
  }
144
- return null;
145
+ return '';
145
146
  }
146
147
 
147
- function writeConfig(tool: ToolName, apiKey: string): string {
148
- const { dir, file } = getConfigPath(tool);
148
+ function checkExistingEnvVars(tool: ToolName): { apiKey: string | null; baseUrl: string | null } {
149
149
  const toolInfo = TOOLS[tool];
150
+ const profileContent = readShellProfile();
151
+
152
+ let apiKey: string | null = null;
153
+ let baseUrl: string | null = null;
154
+
155
+ // Check environment variables first
156
+ apiKey = process.env[toolInfo.envKeyName] || null;
157
+ baseUrl = process.env[toolInfo.envBaseName] || null;
158
+
159
+ // If not in env, try to parse from profile
160
+ if (!apiKey) {
161
+ const keyMatch = profileContent.match(new RegExp(`${toolInfo.envKeyName}[=\\s'"]+([^'"\n]+)`));
162
+ if (keyMatch) apiKey = keyMatch[1].trim();
163
+ }
150
164
 
151
- // Create directory if it doesn't exist
152
- if (!existsSync(dir)) {
153
- mkdirSync(dir, { recursive: true });
165
+ if (!baseUrl) {
166
+ const baseMatch = profileContent.match(new RegExp(`${toolInfo.envBaseName}[=\\s'"]+([^'"\n]+)`));
167
+ if (baseMatch) baseUrl = baseMatch[1].trim();
154
168
  }
155
169
 
156
- // Read existing config
157
- const existing = readExistingConfig(tool) || {};
158
-
159
- if (tool === 'Claude Code') {
160
- // Claude Code uses settings.json with env block
161
- const config: ClaudeSettings = {
162
- ...existing,
163
- env: {
164
- ...(existing as ClaudeSettings).env,
165
- [toolInfo.envKeyName]: apiKey,
166
- [toolInfo.envBaseName]: PRIMELLM_BASE_URL,
167
- },
168
- };
169
- writeFileSync(file, JSON.stringify(config, null, 2));
170
+ return { apiKey, baseUrl };
171
+ }
172
+
173
+ function writeToShellProfile(tool: ToolName, apiKey: string): string {
174
+ const profilePath = getShellProfilePath();
175
+ const toolInfo = TOOLS[tool];
176
+
177
+ // Ensure directory exists (for PowerShell on Windows)
178
+ const profileDir = join(profilePath, '..');
179
+ if (!existsSync(profileDir)) {
180
+ mkdirSync(profileDir, { recursive: true });
181
+ }
182
+
183
+ // Read existing profile content
184
+ let profileContent = '';
185
+ try {
186
+ if (existsSync(profilePath)) {
187
+ profileContent = readFileSync(profilePath, 'utf8');
188
+ }
189
+ } catch {
190
+ // File doesn't exist, will create new
191
+ }
192
+
193
+ // Remove existing PrimeLLM configuration for this tool
194
+ const startMarker = `# PrimeLLM Configuration for ${tool}`;
195
+ const endMarker = `# End PrimeLLM Configuration for ${tool}`;
196
+
197
+ const startIndex = profileContent.indexOf(startMarker);
198
+ const endIndex = profileContent.indexOf(endMarker);
199
+
200
+ if (startIndex !== -1 && endIndex !== -1) {
201
+ profileContent = profileContent.substring(0, startIndex) +
202
+ profileContent.substring(endIndex + endMarker.length);
203
+ }
204
+
205
+ // Build new configuration block
206
+ let configBlock: string;
207
+
208
+ if (isWindows()) {
209
+ // PowerShell syntax
210
+ configBlock = `
211
+ ${startMarker}
212
+ $env:${toolInfo.envKeyName} = '${apiKey}'
213
+ $env:${toolInfo.envBaseName} = '${PRIMELLM_BASE_URL}'
214
+ ${endMarker}
215
+ `;
170
216
  } else {
171
- // Codex uses config.json with direct properties
172
- const config: CodexConfig = {
173
- ...existing,
174
- apiKey: apiKey,
175
- baseUrl: PRIMELLM_BASE_URL,
176
- };
177
- writeFileSync(file, JSON.stringify(config, null, 2));
217
+ const shell = process.env.SHELL || '';
218
+ if (shell.includes('fish')) {
219
+ // Fish shell syntax
220
+ configBlock = `
221
+ ${startMarker}
222
+ set -gx ${toolInfo.envKeyName} '${apiKey}'
223
+ set -gx ${toolInfo.envBaseName} '${PRIMELLM_BASE_URL}'
224
+ ${endMarker}
225
+ `;
226
+ } else {
227
+ // Bash/Zsh syntax
228
+ configBlock = `
229
+ ${startMarker}
230
+ export ${toolInfo.envKeyName}='${apiKey}'
231
+ export ${toolInfo.envBaseName}='${PRIMELLM_BASE_URL}'
232
+ ${endMarker}
233
+ `;
234
+ }
178
235
  }
179
236
 
180
- return file;
237
+ // Append configuration
238
+ profileContent = profileContent.trimEnd() + '\n' + configBlock;
239
+
240
+ writeFileSync(profilePath, profileContent);
241
+
242
+ return profilePath;
243
+ }
244
+
245
+ function setCurrentSessionEnv(tool: ToolName, apiKey: string): void {
246
+ const toolInfo = TOOLS[tool];
247
+ process.env[toolInfo.envKeyName] = apiKey;
248
+ process.env[toolInfo.envBaseName] = PRIMELLM_BASE_URL;
181
249
  }
182
250
 
183
251
  // ============================================================================
@@ -276,38 +344,26 @@ async function main(): Promise<void> {
276
344
  console.log();
277
345
 
278
346
  // ============ STEP 3: Check Existing Config ============
279
- const existing = readExistingConfig(selectedTool);
280
-
281
- if (existing) {
282
- const envConfig = (existing as ClaudeSettings).env;
283
- const directConfig = existing as CodexConfig;
284
-
285
- const existingKey = selectedTool === 'Claude Code'
286
- ? envConfig?.[toolInfo.envKeyName]
287
- : directConfig?.apiKey;
288
- const existingBase = selectedTool === 'Claude Code'
289
- ? envConfig?.[toolInfo.envBaseName]
290
- : directConfig?.baseUrl;
291
-
292
- if (existingKey || existingBase) {
293
- console.log(chalk.yellow('⚠ Existing configuration found:\n'));
294
- console.log(chalk.gray(` API Key: ${existingKey ? maskApiKey(existingKey) : '(not set)'}`));
295
- console.log(chalk.gray(` Base URL: ${existingBase || '(not set)'}`));
296
- console.log();
297
-
298
- const { confirmOverwrite } = await prompt<{ confirmOverwrite: boolean }>({
299
- type: 'confirm',
300
- name: 'confirmOverwrite',
301
- message: 'Do you want to overwrite this configuration?',
302
- initial: true,
303
- });
304
-
305
- if (!confirmOverwrite) {
306
- console.log(chalk.yellow('\n⚠ Configuration cancelled.'));
307
- process.exit(0);
308
- }
309
- console.log();
347
+ const existing = checkExistingEnvVars(selectedTool);
348
+
349
+ if (existing.apiKey || existing.baseUrl) {
350
+ console.log(chalk.yellow('⚠ Existing configuration found:\n'));
351
+ console.log(chalk.gray(` API Key: ${existing.apiKey ? maskApiKey(existing.apiKey) : '(not set)'}`));
352
+ console.log(chalk.gray(` Base URL: ${existing.baseUrl || '(not set)'}`));
353
+ console.log();
354
+
355
+ const { confirmOverwrite } = await prompt<{ confirmOverwrite: boolean }>({
356
+ type: 'confirm',
357
+ name: 'confirmOverwrite',
358
+ message: 'Do you want to overwrite this configuration?',
359
+ initial: true,
360
+ });
361
+
362
+ if (!confirmOverwrite) {
363
+ console.log(chalk.yellow('\n⚠ Configuration cancelled.'));
364
+ process.exit(0);
310
365
  }
366
+ console.log();
311
367
  }
312
368
 
313
369
  // ============ STEP 4: API Key ============
@@ -353,12 +409,17 @@ async function main(): Promise<void> {
353
409
  console.log(chalk.green(`✓ API key validated: ${maskApiKey(apiKey)}`));
354
410
  console.log();
355
411
 
356
- // ============ STEP 5: Write Configuration ============
357
- const writeSpinner = ora('Writing configuration...').start();
412
+ // ============ STEP 5: Write Configuration to Shell Profile ============
413
+ const writeSpinner = ora('Writing configuration to shell profile...').start();
358
414
 
359
415
  try {
360
- const configFile = writeConfig(selectedTool, apiKey);
361
- writeSpinner.succeed(chalk.green('Configuration saved'));
416
+ // Write to shell profile
417
+ const profilePath = writeToShellProfile(selectedTool, apiKey);
418
+
419
+ // Also set for current session
420
+ setCurrentSessionEnv(selectedTool, apiKey);
421
+
422
+ writeSpinner.succeed(chalk.green('Configuration saved to shell profile'));
362
423
 
363
424
  console.log();
364
425
  console.log(chalk.gray('━'.repeat(60)));
@@ -366,10 +427,19 @@ async function main(): Promise<void> {
366
427
  console.log(chalk.green.bold('✅ PrimeLLM configured successfully!'));
367
428
  console.log();
368
429
 
369
- console.log(chalk.gray(`Config file: ${configFile}`));
430
+ console.log(chalk.gray(`Profile updated: ${profilePath}`));
370
431
  console.log(chalk.gray(`Base URL: ${PRIMELLM_BASE_URL}`));
371
432
  console.log();
372
433
 
434
+ // Show what was set
435
+ console.log(chalk.white('Environment variables configured:'));
436
+ console.log(chalk.cyan(` ${toolInfo.envKeyName}=${maskApiKey(apiKey)}`));
437
+ console.log(chalk.cyan(` ${toolInfo.envBaseName}=${PRIMELLM_BASE_URL}`));
438
+ console.log();
439
+
440
+ console.log(chalk.yellow.bold('⚠ IMPORTANT: Open a new terminal for changes to take effect!'));
441
+ console.log();
442
+
373
443
  console.log(chalk.white('You can now use:'));
374
444
  console.log(chalk.cyan(` ${toolInfo.command}`));
375
445
  console.log(chalk.white('with PrimeLLM as the backend.'));