ccman 3.0.0 → 3.0.2
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/package.json +3 -4
- package/dist/commands/claudecode/add.d.ts +0 -3
- package/dist/commands/claudecode/add.d.ts.map +0 -1
- package/dist/commands/claudecode/add.js +0 -129
- package/dist/commands/claudecode/add.js.map +0 -1
- package/dist/commands/claudecode/clone.d.ts +0 -3
- package/dist/commands/claudecode/clone.d.ts.map +0 -1
- package/dist/commands/claudecode/clone.js +0 -71
- package/dist/commands/claudecode/clone.js.map +0 -1
- package/dist/commands/claudecode/current.d.ts +0 -3
- package/dist/commands/claudecode/current.d.ts.map +0 -1
- package/dist/commands/claudecode/current.js +0 -32
- package/dist/commands/claudecode/current.js.map +0 -1
- package/dist/commands/claudecode/edit.d.ts +0 -3
- package/dist/commands/claudecode/edit.d.ts.map +0 -1
- package/dist/commands/claudecode/edit.js +0 -94
- package/dist/commands/claudecode/edit.js.map +0 -1
- package/dist/commands/claudecode/index.d.ts +0 -6
- package/dist/commands/claudecode/index.d.ts.map +0 -1
- package/dist/commands/claudecode/index.js +0 -20
- package/dist/commands/claudecode/index.js.map +0 -1
- package/dist/commands/claudecode/list.d.ts +0 -3
- package/dist/commands/claudecode/list.d.ts.map +0 -1
- package/dist/commands/claudecode/list.js +0 -45
- package/dist/commands/claudecode/list.js.map +0 -1
- package/dist/commands/claudecode/remove.d.ts +0 -3
- package/dist/commands/claudecode/remove.d.ts.map +0 -1
- package/dist/commands/claudecode/remove.js +0 -75
- package/dist/commands/claudecode/remove.js.map +0 -1
- package/dist/commands/claudecode/use.d.ts +0 -3
- package/dist/commands/claudecode/use.d.ts.map +0 -1
- package/dist/commands/claudecode/use.js +0 -66
- package/dist/commands/claudecode/use.js.map +0 -1
- package/dist/commands/codex/add.d.ts +0 -3
- package/dist/commands/codex/add.d.ts.map +0 -1
- package/dist/commands/codex/add.js +0 -130
- package/dist/commands/codex/add.js.map +0 -1
- package/dist/commands/codex/clone.d.ts +0 -3
- package/dist/commands/codex/clone.d.ts.map +0 -1
- package/dist/commands/codex/clone.js +0 -71
- package/dist/commands/codex/clone.js.map +0 -1
- package/dist/commands/codex/current.d.ts +0 -3
- package/dist/commands/codex/current.d.ts.map +0 -1
- package/dist/commands/codex/current.js +0 -32
- package/dist/commands/codex/current.js.map +0 -1
- package/dist/commands/codex/edit.d.ts +0 -3
- package/dist/commands/codex/edit.d.ts.map +0 -1
- package/dist/commands/codex/edit.js +0 -94
- package/dist/commands/codex/edit.js.map +0 -1
- package/dist/commands/codex/index.d.ts +0 -6
- package/dist/commands/codex/index.d.ts.map +0 -1
- package/dist/commands/codex/index.js +0 -20
- package/dist/commands/codex/index.js.map +0 -1
- package/dist/commands/codex/list.d.ts +0 -3
- package/dist/commands/codex/list.d.ts.map +0 -1
- package/dist/commands/codex/list.js +0 -45
- package/dist/commands/codex/list.js.map +0 -1
- package/dist/commands/codex/remove.d.ts +0 -3
- package/dist/commands/codex/remove.d.ts.map +0 -1
- package/dist/commands/codex/remove.js +0 -75
- package/dist/commands/codex/remove.js.map +0 -1
- package/dist/commands/codex/use.d.ts +0 -3
- package/dist/commands/codex/use.d.ts.map +0 -1
- package/dist/commands/codex/use.js +0 -66
- package/dist/commands/codex/use.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -55
- package/dist/index.js.map +0 -1
- package/dist/interactive.d.ts +0 -36
- package/dist/interactive.d.ts.map +0 -1
- package/dist/interactive.js +0 -509
- package/dist/interactive.js.map +0 -1
- package/dist/utils/file-check.d.ts +0 -5
- package/dist/utils/file-check.d.ts.map +0 -1
- package/dist/utils/file-check.js +0 -14
- package/dist/utils/file-check.js.map +0 -1
- package/dist/utils/logo.d.ts +0 -2
- package/dist/utils/logo.d.ts.map +0 -1
- package/dist/utils/logo.js +0 -13
- package/dist/utils/logo.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccman",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Manage Codex and Claude Code API service provider configurations",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -34,8 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"chalk": "^5.3.0",
|
|
36
36
|
"commander": "^11.0.0",
|
|
37
|
-
"inquirer": "^9.0.0"
|
|
38
|
-
"@ccman/core": "3.0.0"
|
|
37
|
+
"inquirer": "^9.0.0"
|
|
39
38
|
},
|
|
40
39
|
"devDependencies": {
|
|
41
40
|
"@types/inquirer": "^9.0.0",
|
|
@@ -45,7 +44,7 @@
|
|
|
45
44
|
"node": ">=18.0.0"
|
|
46
45
|
},
|
|
47
46
|
"scripts": {
|
|
48
|
-
"build": "
|
|
47
|
+
"build": "tsup src/index.ts --format esm --external commander --external inquirer --external chalk --clean",
|
|
49
48
|
"dev": "tsx src/index.ts",
|
|
50
49
|
"clean": "rm -rf dist"
|
|
51
50
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkIjD"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import inquirer from 'inquirer';
|
|
3
|
-
import { createClaudeCodeManager, CLAUDECODE_PRESETS } from '@ccman/core';
|
|
4
|
-
import { promptProviderForm } from '../../interactive.js';
|
|
5
|
-
export function addCommand(program) {
|
|
6
|
-
program
|
|
7
|
-
.command('add')
|
|
8
|
-
.description('添加新的 Claude Code 服务商(交互式)')
|
|
9
|
-
.action(async () => {
|
|
10
|
-
try {
|
|
11
|
-
const manager = createClaudeCodeManager();
|
|
12
|
-
console.log(chalk.bold('\n📝 添加 Claude Code 服务商\n'));
|
|
13
|
-
// 询问是否使用预置服务商
|
|
14
|
-
const { usePreset } = await inquirer.prompt([
|
|
15
|
-
{
|
|
16
|
-
type: 'list',
|
|
17
|
-
name: 'usePreset',
|
|
18
|
-
message: '选择配置来源:',
|
|
19
|
-
choices: [
|
|
20
|
-
{ name: '📦 使用预置服务商', value: true },
|
|
21
|
-
{ name: '✏️ 自定义配置', value: false },
|
|
22
|
-
],
|
|
23
|
-
},
|
|
24
|
-
]);
|
|
25
|
-
let name;
|
|
26
|
-
let baseUrl;
|
|
27
|
-
let apiKey;
|
|
28
|
-
if (usePreset) {
|
|
29
|
-
// 使用预置服务商
|
|
30
|
-
const { presetName } = await inquirer.prompt([
|
|
31
|
-
{
|
|
32
|
-
type: 'list',
|
|
33
|
-
name: 'presetName',
|
|
34
|
-
message: '选择预置服务商:',
|
|
35
|
-
choices: CLAUDECODE_PRESETS.map((p) => ({
|
|
36
|
-
name: `${p.name} - ${p.description}`,
|
|
37
|
-
value: p.name,
|
|
38
|
-
})),
|
|
39
|
-
},
|
|
40
|
-
]);
|
|
41
|
-
const preset = CLAUDECODE_PRESETS.find((p) => p.name === presetName);
|
|
42
|
-
console.log(chalk.blue(`\n使用预设: ${preset.name} - ${preset.description}\n`));
|
|
43
|
-
// 允许修改所有字段
|
|
44
|
-
const input = await promptProviderForm({
|
|
45
|
-
name: preset.name,
|
|
46
|
-
baseUrl: preset.baseUrl,
|
|
47
|
-
apiKey: '',
|
|
48
|
-
});
|
|
49
|
-
name = input.name;
|
|
50
|
-
baseUrl = input.baseUrl;
|
|
51
|
-
apiKey = input.apiKey;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
// 自定义配置
|
|
55
|
-
const answers = await inquirer.prompt([
|
|
56
|
-
{
|
|
57
|
-
type: 'input',
|
|
58
|
-
name: 'name',
|
|
59
|
-
message: '服务商名称:',
|
|
60
|
-
validate: (value) => {
|
|
61
|
-
if (!value)
|
|
62
|
-
return '名称不能为空';
|
|
63
|
-
return true;
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
type: 'input',
|
|
68
|
-
name: 'baseUrl',
|
|
69
|
-
message: 'API 地址:',
|
|
70
|
-
validate: (value) => {
|
|
71
|
-
if (!value)
|
|
72
|
-
return 'API 地址不能为空';
|
|
73
|
-
if (!value.startsWith('http://') && !value.startsWith('https://')) {
|
|
74
|
-
return 'API 地址必须以 http:// 或 https:// 开头';
|
|
75
|
-
}
|
|
76
|
-
return true;
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
type: 'password',
|
|
81
|
-
name: 'apiKey',
|
|
82
|
-
message: 'API 密钥:',
|
|
83
|
-
mask: '*',
|
|
84
|
-
validate: (value) => {
|
|
85
|
-
if (!value)
|
|
86
|
-
return 'API 密钥不能为空';
|
|
87
|
-
return true;
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
]);
|
|
91
|
-
name = answers.name;
|
|
92
|
-
baseUrl = answers.baseUrl;
|
|
93
|
-
apiKey = answers.apiKey;
|
|
94
|
-
}
|
|
95
|
-
const provider = manager.add({ name, baseUrl, apiKey });
|
|
96
|
-
console.log();
|
|
97
|
-
console.log(chalk.green('✅ 添加成功'));
|
|
98
|
-
console.log();
|
|
99
|
-
console.log(` ${chalk.bold(provider.name)} ${chalk.blue('[Claude Code]')}`);
|
|
100
|
-
console.log(` ${chalk.gray(`ID: ${provider.id}`)}`);
|
|
101
|
-
console.log(` ${chalk.gray(`URL: ${provider.baseUrl}`)}`);
|
|
102
|
-
console.log();
|
|
103
|
-
// 询问是否立即切换
|
|
104
|
-
const { switchNow } = await inquirer.prompt([
|
|
105
|
-
{
|
|
106
|
-
type: 'confirm',
|
|
107
|
-
name: 'switchNow',
|
|
108
|
-
message: '是否立即切换到此服务商?',
|
|
109
|
-
default: true,
|
|
110
|
-
},
|
|
111
|
-
]);
|
|
112
|
-
if (switchNow) {
|
|
113
|
-
manager.switch(provider.id);
|
|
114
|
-
console.log(chalk.green('✅ 已切换到新服务商'));
|
|
115
|
-
console.log();
|
|
116
|
-
console.log(chalk.gray('配置已更新:'));
|
|
117
|
-
console.log(chalk.gray(' - ~/.claude/settings.json'));
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
console.log(chalk.blue('💡 稍后切换:') + chalk.white(` ccman cc use "${provider.name}"`));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
125
|
-
process.exit(1);
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=add.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/claudecode/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuEnD"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import inquirer from 'inquirer';
|
|
3
|
-
import { createClaudeCodeManager, ProviderNotFoundError } from '@ccman/core';
|
|
4
|
-
import { promptProviderForm } from '../../interactive.js';
|
|
5
|
-
export function cloneCommand(program) {
|
|
6
|
-
program
|
|
7
|
-
.command('clone [source-name] [new-name]')
|
|
8
|
-
.description('克隆 Claude Code 服务商')
|
|
9
|
-
.action(async (sourceName, newName) => {
|
|
10
|
-
try {
|
|
11
|
-
const manager = createClaudeCodeManager();
|
|
12
|
-
const providers = manager.list();
|
|
13
|
-
if (providers.length === 0) {
|
|
14
|
-
console.log(chalk.yellow('\n⚠️ 暂无 Claude Code 服务商\n'));
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
let sourceId;
|
|
18
|
-
if (sourceName) {
|
|
19
|
-
const provider = manager.findByName(sourceName);
|
|
20
|
-
if (!provider) {
|
|
21
|
-
throw new ProviderNotFoundError(sourceName);
|
|
22
|
-
}
|
|
23
|
-
sourceId = provider.id;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
// 交互式选择源
|
|
27
|
-
const { selectedId } = await inquirer.prompt([
|
|
28
|
-
{
|
|
29
|
-
type: 'list',
|
|
30
|
-
name: 'selectedId',
|
|
31
|
-
message: '选择要克隆的服务商:',
|
|
32
|
-
choices: providers.map((p) => ({
|
|
33
|
-
name: `${p.name} - ${p.baseUrl}`,
|
|
34
|
-
value: p.id,
|
|
35
|
-
})),
|
|
36
|
-
},
|
|
37
|
-
]);
|
|
38
|
-
sourceId = selectedId;
|
|
39
|
-
}
|
|
40
|
-
// 获取源 provider
|
|
41
|
-
const source = manager.get(sourceId);
|
|
42
|
-
let cloned;
|
|
43
|
-
if (newName) {
|
|
44
|
-
// 非交互模式:只改名,其他字段完全复制(向后兼容)
|
|
45
|
-
cloned = manager.clone(sourceId, newName);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
// 交互模式:允许修改所有字段
|
|
49
|
-
console.log(chalk.blue(`\n克隆自: ${source.name}\n`));
|
|
50
|
-
const input = await promptProviderForm({
|
|
51
|
-
name: `${source.name}(副本)`,
|
|
52
|
-
baseUrl: source.baseUrl,
|
|
53
|
-
apiKey: source.apiKey,
|
|
54
|
-
});
|
|
55
|
-
cloned = manager.add(input);
|
|
56
|
-
}
|
|
57
|
-
console.log();
|
|
58
|
-
console.log(chalk.green('✅ 克隆成功'));
|
|
59
|
-
console.log();
|
|
60
|
-
console.log(` ${chalk.bold(cloned.name)} ${chalk.blue('[Claude Code]')}`);
|
|
61
|
-
console.log(` ${chalk.gray(`ID: ${cloned.id}`)}`);
|
|
62
|
-
console.log(` ${chalk.gray(`URL: ${cloned.baseUrl}`)}`);
|
|
63
|
-
console.log();
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
67
|
-
process.exit(1);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=clone.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/commands/claudecode/clone.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"current.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/current.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+BrD"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { createClaudeCodeManager } from '@ccman/core';
|
|
3
|
-
export function currentCommand(program) {
|
|
4
|
-
program
|
|
5
|
-
.command('current')
|
|
6
|
-
.description('显示当前使用的 Claude Code 服务商')
|
|
7
|
-
.action(async () => {
|
|
8
|
-
try {
|
|
9
|
-
const manager = createClaudeCodeManager();
|
|
10
|
-
const current = manager.getCurrent();
|
|
11
|
-
if (!current) {
|
|
12
|
-
console.log(chalk.yellow('\n⚠️ 未选择任何 Claude Code 服务商\n'));
|
|
13
|
-
console.log(chalk.blue('💡 选择服务商:') + chalk.white(' ccman cc use\n'));
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
console.log(chalk.bold('\n📍 当前 Claude Code 服务商\n'));
|
|
17
|
-
console.log(` ${chalk.green.bold(current.name)}`);
|
|
18
|
-
console.log(` ${chalk.gray(`ID: ${current.id}`)}`);
|
|
19
|
-
console.log(` ${chalk.gray(`URL: ${current.baseUrl}`)}`);
|
|
20
|
-
if (current.lastUsedAt) {
|
|
21
|
-
const date = new Date(current.lastUsedAt).toLocaleString('zh-CN');
|
|
22
|
-
console.log(` ${chalk.gray(`最后使用: ${date}`)}`);
|
|
23
|
-
}
|
|
24
|
-
console.log();
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=current.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"current.js","sourceRoot":"","sources":["../../../src/commands/claudecode/current.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAA;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAA;YAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAA;gBAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;gBACrE,OAAM;YACR,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAA;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;YAEzD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;gBACjE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;YACjD,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAQ,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8FlD"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import inquirer from 'inquirer';
|
|
3
|
-
import { createClaudeCodeManager, ProviderNotFoundError } from '@ccman/core';
|
|
4
|
-
export function editCommand(program) {
|
|
5
|
-
program
|
|
6
|
-
.command('edit [name]')
|
|
7
|
-
.description('编辑 Claude Code 服务商')
|
|
8
|
-
.action(async (name) => {
|
|
9
|
-
try {
|
|
10
|
-
const manager = createClaudeCodeManager();
|
|
11
|
-
const providers = manager.list();
|
|
12
|
-
if (providers.length === 0) {
|
|
13
|
-
console.log(chalk.yellow('\n⚠️ 暂无 Claude Code 服务商\n'));
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
let targetId;
|
|
17
|
-
if (name) {
|
|
18
|
-
const provider = manager.findByName(name);
|
|
19
|
-
if (!provider) {
|
|
20
|
-
throw new ProviderNotFoundError(name);
|
|
21
|
-
}
|
|
22
|
-
targetId = provider.id;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
// 交互式选择
|
|
26
|
-
const { selectedId } = await inquirer.prompt([
|
|
27
|
-
{
|
|
28
|
-
type: 'list',
|
|
29
|
-
name: 'selectedId',
|
|
30
|
-
message: '选择要编辑的服务商:',
|
|
31
|
-
choices: providers.map((p) => ({
|
|
32
|
-
name: `${p.name} - ${p.baseUrl}`,
|
|
33
|
-
value: p.id,
|
|
34
|
-
})),
|
|
35
|
-
},
|
|
36
|
-
]);
|
|
37
|
-
targetId = selectedId;
|
|
38
|
-
}
|
|
39
|
-
const provider = manager.get(targetId);
|
|
40
|
-
console.log(chalk.bold('\n✏️ 编辑服务商\n'));
|
|
41
|
-
console.log(chalk.gray('提示: 留空则保持原值\n'));
|
|
42
|
-
const answers = await inquirer.prompt([
|
|
43
|
-
{
|
|
44
|
-
type: 'input',
|
|
45
|
-
name: 'name',
|
|
46
|
-
message: '服务商名称:',
|
|
47
|
-
default: provider.name,
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
type: 'input',
|
|
51
|
-
name: 'baseUrl',
|
|
52
|
-
message: 'API 地址:',
|
|
53
|
-
default: provider.baseUrl,
|
|
54
|
-
validate: (value) => {
|
|
55
|
-
if (value && !value.startsWith('http://') && !value.startsWith('https://')) {
|
|
56
|
-
return 'API 地址必须以 http:// 或 https:// 开头';
|
|
57
|
-
}
|
|
58
|
-
return true;
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
type: 'password',
|
|
63
|
-
name: 'apiKey',
|
|
64
|
-
message: 'API 密钥 (留空保持不变):',
|
|
65
|
-
mask: '*',
|
|
66
|
-
},
|
|
67
|
-
]);
|
|
68
|
-
const updates = {};
|
|
69
|
-
if (answers.name && answers.name !== provider.name)
|
|
70
|
-
updates.name = answers.name;
|
|
71
|
-
if (answers.baseUrl && answers.baseUrl !== provider.baseUrl)
|
|
72
|
-
updates.baseUrl = answers.baseUrl;
|
|
73
|
-
if (answers.apiKey)
|
|
74
|
-
updates.apiKey = answers.apiKey;
|
|
75
|
-
if (Object.keys(updates).length === 0) {
|
|
76
|
-
console.log(chalk.gray('\n未做任何修改\n'));
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const updated = manager.edit(targetId, updates);
|
|
80
|
-
console.log();
|
|
81
|
-
console.log(chalk.green('✅ 编辑成功'));
|
|
82
|
-
console.log();
|
|
83
|
-
console.log(` ${chalk.bold(updated.name)} ${chalk.blue('[Claude Code]')}`);
|
|
84
|
-
console.log(` ${chalk.gray(`ID: ${updated.id}`)}`);
|
|
85
|
-
console.log(` ${chalk.gray(`URL: ${updated.baseUrl}`)}`);
|
|
86
|
-
console.log();
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=edit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/commands/claudecode/edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ/D"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { addCommand } from './add.js';
|
|
2
|
-
import { listCommand } from './list.js';
|
|
3
|
-
import { useCommand } from './use.js';
|
|
4
|
-
import { currentCommand } from './current.js';
|
|
5
|
-
import { removeCommand } from './remove.js';
|
|
6
|
-
import { editCommand } from './edit.js';
|
|
7
|
-
import { cloneCommand } from './clone.js';
|
|
8
|
-
/**
|
|
9
|
-
* 创建 Claude Code 所有子命令
|
|
10
|
-
*/
|
|
11
|
-
export function createClaudeCodeCommands(program) {
|
|
12
|
-
addCommand(program);
|
|
13
|
-
listCommand(program);
|
|
14
|
-
useCommand(program);
|
|
15
|
-
currentCommand(program);
|
|
16
|
-
removeCommand(program);
|
|
17
|
-
editCommand(program);
|
|
18
|
-
cloneCommand(program);
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/claudecode/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,UAAU,CAAC,OAAO,CAAC,CAAA;IACnB,WAAW,CAAC,OAAO,CAAC,CAAA;IACpB,UAAU,CAAC,OAAO,CAAC,CAAA;IACnB,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,aAAa,CAAC,OAAO,CAAC,CAAA;IACtB,WAAW,CAAC,OAAO,CAAC,CAAA;IACpB,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8ClD"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { createClaudeCodeManager } from '@ccman/core';
|
|
3
|
-
export function listCommand(program) {
|
|
4
|
-
program
|
|
5
|
-
.command('list')
|
|
6
|
-
.alias('ls')
|
|
7
|
-
.description('列出所有 Claude Code 服务商')
|
|
8
|
-
.action(async () => {
|
|
9
|
-
try {
|
|
10
|
-
const manager = createClaudeCodeManager();
|
|
11
|
-
const providers = manager.list();
|
|
12
|
-
const current = manager.getCurrent();
|
|
13
|
-
if (providers.length === 0) {
|
|
14
|
-
console.log(chalk.yellow('\n⚠️ 暂无 Claude Code 服务商\n'));
|
|
15
|
-
console.log(chalk.blue('💡 添加服务商:') + chalk.white(' ccman cc add\n'));
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
console.log(chalk.bold(`\n📋 Claude Code 服务商列表 (共 ${providers.length} 个)\n`));
|
|
19
|
-
providers.forEach((p) => {
|
|
20
|
-
const isCurrent = current?.id === p.id;
|
|
21
|
-
const marker = isCurrent ? chalk.green('●') : chalk.gray('○');
|
|
22
|
-
const nameStyle = isCurrent ? chalk.green.bold : chalk.white;
|
|
23
|
-
console.log(`${marker} ${nameStyle(p.name)}`);
|
|
24
|
-
console.log(` ${chalk.gray(`ID: ${p.id}`)}`);
|
|
25
|
-
console.log(` ${chalk.gray(`URL: ${p.baseUrl}`)}`);
|
|
26
|
-
if (p.lastUsedAt) {
|
|
27
|
-
const date = new Date(p.lastUsedAt).toLocaleString('zh-CN');
|
|
28
|
-
console.log(` ${chalk.gray(`最后使用: ${date}`)}`);
|
|
29
|
-
}
|
|
30
|
-
console.log();
|
|
31
|
-
});
|
|
32
|
-
if (current) {
|
|
33
|
-
console.log(chalk.green(`✅ 当前使用: ${current.name}\n`));
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
console.log(chalk.yellow('⚠️ 未选择任何服务商\n'));
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/claudecode/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAA;YACzC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAA;YAEpC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;gBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;gBACrE,OAAM;YACR,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,SAAS,CAAC,MAAM,OAAO,CAAC,CAAC,CAAA;YAE7E,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtB,MAAM,SAAS,GAAG,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAA;gBACtC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;gBAE5D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;gBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;gBAEnD,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;oBACjB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;oBAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;gBACjD,CAAC;gBAED,OAAO,CAAC,GAAG,EAAE,CAAA;YACf,CAAC,CAAC,CAAA;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAA;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAQ,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0EpD"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import inquirer from 'inquirer';
|
|
3
|
-
import { createClaudeCodeManager, ProviderNotFoundError } from '@ccman/core';
|
|
4
|
-
export function removeCommand(program) {
|
|
5
|
-
program
|
|
6
|
-
.command('remove [name]')
|
|
7
|
-
.alias('rm')
|
|
8
|
-
.description('删除 Claude Code 服务商')
|
|
9
|
-
.action(async (name) => {
|
|
10
|
-
try {
|
|
11
|
-
const manager = createClaudeCodeManager();
|
|
12
|
-
const providers = manager.list();
|
|
13
|
-
if (providers.length === 0) {
|
|
14
|
-
console.log(chalk.yellow('\n⚠️ 暂无 Claude Code 服务商\n'));
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
let targetId;
|
|
18
|
-
let targetName;
|
|
19
|
-
if (name) {
|
|
20
|
-
// 通过名称查找
|
|
21
|
-
const provider = manager.findByName(name);
|
|
22
|
-
if (!provider) {
|
|
23
|
-
throw new ProviderNotFoundError(name);
|
|
24
|
-
}
|
|
25
|
-
targetId = provider.id;
|
|
26
|
-
targetName = provider.name;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
// 交互式选择
|
|
30
|
-
const { selectedId } = await inquirer.prompt([
|
|
31
|
-
{
|
|
32
|
-
type: 'list',
|
|
33
|
-
name: 'selectedId',
|
|
34
|
-
message: '选择要删除的服务商:',
|
|
35
|
-
choices: providers.map((p) => ({
|
|
36
|
-
name: `${p.name} - ${p.baseUrl}`,
|
|
37
|
-
value: p.id,
|
|
38
|
-
})),
|
|
39
|
-
},
|
|
40
|
-
]);
|
|
41
|
-
const provider = manager.get(selectedId);
|
|
42
|
-
targetId = selectedId;
|
|
43
|
-
targetName = provider.name;
|
|
44
|
-
}
|
|
45
|
-
// 确认删除
|
|
46
|
-
const { confirmed } = await inquirer.prompt([
|
|
47
|
-
{
|
|
48
|
-
type: 'confirm',
|
|
49
|
-
name: 'confirmed',
|
|
50
|
-
message: `确定删除 "${targetName}"?`,
|
|
51
|
-
default: false,
|
|
52
|
-
},
|
|
53
|
-
]);
|
|
54
|
-
if (!confirmed) {
|
|
55
|
-
console.log(chalk.gray('\n已取消\n'));
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
manager.remove(targetId);
|
|
59
|
-
console.log();
|
|
60
|
-
console.log(chalk.green(`✅ 已删除: ${targetName}`));
|
|
61
|
-
console.log();
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
if (error instanceof ProviderNotFoundError) {
|
|
65
|
-
console.error(chalk.red(`\n❌ 服务商不存在\n`));
|
|
66
|
-
console.log(chalk.blue('💡 查看所有服务商:') + chalk.white(' ccman cc list\n'));
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
console.error(chalk.red(`\n❌ ${error.message}\n`));
|
|
70
|
-
}
|
|
71
|
-
process.exit(1);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=remove.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/claudecode/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../src/commands/claudecode/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+DjD"}
|