@wangxiaoerqqq/ccs 2.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/CHANGELOG.md +52 -0
- package/LICENSE +21 -0
- package/README.md +287 -0
- package/dist/commands/current.d.ts +2 -0
- package/dist/commands/current.d.ts.map +1 -0
- package/dist/commands/current.js +29 -0
- package/dist/commands/current.js.map +1 -0
- package/dist/commands/edit.d.ts +2 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +21 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +47 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +31 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/models.d.ts +2 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +44 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/set-key.d.ts +2 -0
- package/dist/commands/set-key.d.ts.map +1 -0
- package/dist/commands/set-key.js +51 -0
- package/dist/commands/set-key.js.map +1 -0
- package/dist/commands/switch.d.ts +3 -0
- package/dist/commands/switch.d.ts.map +1 -0
- package/dist/commands/switch.js +83 -0
- package/dist/commands/switch.js.map +1 -0
- package/dist/config/crypto.d.ts +5 -0
- package/dist/config/crypto.d.ts.map +1 -0
- package/dist/config/crypto.js +89 -0
- package/dist/config/crypto.js.map +1 -0
- package/dist/config/manager.d.ts +28 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +188 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +99 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/defaults.d.ts +22 -0
- package/dist/providers/defaults.d.ts.map +1 -0
- package/dist/providers/defaults.js +160 -0
- package/dist/providers/defaults.js.map +1 -0
- package/dist/providers/registry.d.ts +20 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +81 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +51 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/platform.d.ts +11 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +50 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/reload.d.ts +4 -0
- package/dist/utils/reload.d.ts.map +1 -0
- package/dist/utils/reload.js +51 -0
- package/dist/utils/reload.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
// Default provider configurations
|
|
2
|
+
// Users can customize by editing ~/.config/ccs/providers.json
|
|
3
|
+
export const defaultProviders = {
|
|
4
|
+
aliyun: {
|
|
5
|
+
name: '阿里百炼',
|
|
6
|
+
env: {
|
|
7
|
+
ANTHROPIC_BASE_URL: 'https://api.deepseek.com/anthropic'
|
|
8
|
+
},
|
|
9
|
+
models: {
|
|
10
|
+
'qwen-turbo': { name: 'Qwen Turbo', model: 'qwen-turbo', default: true },
|
|
11
|
+
'qwen-plus': { name: 'Qwen Plus', model: 'qwen-plus' },
|
|
12
|
+
'qwen-max': { name: 'Qwen Max', model: 'qwen-max' },
|
|
13
|
+
'qwen-long': { name: 'Qwen Long', model: 'qwen-long' },
|
|
14
|
+
'deepseek-v3': { name: 'DeepSeek V3', model: 'deepseek-v3' },
|
|
15
|
+
'deepseek-r1': { name: 'DeepSeek R1', model: 'deepseek-r1' }
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
zhipu: {
|
|
19
|
+
name: '智谱 GLM',
|
|
20
|
+
env: {
|
|
21
|
+
ANTHROPIC_BASE_URL: 'https://open.bigmodel.cn/api/anthropic'
|
|
22
|
+
},
|
|
23
|
+
models: {
|
|
24
|
+
'glm-5.1': { name: 'GLM-5.1', model: 'glm-5.1', default: true },
|
|
25
|
+
'glm-5-turbo': { name: 'GLM-5 Turbo', model: 'glm-5-turbo' },
|
|
26
|
+
'glm-4.7': { name: 'GLM-4.7', model: 'glm-4.7' },
|
|
27
|
+
'glm-4.5-air': { name: 'GLM-4.5 Air', model: 'glm-4.5-air' }
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
volc: {
|
|
31
|
+
name: '火山引擎豆包',
|
|
32
|
+
env: {
|
|
33
|
+
ANTHROPIC_BASE_URL: 'https://ark.cn-beijing.volces.com/api/v3',
|
|
34
|
+
ENDPOINT_ID: '替换为你的 endpoint_id'
|
|
35
|
+
},
|
|
36
|
+
models: {
|
|
37
|
+
'doubao-pro-32k': { name: 'Doubao Pro 32K', model: 'doubao-pro-32k', default: true },
|
|
38
|
+
'doubao-pro-128k': { name: 'Doubao Pro 128K', model: 'doubao-pro-128k' },
|
|
39
|
+
'doubao-lite-32k': { name: 'Doubao Lite 32K', model: 'doubao-lite-32k' },
|
|
40
|
+
'doubao-lite-128k': { name: 'Doubao Lite 128K', model: 'doubao-lite-128k' },
|
|
41
|
+
'doubao-1.5-pro-32k': { name: 'Doubao 1.5 Pro 32K', model: 'doubao-1.5-pro-32k' },
|
|
42
|
+
'doubao-1.5-pro-256k': { name: 'Doubao 1.5 Pro 256K', model: 'doubao-1.5-pro-256k' }
|
|
43
|
+
},
|
|
44
|
+
note: '将 env.ENDPOINT_ID 替换为实际的火山引擎 endpoint_id'
|
|
45
|
+
},
|
|
46
|
+
deepseek: {
|
|
47
|
+
name: 'DeepSeek',
|
|
48
|
+
env: {
|
|
49
|
+
ANTHROPIC_BASE_URL: 'https://api.deepseek.com/anthropic',
|
|
50
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: 'deepseek-v4-pro[1m]',
|
|
51
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: 'deepseek-v4-pro[1m]',
|
|
52
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL: 'deepseek-v4-flash',
|
|
53
|
+
CLAUDE_CODE_SUBAGENT_MODEL: 'deepseek-v4-flash',
|
|
54
|
+
CLAUDE_CODE_EFFORT_LEVEL: 'max',
|
|
55
|
+
API_TIMEOUT_MS: '3000000',
|
|
56
|
+
CLAUDE_CODE_MAX_OUTPUT_TOKENS: '8192',
|
|
57
|
+
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: '1'
|
|
58
|
+
},
|
|
59
|
+
models: {
|
|
60
|
+
'v4pro': { name: 'DeepSeek V4 Pro', model: 'deepseek-v4-pro[1m]', default: true },
|
|
61
|
+
'v4flash': {
|
|
62
|
+
name: 'DeepSeek V4 Flash',
|
|
63
|
+
model: 'deepseek-v4-flash',
|
|
64
|
+
env: {
|
|
65
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: 'deepseek-v4-flash',
|
|
66
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: 'deepseek-v4-flash'
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
moonshot: {
|
|
72
|
+
name: 'Moonshot Kimi',
|
|
73
|
+
env: {
|
|
74
|
+
ANTHROPIC_BASE_URL: 'https://api.moonshot.cn/v1'
|
|
75
|
+
},
|
|
76
|
+
models: {
|
|
77
|
+
'kimi-k2.6': { name: 'Kimi K2.6', model: 'kimi-k2.6', default: true },
|
|
78
|
+
'kimi-k2.5': { name: 'Kimi K2.5', model: 'kimi-k2.5' },
|
|
79
|
+
'kimi-8k': { name: 'Kimi 8K', model: 'moonshot-v1-8k' },
|
|
80
|
+
'kimi-32k': { name: 'Kimi 32K', model: 'moonshot-v1-32k' },
|
|
81
|
+
'kimi-128k': { name: 'Kimi 128K', model: 'moonshot-v1-128k' }
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
minimax: {
|
|
85
|
+
name: 'MiniMax',
|
|
86
|
+
env: {
|
|
87
|
+
ANTHROPIC_BASE_URL: 'https://api.minimaxi.com/anthropic'
|
|
88
|
+
},
|
|
89
|
+
models: {
|
|
90
|
+
'm3': { name: 'MiniMax-M3', model: 'MiniMax-M3', default: true },
|
|
91
|
+
'm2.7': { name: 'MiniMax-M2.7', model: 'MiniMax-M2.7' },
|
|
92
|
+
'm2.7-fast': { name: 'MiniMax-M2.7-highspeed', model: 'MiniMax-M2.7-highspeed' },
|
|
93
|
+
'm2.5': { name: 'MiniMax-M2.5', model: 'MiniMax-M2.5' },
|
|
94
|
+
'm2.5-fast': { name: 'MiniMax-M2.5-highspeed', model: 'MiniMax-M2.5-highspeed' },
|
|
95
|
+
'm2.1': { name: 'MiniMax-M2.1', model: 'MiniMax-M2.1' },
|
|
96
|
+
'm2.1-fast': { name: 'MiniMax-M2.1-highspeed', model: 'MiniMax-M2.1-highspeed' },
|
|
97
|
+
'm2': { name: 'MiniMax-M2', model: 'MiniMax-M2' }
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
anthropic: {
|
|
101
|
+
name: 'Anthropic 官方',
|
|
102
|
+
env: {
|
|
103
|
+
ANTHROPIC_BASE_URL: 'https://api.anthropic.com'
|
|
104
|
+
},
|
|
105
|
+
models: {
|
|
106
|
+
'claude-sonnet-4-6': { name: 'Claude Sonnet 4.6', model: 'claude-sonnet-4-6', default: true },
|
|
107
|
+
'claude-opus-4-6': { name: 'Claude Opus 4.6', model: 'claude-opus-4-6' },
|
|
108
|
+
'claude-haiku-4-5': { name: 'Claude Haiku 4.5', model: 'claude-haiku-4-5' }
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
longcat: {
|
|
112
|
+
name: '美团官方',
|
|
113
|
+
env: {
|
|
114
|
+
ANTHROPIC_BASE_URL: 'https://api.longcat.chat/anthropic'
|
|
115
|
+
},
|
|
116
|
+
models: {
|
|
117
|
+
'longcat-2-preview': { name: 'LongCat-2.0-Preview', model: 'LongCat-2.0-Preview', default: true }
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
// Get default model for a provider
|
|
122
|
+
export function getDefaultModel(providerId) {
|
|
123
|
+
const provider = defaultProviders[providerId];
|
|
124
|
+
if (!provider)
|
|
125
|
+
return null;
|
|
126
|
+
for (const [modelId, config] of Object.entries(provider.models)) {
|
|
127
|
+
if (config.default) {
|
|
128
|
+
return modelId;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const models = Object.keys(provider.models);
|
|
132
|
+
return models.length > 0 ? models[0] : null;
|
|
133
|
+
}
|
|
134
|
+
// Get provider display name
|
|
135
|
+
export function getProviderName(providerId) {
|
|
136
|
+
return defaultProviders[providerId]?.name || providerId;
|
|
137
|
+
}
|
|
138
|
+
// Get model display name
|
|
139
|
+
export function getModelName(providerId, modelId) {
|
|
140
|
+
return defaultProviders[providerId]?.models[modelId]?.name || modelId;
|
|
141
|
+
}
|
|
142
|
+
// Check if provider exists
|
|
143
|
+
export function isValidProvider(providerId) {
|
|
144
|
+
return providerId in defaultProviders;
|
|
145
|
+
}
|
|
146
|
+
// Check if model exists for provider
|
|
147
|
+
export function isValidModel(providerId, modelId) {
|
|
148
|
+
const provider = defaultProviders[providerId];
|
|
149
|
+
return provider ? modelId in provider.models : false;
|
|
150
|
+
}
|
|
151
|
+
// Get all provider IDs
|
|
152
|
+
export function getProviderIds() {
|
|
153
|
+
return Object.keys(defaultProviders);
|
|
154
|
+
}
|
|
155
|
+
// Get all models for a provider
|
|
156
|
+
export function getModels(providerId) {
|
|
157
|
+
const provider = defaultProviders[providerId];
|
|
158
|
+
return provider ? Object.keys(provider.models) : [];
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/providers/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ProviderConfig } from './defaults.js';
|
|
2
|
+
export declare function getAvailableProviders(): Record<string, ProviderConfig>;
|
|
3
|
+
export declare function hasApiKey(provider: string): boolean;
|
|
4
|
+
export declare function getProvider(provider: string): ProviderConfig | null;
|
|
5
|
+
export declare function providerExists(provider: string): boolean;
|
|
6
|
+
export declare function modelExists(provider: string, model: string): boolean;
|
|
7
|
+
export declare function getProviderDefaultModel(provider: string): string | null;
|
|
8
|
+
export declare function getProviderModels(provider: string): string[];
|
|
9
|
+
export declare function getProviderDisplayName(provider: string): string;
|
|
10
|
+
export declare function getModelDisplayName(provider: string, model: string): string;
|
|
11
|
+
export declare function getRealModelName(provider: string, modelCode: string): string | null;
|
|
12
|
+
export interface ProviderStatus {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
hasApiKey: boolean;
|
|
16
|
+
modelCount: number;
|
|
17
|
+
defaultModel: string | null;
|
|
18
|
+
}
|
|
19
|
+
export declare function listProvidersWithStatus(): ProviderStatus[];
|
|
20
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAEtE;AAGD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAGD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAGnE;AAGD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGxD;AAGD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIpE;AAGD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYvE;AAGD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAI5D;AAGD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG/D;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI3E;AAGD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInF;AAGD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,uBAAuB,IAAI,cAAc,EAAE,CAe1D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// Provider registry - manages available providers and models
|
|
2
|
+
import { loadProviders, getApiKey } from '../config/manager.js';
|
|
3
|
+
// Get all available providers
|
|
4
|
+
export function getAvailableProviders() {
|
|
5
|
+
return loadProviders();
|
|
6
|
+
}
|
|
7
|
+
// Check if a provider has API key set
|
|
8
|
+
export function hasApiKey(provider) {
|
|
9
|
+
return getApiKey(provider) !== null;
|
|
10
|
+
}
|
|
11
|
+
// Get provider config
|
|
12
|
+
export function getProvider(provider) {
|
|
13
|
+
const providers = loadProviders();
|
|
14
|
+
return providers[provider] || null;
|
|
15
|
+
}
|
|
16
|
+
// Check if a provider exists
|
|
17
|
+
export function providerExists(provider) {
|
|
18
|
+
const providers = loadProviders();
|
|
19
|
+
return provider in providers;
|
|
20
|
+
}
|
|
21
|
+
// Check if a model exists for a provider
|
|
22
|
+
export function modelExists(provider, model) {
|
|
23
|
+
const providerConfig = getProvider(provider);
|
|
24
|
+
if (!providerConfig)
|
|
25
|
+
return false;
|
|
26
|
+
return model in providerConfig.models;
|
|
27
|
+
}
|
|
28
|
+
// Get default model for a provider (returns codename)
|
|
29
|
+
export function getProviderDefaultModel(provider) {
|
|
30
|
+
const providerConfig = getProvider(provider);
|
|
31
|
+
if (!providerConfig)
|
|
32
|
+
return null;
|
|
33
|
+
for (const [modelId, config] of Object.entries(providerConfig.models)) {
|
|
34
|
+
if (config.default) {
|
|
35
|
+
return modelId;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const models = Object.keys(providerConfig.models);
|
|
39
|
+
return models.length > 0 ? models[0] : null;
|
|
40
|
+
}
|
|
41
|
+
// Get all models for a provider (returns codenames)
|
|
42
|
+
export function getProviderModels(provider) {
|
|
43
|
+
const providerConfig = getProvider(provider);
|
|
44
|
+
if (!providerConfig)
|
|
45
|
+
return [];
|
|
46
|
+
return Object.keys(providerConfig.models);
|
|
47
|
+
}
|
|
48
|
+
// Get provider display name
|
|
49
|
+
export function getProviderDisplayName(provider) {
|
|
50
|
+
const providerConfig = getProvider(provider);
|
|
51
|
+
return providerConfig?.name || provider;
|
|
52
|
+
}
|
|
53
|
+
// Get model display name
|
|
54
|
+
export function getModelDisplayName(provider, model) {
|
|
55
|
+
const providerConfig = getProvider(provider);
|
|
56
|
+
if (!providerConfig)
|
|
57
|
+
return model;
|
|
58
|
+
return providerConfig.models[model]?.name || model;
|
|
59
|
+
}
|
|
60
|
+
// Get the real API model name for a model codename
|
|
61
|
+
export function getRealModelName(provider, modelCode) {
|
|
62
|
+
const providerConfig = getProvider(provider);
|
|
63
|
+
if (!providerConfig)
|
|
64
|
+
return null;
|
|
65
|
+
return providerConfig.models[modelCode]?.model || null;
|
|
66
|
+
}
|
|
67
|
+
export function listProvidersWithStatus() {
|
|
68
|
+
const providers = loadProviders();
|
|
69
|
+
const result = [];
|
|
70
|
+
for (const [id, config] of Object.entries(providers)) {
|
|
71
|
+
result.push({
|
|
72
|
+
id,
|
|
73
|
+
name: config.name,
|
|
74
|
+
hasApiKey: hasApiKey(id),
|
|
75
|
+
modelCount: Object.keys(config.models).length,
|
|
76
|
+
defaultModel: getProviderDefaultModel(id)
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const logger: {
|
|
2
|
+
success: (message: string) => void;
|
|
3
|
+
error: (message: string) => void;
|
|
4
|
+
warning: (message: string) => void;
|
|
5
|
+
info: (message: string) => void;
|
|
6
|
+
log: (message: string) => void;
|
|
7
|
+
debug: (message: string) => void;
|
|
8
|
+
title: (message: string) => void;
|
|
9
|
+
item: (key: string, value: string, indent?: number) => void;
|
|
10
|
+
separator: () => void;
|
|
11
|
+
};
|
|
12
|
+
export declare function formatProviderModel(provider: string, model: string, providerName?: string): string;
|
|
13
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM;uBAEE,MAAM,KAAG,IAAI;qBAKf,MAAM,KAAG,IAAI;uBAKX,MAAM,KAAG,IAAI;oBAKhB,MAAM,KAAG,IAAI;mBAKd,MAAM,KAAG,IAAI;qBAKX,MAAM,KAAG,IAAI;qBAOb,MAAM,KAAG,IAAI;gBAOlB,MAAM,SAAS,MAAM,WAAU,MAAM,KAAO,IAAI;qBAM7C,IAAI;CAGpB,CAAC;AAGF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Terminal logging utilities
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export const logger = {
|
|
4
|
+
// Success message (green checkmark)
|
|
5
|
+
success: (message) => {
|
|
6
|
+
console.log(chalk.green('✓'), message);
|
|
7
|
+
},
|
|
8
|
+
// Error message (red x)
|
|
9
|
+
error: (message) => {
|
|
10
|
+
console.error(chalk.red('✗'), message);
|
|
11
|
+
},
|
|
12
|
+
// Warning message (yellow)
|
|
13
|
+
warning: (message) => {
|
|
14
|
+
console.log(chalk.yellow('⚠'), message);
|
|
15
|
+
},
|
|
16
|
+
// Info message (blue)
|
|
17
|
+
info: (message) => {
|
|
18
|
+
console.log(chalk.blue('ℹ'), message);
|
|
19
|
+
},
|
|
20
|
+
// Plain message
|
|
21
|
+
log: (message) => {
|
|
22
|
+
console.log(message);
|
|
23
|
+
},
|
|
24
|
+
// Debug message (gray, only if DEBUG env is set)
|
|
25
|
+
debug: (message) => {
|
|
26
|
+
if (process.env.DEBUG) {
|
|
27
|
+
console.log(chalk.gray('[debug]'), message);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
// Print a header/title
|
|
31
|
+
title: (message) => {
|
|
32
|
+
console.log();
|
|
33
|
+
console.log(chalk.bold(chalk.cyan(message)));
|
|
34
|
+
console.log();
|
|
35
|
+
},
|
|
36
|
+
// Print a list item
|
|
37
|
+
item: (key, value, indent = 2) => {
|
|
38
|
+
const spaces = ' '.repeat(indent);
|
|
39
|
+
console.log(`${spaces}${chalk.dim(key)}: ${value}`);
|
|
40
|
+
},
|
|
41
|
+
// Print a separator line
|
|
42
|
+
separator: () => {
|
|
43
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
// Format provider/model for display
|
|
47
|
+
export function formatProviderModel(provider, model, providerName) {
|
|
48
|
+
const name = providerName || provider;
|
|
49
|
+
return `${chalk.cyan(name)} ${chalk.dim('/')} ${chalk.white(model)}`;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,oCAAoC;IACpC,OAAO,EAAE,CAAC,OAAe,EAAQ,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,wBAAwB;IACxB,KAAK,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,2BAA2B;IAC3B,OAAO,EAAE,CAAC,OAAe,EAAQ,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,sBAAsB;IACtB,IAAI,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB;IAChB,GAAG,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,iDAAiD;IACjD,KAAK,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,KAAK,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC/B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,IAAI,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,SAAiB,CAAC,EAAQ,EAAE;QAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,yBAAyB;IACzB,SAAS,EAAE,GAAS,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;CACF,CAAC;AAEF,oCAAoC;AACpC,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,KAAa,EAAE,YAAqB;IACxF,MAAM,IAAI,GAAG,YAAY,IAAI,QAAQ,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function getConfigDir(): string;
|
|
2
|
+
export declare function getClaudeSettingsPath(): string;
|
|
3
|
+
export declare function getProvidersPath(): string;
|
|
4
|
+
export declare function getSecretsPath(): string;
|
|
5
|
+
export declare function getCurrentPath(): string;
|
|
6
|
+
export declare function isWindows(): boolean;
|
|
7
|
+
export declare function isMacOS(): boolean;
|
|
8
|
+
export declare function isLinux(): boolean;
|
|
9
|
+
export declare function getHostname(): string;
|
|
10
|
+
export declare function getHomeDir(): string;
|
|
11
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,IAAI,MAAM,CAKrC;AAGD,wBAAgB,qBAAqB,IAAI,MAAM,CAK9C;AAGD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAGD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAGD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAGD,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAGD,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAGD,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAGD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAGD,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Cross-platform utilities
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
// Get config directory path
|
|
5
|
+
export function getConfigDir() {
|
|
6
|
+
if (process.platform === 'win32') {
|
|
7
|
+
return path.join(process.env.APPDATA || '', 'ccs');
|
|
8
|
+
}
|
|
9
|
+
return path.join(os.homedir(), '.config', 'ccs');
|
|
10
|
+
}
|
|
11
|
+
// Get Claude Code settings.json path
|
|
12
|
+
export function getClaudeSettingsPath() {
|
|
13
|
+
if (process.platform === 'win32') {
|
|
14
|
+
return path.join(process.env.USERPROFILE || '', '.claude', 'settings.json');
|
|
15
|
+
}
|
|
16
|
+
return path.join(os.homedir(), '.claude', 'settings.json');
|
|
17
|
+
}
|
|
18
|
+
// Get providers config path
|
|
19
|
+
export function getProvidersPath() {
|
|
20
|
+
return path.join(getConfigDir(), 'providers.json');
|
|
21
|
+
}
|
|
22
|
+
// Get secrets config path (encrypted API keys)
|
|
23
|
+
export function getSecretsPath() {
|
|
24
|
+
return path.join(getConfigDir(), 'secrets.enc');
|
|
25
|
+
}
|
|
26
|
+
// Get current selection config path
|
|
27
|
+
export function getCurrentPath() {
|
|
28
|
+
return path.join(getConfigDir(), 'current.json');
|
|
29
|
+
}
|
|
30
|
+
// Check if we're on Windows
|
|
31
|
+
export function isWindows() {
|
|
32
|
+
return process.platform === 'win32';
|
|
33
|
+
}
|
|
34
|
+
// Check if we're on macOS
|
|
35
|
+
export function isMacOS() {
|
|
36
|
+
return process.platform === 'darwin';
|
|
37
|
+
}
|
|
38
|
+
// Check if we're on Linux
|
|
39
|
+
export function isLinux() {
|
|
40
|
+
return process.platform === 'linux';
|
|
41
|
+
}
|
|
42
|
+
// Get machine hostname
|
|
43
|
+
export function getHostname() {
|
|
44
|
+
return os.hostname();
|
|
45
|
+
}
|
|
46
|
+
// Get home directory
|
|
47
|
+
export function getHomeDir() {
|
|
48
|
+
return os.homedir();
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,4BAA4B;AAC5B,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,qBAAqB;IACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AAC7D,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACrD,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AACtC,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,OAAO;IACrB,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACvC,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,OAAO;IACrB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AACtC,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,WAAW;IACzB,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload.d.ts","sourceRoot":"","sources":["../../src/utils/reload.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAiB7C;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQrD;AAGD,wBAAgB,aAAa,IAAI,IAAI,CAkBpC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Hot reload utilities - send SIGHUP to Claude Code process
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
// Find Claude Code process PID
|
|
5
|
+
export function findClaudePid() {
|
|
6
|
+
try {
|
|
7
|
+
// Find claude process (excluding grep)
|
|
8
|
+
const output = execSync('pgrep -f "claude" | head -1', {
|
|
9
|
+
encoding: 'utf8',
|
|
10
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
11
|
+
}).trim();
|
|
12
|
+
const pid = parseInt(output, 10);
|
|
13
|
+
if (isNaN(pid) || pid <= 0) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return pid;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Send SIGHUP signal to reload Claude Code
|
|
23
|
+
export function sendReloadSignal(pid) {
|
|
24
|
+
try {
|
|
25
|
+
process.kill(pid, 'SIGHUP');
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
logger.debug(`Failed to send SIGHUP: ${error}`);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Reload command implementation
|
|
34
|
+
export function reloadCommand() {
|
|
35
|
+
const pid = findClaudePid();
|
|
36
|
+
if (!pid) {
|
|
37
|
+
logger.warning('Claude Code is not running');
|
|
38
|
+
logger.info('Settings will be applied on next startup');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const success = sendReloadSignal(pid);
|
|
42
|
+
if (success) {
|
|
43
|
+
logger.success(`Sent reload signal to Claude Code (PID: ${pid})`);
|
|
44
|
+
logger.info('Session will continue with new settings');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
logger.error('Failed to send reload signal');
|
|
48
|
+
logger.info('Try running "/reload" in Claude Code manually');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=reload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload.js","sourceRoot":"","sources":["../../src/utils/reload.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,+BAA+B;AAC/B,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,6BAA6B,EAAE;YACrD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,CAAC,2CAA2C,GAAG,GAAG,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wangxiaoerqqq/ccs",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"description": "Claude Code Switcher - A CLI tool to quickly switch AI providers and models",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"bin": {
|
|
11
|
+
"ccs": "dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"test": "vitest",
|
|
17
|
+
"lint": "eslint src --ext .ts",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"claude",
|
|
22
|
+
"claude-code",
|
|
23
|
+
"cli",
|
|
24
|
+
"ai-tools",
|
|
25
|
+
"provider-switcher",
|
|
26
|
+
"anthropic",
|
|
27
|
+
"openai-compatible"
|
|
28
|
+
],
|
|
29
|
+
"author": "genzhen",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"README.md",
|
|
34
|
+
"CHANGELOG.md",
|
|
35
|
+
"LICENSE"
|
|
36
|
+
],
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"chalk": "^5.3.0",
|
|
39
|
+
"commander": "^12.0.0",
|
|
40
|
+
"conf": "^12.0.0",
|
|
41
|
+
"inquirer": "^9.2.0",
|
|
42
|
+
"open": "^10.0.0",
|
|
43
|
+
"ora": "^8.0.0",
|
|
44
|
+
"update-notifier": "^7.0.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/inquirer": "^9.0.0",
|
|
48
|
+
"@types/node": "^20.0.0",
|
|
49
|
+
"@types/update-notifier": "^6.0.0",
|
|
50
|
+
"typescript": "^5.4.0",
|
|
51
|
+
"vitest": "^1.5.0"
|
|
52
|
+
},
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=18.0.0"
|
|
55
|
+
},
|
|
56
|
+
"repository": {
|
|
57
|
+
"type": "git",
|
|
58
|
+
"url": "https://gitee.com/xiaoerlangqqq/ccs.git"
|
|
59
|
+
},
|
|
60
|
+
"bugs": {
|
|
61
|
+
"url": "https://gitee.com/xiaoerlangqqq/ccs/issues"
|
|
62
|
+
},
|
|
63
|
+
"homepage": "https://gitee.com/xiaoerlangqqq/ccs#readme"
|
|
64
|
+
}
|