ccjk 15.0.0 → 15.1.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/README.md CHANGED
@@ -16,7 +16,8 @@ npm install -g ccjk
16
16
 
17
17
  ```bash
18
18
  ccjk # 交互菜单
19
- ccjk init # 配置 API
19
+ ccjk init # 配置 API(同时存为 profile)
20
+ ccjk use # 一键切换已配过的 API
20
21
  ccjk mcp # 装 MCP 服务
21
22
  ccjk doctor # 检查 settings.json
22
23
  ```
@@ -26,16 +27,35 @@ ccjk doctor # 检查 settings.json
26
27
  | 命令 | 用途 |
27
28
  |---|---|
28
29
  | `ccjk` | 交互菜单(默认) |
29
- | `ccjk init` | 配置 API:写 `~/.claude/settings.json` 的 env |
30
+ | `ccjk init` | 配置 API:写 `~/.claude/settings.json` 的 env,并保存为 profile |
31
+ | `ccjk use [name]` | **快速切换 profile**(不带参=交互选择) |
32
+ | `ccjk profile ls` | 列出所有 profile(标记当前) |
33
+ | `ccjk profile show [name]` | 查看 profile 详情(不带参=当前) |
34
+ | `ccjk profile rm [name]` | 删除 profile |
30
35
  | `ccjk mcp` | 选装预设 MCP 服务(context7、serena、playwright、…) |
31
36
  | `ccjk doctor` | 检查 settings.json 中的常见配置问题 |
32
37
  | `ccjk detect` | 列出已安装的代码工具 |
33
38
  | `ccjk git-install` | 安装 `/ccjk:git-commit` 等 slash 命令模板 |
34
39
 
40
+ ### Profile:多 API 一键切换
41
+
42
+ ```bash
43
+ ccjk init -t clavue -p glm --api-key sk-xxx --profile work -y
44
+ ccjk init -t clavue -p kimi --api-key sk-yyy --profile free -y
45
+
46
+ ccjk use # 交互选 work / free
47
+ ccjk use free # 直接切到 free
48
+ ccjk profile ls # 看当前用的是哪个
49
+ ```
50
+
51
+ 切换后需重启 Claude Code 才能生效(settings.json 是启动时读的)。
52
+
53
+ Profile 存储在 `~/.ccjk/profiles/<name>.json`,当前激活的记录在 `~/.ccjk/state.json`。
54
+
35
55
  ### 非交互模式
36
56
 
37
57
  ```bash
38
- ccjk init -t clavue -p glm --api-key sk-xxx -y
58
+ ccjk init -t clavue -p glm --api-key sk-xxx --profile work -y
39
59
  ccjk mcp -s context7 serena -y
40
60
  ccjk git-install --scope user -y
41
61
  ```
package/dist/cli.js CHANGED
@@ -10,6 +10,7 @@ import { doctorCommand } from './commands/doctor.js';
10
10
  import { detectCommand } from './commands/detect.js';
11
11
  import { gitInstallCommand } from './commands/git-install.js';
12
12
  import { menuCommand } from './commands/menu.js';
13
+ import { profileListCommand, profileRmCommand, profileShowCommand, profileUseCommand, } from './commands/profile.js';
13
14
  const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
14
15
  const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
15
16
  const program = new Command();
@@ -24,8 +25,37 @@ program
24
25
  .option('-p, --provider <id>', 'provider id:glm | kimi | minimax | anthropic | custom')
25
26
  .option('--base-url <url>', '自定义 base URL')
26
27
  .option('--api-key <key>', 'API key 或 auth token')
28
+ .option('--profile <name>', '同时保存为 profile,跳过交互询问')
27
29
  .option('-y, --yes', '跳过确认')
28
30
  .action(initCommand);
31
+ program
32
+ .command('use [name]')
33
+ .description('切换到指定 profile(不带参则交互选择)')
34
+ .option('-t, --tool <tool>', '目标工具', 'clavue')
35
+ .option('-y, --yes', '跳过确认')
36
+ .action((name, opts) => profileUseCommand(name, opts));
37
+ const profile = program
38
+ .command('profile')
39
+ .description('管理已保存的 API profile');
40
+ profile
41
+ .command('ls', { isDefault: true })
42
+ .description('列出所有 profile(标记当前)')
43
+ .action(profileListCommand);
44
+ profile
45
+ .command('use [name]')
46
+ .description('切换到指定 profile')
47
+ .option('-t, --tool <tool>', '目标工具', 'clavue')
48
+ .option('-y, --yes', '跳过确认')
49
+ .action((name, opts) => profileUseCommand(name, opts));
50
+ profile
51
+ .command('rm [name]')
52
+ .description('删除 profile')
53
+ .option('-y, --yes', '跳过确认')
54
+ .action((name, opts) => profileRmCommand(name, opts));
55
+ profile
56
+ .command('show [name]')
57
+ .description('查看 profile 详情(不带参看当前)')
58
+ .action((name) => profileShowCommand(name));
29
59
  program
30
60
  .command('mcp')
31
61
  .description('配置 MCP 服务')
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import ansis from 'ansis';
3
3
  import { TOOLS } from '../core/tools.js';
4
4
  import { listProvidersFor } from '../core/providers.js';
5
5
  import { readSettings, writeSettings } from '../core/settings.js';
6
+ import { listProfiles, validateName, writeProfile, writeState } from '../core/profiles.js';
6
7
  export async function initCommand(opts = {}) {
7
8
  const tool = opts.tool ?? await pickTool();
8
9
  const meta = TOOLS[tool];
@@ -38,7 +39,69 @@ export async function initCommand(opts = {}) {
38
39
  console.log(ansis.green('\n✔ 配置已写入'));
39
40
  if (backup)
40
41
  console.log(ansis.dim(` 备份: ${backup}`));
41
- console.log(ansis.dim(` 目标: ${meta.settingsFile}\n`));
42
+ console.log(ansis.dim(` 目标: ${meta.settingsFile}`));
43
+ await maybeSaveProfile({
44
+ explicitName: opts.profile,
45
+ yes: opts.yes ?? false,
46
+ provider,
47
+ baseUrl,
48
+ apiKey,
49
+ });
50
+ console.log();
51
+ }
52
+ async function maybeSaveProfile(args) {
53
+ let name = args.explicitName;
54
+ if (!name && !args.yes) {
55
+ const { save } = await inquirer.prompt([{
56
+ type: 'confirm',
57
+ name: 'save',
58
+ message: '保存为 profile?(之后用 `ccjk use` 一键切换)',
59
+ default: true,
60
+ }]);
61
+ if (!save)
62
+ return;
63
+ const suggested = await suggestName(args.provider.id);
64
+ const { input } = await inquirer.prompt([{
65
+ type: 'input',
66
+ name: 'input',
67
+ message: 'profile 名称',
68
+ default: suggested,
69
+ validate: (s) => {
70
+ try {
71
+ validateName(s.trim());
72
+ return true;
73
+ }
74
+ catch (e) {
75
+ return e.message;
76
+ }
77
+ },
78
+ }]);
79
+ name = input.trim();
80
+ }
81
+ if (!name)
82
+ return;
83
+ validateName(name);
84
+ await writeProfile({
85
+ name,
86
+ provider: args.provider.id,
87
+ baseUrl: args.baseUrl,
88
+ authType: args.provider.authType,
89
+ apiKey: args.apiKey,
90
+ ...(args.provider.defaultModel ? { model: args.provider.defaultModel } : {}),
91
+ ...(args.provider.fastModel ? { fastModel: args.provider.fastModel } : {}),
92
+ createdAt: new Date().toISOString(),
93
+ });
94
+ await writeState({ current: name });
95
+ console.log(ansis.green(` Profile: ${name} 已保存(当前激活)`));
96
+ }
97
+ async function suggestName(providerId) {
98
+ const existing = (await listProfiles()).map(p => p.name);
99
+ if (!existing.includes(providerId))
100
+ return providerId;
101
+ let i = 2;
102
+ while (existing.includes(`${providerId}-${i}`))
103
+ i++;
104
+ return `${providerId}-${i}`;
42
105
  }
43
106
  function resolveProvider(tool, id) {
44
107
  const found = listProvidersFor(tool).find(p => p.id === id);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -5,15 +5,24 @@ import { initCommand } from './init.js';
5
5
  import { mcpCommand } from './mcp.js';
6
6
  import { doctorCommand } from './doctor.js';
7
7
  import { gitInstallCommand } from './git-install.js';
8
+ import { profileUseCommand } from './profile.js';
9
+ import { listProfiles, readState } from '../core/profiles.js';
8
10
  const ITEMS = [
9
11
  { key: '1', label: '配置 API(init)', run: () => initCommand() },
10
- { key: '2', label: '配置 MCP 服务', run: () => mcpCommand() },
11
- { key: '3', label: '体检(doctor)', run: () => doctorCommand() },
12
- { key: '4', label: '安装 Git 命令模板', run: () => gitInstallCommand() },
13
- { key: '5', label: '检测已安装的工具', run: async () => detectCommand() },
12
+ { key: '2', label: '切换 Profile(快速切换 API)', run: () => profileUseCommand(undefined) },
13
+ { key: '3', label: '配置 MCP 服务', run: () => mcpCommand() },
14
+ { key: '4', label: '体检(doctor)', run: () => doctorCommand() },
15
+ { key: '5', label: '安装 Git 命令模板', run: () => gitInstallCommand() },
16
+ { key: '6', label: '检测已安装的工具', run: async () => detectCommand() },
14
17
  ];
15
18
  export async function menuCommand() {
16
19
  console.log(ansis.bold('\nccjk - Clavue/Claude Code 配置助手\n'));
20
+ const profiles = await listProfiles();
21
+ const state = await readState();
22
+ if (profiles.length > 0) {
23
+ const cur = state.current ?? ansis.gray('(未设置)');
24
+ console.log(ansis.dim(` 当前 profile: ${cur} · 共 ${profiles.length} 个\n`));
25
+ }
17
26
  for (const { key, label } of ITEMS) {
18
27
  console.log(` ${ansis.green(key)}. ${label}`);
19
28
  }
@@ -22,7 +31,7 @@ export async function menuCommand() {
22
31
  type: 'input',
23
32
  name: 'choice',
24
33
  message: '\n选择',
25
- validate: (v) => /^[1-5q]$/.test(v.trim()) || '输入 1-5 或 q',
34
+ validate: (v) => /^[1-6q]$/.test(v.trim()) || '输入 1-6 或 q',
26
35
  }]);
27
36
  if (choice.trim() === 'q')
28
37
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/commands/menu.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,KAAK,GAAG;IACZ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE;IAC7D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE;IACzD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,EAAE;IAC7D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,EAAE;IAClE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE;CAClE,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC9D,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAExC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAqB,CAAC;YAC5D,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,YAAY;SACnE,CAAC,CAAC,CAAC;IAEJ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG;QAAE,OAAO;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,IAAI,IAAI;QAAE,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/commands/menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ import inquirer from 'inquirer';
2
+ import ansis from 'ansis';
3
+ import { TOOLS } from '../core/tools.js';
4
+ import { readSettings, writeSettings } from '../core/settings.js';
5
+ import { applyProfileToSettings, listProfiles, maskKey, readProfile, readState, removeProfile, writeState, } from '../core/profiles.js';
6
+ export async function profileListCommand() {
7
+ const profiles = await listProfiles();
8
+ const state = await readState();
9
+ if (profiles.length === 0) {
10
+ console.log(ansis.gray('\n还没有 profile。运行 `ccjk init` 配置 API 时会自动保存一个。\n'));
11
+ return;
12
+ }
13
+ console.log(ansis.bold(`\n已保存的 Profile(${profiles.length}):\n`));
14
+ for (const p of profiles) {
15
+ const isCurrent = state.current === p.name;
16
+ const mark = isCurrent ? ansis.green('●') : ' ';
17
+ const name = isCurrent ? ansis.green.bold(p.name.padEnd(16)) : p.name.padEnd(16);
18
+ const key = ansis.dim(maskKey(p.apiKey));
19
+ const model = p.model ? ansis.dim(`[${p.model}]`) : '';
20
+ console.log(` ${mark} ${name} ${p.provider.padEnd(12)} ${key} ${model}`);
21
+ }
22
+ console.log();
23
+ if (state.current)
24
+ console.log(ansis.dim(` 当前: ${state.current}\n`));
25
+ }
26
+ export async function profileUseCommand(name, opts = {}) {
27
+ const profiles = await listProfiles();
28
+ if (profiles.length === 0) {
29
+ console.log(ansis.yellow('\n还没有 profile。先运行 `ccjk init` 配置一个 API。\n'));
30
+ return;
31
+ }
32
+ const target = name ? findOrExit(profiles, name) : await pickProfile(profiles);
33
+ if (!target)
34
+ return;
35
+ const tool = opts.tool ?? 'clavue';
36
+ if (tool === 'codex') {
37
+ throw new Error('Codex 配置走 ~/.codex/config.toml,暂不支持 profile 写入。');
38
+ }
39
+ const meta = TOOLS[tool];
40
+ const settings = await readSettings(meta.settingsFile);
41
+ applyProfileToSettings(settings, target);
42
+ if (!opts.yes) {
43
+ console.log(ansis.dim(`\n→ 切换到: ${target.name} (${target.provider})`));
44
+ console.log(ansis.dim(`→ Base URL: ${target.baseUrl}`));
45
+ console.log(ansis.dim(`→ 写入: ${meta.settingsFile}\n`));
46
+ const { ok } = await inquirer.prompt([{
47
+ type: 'confirm',
48
+ name: 'ok',
49
+ message: '确认切换?',
50
+ default: true,
51
+ }]);
52
+ if (!ok) {
53
+ console.log(ansis.gray('已取消。'));
54
+ return;
55
+ }
56
+ }
57
+ const backup = await writeSettings(meta.settingsFile, settings);
58
+ await writeState({ current: target.name });
59
+ console.log(ansis.green(`\n✔ 已切换到 profile: ${ansis.bold(target.name)}`));
60
+ if (backup)
61
+ console.log(ansis.dim(` 备份: ${backup}`));
62
+ console.log(ansis.yellow(' 提示: 重启 Claude Code 才能生效\n'));
63
+ }
64
+ export async function profileRmCommand(name, opts = {}) {
65
+ const profiles = await listProfiles();
66
+ if (profiles.length === 0) {
67
+ console.log(ansis.gray('\n没有 profile 可删除。\n'));
68
+ return;
69
+ }
70
+ const target = name ? findOrExit(profiles, name) : await pickProfile(profiles, '选择要删除的 profile');
71
+ if (!target)
72
+ return;
73
+ if (!opts.yes) {
74
+ const { ok } = await inquirer.prompt([{
75
+ type: 'confirm',
76
+ name: 'ok',
77
+ message: `确认删除 profile "${target.name}"?(settings.json 不受影响)`,
78
+ default: false,
79
+ }]);
80
+ if (!ok) {
81
+ console.log(ansis.gray('已取消。'));
82
+ return;
83
+ }
84
+ }
85
+ await removeProfile(target.name);
86
+ const state = await readState();
87
+ if (state.current === target.name) {
88
+ await writeState({});
89
+ }
90
+ console.log(ansis.green(`\n✔ 已删除 profile: ${target.name}\n`));
91
+ }
92
+ export async function profileShowCommand(name) {
93
+ if (!name) {
94
+ const state = await readState();
95
+ if (!state.current) {
96
+ console.log(ansis.gray('\n没有当前 profile。用 `ccjk use` 选一个。\n'));
97
+ return;
98
+ }
99
+ name = state.current;
100
+ }
101
+ const p = await readProfile(name);
102
+ if (!p) {
103
+ throw new Error(`profile "${name}" 不存在`);
104
+ }
105
+ console.log(ansis.bold(`\nProfile: ${p.name}\n`));
106
+ console.log(` provider ${p.provider}`);
107
+ console.log(` baseUrl ${p.baseUrl}`);
108
+ console.log(` authType ${p.authType}`);
109
+ console.log(` apiKey ${maskKey(p.apiKey)}`);
110
+ if (p.model)
111
+ console.log(` model ${p.model}`);
112
+ if (p.fastModel)
113
+ console.log(` fastModel ${p.fastModel}`);
114
+ console.log(ansis.dim(` createdAt ${p.createdAt}\n`));
115
+ }
116
+ function findOrExit(profiles, name) {
117
+ const p = profiles.find(x => x.name === name);
118
+ if (!p) {
119
+ const names = profiles.map(x => x.name).join(', ');
120
+ throw new Error(`profile "${name}" 不存在。现有: ${names}`);
121
+ }
122
+ return p;
123
+ }
124
+ async function pickProfile(profiles, message = '选择 Profile') {
125
+ const state = await readState();
126
+ const { name } = await inquirer.prompt([{
127
+ type: 'list',
128
+ name: 'name',
129
+ message,
130
+ default: state.current,
131
+ choices: profiles.map(p => ({
132
+ name: `${p.name.padEnd(16)} ${p.provider.padEnd(12)} ${ansis.dim(maskKey(p.apiKey))}${state.current === p.name ? ansis.green(' (当前)') : ''}`,
133
+ value: p.name,
134
+ })),
135
+ }]);
136
+ return profiles.find(p => p.name === name);
137
+ }
138
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir, readFile, readdir, unlink, writeFile } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import { dirname, join } from 'node:path';
5
+ export const PROFILES_DIR = join(homedir(), '.ccjk', 'profiles');
6
+ export const STATE_FILE = join(homedir(), '.ccjk', 'state.json');
7
+ const NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,31}$/;
8
+ export function validateName(name) {
9
+ if (!NAME_RE.test(name)) {
10
+ throw new Error(`profile 名称非法: "${name}"(仅允许字母数字 _ - ,1-32 字符,首字符必须是字母或数字)`);
11
+ }
12
+ }
13
+ export function profilePath(name, dir = PROFILES_DIR) {
14
+ return join(dir, `${name}.json`);
15
+ }
16
+ export async function listProfiles(dir = PROFILES_DIR) {
17
+ if (!existsSync(dir))
18
+ return [];
19
+ const files = await readdir(dir);
20
+ const out = [];
21
+ for (const f of files) {
22
+ if (!f.endsWith('.json'))
23
+ continue;
24
+ try {
25
+ const raw = await readFile(join(dir, f), 'utf-8');
26
+ out.push(JSON.parse(raw));
27
+ }
28
+ catch {
29
+ // 跳过损坏文件
30
+ }
31
+ }
32
+ return out.sort((a, b) => a.name.localeCompare(b.name));
33
+ }
34
+ export async function readProfile(name, dir = PROFILES_DIR) {
35
+ validateName(name);
36
+ const p = profilePath(name, dir);
37
+ if (!existsSync(p))
38
+ return null;
39
+ const raw = await readFile(p, 'utf-8');
40
+ return JSON.parse(raw);
41
+ }
42
+ export async function writeProfile(profile, dir = PROFILES_DIR) {
43
+ validateName(profile.name);
44
+ await mkdir(dir, { recursive: true });
45
+ await writeFile(profilePath(profile.name, dir), `${JSON.stringify(profile, null, 2)}\n`, 'utf-8');
46
+ }
47
+ export async function removeProfile(name, dir = PROFILES_DIR) {
48
+ validateName(name);
49
+ const p = profilePath(name, dir);
50
+ if (!existsSync(p))
51
+ return false;
52
+ await unlink(p);
53
+ return true;
54
+ }
55
+ export async function readState(file = STATE_FILE) {
56
+ if (!existsSync(file))
57
+ return {};
58
+ try {
59
+ return JSON.parse(await readFile(file, 'utf-8'));
60
+ }
61
+ catch {
62
+ return {};
63
+ }
64
+ }
65
+ export async function writeState(state, file = STATE_FILE) {
66
+ await mkdir(dirname(file), { recursive: true });
67
+ await writeFile(file, `${JSON.stringify(state, null, 2)}\n`, 'utf-8');
68
+ }
69
+ export function maskKey(key) {
70
+ if (!key)
71
+ return '';
72
+ if (key.length <= 8)
73
+ return `${'*'.repeat(key.length)}`;
74
+ return `${key.slice(0, 4)}...${key.slice(-4)}`;
75
+ }
76
+ /**
77
+ * 把 profile 应用到 settings.env,行为对齐 applyApiToSettings:
78
+ * - auth_token 写 ANTHROPIC_AUTH_TOKEN,清掉 ANTHROPIC_API_KEY
79
+ * - api_key 反之
80
+ * - 删除顶层 model 防止覆盖 env
81
+ */
82
+ export function applyProfileToSettings(settings, profile) {
83
+ settings.env = settings.env ?? {};
84
+ settings.env.ANTHROPIC_BASE_URL = profile.baseUrl;
85
+ if (profile.authType === 'auth_token') {
86
+ settings.env.ANTHROPIC_AUTH_TOKEN = profile.apiKey;
87
+ delete settings.env.ANTHROPIC_API_KEY;
88
+ }
89
+ else {
90
+ settings.env.ANTHROPIC_API_KEY = profile.apiKey;
91
+ delete settings.env.ANTHROPIC_AUTH_TOKEN;
92
+ }
93
+ if (profile.model)
94
+ settings.env.ANTHROPIC_MODEL = profile.model;
95
+ else
96
+ delete settings.env.ANTHROPIC_MODEL;
97
+ if (profile.fastModel)
98
+ settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = profile.fastModel;
99
+ else
100
+ delete settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL;
101
+ if ('model' in settings)
102
+ delete settings.model;
103
+ }
104
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAa1C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAEjE,MAAM,OAAO,GAAG,kCAAkC,CAAC;AAEnD,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,qCAAqC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAG,GAAG,YAAY;IAC1D,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAG,GAAG,YAAY;IACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAClD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,CAAC;YACL,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,GAAG,GAAG,YAAY;IAChE,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgB,EAAE,GAAG,GAAG,YAAY;IACrE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,GAAG,GAAG,YAAY;IAClE,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC;AACd,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAI,GAAG,UAAU;IAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAU,CAAC;IAC5D,CAAC;IACD,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAY,EAAE,IAAI,GAAG,UAAU;IAC9D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IACxD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAgF,EAChF,OAAgB;IAEhB,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAClD,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACtC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;QACnD,OAAO,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACxC,CAAC;SACI,CAAC;QACJ,QAAQ,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;QAChD,OAAO,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,CAAC,KAAK;QAAE,QAAQ,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;;QAC3D,OAAO,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;IACzC,IAAI,OAAO,CAAC,SAAS;QAAE,QAAQ,CAAC,GAAG,CAAC,6BAA6B,GAAG,OAAO,CAAC,SAAS,CAAC;;QACjF,OAAO,QAAQ,CAAC,GAAG,CAAC,6BAA6B,CAAC;IAEvD,IAAI,OAAO,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;AACjD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccjk",
3
- "version": "15.0.0",
3
+ "version": "15.1.0",
4
4
  "description": "Clavue / Claude Code 配置 CLI — init、API、MCP、doctor、git 模板。一条命令搞定。",
5
5
  "type": "module",
6
6
  "bin": {