ccenv-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/LICENSE +21 -0
- package/README.md +206 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +172 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/profile.d.ts +28 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +278 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/wizard.d.ts +3 -0
- package/dist/commands/wizard.d.ts.map +1 -0
- package/dist/commands/wizard.js +180 -0
- package/dist/commands/wizard.js.map +1 -0
- package/dist/lib/config.d.ts +12 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +94 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/shell.d.ts +6 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +151 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/templates/providers.d.ts +5 -0
- package/dist/templates/providers.d.ts.map +1 -0
- package/dist/templates/providers.js +119 -0
- package/dist/templates/providers.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// Shell script generators for different shells
|
|
2
|
+
export function generateEnvVars(profile) {
|
|
3
|
+
const env = {};
|
|
4
|
+
// Set the base URL
|
|
5
|
+
if (profile.baseUrl) {
|
|
6
|
+
env.ANTHROPIC_BASE_URL = profile.baseUrl;
|
|
7
|
+
}
|
|
8
|
+
// Set the auth token (API key)
|
|
9
|
+
if (profile.apiKey) {
|
|
10
|
+
env.ANTHROPIC_AUTH_TOKEN = profile.apiKey;
|
|
11
|
+
}
|
|
12
|
+
// Set the model if specified
|
|
13
|
+
if (profile.model) {
|
|
14
|
+
env.ANTHROPIC_MODEL = profile.model;
|
|
15
|
+
}
|
|
16
|
+
// Handle ANTHROPIC_API_KEY clearing
|
|
17
|
+
if (profile.clearAnthropicKey) {
|
|
18
|
+
env.ANTHROPIC_API_KEY = ''; // Empty string signals to unset
|
|
19
|
+
}
|
|
20
|
+
// Add any extra environment variables
|
|
21
|
+
if (profile.extraEnv) {
|
|
22
|
+
Object.assign(env, profile.extraEnv);
|
|
23
|
+
}
|
|
24
|
+
return env;
|
|
25
|
+
}
|
|
26
|
+
export function generateShellScript(profile, shell) {
|
|
27
|
+
const env = generateEnvVars(profile);
|
|
28
|
+
switch (shell) {
|
|
29
|
+
case 'bash':
|
|
30
|
+
case 'zsh':
|
|
31
|
+
return generateBashScript(env, profile);
|
|
32
|
+
case 'fish':
|
|
33
|
+
return generateFishScript(env, profile);
|
|
34
|
+
case 'powershell':
|
|
35
|
+
return generatePowerShellScript(env, profile);
|
|
36
|
+
case 'cmd':
|
|
37
|
+
return generateCmdScript(env, profile);
|
|
38
|
+
default:
|
|
39
|
+
return generateBashScript(env, profile);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function generateBashScript(env, profile) {
|
|
43
|
+
const lines = [
|
|
44
|
+
`# Claude Env - Profile: ${profile.name}`,
|
|
45
|
+
`# Generated: ${new Date().toISOString()}`,
|
|
46
|
+
''
|
|
47
|
+
];
|
|
48
|
+
for (const [key, value] of Object.entries(env)) {
|
|
49
|
+
if (value === '') {
|
|
50
|
+
lines.push(`unset ${key}`);
|
|
51
|
+
}
|
|
52
|
+
else if (value !== undefined) {
|
|
53
|
+
// Escape special characters
|
|
54
|
+
const escaped = value.replace(/'/g, "'\\''");
|
|
55
|
+
lines.push(`export ${key}='${escaped}'`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
lines.push('');
|
|
59
|
+
lines.push(`# Active profile: ${profile.name}`);
|
|
60
|
+
lines.push(`export CCX_ACTIVE_PROFILE='${profile.name}'`);
|
|
61
|
+
return lines.join('\n');
|
|
62
|
+
}
|
|
63
|
+
function generateFishScript(env, profile) {
|
|
64
|
+
const lines = [
|
|
65
|
+
`# Claude Env - Profile: ${profile.name}`,
|
|
66
|
+
`# Generated: ${new Date().toISOString()}`,
|
|
67
|
+
''
|
|
68
|
+
];
|
|
69
|
+
for (const [key, value] of Object.entries(env)) {
|
|
70
|
+
if (value === '') {
|
|
71
|
+
lines.push(`set -e ${key}`);
|
|
72
|
+
}
|
|
73
|
+
else if (value !== undefined) {
|
|
74
|
+
const escaped = value.replace(/'/g, "\\'");
|
|
75
|
+
lines.push(`set -gx ${key} '${escaped}'`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
lines.push('');
|
|
79
|
+
lines.push(`set -gx CCX_ACTIVE_PROFILE '${profile.name}'`);
|
|
80
|
+
return lines.join('\n');
|
|
81
|
+
}
|
|
82
|
+
function generatePowerShellScript(env, profile) {
|
|
83
|
+
const lines = [];
|
|
84
|
+
for (const [key, value] of Object.entries(env)) {
|
|
85
|
+
if (value === '') {
|
|
86
|
+
lines.push(`Remove-Item Env:\\${key} -ErrorAction SilentlyContinue`);
|
|
87
|
+
}
|
|
88
|
+
else if (value !== undefined) {
|
|
89
|
+
// Escape for PowerShell
|
|
90
|
+
const escaped = value.replace(/'/g, "''");
|
|
91
|
+
lines.push(`$env:${key} = '${escaped}'`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
lines.push(`$env:CCX_ACTIVE_PROFILE = '${profile.name}'`);
|
|
95
|
+
// Join with semicolons for PowerShell to handle as single expression
|
|
96
|
+
return lines.join('; ');
|
|
97
|
+
}
|
|
98
|
+
function generateCmdScript(env, profile) {
|
|
99
|
+
const lines = [
|
|
100
|
+
`@REM Claude Env - Profile: ${profile.name}`,
|
|
101
|
+
`@REM Generated: ${new Date().toISOString()}`,
|
|
102
|
+
''
|
|
103
|
+
];
|
|
104
|
+
for (const [key, value] of Object.entries(env)) {
|
|
105
|
+
if (value === '') {
|
|
106
|
+
lines.push(`set ${key}=`);
|
|
107
|
+
}
|
|
108
|
+
else if (value !== undefined) {
|
|
109
|
+
lines.push(`set ${key}=${value}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
lines.push('');
|
|
113
|
+
lines.push(`set CCX_ACTIVE_PROFILE=${profile.name}`);
|
|
114
|
+
return lines.join('\n');
|
|
115
|
+
}
|
|
116
|
+
export function generateResetScript(shell) {
|
|
117
|
+
const varsToUnset = [
|
|
118
|
+
'ANTHROPIC_BASE_URL',
|
|
119
|
+
'ANTHROPIC_AUTH_TOKEN',
|
|
120
|
+
'ANTHROPIC_MODEL',
|
|
121
|
+
'CCX_ACTIVE_PROFILE'
|
|
122
|
+
];
|
|
123
|
+
switch (shell) {
|
|
124
|
+
case 'bash':
|
|
125
|
+
case 'zsh':
|
|
126
|
+
return varsToUnset.map(v => `unset ${v}`).join('\n');
|
|
127
|
+
case 'fish':
|
|
128
|
+
return varsToUnset.map(v => `set -e ${v}`).join('\n');
|
|
129
|
+
case 'powershell':
|
|
130
|
+
return varsToUnset.map(v => `Remove-Item Env:\\${v} -ErrorAction SilentlyContinue`).join('; ');
|
|
131
|
+
case 'cmd':
|
|
132
|
+
return varsToUnset.map(v => `set ${v}=`).join('\n');
|
|
133
|
+
default:
|
|
134
|
+
return varsToUnset.map(v => `unset ${v}`).join('\n');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export function detectShell() {
|
|
138
|
+
const shell = process.env.SHELL || process.env.ComSpec || '';
|
|
139
|
+
if (shell.includes('fish'))
|
|
140
|
+
return 'fish';
|
|
141
|
+
if (shell.includes('zsh'))
|
|
142
|
+
return 'zsh';
|
|
143
|
+
if (shell.includes('bash'))
|
|
144
|
+
return 'bash';
|
|
145
|
+
if (shell.includes('powershell') || shell.includes('pwsh'))
|
|
146
|
+
return 'powershell';
|
|
147
|
+
if (process.platform === 'win32')
|
|
148
|
+
return 'powershell';
|
|
149
|
+
return 'bash';
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/lib/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ProviderTemplate } from '../types.js';
|
|
2
|
+
export declare const providerTemplates: ProviderTemplate[];
|
|
3
|
+
export declare function getTemplate(name: string): ProviderTemplate | undefined;
|
|
4
|
+
export declare function listTemplates(): ProviderTemplate[];
|
|
5
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/templates/providers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EA8G/C,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEtE;AAED,wBAAgB,aAAa,IAAI,gBAAgB,EAAE,CAElD"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Pre-built provider templates for quick setup
|
|
2
|
+
export const providerTemplates = [
|
|
3
|
+
{
|
|
4
|
+
name: 'official',
|
|
5
|
+
displayName: 'Anthropic Official',
|
|
6
|
+
description: 'Official Anthropic API - Uses your ANTHROPIC_API_KEY',
|
|
7
|
+
baseUrl: 'https://api.anthropic.com',
|
|
8
|
+
defaultModel: 'claude-sonnet-4-20250514',
|
|
9
|
+
requiresApiKey: false, // Uses existing ANTHROPIC_API_KEY
|
|
10
|
+
clearAnthropicKey: false,
|
|
11
|
+
setupInstructions: 'Uses your existing ANTHROPIC_API_KEY environment variable.'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'openrouter',
|
|
15
|
+
displayName: 'OpenRouter',
|
|
16
|
+
description: 'Access multiple AI models through OpenRouter',
|
|
17
|
+
baseUrl: 'https://openrouter.ai/api',
|
|
18
|
+
defaultModel: 'anthropic/claude-sonnet-4',
|
|
19
|
+
requiresApiKey: true,
|
|
20
|
+
clearAnthropicKey: true,
|
|
21
|
+
setupInstructions: 'Get your API key at https://openrouter.ai/keys'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'openrouter-minimax',
|
|
25
|
+
displayName: 'OpenRouter (MiniMax M2.1)',
|
|
26
|
+
description: 'Budget-friendly MiniMax M2.1 via OpenRouter',
|
|
27
|
+
baseUrl: 'https://openrouter.ai/api',
|
|
28
|
+
defaultModel: 'minimax/minimax-m1-80k',
|
|
29
|
+
requiresApiKey: true,
|
|
30
|
+
clearAnthropicKey: true,
|
|
31
|
+
setupInstructions: 'Get your API key at https://openrouter.ai/keys'
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'openrouter-deepseek',
|
|
35
|
+
displayName: 'OpenRouter (DeepSeek)',
|
|
36
|
+
description: 'DeepSeek models via OpenRouter',
|
|
37
|
+
baseUrl: 'https://openrouter.ai/api',
|
|
38
|
+
defaultModel: 'deepseek/deepseek-chat-v3-0324',
|
|
39
|
+
requiresApiKey: true,
|
|
40
|
+
clearAnthropicKey: true,
|
|
41
|
+
setupInstructions: 'Get your API key at https://openrouter.ai/keys'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'deepseek',
|
|
45
|
+
displayName: 'DeepSeek Direct',
|
|
46
|
+
description: 'Direct DeepSeek API access',
|
|
47
|
+
baseUrl: 'https://api.deepseek.com',
|
|
48
|
+
defaultModel: 'deepseek-chat',
|
|
49
|
+
requiresApiKey: true,
|
|
50
|
+
clearAnthropicKey: true,
|
|
51
|
+
setupInstructions: 'Get your API key at https://platform.deepseek.com/'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'gemini',
|
|
55
|
+
displayName: 'Google Gemini',
|
|
56
|
+
description: 'Google Gemini models via AI Studio',
|
|
57
|
+
baseUrl: 'https://generativelanguage.googleapis.com/v1beta',
|
|
58
|
+
defaultModel: 'gemini-2.5-flash',
|
|
59
|
+
requiresApiKey: true,
|
|
60
|
+
clearAnthropicKey: true,
|
|
61
|
+
setupInstructions: 'Get your API key at https://aistudio.google.com/apikey'
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'ollama',
|
|
65
|
+
displayName: 'Ollama (Local)',
|
|
66
|
+
description: 'Local Ollama instance for offline AI',
|
|
67
|
+
baseUrl: 'http://localhost:11434/v1',
|
|
68
|
+
defaultModel: 'qwen2.5-coder:latest',
|
|
69
|
+
requiresApiKey: false,
|
|
70
|
+
clearAnthropicKey: true,
|
|
71
|
+
setupInstructions: 'Make sure Ollama is running: ollama serve'
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'lmstudio',
|
|
75
|
+
displayName: 'LM Studio (Local)',
|
|
76
|
+
description: 'Local LM Studio instance',
|
|
77
|
+
baseUrl: 'http://localhost:1234/v1',
|
|
78
|
+
defaultModel: 'local-model',
|
|
79
|
+
requiresApiKey: false,
|
|
80
|
+
clearAnthropicKey: true,
|
|
81
|
+
setupInstructions: 'Start LM Studio and load a model with local server enabled'
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'groq',
|
|
85
|
+
displayName: 'Groq',
|
|
86
|
+
description: 'Ultra-fast inference with Groq',
|
|
87
|
+
baseUrl: 'https://api.groq.com/openai/v1',
|
|
88
|
+
defaultModel: 'llama-3.3-70b-versatile',
|
|
89
|
+
requiresApiKey: true,
|
|
90
|
+
clearAnthropicKey: true,
|
|
91
|
+
setupInstructions: 'Get your API key at https://console.groq.com/keys'
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'together',
|
|
95
|
+
displayName: 'Together AI',
|
|
96
|
+
description: 'Together AI inference platform',
|
|
97
|
+
baseUrl: 'https://api.together.xyz/v1',
|
|
98
|
+
defaultModel: 'meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo',
|
|
99
|
+
requiresApiKey: true,
|
|
100
|
+
clearAnthropicKey: true,
|
|
101
|
+
setupInstructions: 'Get your API key at https://api.together.xyz/'
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'custom',
|
|
105
|
+
displayName: 'Custom Provider',
|
|
106
|
+
description: 'Configure your own custom API endpoint',
|
|
107
|
+
baseUrl: '',
|
|
108
|
+
requiresApiKey: true,
|
|
109
|
+
clearAnthropicKey: true,
|
|
110
|
+
setupInstructions: 'Enter your custom API base URL and credentials'
|
|
111
|
+
}
|
|
112
|
+
];
|
|
113
|
+
export function getTemplate(name) {
|
|
114
|
+
return providerTemplates.find(t => t.name === name);
|
|
115
|
+
}
|
|
116
|
+
export function listTemplates() {
|
|
117
|
+
return providerTemplates;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/templates/providers.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface Profile {
|
|
2
|
+
name: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
provider: string;
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
model?: string;
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
clearAnthropicKey: boolean;
|
|
9
|
+
extraEnv?: Record<string, string>;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
updatedAt: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ProfileConfig {
|
|
14
|
+
profiles: Record<string, Profile>;
|
|
15
|
+
activeProfile: string | null;
|
|
16
|
+
settings: {
|
|
17
|
+
encryptionEnabled: boolean;
|
|
18
|
+
defaultShell: 'bash' | 'zsh' | 'fish' | 'powershell' | 'cmd';
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface ProviderTemplate {
|
|
22
|
+
name: string;
|
|
23
|
+
displayName: string;
|
|
24
|
+
description: string;
|
|
25
|
+
baseUrl: string;
|
|
26
|
+
defaultModel?: string;
|
|
27
|
+
requiresApiKey: boolean;
|
|
28
|
+
clearAnthropicKey: boolean;
|
|
29
|
+
setupInstructions?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface EnvVars {
|
|
32
|
+
ANTHROPIC_BASE_URL?: string;
|
|
33
|
+
ANTHROPIC_AUTH_TOKEN?: string;
|
|
34
|
+
ANTHROPIC_MODEL?: string;
|
|
35
|
+
ANTHROPIC_API_KEY?: string;
|
|
36
|
+
[key: string]: string | undefined;
|
|
37
|
+
}
|
|
38
|
+
export type ShellType = 'bash' | 'zsh' | 'fish' | 'powershell' | 'cmd';
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE;QACR,iBAAiB,EAAE,OAAO,CAAC;QAC3B,YAAY,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;KAC9D,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,kCAAkC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ccenv-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Switch Claude Code backends instantly. Like nvm, but for AI providers. Zero server required.",
|
|
5
|
+
"main": "dist/cli.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"ccx": "./dist/cli.js",
|
|
8
|
+
"ccenv": "./dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"prepublishOnly": "npm run build",
|
|
14
|
+
"dev": "npx ts-node src/cli.ts",
|
|
15
|
+
"start": "node dist/cli.js",
|
|
16
|
+
"test": "node --test"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"claude",
|
|
20
|
+
"claude-code",
|
|
21
|
+
"anthropic",
|
|
22
|
+
"openrouter",
|
|
23
|
+
"deepseek",
|
|
24
|
+
"ollama",
|
|
25
|
+
"ai",
|
|
26
|
+
"llm",
|
|
27
|
+
"environment",
|
|
28
|
+
"profile-manager",
|
|
29
|
+
"cli",
|
|
30
|
+
"developer-tools"
|
|
31
|
+
],
|
|
32
|
+
"author": "bhadra",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/bhadraagada/ccenv"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/bhadraagada/ccenv/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/bhadraagada/ccenv#readme",
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"README.md",
|
|
45
|
+
"LICENSE"
|
|
46
|
+
],
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@inquirer/prompts": "^7.2.1",
|
|
49
|
+
"commander": "^12.1.0",
|
|
50
|
+
"conf": "^13.0.1"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^20.17.0",
|
|
54
|
+
"typescript": "^5.6.3",
|
|
55
|
+
"ts-node": "^10.9.2"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=18.0.0"
|
|
59
|
+
}
|
|
60
|
+
}
|