primellm 1.1.1 → 1.2.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 CHANGED
@@ -19,19 +19,23 @@ const { prompt } = enquirer_1.default;
19
19
  // ============================================================================
20
20
  const PRIMELLM_BASE_URL = 'https://api.primellm.in/v1';
21
21
  const PRIMELLM_DASHBOARD_URL = 'https://primellm.in/dashboard/api-keys';
22
- // Tool configuration - uses environment variables
22
+ // Tool configuration
23
23
  const TOOLS = {
24
24
  'Claude Code': {
25
25
  command: 'claude',
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',
29
31
  },
30
32
  'Codex': {
31
33
  command: 'codex',
32
34
  package: '@openai/codex',
33
35
  envKeyName: 'OPENAI_API_KEY',
34
36
  envBaseName: 'OPENAI_BASE_URL',
37
+ configDir: '.codex',
38
+ configFile: 'config.json',
35
39
  },
36
40
  };
37
41
  // ============================================================================
@@ -66,45 +70,6 @@ function commandExists(cmd) {
66
70
  }
67
71
  }
68
72
  // ============================================================================
69
- // SHELL PROFILE DETECTION
70
- // ============================================================================
71
- function getShellProfilePath() {
72
- const home = (0, os_1.homedir)();
73
- const os = (0, os_1.platform)();
74
- if (os === 'win32') {
75
- // Windows uses PowerShell profile
76
- return (0, path_1.join)(home, 'Documents', 'PowerShell', 'Microsoft.PowerShell_profile.ps1');
77
- }
78
- // Unix-like systems
79
- const shell = process.env.SHELL || '';
80
- if (shell.includes('zsh')) {
81
- return (0, path_1.join)(home, '.zshrc');
82
- }
83
- else if (shell.includes('fish')) {
84
- return (0, path_1.join)(home, '.config', 'fish', 'config.fish');
85
- }
86
- else {
87
- // Default to .bashrc
88
- return (0, path_1.join)(home, '.bashrc');
89
- }
90
- }
91
- function formatEnvExport(key, value) {
92
- const os = (0, os_1.platform)();
93
- const shell = process.env.SHELL || '';
94
- if (os === 'win32') {
95
- // PowerShell format
96
- return `$env:${key} = "${value}"`;
97
- }
98
- else if (shell.includes('fish')) {
99
- // Fish shell format
100
- return `set -gx ${key} "${value}"`;
101
- }
102
- else {
103
- // Bash/Zsh format
104
- return `export ${key}="${value}"`;
105
- }
106
- }
107
- // ============================================================================
108
73
  // ASCII ART & DISPLAY
109
74
  // ============================================================================
110
75
  function displayBanner() {
@@ -132,53 +97,57 @@ function displaySystemInfo() {
132
97
  // ============================================================================
133
98
  // CONFIGURATION
134
99
  // ============================================================================
135
- function checkExistingEnvVars(tool) {
100
+ function getConfigPath(tool) {
101
+ const home = (0, os_1.homedir)();
136
102
  const toolInfo = TOOLS[tool];
137
- return {
138
- apiKey: process.env[toolInfo.envKeyName],
139
- baseUrl: process.env[toolInfo.envBaseName],
140
- };
103
+ const dir = (0, path_1.join)(home, toolInfo.configDir);
104
+ const file = (0, path_1.join)(dir, toolInfo.configFile);
105
+ return { dir, file };
141
106
  }
142
- function writeEnvToProfile(tool, apiKey) {
143
- const toolInfo = TOOLS[tool];
144
- const profilePath = getShellProfilePath();
145
- const keyExport = formatEnvExport(toolInfo.envKeyName, apiKey);
146
- const baseExport = formatEnvExport(toolInfo.envBaseName, PRIMELLM_BASE_URL);
147
- const marker = `# PrimeLLM Configuration for ${tool}`;
148
- const endMarker = `# End PrimeLLM Configuration for ${tool}`;
149
- const configBlock = `
150
- ${marker}
151
- ${keyExport}
152
- ${baseExport}
153
- ${endMarker}
154
- `;
155
- // Check if profile exists and if our config is already there
156
- if ((0, fs_1.existsSync)(profilePath)) {
157
- const content = (0, fs_1.readFileSync)(profilePath, 'utf8');
158
- if (content.includes(marker)) {
159
- // Replace existing config
160
- const regex = new RegExp(`${marker}[\\s\\S]*?${endMarker}`, 'g');
161
- const newContent = content.replace(regex, configBlock.trim());
162
- (0, fs_1.writeFileSync)(profilePath, newContent);
163
- }
164
- else {
165
- // Append new config
166
- (0, fs_1.appendFileSync)(profilePath, configBlock);
107
+ function readExistingConfig(tool) {
108
+ const { file } = getConfigPath(tool);
109
+ try {
110
+ if ((0, fs_1.existsSync)(file)) {
111
+ const content = (0, fs_1.readFileSync)(file, 'utf8');
112
+ return JSON.parse(content);
167
113
  }
168
114
  }
115
+ catch {
116
+ // Config doesn't exist or is invalid
117
+ }
118
+ return null;
119
+ }
120
+ function writeConfig(tool, apiKey) {
121
+ const { dir, file } = getConfigPath(tool);
122
+ 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 });
126
+ }
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));
140
+ }
169
141
  else {
170
- // Create parent directory if it doesn't exist
171
- const profileDir = (0, path_1.dirname)(profilePath);
172
- if (!(0, fs_1.existsSync)(profileDir)) {
173
- (0, fs_1.mkdirSync)(profileDir, { recursive: true });
174
- }
175
- // Create new profile with config
176
- (0, fs_1.writeFileSync)(profilePath, configBlock);
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));
177
149
  }
178
- return {
179
- profilePath,
180
- commands: [keyExport, baseExport],
181
- };
150
+ return file;
182
151
  }
183
152
  // ============================================================================
184
153
  // TOOL INSTALLATION
@@ -259,23 +228,33 @@ async function main() {
259
228
  }
260
229
  console.log();
261
230
  // ============ STEP 3: Check Existing Config ============
262
- const existing = checkExistingEnvVars(selectedTool);
263
- if (existing.apiKey || existing.baseUrl) {
264
- console.log(chalk_1.default.yellow('⚠ Existing environment configuration found:\n'));
265
- console.log(chalk_1.default.gray(` ${toolInfo.envKeyName}: ${existing.apiKey ? maskApiKey(existing.apiKey) : '(not set)'}`));
266
- console.log(chalk_1.default.gray(` ${toolInfo.envBaseName}: ${existing.baseUrl || '(not set)'}`));
267
- console.log();
268
- const { confirmOverwrite } = await prompt({
269
- type: 'confirm',
270
- name: 'confirmOverwrite',
271
- message: 'Do you want to overwrite this configuration?',
272
- initial: true,
273
- });
274
- if (!confirmOverwrite) {
275
- console.log(chalk_1.default.yellow('\n⚠ Configuration cancelled.'));
276
- process.exit(0);
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();
277
257
  }
278
- console.log();
279
258
  }
280
259
  // ============ STEP 4: API Key ============
281
260
  console.log(chalk_1.default.white.bold('🔑 API Key Configuration\n'));
@@ -315,37 +294,19 @@ async function main() {
315
294
  console.log(chalk_1.default.green(`✓ API key validated: ${maskApiKey(apiKey)}`));
316
295
  console.log();
317
296
  // ============ STEP 5: Write Configuration ============
318
- const writeSpinner = (0, ora_1.default)('Writing configuration to shell profile...').start();
297
+ const writeSpinner = (0, ora_1.default)('Writing configuration...').start();
319
298
  try {
320
- const { profilePath, commands } = writeEnvToProfile(selectedTool, apiKey);
321
- writeSpinner.succeed(chalk_1.default.green('Configuration saved to shell profile'));
299
+ const configFile = writeConfig(selectedTool, apiKey);
300
+ writeSpinner.succeed(chalk_1.default.green('Configuration saved'));
322
301
  console.log();
323
302
  console.log(chalk_1.default.gray('━'.repeat(60)));
324
303
  console.log();
325
304
  console.log(chalk_1.default.green.bold('✅ PrimeLLM configured successfully!'));
326
305
  console.log();
327
- console.log(chalk_1.default.white('Environment variables added:'));
328
- commands.forEach(cmd => {
329
- console.log(chalk_1.default.cyan(` ${cmd}`));
330
- });
331
- console.log();
332
- console.log(chalk_1.default.gray(`Profile location: ${profilePath}`));
333
- console.log();
334
- console.log(chalk_1.default.yellow.bold('⚠ IMPORTANT: To apply the changes, run one of the following:'));
335
- console.log();
336
- const os = (0, os_1.platform)();
337
- if (os === 'win32') {
338
- console.log(chalk_1.default.cyan(' 1. Restart PowerShell'));
339
- console.log(chalk_1.default.cyan(' 2. Or run: . $PROFILE'));
340
- }
341
- else {
342
- const shell = process.env.SHELL || '/bin/bash';
343
- const shellName = shell.split('/').pop();
344
- console.log(chalk_1.default.cyan(` 1. Restart your terminal`));
345
- console.log(chalk_1.default.cyan(` 2. Or run: source ${profilePath}`));
346
- }
306
+ console.log(chalk_1.default.gray(`Config file: ${configFile}`));
307
+ console.log(chalk_1.default.gray(`Base URL: ${PRIMELLM_BASE_URL}`));
347
308
  console.log();
348
- console.log(chalk_1.default.white('Then you can use:'));
309
+ console.log(chalk_1.default.white('You can now use:'));
349
310
  console.log(chalk_1.default.cyan(` ${toolInfo.command}`));
350
311
  console.log(chalk_1.default.white('with PrimeLLM as the backend.'));
351
312
  console.log();
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.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Configure Claude Code and Codex to use PrimeLLM as the backend",
5
5
  "bin": {
6
6
  "primellm": "./dist/index.js"
package/src/index.ts CHANGED
@@ -5,8 +5,8 @@ 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, appendFileSync, mkdirSync } from 'fs';
9
- import { join, dirname } from 'path';
8
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
9
+ import { join } from 'path';
10
10
  import open from 'open';
11
11
  import Enquirer from 'enquirer';
12
12
 
@@ -19,19 +19,23 @@ const { prompt } = Enquirer;
19
19
  const PRIMELLM_BASE_URL = 'https://api.primellm.in/v1';
20
20
  const PRIMELLM_DASHBOARD_URL = 'https://primellm.in/dashboard/api-keys';
21
21
 
22
- // Tool configuration - uses environment variables
22
+ // Tool configuration
23
23
  const TOOLS = {
24
24
  'Claude Code': {
25
25
  command: 'claude',
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',
29
31
  },
30
32
  'Codex': {
31
33
  command: 'codex',
32
34
  package: '@openai/codex',
33
35
  envKeyName: 'OPENAI_API_KEY',
34
36
  envBaseName: 'OPENAI_BASE_URL',
37
+ configDir: '.codex',
38
+ configFile: 'config.json',
35
39
  },
36
40
  } as const;
37
41
 
@@ -72,48 +76,6 @@ function commandExists(cmd: string): boolean {
72
76
  }
73
77
  }
74
78
 
75
- // ============================================================================
76
- // SHELL PROFILE DETECTION
77
- // ============================================================================
78
-
79
- function getShellProfilePath(): string {
80
- const home = homedir();
81
- const os = platform();
82
-
83
- if (os === 'win32') {
84
- // Windows uses PowerShell profile
85
- return join(home, 'Documents', 'PowerShell', 'Microsoft.PowerShell_profile.ps1');
86
- }
87
-
88
- // Unix-like systems
89
- const shell = process.env.SHELL || '';
90
-
91
- if (shell.includes('zsh')) {
92
- return join(home, '.zshrc');
93
- } else if (shell.includes('fish')) {
94
- return join(home, '.config', 'fish', 'config.fish');
95
- } else {
96
- // Default to .bashrc
97
- return join(home, '.bashrc');
98
- }
99
- }
100
-
101
- function formatEnvExport(key: string, value: string): string {
102
- const os = platform();
103
- const shell = process.env.SHELL || '';
104
-
105
- if (os === 'win32') {
106
- // PowerShell format
107
- return `$env:${key} = "${value}"`;
108
- } else if (shell.includes('fish')) {
109
- // Fish shell format
110
- return `set -gx ${key} "${value}"`;
111
- } else {
112
- // Bash/Zsh format
113
- return `export ${key}="${value}"`;
114
- }
115
- }
116
-
117
79
  // ============================================================================
118
80
  // ASCII ART & DISPLAY
119
81
  // ============================================================================
@@ -150,58 +112,72 @@ function displaySystemInfo(): void {
150
112
  // CONFIGURATION
151
113
  // ============================================================================
152
114
 
153
- function checkExistingEnvVars(tool: ToolName): { apiKey?: string; baseUrl?: string } {
115
+ function getConfigPath(tool: ToolName): { dir: string; file: string } {
116
+ const home = homedir();
154
117
  const toolInfo = TOOLS[tool];
155
- return {
156
- apiKey: process.env[toolInfo.envKeyName],
157
- baseUrl: process.env[toolInfo.envBaseName],
158
- };
118
+ const dir = join(home, toolInfo.configDir);
119
+ const file = join(dir, toolInfo.configFile);
120
+ return { dir, file };
159
121
  }
160
122
 
161
- function writeEnvToProfile(tool: ToolName, apiKey: string): { profilePath: string; commands: string[] } {
162
- const toolInfo = TOOLS[tool];
163
- const profilePath = getShellProfilePath();
164
-
165
- const keyExport = formatEnvExport(toolInfo.envKeyName, apiKey);
166
- const baseExport = formatEnvExport(toolInfo.envBaseName, PRIMELLM_BASE_URL);
167
-
168
- const marker = `# PrimeLLM Configuration for ${tool}`;
169
- const endMarker = `# End PrimeLLM Configuration for ${tool}`;
170
-
171
- const configBlock = `
172
- ${marker}
173
- ${keyExport}
174
- ${baseExport}
175
- ${endMarker}
176
- `;
177
-
178
- // Check if profile exists and if our config is already there
179
- if (existsSync(profilePath)) {
180
- const content = readFileSync(profilePath, 'utf8');
181
-
182
- if (content.includes(marker)) {
183
- // Replace existing config
184
- const regex = new RegExp(`${marker}[\\s\\S]*?${endMarker}`, 'g');
185
- const newContent = content.replace(regex, configBlock.trim());
186
- writeFileSync(profilePath, newContent);
187
- } else {
188
- // Append new config
189
- appendFileSync(profilePath, configBlock);
123
+ interface ClaudeSettings {
124
+ env?: Record<string, string>;
125
+ [key: string]: unknown;
126
+ }
127
+
128
+ interface CodexConfig {
129
+ apiKey?: string;
130
+ baseUrl?: string;
131
+ [key: string]: unknown;
132
+ }
133
+
134
+ function readExistingConfig(tool: ToolName): ClaudeSettings | CodexConfig | null {
135
+ const { file } = getConfigPath(tool);
136
+ try {
137
+ if (existsSync(file)) {
138
+ const content = readFileSync(file, 'utf8');
139
+ return JSON.parse(content);
190
140
  }
141
+ } catch {
142
+ // Config doesn't exist or is invalid
143
+ }
144
+ return null;
145
+ }
146
+
147
+ function writeConfig(tool: ToolName, apiKey: string): string {
148
+ const { dir, file } = getConfigPath(tool);
149
+ const toolInfo = TOOLS[tool];
150
+
151
+ // Create directory if it doesn't exist
152
+ if (!existsSync(dir)) {
153
+ mkdirSync(dir, { recursive: true });
154
+ }
155
+
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));
191
170
  } else {
192
- // Create parent directory if it doesn't exist
193
- const profileDir = dirname(profilePath);
194
- if (!existsSync(profileDir)) {
195
- mkdirSync(profileDir, { recursive: true });
196
- }
197
- // Create new profile with config
198
- writeFileSync(profilePath, configBlock);
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));
199
178
  }
200
179
 
201
- return {
202
- profilePath,
203
- commands: [keyExport, baseExport],
204
- };
180
+ return file;
205
181
  }
206
182
 
207
183
  // ============================================================================
@@ -300,26 +276,38 @@ async function main(): Promise<void> {
300
276
  console.log();
301
277
 
302
278
  // ============ STEP 3: Check Existing Config ============
303
- const existing = checkExistingEnvVars(selectedTool);
304
-
305
- if (existing.apiKey || existing.baseUrl) {
306
- console.log(chalk.yellow('⚠ Existing environment configuration found:\n'));
307
- console.log(chalk.gray(` ${toolInfo.envKeyName}: ${existing.apiKey ? maskApiKey(existing.apiKey) : '(not set)'}`));
308
- console.log(chalk.gray(` ${toolInfo.envBaseName}: ${existing.baseUrl || '(not set)'}`));
309
- console.log();
310
-
311
- const { confirmOverwrite } = await prompt<{ confirmOverwrite: boolean }>({
312
- type: 'confirm',
313
- name: 'confirmOverwrite',
314
- message: 'Do you want to overwrite this configuration?',
315
- initial: true,
316
- });
317
-
318
- if (!confirmOverwrite) {
319
- console.log(chalk.yellow('\n⚠ Configuration cancelled.'));
320
- process.exit(0);
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();
321
310
  }
322
- console.log();
323
311
  }
324
312
 
325
313
  // ============ STEP 4: API Key ============
@@ -366,11 +354,11 @@ async function main(): Promise<void> {
366
354
  console.log();
367
355
 
368
356
  // ============ STEP 5: Write Configuration ============
369
- const writeSpinner = ora('Writing configuration to shell profile...').start();
357
+ const writeSpinner = ora('Writing configuration...').start();
370
358
 
371
359
  try {
372
- const { profilePath, commands } = writeEnvToProfile(selectedTool, apiKey);
373
- writeSpinner.succeed(chalk.green('Configuration saved to shell profile'));
360
+ const configFile = writeConfig(selectedTool, apiKey);
361
+ writeSpinner.succeed(chalk.green('Configuration saved'));
374
362
 
375
363
  console.log();
376
364
  console.log(chalk.gray('━'.repeat(60)));
@@ -378,31 +366,11 @@ async function main(): Promise<void> {
378
366
  console.log(chalk.green.bold('✅ PrimeLLM configured successfully!'));
379
367
  console.log();
380
368
 
381
- console.log(chalk.white('Environment variables added:'));
382
- commands.forEach(cmd => {
383
- console.log(chalk.cyan(` ${cmd}`));
384
- });
385
- console.log();
386
-
387
- console.log(chalk.gray(`Profile location: ${profilePath}`));
388
- console.log();
389
-
390
- console.log(chalk.yellow.bold('⚠ IMPORTANT: To apply the changes, run one of the following:'));
369
+ console.log(chalk.gray(`Config file: ${configFile}`));
370
+ console.log(chalk.gray(`Base URL: ${PRIMELLM_BASE_URL}`));
391
371
  console.log();
392
372
 
393
- const os = platform();
394
- if (os === 'win32') {
395
- console.log(chalk.cyan(' 1. Restart PowerShell'));
396
- console.log(chalk.cyan(' 2. Or run: . $PROFILE'));
397
- } else {
398
- const shell = process.env.SHELL || '/bin/bash';
399
- const shellName = shell.split('/').pop();
400
- console.log(chalk.cyan(` 1. Restart your terminal`));
401
- console.log(chalk.cyan(` 2. Or run: source ${profilePath}`));
402
- }
403
-
404
- console.log();
405
- console.log(chalk.white('Then you can use:'));
373
+ console.log(chalk.white('You can now use:'));
406
374
  console.log(chalk.cyan(` ${toolInfo.command}`));
407
375
  console.log(chalk.white('with PrimeLLM as the backend.'));
408
376
  console.log();