@delta1035/ccs-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.
Files changed (47) hide show
  1. package/README.md +174 -0
  2. package/USAGE.md +110 -0
  3. package/dist/commands/configCommands.d.ts +3 -0
  4. package/dist/commands/configCommands.d.ts.map +1 -0
  5. package/dist/commands/configCommands.js +149 -0
  6. package/dist/commands/configCommands.js.map +1 -0
  7. package/dist/commands/mcpCommands.d.ts +3 -0
  8. package/dist/commands/mcpCommands.d.ts.map +1 -0
  9. package/dist/commands/mcpCommands.js +129 -0
  10. package/dist/commands/mcpCommands.js.map +1 -0
  11. package/dist/commands/presetCommands.d.ts +3 -0
  12. package/dist/commands/presetCommands.d.ts.map +1 -0
  13. package/dist/commands/presetCommands.js +64 -0
  14. package/dist/commands/presetCommands.js.map +1 -0
  15. package/dist/commands/presets.d.ts +25 -0
  16. package/dist/commands/presets.d.ts.map +1 -0
  17. package/dist/commands/presets.js +88 -0
  18. package/dist/commands/presets.js.map +1 -0
  19. package/dist/commands/providerCommands.d.ts +3 -0
  20. package/dist/commands/providerCommands.d.ts.map +1 -0
  21. package/dist/commands/providerCommands.js +247 -0
  22. package/dist/commands/providerCommands.js.map +1 -0
  23. package/dist/commands/sessionCommands.d.ts +3 -0
  24. package/dist/commands/sessionCommands.d.ts.map +1 -0
  25. package/dist/commands/sessionCommands.js +146 -0
  26. package/dist/commands/sessionCommands.js.map +1 -0
  27. package/dist/commands/usageCommands.d.ts +3 -0
  28. package/dist/commands/usageCommands.d.ts.map +1 -0
  29. package/dist/commands/usageCommands.js +71 -0
  30. package/dist/commands/usageCommands.js.map +1 -0
  31. package/dist/core/providerService.d.ts +13 -0
  32. package/dist/core/providerService.d.ts.map +1 -0
  33. package/dist/core/providerService.js +180 -0
  34. package/dist/core/providerService.js.map +1 -0
  35. package/dist/database/db.d.ts +31 -0
  36. package/dist/database/db.d.ts.map +1 -0
  37. package/dist/database/db.js +126 -0
  38. package/dist/database/db.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +51 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/types/index.d.ts +74 -0
  44. package/dist/types/index.d.ts.map +1 -0
  45. package/dist/types/index.js +4 -0
  46. package/dist/types/index.js.map +1 -0
  47. package/package.json +63 -0
@@ -0,0 +1,13 @@
1
+ import { Provider, ProviderConfig } from '../types';
2
+ export declare class ProviderService {
3
+ static getAllProviders(): Provider[];
4
+ static getEnabledProvider(): Provider | null;
5
+ static addProvider(name: string, type: Provider['type'], config: ProviderConfig): Provider;
6
+ static updateProvider(id: string, updates: Partial<Provider>): Provider;
7
+ static deleteProvider(id: string): void;
8
+ static switchProvider(id: string): Provider;
9
+ static getProviderById(id: string): Provider | null;
10
+ private static getNextOrder;
11
+ private static applyProviderConfig;
12
+ }
13
+ //# sourceMappingURL=providerService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerService.d.ts","sourceRoot":"","sources":["../../src/core/providerService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGpD,qBAAa,eAAe;IAE1B,MAAM,CAAC,eAAe,IAAI,QAAQ,EAAE;IAepC,MAAM,CAAC,kBAAkB,IAAI,QAAQ,GAAG,IAAI;IAiB5C,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,GAAG,QAAQ;IA8B1F,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ;IAiBvE,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKvC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAuB3C,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAgBnD,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B,OAAO,CAAC,MAAM,CAAC,mBAAmB;CA4DnC"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProviderService = void 0;
7
+ const db_1 = __importDefault(require("../database/db"));
8
+ const uuid_1 = require("uuid");
9
+ class ProviderService {
10
+ // 获取所有提供商
11
+ static getAllProviders() {
12
+ const providers = db_1.default.getProviders();
13
+ return providers.map(row => ({
14
+ id: row.id,
15
+ name: row.name,
16
+ type: row.type,
17
+ config: row.config,
18
+ enabled: row.enabled,
19
+ order: row.order,
20
+ createdAt: new Date(row.createdAt),
21
+ updatedAt: new Date(row.updatedAt)
22
+ }));
23
+ }
24
+ // 获取启用的提供商
25
+ static getEnabledProvider() {
26
+ const providers = db_1.default.getProviders();
27
+ const provider = providers.find(p => p.enabled);
28
+ if (!provider)
29
+ return null;
30
+ return {
31
+ id: provider.id,
32
+ name: provider.name,
33
+ type: provider.type,
34
+ config: provider.config,
35
+ enabled: provider.enabled,
36
+ order: provider.order,
37
+ createdAt: new Date(provider.createdAt),
38
+ updatedAt: new Date(provider.updatedAt)
39
+ };
40
+ }
41
+ // 添加提供商
42
+ static addProvider(name, type, config) {
43
+ const id = (0, uuid_1.v4)();
44
+ const order = this.getNextOrder();
45
+ const provider = {
46
+ id,
47
+ name,
48
+ type,
49
+ config,
50
+ enabled: false,
51
+ order,
52
+ createdAt: new Date().toISOString(),
53
+ updatedAt: new Date().toISOString()
54
+ };
55
+ db_1.default.addProvider(provider);
56
+ return {
57
+ id,
58
+ name,
59
+ type,
60
+ config,
61
+ enabled: false,
62
+ order,
63
+ createdAt: new Date(),
64
+ updatedAt: new Date()
65
+ };
66
+ }
67
+ // 更新提供商
68
+ static updateProvider(id, updates) {
69
+ const existing = this.getProviderById(id);
70
+ if (!existing) {
71
+ throw new Error(`Provider with id ${id} not found`);
72
+ }
73
+ const updated = { ...existing, ...updates, updatedAt: new Date() };
74
+ db_1.default.updateProvider(id, {
75
+ ...updated,
76
+ createdAt: updated.createdAt.toISOString(),
77
+ updatedAt: updated.updatedAt.toISOString()
78
+ });
79
+ return updated;
80
+ }
81
+ // 删除提供商
82
+ static deleteProvider(id) {
83
+ db_1.default.deleteProvider(id);
84
+ }
85
+ // 切换提供商
86
+ static switchProvider(id) {
87
+ // 先禁用所有提供商
88
+ const providers = db_1.default.getProviders();
89
+ providers.forEach(p => {
90
+ db_1.default.updateProvider(p.id, { enabled: false, updatedAt: new Date().toISOString() });
91
+ });
92
+ // 启用指定的提供商
93
+ db_1.default.updateProvider(id, { enabled: true, updatedAt: new Date().toISOString() });
94
+ // 返回启用的提供商
95
+ const provider = this.getProviderById(id);
96
+ if (!provider) {
97
+ throw new Error(`Provider with id ${id} not found`);
98
+ }
99
+ // 更新配置文件
100
+ this.applyProviderConfig(provider);
101
+ return { ...provider, enabled: true };
102
+ }
103
+ // 获取提供商详情
104
+ static getProviderById(id) {
105
+ const provider = db_1.default.getProvider(id);
106
+ if (!provider)
107
+ return null;
108
+ return {
109
+ id: provider.id,
110
+ name: provider.name,
111
+ type: provider.type,
112
+ config: provider.config,
113
+ enabled: provider.enabled,
114
+ order: provider.order,
115
+ createdAt: new Date(provider.createdAt),
116
+ updatedAt: new Date(provider.updatedAt)
117
+ };
118
+ }
119
+ // 获取下一个排序号
120
+ static getNextOrder() {
121
+ const providers = db_1.default.getProviders();
122
+ if (providers.length === 0)
123
+ return 1;
124
+ return Math.max(...providers.map(p => p.order || 0)) + 1;
125
+ }
126
+ // 应用提供商配置到配置文件
127
+ static applyProviderConfig(provider) {
128
+ const fs = require('fs');
129
+ const path = require('path');
130
+ const os = require('os');
131
+ const homeDir = os.homedir();
132
+ const configDir = path.join(homeDir, '.cc-switch', 'configs');
133
+ if (!fs.existsSync(configDir)) {
134
+ fs.mkdirSync(configDir, { recursive: true });
135
+ }
136
+ // 根据提供商类型写入不同的配置文件
137
+ let configFile;
138
+ let configContent;
139
+ switch (provider.type) {
140
+ case 'claude':
141
+ configFile = path.join(configDir, 'claude-config.json');
142
+ configContent = JSON.stringify({
143
+ apiKey: provider.config.apiKey,
144
+ apiEndpoint: provider.config.apiEndpoint,
145
+ model: provider.config.model,
146
+ temperature: provider.config.temperature,
147
+ maxTokens: provider.config.maxTokens,
148
+ customHeaders: provider.config.customHeaders
149
+ }, null, 2);
150
+ break;
151
+ case 'codex':
152
+ configFile = path.join(configDir, 'codex-config.json');
153
+ configContent = JSON.stringify({
154
+ apiKey: provider.config.apiKey,
155
+ apiEndpoint: provider.config.apiEndpoint,
156
+ model: provider.config.model
157
+ }, null, 2);
158
+ break;
159
+ case 'gemini':
160
+ configFile = path.join(configDir, 'gemini-config.json');
161
+ configContent = JSON.stringify({
162
+ apiKey: provider.config.apiKey,
163
+ apiEndpoint: provider.config.apiEndpoint,
164
+ model: provider.config.model
165
+ }, null, 2);
166
+ break;
167
+ default:
168
+ configFile = path.join(configDir, `${provider.type}-config.json`);
169
+ configContent = JSON.stringify(provider.config, null, 2);
170
+ }
171
+ // 原子写入配置文件
172
+ const tempFile = configFile + '.tmp';
173
+ fs.writeFileSync(tempFile, configContent, 'utf-8');
174
+ fs.renameSync(tempFile, configFile);
175
+ console.log(`✅ 已切换到提供商: ${provider.name}`);
176
+ console.log(` 配置文件: ${configFile}`);
177
+ }
178
+ }
179
+ exports.ProviderService = ProviderService;
180
+ //# sourceMappingURL=providerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerService.js","sourceRoot":"","sources":["../../src/core/providerService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ interface DataStore {
2
+ providers: any[];
3
+ settings: any;
4
+ sessions: any[];
5
+ mcpConfigs: any[];
6
+ skills: any[];
7
+ usageStats: any[];
8
+ }
9
+ export declare class Database {
10
+ private data;
11
+ constructor();
12
+ save(): void;
13
+ getAll(): DataStore;
14
+ getProviders(): any[];
15
+ addProvider(provider: any): void;
16
+ updateProvider(id: string, updates: any): void;
17
+ deleteProvider(id: string): void;
18
+ getProvider(id: string): any | undefined;
19
+ getSessions(): any[];
20
+ addSession(session: any): void;
21
+ deleteSession(id: string): void;
22
+ getMcpConfigs(): any[];
23
+ addMcpConfig(config: any): void;
24
+ deleteMcpConfig(name: string): void;
25
+ getUsageStats(): any[];
26
+ addUsageStat(stat: any): void;
27
+ resetUsageStats(): void;
28
+ }
29
+ export declare const db: Database;
30
+ export default db;
31
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAcA,UAAU,SAAS;IACjB,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,QAAQ,EAAE,GAAG,CAAC;IACd,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,UAAU,EAAE,GAAG,EAAE,CAAC;CACnB;AAsCD,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAY;;IAOxB,IAAI,IAAI,IAAI;IAKZ,MAAM,IAAI,SAAS;IAKnB,YAAY,IAAI,GAAG,EAAE;IAIrB,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAKhC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;IAQ9C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKhC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAKxC,WAAW,IAAI,GAAG,EAAE;IAIpB,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAK9B,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM/B,aAAa,IAAI,GAAG,EAAE;IAItB,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAK/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMnC,aAAa,IAAI,GAAG,EAAE;IAItB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAK7B,eAAe,IAAI,IAAI;CAIxB;AAGD,eAAO,MAAM,EAAE,UAAiB,CAAC;AACjC,eAAe,EAAE,CAAC"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.db = exports.Database = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const HOME_DIR = os_1.default.homedir();
11
+ const CC_SWITCH_DIR = path_1.default.join(HOME_DIR, '.cc-switch');
12
+ const DB_PATH = path_1.default.join(CC_SWITCH_DIR, 'data.json');
13
+ // 确保配置目录存在
14
+ if (!fs_1.default.existsSync(CC_SWITCH_DIR)) {
15
+ fs_1.default.mkdirSync(CC_SWITCH_DIR, { recursive: true });
16
+ }
17
+ // 默认数据
18
+ const defaultData = {
19
+ providers: [],
20
+ settings: {
21
+ theme: 'light',
22
+ autoUpdate: true,
23
+ cloudSync: { enabled: false },
24
+ usageTracking: { enabled: true }
25
+ },
26
+ sessions: [],
27
+ mcpConfigs: [],
28
+ skills: [],
29
+ usageStats: []
30
+ };
31
+ // 读取数据
32
+ function readData() {
33
+ try {
34
+ if (fs_1.default.existsSync(DB_PATH)) {
35
+ const content = fs_1.default.readFileSync(DB_PATH, 'utf-8');
36
+ return JSON.parse(content);
37
+ }
38
+ }
39
+ catch (error) {
40
+ console.warn('Failed to read data file, using defaults:', error);
41
+ }
42
+ return { ...defaultData };
43
+ }
44
+ // 写入数据
45
+ function writeData(data) {
46
+ const tempPath = DB_PATH + '.tmp';
47
+ fs_1.default.writeFileSync(tempPath, JSON.stringify(data, null, 2), 'utf-8');
48
+ fs_1.default.renameSync(tempPath, DB_PATH);
49
+ }
50
+ // 数据库操作类
51
+ class Database {
52
+ constructor() {
53
+ this.data = readData();
54
+ }
55
+ // 保存数据
56
+ save() {
57
+ writeData(this.data);
58
+ }
59
+ // 获取所有数据
60
+ getAll() {
61
+ return { ...this.data };
62
+ }
63
+ // 提供商操作
64
+ getProviders() {
65
+ return [...this.data.providers];
66
+ }
67
+ addProvider(provider) {
68
+ this.data.providers.push(provider);
69
+ this.save();
70
+ }
71
+ updateProvider(id, updates) {
72
+ const index = this.data.providers.findIndex(p => p.id === id);
73
+ if (index !== -1) {
74
+ this.data.providers[index] = { ...this.data.providers[index], ...updates };
75
+ this.save();
76
+ }
77
+ }
78
+ deleteProvider(id) {
79
+ this.data.providers = this.data.providers.filter(p => p.id !== id);
80
+ this.save();
81
+ }
82
+ getProvider(id) {
83
+ return this.data.providers.find(p => p.id === id);
84
+ }
85
+ // 会话操作
86
+ getSessions() {
87
+ return [...this.data.sessions];
88
+ }
89
+ addSession(session) {
90
+ this.data.sessions.push(session);
91
+ this.save();
92
+ }
93
+ deleteSession(id) {
94
+ this.data.sessions = this.data.sessions.filter(s => s.id !== id);
95
+ this.save();
96
+ }
97
+ // MCP 配置操作
98
+ getMcpConfigs() {
99
+ return [...this.data.mcpConfigs];
100
+ }
101
+ addMcpConfig(config) {
102
+ this.data.mcpConfigs.push(config);
103
+ this.save();
104
+ }
105
+ deleteMcpConfig(name) {
106
+ this.data.mcpConfigs = this.data.mcpConfigs.filter(c => c.name !== name);
107
+ this.save();
108
+ }
109
+ // 使用统计操作
110
+ getUsageStats() {
111
+ return [...this.data.usageStats];
112
+ }
113
+ addUsageStat(stat) {
114
+ this.data.usageStats.push(stat);
115
+ this.save();
116
+ }
117
+ resetUsageStats() {
118
+ this.data.usageStats = [];
119
+ this.save();
120
+ }
121
+ }
122
+ exports.Database = Database;
123
+ // 导出单例实例
124
+ exports.db = new Database();
125
+ exports.default = exports.db;
126
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,QAAQ,GAAG,YAAE,CAAC,OAAO,EAAE,CAAC;AAC9B,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACxD,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAEtD,WAAW;AACX,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;IAClC,YAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAYD,OAAO;AACP,MAAM,WAAW,GAAc;IAC7B,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO;QACd,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QAC7B,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KACjC;IACD,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,OAAO;AACP,SAAS,QAAQ;IACf,IAAI,CAAC;QACH,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED,OAAO;AACP,SAAS,SAAS,CAAC,IAAe;IAChC,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAClC,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,YAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAS;AACT,MAAa,QAAQ;IAGnB;QACE,IAAI,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;IACP,IAAI;QACF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,SAAS;IACT,MAAM;QACJ,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,QAAQ;IACR,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,WAAW,CAAC,QAAa;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,cAAc,CAAC,EAAU,EAAE,OAAY;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;YAC3E,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,cAAc,CAAC,EAAU;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO;IACP,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,UAAU,CAAC,OAAY;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,WAAW;IACX,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,MAAW;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,SAAS;IACT,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,IAAS;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;CACF;AAxFD,4BAwFC;AAED,SAAS;AACI,QAAA,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;AACjC,kBAAe,UAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const providerCommands_1 = require("./commands/providerCommands");
10
+ const configCommands_1 = require("./commands/configCommands");
11
+ const sessionCommands_1 = require("./commands/sessionCommands");
12
+ const mcpCommands_1 = require("./commands/mcpCommands");
13
+ const usageCommands_1 = require("./commands/usageCommands");
14
+ const presetCommands_1 = require("./commands/presetCommands");
15
+ const program = new commander_1.Command();
16
+ program
17
+ .name('ccs')
18
+ .description('AI CLI Tool Manager - Switch between Claude, Codex, Gemini, and more')
19
+ .version('1.0.0');
20
+ // 注册所有命令
21
+ (0, providerCommands_1.registerProviderCommands)(program);
22
+ (0, configCommands_1.registerConfigCommands)(program);
23
+ (0, sessionCommands_1.registerSessionCommands)(program);
24
+ (0, mcpCommands_1.registerMcpCommands)(program);
25
+ (0, usageCommands_1.registerUsageCommands)(program);
26
+ (0, presetCommands_1.registerPresetCommands)(program);
27
+ // 添加帮助命令
28
+ program
29
+ .command('help')
30
+ .description('Show help')
31
+ .action(() => {
32
+ program.outputHelp();
33
+ });
34
+ // 解析命令行参数
35
+ program.parse(process.argv);
36
+ // 如果没有提供命令,显示帮助
37
+ if (!process.argv.slice(2).length) {
38
+ console.log(chalk_1.default.bold('\n🤖 CC Switch - AI CLI Tool Manager\n'));
39
+ console.log(chalk_1.default.gray('Usage: ccs <command> [options]\n'));
40
+ console.log(chalk_1.default.bold('Available commands:'));
41
+ console.log(' provider Manage AI providers');
42
+ console.log(' preset Manage provider presets');
43
+ console.log(' config Manage configuration');
44
+ console.log(' session Manage sessions');
45
+ console.log(' mcp Manage MCP configurations');
46
+ console.log(' usage View usage statistics');
47
+ console.log(' help Show help');
48
+ console.log('\nRun "ccs <command> --help" for more information on a command.');
49
+ console.log('');
50
+ }
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,kEAAuE;AACvE,8DAAmE;AACnE,gEAAqE;AACrE,wDAA6D;AAC7D,4DAAiE;AACjE,8DAAmE;AAEnE,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,sEAAsE,CAAC;KACnF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,SAAS;AACT,IAAA,2CAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,uCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,yCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,iCAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,qCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,uCAAsB,EAAC,OAAO,CAAC,CAAC;AAEhC,SAAS;AACT,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,WAAW,CAAC;KACxB,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,UAAU;AACV,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,gBAAgB;AAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,74 @@
1
+ export interface Provider {
2
+ id: string;
3
+ name: string;
4
+ type: 'claude' | 'codex' | 'gemini' | 'opencode' | 'openclaw';
5
+ config: ProviderConfig;
6
+ enabled: boolean;
7
+ order: number;
8
+ createdAt: Date;
9
+ updatedAt: Date;
10
+ }
11
+ export interface ProviderConfig {
12
+ apiKey?: string;
13
+ apiEndpoint?: string;
14
+ model?: string;
15
+ temperature?: number;
16
+ maxTokens?: number;
17
+ customHeaders?: Record<string, string>;
18
+ proxy?: ProxyConfig;
19
+ }
20
+ export interface ProxyConfig {
21
+ enabled: boolean;
22
+ host: string;
23
+ port: number;
24
+ failoverEnabled: boolean;
25
+ failoverEndpoints: string[];
26
+ }
27
+ export interface AppSettings {
28
+ theme: 'light' | 'dark';
29
+ autoUpdate: boolean;
30
+ cloudSync: {
31
+ enabled: boolean;
32
+ provider: 'dropbox' | 'onedrive' | 'icloud' | 'webdav';
33
+ config: Record<string, string>;
34
+ };
35
+ usageTracking: {
36
+ enabled: boolean;
37
+ customPricing: Record<string, number>;
38
+ };
39
+ }
40
+ export interface Session {
41
+ id: string;
42
+ appId: string;
43
+ title: string;
44
+ content: string;
45
+ createdAt: Date;
46
+ updatedAt: Date;
47
+ }
48
+ export interface MCPConfig {
49
+ id: string;
50
+ name: string;
51
+ command: string;
52
+ args: string[];
53
+ env: Record<string, string>;
54
+ }
55
+ export interface Skill {
56
+ id: string;
57
+ name: string;
58
+ description: string;
59
+ source: string;
60
+ installedAt: Date;
61
+ }
62
+ export interface UsageStats {
63
+ appId: string;
64
+ requests: number;
65
+ tokens: number;
66
+ cost: number;
67
+ period: string;
68
+ }
69
+ export interface CommandOptions {
70
+ verbose?: boolean;
71
+ quiet?: boolean;
72
+ config?: string;
73
+ }
74
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;IAC9D,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACvD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;IACF,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACvC,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // 类型定义文件
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA,SAAS"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@delta1035/ccs-cli",
3
+ "version": "1.0.0",
4
+ "description": "AI CLI Tool Manager - Switch between Claude, Codex, Gemini, and more",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "ccs": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "start": "node dist/index.js",
12
+ "dev": "ts-node src/index.ts",
13
+ "test": "echo \"Error: no test specified\" && exit 1",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "ai",
18
+ "cli",
19
+ "claude",
20
+ "codex",
21
+ "gemini",
22
+ "provider-switch",
23
+ "anthropic",
24
+ "openai",
25
+ "google"
26
+ ],
27
+ "author": {
28
+ "name": "Your Name",
29
+ "email": "528491526@qq.com"
30
+ },
31
+ "license": "ISC",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/delta1035/cc-switch-cli.git"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/delta1035/cc-switch-cli/issues"
38
+ },
39
+ "homepage": "https://github.com/delta1035/cc-switch-cli#readme",
40
+ "dependencies": {
41
+ "chalk": "^5.3.0",
42
+ "commander": "^11.1.0",
43
+ "inquirer": "^9.2.12",
44
+ "ora": "^7.0.1",
45
+ "uuid": "^9.0.1",
46
+ "zod": "^3.22.4"
47
+ },
48
+ "devDependencies": {
49
+ "@types/inquirer": "^9.0.7",
50
+ "@types/node": "^20.10.5",
51
+ "@types/uuid": "^9.0.7",
52
+ "ts-node": "^10.9.2",
53
+ "typescript": "^5.3.3"
54
+ },
55
+ "engines": {
56
+ "node": ">=18.0.0"
57
+ },
58
+ "files": [
59
+ "dist/",
60
+ "README.md",
61
+ "USAGE.md"
62
+ ]
63
+ }