hop-claude 1.0.0 → 1.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/CHANGELOG.md +58 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +43 -21
- package/dist/cli.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/prompts.d.ts +3 -1
- package/dist/ui/prompts.d.ts.map +1 -1
- package/dist/ui/prompts.js +68 -64
- package/dist/ui/prompts.js.map +1 -1
- package/dist/utils/claude-launcher.js +4 -4
- package/dist/utils/claude-launcher.js.map +1 -1
- package/dist/utils/migration.js +56 -56
- package/dist/utils/migration.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,63 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ddefe5c: 修复导入/导出操作后不再启动 Claude Code
|
|
8
|
+
|
|
9
|
+
**修正**:
|
|
10
|
+
|
|
11
|
+
- 导入配置后直接退出,不再启动 Claude Code
|
|
12
|
+
- 导出配置后直接退出,不再启动 Claude Code
|
|
13
|
+
- 其他配置操作(选择、创建、编辑、删除)完成后继续正常启动
|
|
14
|
+
|
|
15
|
+
**改进**:
|
|
16
|
+
|
|
17
|
+
- 更符合用户预期的操作流程
|
|
18
|
+
- 避免不必要的 Claude Code 启动
|
|
19
|
+
|
|
20
|
+
- ddefe5c: 改进 `-s` 交互体验并完善中文化
|
|
21
|
+
|
|
22
|
+
**新功能**:
|
|
23
|
+
|
|
24
|
+
- `hop-claude -s` 现在会显示交互式配置选择列表
|
|
25
|
+
- 不再需要记住配置名称,可以从列表中选择
|
|
26
|
+
- 仍支持 `hop-claude -s <配置名>` 快速切换
|
|
27
|
+
|
|
28
|
+
**改进**:
|
|
29
|
+
|
|
30
|
+
- 完善命令行界面中文化(选项描述、错误消息、成功提示)
|
|
31
|
+
- 更友好的用户体验,避免输入错误
|
|
32
|
+
|
|
33
|
+
**示例**:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 显示列表选择(新功能)
|
|
37
|
+
hop-claude -s
|
|
38
|
+
|
|
39
|
+
# 快速切换(仍然支持)
|
|
40
|
+
hop-claude -s production
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 1.0.1
|
|
44
|
+
|
|
45
|
+
### Patch Changes
|
|
46
|
+
|
|
47
|
+
- 1860e33: 修正环境变量并完全中文化界面
|
|
48
|
+
|
|
49
|
+
**修正**:
|
|
50
|
+
|
|
51
|
+
- 环境变量从 `ANTHROPIC_API_KEY` 改为 `ANTHROPIC_AUTH_TOKEN`(与 Claude Code 官方一致)
|
|
52
|
+
|
|
53
|
+
**改进**:
|
|
54
|
+
|
|
55
|
+
- 完全中文化所有用户界面文本
|
|
56
|
+
- 交互提示、错误消息、迁移工具全部使用中文
|
|
57
|
+
- 明确标注 API Key 对应的环境变量名称
|
|
58
|
+
|
|
59
|
+
**面向受众**:主要为中国用户优化体验
|
|
60
|
+
|
|
3
61
|
## 1.0.0
|
|
4
62
|
|
|
5
63
|
### Major Changes
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;GAEG;AACH,wBAAsB,SAAS,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;GAEG;AACH,wBAAsB,SAAS,qBA0I9B"}
|
package/dist/cli.js
CHANGED
|
@@ -16,14 +16,14 @@ export async function createCLI() {
|
|
|
16
16
|
program
|
|
17
17
|
.name('hop-claude')
|
|
18
18
|
.version(pkg.version)
|
|
19
|
-
.description('Claude Code
|
|
20
|
-
.option('-c, --config', '
|
|
21
|
-
.option('-l, --list', '
|
|
22
|
-
.option('-s, --switch
|
|
23
|
-
.option('-e, --export <file>', '
|
|
24
|
-
.option('-i, --import <file>', '
|
|
25
|
-
.option('--migrate-encryption', '
|
|
26
|
-
.option('--encryption-info', '
|
|
19
|
+
.description('Claude Code 配置管理和启动工具')
|
|
20
|
+
.option('-c, --config', '进入配置管理模式')
|
|
21
|
+
.option('-l, --list', '列出所有配置')
|
|
22
|
+
.option('-s, --switch [profile]', '切换到指定配置(不提供名称则显示选择列表)')
|
|
23
|
+
.option('-e, --export <file>', '导出配置到文件')
|
|
24
|
+
.option('-i, --import <file>', '从文件导入配置')
|
|
25
|
+
.option('--migrate-encryption', '迁移到不同的加密模式')
|
|
26
|
+
.option('--encryption-info', '显示当前加密模式信息')
|
|
27
27
|
.allowUnknownOption(true) // 允许未知选项(用于透传给 claude)
|
|
28
28
|
.action(async (options) => {
|
|
29
29
|
try {
|
|
@@ -45,37 +45,59 @@ export async function createCLI() {
|
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
47
|
// 快速切换 profile
|
|
48
|
-
if (options.switch) {
|
|
49
|
-
|
|
50
|
-
if (
|
|
51
|
-
|
|
48
|
+
if (options.switch !== undefined) {
|
|
49
|
+
// 如果提供了配置名称,直接切换
|
|
50
|
+
if (typeof options.switch === 'string' && options.switch.trim()) {
|
|
51
|
+
const profile = await configManager.getProfile(options.switch);
|
|
52
|
+
if (!profile) {
|
|
53
|
+
displayError(`未找到配置 "${options.switch}"`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
await configManager.setCurrentProfile(options.switch);
|
|
57
|
+
displaySuccess(`已切换到:${options.switch}`);
|
|
58
|
+
// 如果有透传参数,继续启动 claude
|
|
59
|
+
const claudeArgs = getClaudeArgs(process.argv);
|
|
60
|
+
if (claudeArgs.length > 0) {
|
|
61
|
+
await launchClaude(profile, claudeArgs);
|
|
62
|
+
}
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// 如果没有提供配置名称,显示交互式选择列表
|
|
66
|
+
const profiles = await configManager.listProfiles();
|
|
67
|
+
if (profiles.length === 0) {
|
|
68
|
+
displayError('没有可用的配置');
|
|
52
69
|
process.exit(1);
|
|
53
70
|
}
|
|
54
|
-
await
|
|
55
|
-
displaySuccess(`Switched to: ${options.switch}`);
|
|
71
|
+
await ui.selectProfile(profiles);
|
|
56
72
|
// 如果有透传参数,继续启动 claude
|
|
57
73
|
const claudeArgs = getClaudeArgs(process.argv);
|
|
58
74
|
if (claudeArgs.length > 0) {
|
|
59
|
-
await
|
|
75
|
+
const currentProfile = await configManager.getCurrentProfile();
|
|
76
|
+
if (currentProfile) {
|
|
77
|
+
await launchClaude(currentProfile, claudeArgs);
|
|
78
|
+
}
|
|
60
79
|
}
|
|
61
80
|
return;
|
|
62
81
|
}
|
|
63
82
|
// 导出配置
|
|
64
83
|
if (options.export) {
|
|
65
84
|
await backupConfig(configManager, options.export);
|
|
66
|
-
displaySuccess(
|
|
85
|
+
displaySuccess(`配置已导出到:${options.export}`);
|
|
67
86
|
return;
|
|
68
87
|
}
|
|
69
88
|
// 导入配置
|
|
70
89
|
if (options.import) {
|
|
71
90
|
await restoreConfig(configManager, options.import);
|
|
72
|
-
displaySuccess('
|
|
91
|
+
displaySuccess('配置导入成功');
|
|
73
92
|
return;
|
|
74
93
|
}
|
|
75
94
|
// 强制进入配置模式
|
|
76
95
|
if (options.config) {
|
|
77
|
-
await ui.manageConfiguration();
|
|
78
|
-
|
|
96
|
+
const shouldContinue = await ui.manageConfiguration();
|
|
97
|
+
if (!shouldContinue) {
|
|
98
|
+
return; // 导入/导出等操作后直接退出
|
|
99
|
+
}
|
|
100
|
+
// 如果是其他操作(选择、创建、编辑),继续启动 Claude
|
|
79
101
|
}
|
|
80
102
|
// 正常流程:显示当前配置 + 询问是否修改
|
|
81
103
|
const shouldContinue = await ui.showCurrentAndAsk();
|
|
@@ -86,7 +108,7 @@ export async function createCLI() {
|
|
|
86
108
|
// 获取当前配置并启动 claude
|
|
87
109
|
const currentProfile = await configManager.getCurrentProfile();
|
|
88
110
|
if (!currentProfile) {
|
|
89
|
-
displayError('
|
|
111
|
+
displayError('未选择配置');
|
|
90
112
|
process.exit(1);
|
|
91
113
|
}
|
|
92
114
|
// 获取透传参数
|
|
@@ -99,7 +121,7 @@ export async function createCLI() {
|
|
|
99
121
|
displayError(err.message);
|
|
100
122
|
// 在 DEBUG 模式下显示完整的堆栈跟踪
|
|
101
123
|
if (process.env.DEBUG) {
|
|
102
|
-
console.error('\
|
|
124
|
+
console.error('\n堆栈跟踪:');
|
|
103
125
|
console.error(err.stack);
|
|
104
126
|
}
|
|
105
127
|
process.exit(1);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;IAE5C,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;SACpB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export interface DecryptedProfile extends Omit<ProfileConfig, 'apiKey'> {
|
|
|
25
25
|
apiKey: string;
|
|
26
26
|
}
|
|
27
27
|
export interface EnvironmentVariables {
|
|
28
|
-
|
|
28
|
+
ANTHROPIC_AUTH_TOKEN?: string;
|
|
29
29
|
ANTHROPIC_BASE_URL?: string;
|
|
30
30
|
HTTP_PROXY?: string;
|
|
31
31
|
HTTPS_PROXY?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;IACrE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;IACrE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC,CAAC,EAAE,MAAM,CAAC;CACnD;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/ui/prompts.d.ts
CHANGED
|
@@ -8,12 +8,14 @@ export declare class InteractiveUI {
|
|
|
8
8
|
constructor(configManager: ConfigManager);
|
|
9
9
|
/**
|
|
10
10
|
* 显示当前配置并询问是否修改
|
|
11
|
+
* @returns 是否应该继续启动 Claude
|
|
11
12
|
*/
|
|
12
13
|
showCurrentAndAsk(): Promise<boolean>;
|
|
13
14
|
/**
|
|
14
15
|
* 配置管理主界面
|
|
16
|
+
* @returns 是否应该继续启动 Claude(导入/导出操作返回 false)
|
|
15
17
|
*/
|
|
16
|
-
manageConfiguration(): Promise<
|
|
18
|
+
manageConfiguration(): Promise<boolean>;
|
|
17
19
|
/**
|
|
18
20
|
* 选择 profile
|
|
19
21
|
*/
|
package/dist/ui/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGzE;;GAEG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEhD
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGzE;;GAEG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEhD;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAuC3C;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IA0C7C;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7F;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgFpC;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsD3F;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B7F;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBzC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB1C;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B3C"}
|
package/dist/ui/prompts.js
CHANGED
|
@@ -13,29 +13,30 @@ export class InteractiveUI {
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* 显示当前配置并询问是否修改
|
|
16
|
+
* @returns 是否应该继续启动 Claude
|
|
16
17
|
*/
|
|
17
18
|
async showCurrentAndAsk() {
|
|
18
19
|
const current = await this.configManager.getCurrentProfile();
|
|
19
|
-
displayTitle('🔧 Claude Code
|
|
20
|
+
displayTitle('🔧 Claude Code 配置管理工具');
|
|
20
21
|
if (current) {
|
|
21
|
-
console.log(chalk.cyan('
|
|
22
|
-
displayInfo('
|
|
22
|
+
console.log(chalk.cyan('当前配置:'));
|
|
23
|
+
displayInfo('域名/配置名', chalk.green(current.domain));
|
|
23
24
|
displayInfo('Base URL', current.baseUrl);
|
|
24
|
-
displayInfo('
|
|
25
|
-
displayInfo('
|
|
25
|
+
displayInfo('代理', current.proxy, '(无)');
|
|
26
|
+
displayInfo('禁用非必要流量', current.disableNonessentialTraffic ? '是' : '否');
|
|
26
27
|
console.log();
|
|
27
28
|
}
|
|
28
29
|
else {
|
|
29
|
-
displayWarning('
|
|
30
|
+
displayWarning('尚未配置。\n');
|
|
30
31
|
}
|
|
31
32
|
const { action } = await prompts({
|
|
32
33
|
type: 'select',
|
|
33
34
|
name: 'action',
|
|
34
|
-
message: '
|
|
35
|
+
message: '请选择操作:',
|
|
35
36
|
choices: [
|
|
36
|
-
{ title: '
|
|
37
|
-
{ title: '
|
|
38
|
-
{ title: '
|
|
37
|
+
{ title: '使用当前配置继续', value: 'continue', disabled: !current },
|
|
38
|
+
{ title: '修改配置', value: 'modify' },
|
|
39
|
+
{ title: '退出', value: 'exit' },
|
|
39
40
|
],
|
|
40
41
|
initial: current ? 0 : 1,
|
|
41
42
|
});
|
|
@@ -43,48 +44,51 @@ export class InteractiveUI {
|
|
|
43
44
|
return false;
|
|
44
45
|
}
|
|
45
46
|
if (action === 'modify') {
|
|
46
|
-
await this.manageConfiguration();
|
|
47
|
+
return await this.manageConfiguration();
|
|
47
48
|
}
|
|
48
49
|
return true;
|
|
49
50
|
}
|
|
50
51
|
/**
|
|
51
52
|
* 配置管理主界面
|
|
53
|
+
* @returns 是否应该继续启动 Claude(导入/导出操作返回 false)
|
|
52
54
|
*/
|
|
53
55
|
async manageConfiguration() {
|
|
54
56
|
const profiles = await this.configManager.listProfiles();
|
|
55
57
|
const { action } = await prompts({
|
|
56
58
|
type: 'select',
|
|
57
59
|
name: 'action',
|
|
58
|
-
message: '
|
|
60
|
+
message: '配置管理',
|
|
59
61
|
choices: [
|
|
60
|
-
{ title: '
|
|
61
|
-
{ title: '
|
|
62
|
-
{ title: '
|
|
63
|
-
{ title: '
|
|
64
|
-
{ title: '
|
|
65
|
-
{ title: '
|
|
66
|
-
{ title: '
|
|
62
|
+
{ title: '选择已有配置', value: 'select', disabled: profiles.length === 0 },
|
|
63
|
+
{ title: '创建新配置', value: 'create' },
|
|
64
|
+
{ title: '编辑已有配置', value: 'edit', disabled: profiles.length === 0 },
|
|
65
|
+
{ title: '删除配置', value: 'delete', disabled: profiles.length === 0 },
|
|
66
|
+
{ title: '导出配置', value: 'export' },
|
|
67
|
+
{ title: '导入配置', value: 'import' },
|
|
68
|
+
{ title: '返回', value: 'back' },
|
|
67
69
|
],
|
|
68
70
|
});
|
|
69
71
|
switch (action) {
|
|
70
72
|
case 'select':
|
|
71
73
|
await this.selectProfile(profiles);
|
|
72
|
-
|
|
74
|
+
return true;
|
|
73
75
|
case 'create':
|
|
74
76
|
await this.createProfile();
|
|
75
|
-
|
|
77
|
+
return true;
|
|
76
78
|
case 'edit':
|
|
77
79
|
await this.editProfile(profiles);
|
|
78
|
-
|
|
80
|
+
return true;
|
|
79
81
|
case 'delete':
|
|
80
82
|
await this.deleteProfile(profiles);
|
|
81
|
-
|
|
83
|
+
return true;
|
|
82
84
|
case 'export':
|
|
83
85
|
await this.exportConfiguration();
|
|
84
|
-
|
|
86
|
+
return false; // 导出后不启动 Claude
|
|
85
87
|
case 'import':
|
|
86
88
|
await this.importConfiguration();
|
|
87
|
-
|
|
89
|
+
return false; // 导入后不启动 Claude
|
|
90
|
+
default:
|
|
91
|
+
return false; // 返回或取消时不启动 Claude
|
|
88
92
|
}
|
|
89
93
|
}
|
|
90
94
|
/**
|
|
@@ -94,7 +98,7 @@ export class InteractiveUI {
|
|
|
94
98
|
const { domain } = await prompts({
|
|
95
99
|
type: 'select',
|
|
96
100
|
name: 'domain',
|
|
97
|
-
message: '
|
|
101
|
+
message: '选择配置:',
|
|
98
102
|
choices: profiles.map(p => ({
|
|
99
103
|
title: `${p.domain} (${p.maskedApiKey})`,
|
|
100
104
|
value: p.domain,
|
|
@@ -102,7 +106,7 @@ export class InteractiveUI {
|
|
|
102
106
|
});
|
|
103
107
|
if (domain) {
|
|
104
108
|
await this.configManager.setCurrentProfile(domain);
|
|
105
|
-
displaySuccess(
|
|
109
|
+
displaySuccess(`已切换到:${domain}`);
|
|
106
110
|
}
|
|
107
111
|
}
|
|
108
112
|
/**
|
|
@@ -113,61 +117,61 @@ export class InteractiveUI {
|
|
|
113
117
|
{
|
|
114
118
|
type: 'text',
|
|
115
119
|
name: 'domain',
|
|
116
|
-
message: '
|
|
117
|
-
validate: value => value.trim() ? true : '
|
|
120
|
+
message: '域名/配置名:',
|
|
121
|
+
validate: value => value.trim() ? true : '域名不能为空',
|
|
118
122
|
},
|
|
119
123
|
{
|
|
120
124
|
type: 'password',
|
|
121
125
|
name: 'apiKey',
|
|
122
|
-
message: 'API Key
|
|
123
|
-
validate: value => value.trim() ? true : 'API Key
|
|
126
|
+
message: 'API Key (ANTHROPIC_AUTH_TOKEN):',
|
|
127
|
+
validate: value => value.trim() ? true : 'API Key 不能为空',
|
|
124
128
|
},
|
|
125
129
|
{
|
|
126
130
|
type: 'text',
|
|
127
131
|
name: 'baseUrl',
|
|
128
|
-
message: 'Base URL (
|
|
132
|
+
message: 'Base URL (可选,用于中转站):',
|
|
129
133
|
},
|
|
130
134
|
{
|
|
131
135
|
type: 'text',
|
|
132
136
|
name: 'proxy',
|
|
133
|
-
message: '
|
|
137
|
+
message: '代理 (可选):',
|
|
134
138
|
},
|
|
135
139
|
{
|
|
136
140
|
type: 'confirm',
|
|
137
141
|
name: 'disableNonessentialTraffic',
|
|
138
|
-
message: '
|
|
142
|
+
message: '禁用非必要流量?',
|
|
139
143
|
initial: false,
|
|
140
144
|
},
|
|
141
145
|
{
|
|
142
146
|
type: 'confirm',
|
|
143
147
|
name: 'validate',
|
|
144
|
-
message: '
|
|
148
|
+
message: '验证 API Key 有效性?',
|
|
145
149
|
initial: false,
|
|
146
150
|
},
|
|
147
151
|
]);
|
|
148
152
|
if (!answers.domain || !answers.apiKey) {
|
|
149
|
-
displayWarning('
|
|
153
|
+
displayWarning('已取消');
|
|
150
154
|
return;
|
|
151
155
|
}
|
|
152
156
|
// 验证 API Key(如果用户选择)
|
|
153
157
|
if (answers.validate) {
|
|
154
|
-
console.log(chalk.gray('
|
|
158
|
+
console.log(chalk.gray('正在验证 API Key...'));
|
|
155
159
|
const result = await validateApiKey(answers.apiKey, answers.baseUrl);
|
|
156
160
|
if (!result.valid) {
|
|
157
|
-
displayError(`API Key
|
|
161
|
+
displayError(`API Key 验证失败:${result.error}`);
|
|
158
162
|
const { continueAnyway } = await prompts({
|
|
159
163
|
type: 'confirm',
|
|
160
164
|
name: 'continueAnyway',
|
|
161
|
-
message: '
|
|
165
|
+
message: '仍然继续?',
|
|
162
166
|
initial: false,
|
|
163
167
|
});
|
|
164
168
|
if (!continueAnyway) {
|
|
165
|
-
displayWarning('
|
|
169
|
+
displayWarning('已取消');
|
|
166
170
|
return;
|
|
167
171
|
}
|
|
168
172
|
}
|
|
169
173
|
else {
|
|
170
|
-
displaySuccess('API Key
|
|
174
|
+
displaySuccess('API Key 有效');
|
|
171
175
|
}
|
|
172
176
|
}
|
|
173
177
|
const profile = {
|
|
@@ -181,7 +185,7 @@ export class InteractiveUI {
|
|
|
181
185
|
};
|
|
182
186
|
await this.configManager.saveProfile(profile);
|
|
183
187
|
await this.configManager.setCurrentProfile(profile.domain);
|
|
184
|
-
displaySuccess(
|
|
188
|
+
displaySuccess(`配置 "${profile.domain}" 已创建并激活`);
|
|
185
189
|
}
|
|
186
190
|
/**
|
|
187
191
|
* 编辑 profile
|
|
@@ -190,7 +194,7 @@ export class InteractiveUI {
|
|
|
190
194
|
const { domain } = await prompts({
|
|
191
195
|
type: 'select',
|
|
192
196
|
name: 'domain',
|
|
193
|
-
message: '
|
|
197
|
+
message: '选择要编辑的配置:',
|
|
194
198
|
choices: profiles.map(p => ({
|
|
195
199
|
title: `${p.domain} (${p.maskedApiKey})`,
|
|
196
200
|
value: p.domain,
|
|
@@ -205,24 +209,24 @@ export class InteractiveUI {
|
|
|
205
209
|
{
|
|
206
210
|
type: 'password',
|
|
207
211
|
name: 'apiKey',
|
|
208
|
-
message: 'API Key (
|
|
212
|
+
message: 'API Key (留空保持不变):',
|
|
209
213
|
},
|
|
210
214
|
{
|
|
211
215
|
type: 'text',
|
|
212
216
|
name: 'baseUrl',
|
|
213
|
-
message: 'Base URL
|
|
217
|
+
message: 'Base URL:',
|
|
214
218
|
initial: existing.baseUrl,
|
|
215
219
|
},
|
|
216
220
|
{
|
|
217
221
|
type: 'text',
|
|
218
222
|
name: 'proxy',
|
|
219
|
-
message: '
|
|
223
|
+
message: '代理:',
|
|
220
224
|
initial: existing.proxy,
|
|
221
225
|
},
|
|
222
226
|
{
|
|
223
227
|
type: 'confirm',
|
|
224
228
|
name: 'disableNonessentialTraffic',
|
|
225
|
-
message: '
|
|
229
|
+
message: '禁用非必要流量?',
|
|
226
230
|
initial: existing.disableNonessentialTraffic,
|
|
227
231
|
},
|
|
228
232
|
]);
|
|
@@ -234,7 +238,7 @@ export class InteractiveUI {
|
|
|
234
238
|
disableNonessentialTraffic: answers.disableNonessentialTraffic,
|
|
235
239
|
};
|
|
236
240
|
await this.configManager.saveProfile(updated);
|
|
237
|
-
displaySuccess(
|
|
241
|
+
displaySuccess(`配置 "${domain}" 已更新`);
|
|
238
242
|
}
|
|
239
243
|
/**
|
|
240
244
|
* 删除 profile
|
|
@@ -243,7 +247,7 @@ export class InteractiveUI {
|
|
|
243
247
|
const { domain } = await prompts({
|
|
244
248
|
type: 'select',
|
|
245
249
|
name: 'domain',
|
|
246
|
-
message: '
|
|
250
|
+
message: '选择要删除的配置:',
|
|
247
251
|
choices: profiles.map(p => ({
|
|
248
252
|
title: `${p.domain} (${p.maskedApiKey})`,
|
|
249
253
|
value: p.domain,
|
|
@@ -254,12 +258,12 @@ export class InteractiveUI {
|
|
|
254
258
|
const { confirm } = await prompts({
|
|
255
259
|
type: 'confirm',
|
|
256
260
|
name: 'confirm',
|
|
257
|
-
message:
|
|
261
|
+
message: `确定要删除 "${domain}" 吗?`,
|
|
258
262
|
initial: false,
|
|
259
263
|
});
|
|
260
264
|
if (confirm) {
|
|
261
265
|
await this.configManager.deleteProfile(domain);
|
|
262
|
-
displaySuccess(
|
|
266
|
+
displaySuccess(`配置 "${domain}" 已删除`);
|
|
263
267
|
}
|
|
264
268
|
}
|
|
265
269
|
/**
|
|
@@ -268,9 +272,9 @@ export class InteractiveUI {
|
|
|
268
272
|
async listConfigurations() {
|
|
269
273
|
const profiles = await this.configManager.listProfiles();
|
|
270
274
|
const config = await this.configManager.getConfig();
|
|
271
|
-
displayTitle('📋
|
|
275
|
+
displayTitle('📋 所有配置:');
|
|
272
276
|
if (profiles.length === 0) {
|
|
273
|
-
console.log(chalk.gray('
|
|
277
|
+
console.log(chalk.gray(' 未找到任何配置\n'));
|
|
274
278
|
return;
|
|
275
279
|
}
|
|
276
280
|
profiles.forEach(p => {
|
|
@@ -279,8 +283,8 @@ export class InteractiveUI {
|
|
|
279
283
|
console.log(`${marker} ${chalk.bold(p.domain)}`);
|
|
280
284
|
displayInfo('API Key', p.maskedApiKey);
|
|
281
285
|
displayInfo('Base URL', p.baseUrl);
|
|
282
|
-
displayInfo('
|
|
283
|
-
displayInfo('
|
|
286
|
+
displayInfo('代理', p.proxy, '(无)');
|
|
287
|
+
displayInfo('禁用非必要流量', p.disableNonessentialTraffic ? '是' : '否');
|
|
284
288
|
console.log();
|
|
285
289
|
});
|
|
286
290
|
}
|
|
@@ -291,18 +295,18 @@ export class InteractiveUI {
|
|
|
291
295
|
const { outputPath } = await prompts({
|
|
292
296
|
type: 'text',
|
|
293
297
|
name: 'outputPath',
|
|
294
|
-
message: '
|
|
295
|
-
initial: './
|
|
298
|
+
message: '导出到文件:',
|
|
299
|
+
initial: './hop-claude-backup.json',
|
|
296
300
|
});
|
|
297
301
|
if (!outputPath)
|
|
298
302
|
return;
|
|
299
303
|
try {
|
|
300
304
|
await backupConfig(this.configManager, outputPath);
|
|
301
|
-
displaySuccess(
|
|
305
|
+
displaySuccess(`配置已导出到:${outputPath}`);
|
|
302
306
|
}
|
|
303
307
|
catch (error) {
|
|
304
308
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
305
|
-
displayError(
|
|
309
|
+
displayError(`导出失败:${err.message}`);
|
|
306
310
|
}
|
|
307
311
|
}
|
|
308
312
|
/**
|
|
@@ -312,27 +316,27 @@ export class InteractiveUI {
|
|
|
312
316
|
const { inputPath } = await prompts({
|
|
313
317
|
type: 'text',
|
|
314
318
|
name: 'inputPath',
|
|
315
|
-
message: '
|
|
319
|
+
message: '从文件导入:',
|
|
316
320
|
});
|
|
317
321
|
if (!inputPath)
|
|
318
322
|
return;
|
|
319
323
|
const { confirm } = await prompts({
|
|
320
324
|
type: 'confirm',
|
|
321
325
|
name: 'confirm',
|
|
322
|
-
message: '
|
|
326
|
+
message: '这将替换所有现有配置。是否继续?',
|
|
323
327
|
initial: false,
|
|
324
328
|
});
|
|
325
329
|
if (!confirm) {
|
|
326
|
-
displayWarning('
|
|
330
|
+
displayWarning('已取消');
|
|
327
331
|
return;
|
|
328
332
|
}
|
|
329
333
|
try {
|
|
330
334
|
await restoreConfig(this.configManager, inputPath);
|
|
331
|
-
displaySuccess('
|
|
335
|
+
displaySuccess('配置导入成功');
|
|
332
336
|
}
|
|
333
337
|
catch (error) {
|
|
334
338
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
335
|
-
displayError(
|
|
339
|
+
displayError(`导入失败:${err.message}`);
|
|
336
340
|
}
|
|
337
341
|
}
|
|
338
342
|
}
|
package/dist/ui/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEvG;;GAEG;AACH,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAEpD
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export async function launchClaude(profile, args = []) {
|
|
|
34
34
|
// 构建环境变量
|
|
35
35
|
const env = {
|
|
36
36
|
...process.env,
|
|
37
|
-
|
|
37
|
+
ANTHROPIC_AUTH_TOKEN: profile.apiKey,
|
|
38
38
|
};
|
|
39
39
|
if (profile.baseUrl) {
|
|
40
40
|
env.ANTHROPIC_BASE_URL = profile.baseUrl;
|
|
@@ -59,9 +59,9 @@ export async function launchClaude(profile, args = []) {
|
|
|
59
59
|
});
|
|
60
60
|
// 处理错误
|
|
61
61
|
claude.on('error', (error) => {
|
|
62
|
-
console.error('
|
|
63
|
-
console.error('\
|
|
64
|
-
console.error('
|
|
62
|
+
console.error('启动 Claude 失败:', error.message);
|
|
63
|
+
console.error('\n请确保 Claude CLI 已安装并在 PATH 中可用。');
|
|
64
|
+
console.error('安装地址:https://github.com/anthropics/claude-code');
|
|
65
65
|
process.exit(1);
|
|
66
66
|
});
|
|
67
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-launcher.js","sourceRoot":"","sources":["../../src/utils/claude-launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;GAGG;AACH,SAAS,eAAe;IACtB,uBAAuB;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAExD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,UAAU;QACZ,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAyB,EACzB,OAAiB,EAAE;IAEnB,SAAS;IACT,MAAM,GAAG,GAAyB;QAChC,GAAG,OAAO,CAAC,GAAG;QACd,
|
|
1
|
+
{"version":3,"file":"claude-launcher.js","sourceRoot":"","sources":["../../src/utils/claude-launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;GAGG;AACH,SAAS,eAAe;IACtB,uBAAuB;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAExD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,UAAU;QACZ,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAyB,EACzB,OAAiB,EAAE;IAEnB,SAAS;IACT,MAAM,GAAG,GAAyB;QAChC,GAAG,OAAO,CAAC,GAAG;QACd,oBAAoB,EAAE,OAAO,CAAC,MAAM;KACrC,CAAC;IAEF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/B,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;QACvC,GAAG,CAAC,wCAAwC,GAAG,GAAG,CAAC;IACrD,CAAC;IAED,gBAAgB;IAChB,+BAA+B;IAC/B,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;QAClC,GAAG,EAAE,GAAwB;QAC7B,KAAK,EAAE,SAAS,EAAE,eAAe;KAClC,CAAC,CAAC;IAEH,OAAO;IACP,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO;IACP,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/utils/migration.js
CHANGED
|
@@ -14,14 +14,14 @@ export class EncryptionMigration {
|
|
|
14
14
|
* 执行加密模式迁移
|
|
15
15
|
*/
|
|
16
16
|
async migrate() {
|
|
17
|
-
displayMessage('\n===
|
|
17
|
+
displayMessage('\n=== 加密模式迁移 ===\n');
|
|
18
18
|
// 获取当前加密模式
|
|
19
19
|
const currentMode = await this.configManager.getEncryptionMode();
|
|
20
|
-
displayMessage(
|
|
20
|
+
displayMessage(`当前加密模式:${currentMode}`);
|
|
21
21
|
if (currentMode === 'legacy') {
|
|
22
|
-
displayWarning('\nLegacy
|
|
23
|
-
displayWarning('
|
|
24
|
-
displayMessage('\
|
|
22
|
+
displayWarning('\nLegacy 模式使用机器绑定加密。');
|
|
23
|
+
displayWarning('导出的配置无法在其他机器上恢复。');
|
|
24
|
+
displayMessage('\n建议:迁移到更安全和可移植的模式。\n');
|
|
25
25
|
}
|
|
26
26
|
// 检查 keychain 是否可用
|
|
27
27
|
const keychainAvailable = await KeychainManager.isAvailable();
|
|
@@ -29,38 +29,38 @@ export class EncryptionMigration {
|
|
|
29
29
|
const choices = [];
|
|
30
30
|
if (keychainAvailable) {
|
|
31
31
|
choices.push({
|
|
32
|
-
title: 'Keychain
|
|
32
|
+
title: 'Keychain(推荐)',
|
|
33
33
|
value: 'keychain',
|
|
34
|
-
description: '
|
|
34
|
+
description: '将密钥存储在系统 keychain - 最安全,无需记住密码',
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
|
-
displayWarning('
|
|
38
|
+
displayWarning('注意:本系统不支持 OS Keychain。');
|
|
39
39
|
}
|
|
40
40
|
choices.push({
|
|
41
|
-
title: 'Passphrase',
|
|
41
|
+
title: 'Passphrase(密码)',
|
|
42
42
|
value: 'passphrase',
|
|
43
|
-
description: '
|
|
43
|
+
description: '使用密码加密 - 可跨机器移植,每次需要输入密码',
|
|
44
44
|
});
|
|
45
45
|
if (currentMode !== 'legacy') {
|
|
46
46
|
choices.push({
|
|
47
|
-
title: 'Legacy
|
|
47
|
+
title: 'Legacy(不推荐)',
|
|
48
48
|
value: 'legacy',
|
|
49
|
-
description: '
|
|
49
|
+
description: '机器绑定加密 - 无法在其他机器上恢复',
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
const { newMode } = await prompts({
|
|
53
53
|
type: 'select',
|
|
54
54
|
name: 'newMode',
|
|
55
|
-
message: '
|
|
55
|
+
message: '选择新的加密模式:',
|
|
56
56
|
choices,
|
|
57
57
|
});
|
|
58
58
|
if (!newMode) {
|
|
59
|
-
displayWarning('
|
|
59
|
+
displayWarning('已取消迁移');
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
if (newMode === currentMode) {
|
|
63
|
-
displayMessage('
|
|
63
|
+
displayMessage('已在使用此模式,无需迁移。');
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
66
66
|
// 如果选择 passphrase 模式,需要输入密码
|
|
@@ -69,20 +69,20 @@ export class EncryptionMigration {
|
|
|
69
69
|
const { pwd1 } = await prompts({
|
|
70
70
|
type: 'password',
|
|
71
71
|
name: 'pwd1',
|
|
72
|
-
message: '
|
|
73
|
-
validate: (value) => value.length >= 8 ? true : '
|
|
72
|
+
message: '输入新密码用于加密:',
|
|
73
|
+
validate: (value) => value.length >= 8 ? true : '密码至少需要 8 个字符',
|
|
74
74
|
});
|
|
75
75
|
if (!pwd1) {
|
|
76
|
-
displayWarning('
|
|
76
|
+
displayWarning('已取消迁移');
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
79
|
const { pwd2 } = await prompts({
|
|
80
80
|
type: 'password',
|
|
81
81
|
name: 'pwd2',
|
|
82
|
-
message: '
|
|
82
|
+
message: '确认密码:',
|
|
83
83
|
});
|
|
84
84
|
if (pwd1 !== pwd2) {
|
|
85
|
-
displayError('
|
|
85
|
+
displayError('两次密码输入不一致');
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
88
88
|
passphrase = pwd1;
|
|
@@ -91,49 +91,49 @@ export class EncryptionMigration {
|
|
|
91
91
|
const { confirm } = await prompts({
|
|
92
92
|
type: 'confirm',
|
|
93
93
|
name: 'confirm',
|
|
94
|
-
message:
|
|
94
|
+
message: `确认从 ${currentMode} 迁移到 ${newMode} 模式?`,
|
|
95
95
|
initial: false,
|
|
96
96
|
});
|
|
97
97
|
if (!confirm) {
|
|
98
|
-
displayWarning('
|
|
98
|
+
displayWarning('已取消迁移');
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
101
|
try {
|
|
102
|
-
displayMessage('\
|
|
102
|
+
displayMessage('\n正在备份当前配置...');
|
|
103
103
|
// 创建备份
|
|
104
104
|
const backupPath = `${this.configManager.getConfigPath()}.backup-${Date.now()}`;
|
|
105
105
|
const configData = await this.configManager.exportConfig();
|
|
106
106
|
const fs = await import('fs/promises');
|
|
107
107
|
await fs.writeFile(backupPath, configData, 'utf8');
|
|
108
|
-
displaySuccess(
|
|
109
|
-
displayMessage('\
|
|
108
|
+
displaySuccess(`备份已创建:${backupPath}`);
|
|
109
|
+
displayMessage('\n正在迁移加密模式...');
|
|
110
110
|
// 执行迁移
|
|
111
111
|
await this.configManager.switchEncryptionMode(newMode, passphrase);
|
|
112
|
-
displaySuccess(`\
|
|
113
|
-
displayMessage(`\
|
|
112
|
+
displaySuccess(`\n迁移完成!`);
|
|
113
|
+
displayMessage(`\n加密模式已更改:${currentMode} → ${newMode}`);
|
|
114
114
|
if (newMode === 'keychain') {
|
|
115
|
-
displayMessage('\
|
|
116
|
-
displayMessage('
|
|
115
|
+
displayMessage('\n您的 API 密钥现在存储在系统 keychain 中。');
|
|
116
|
+
displayMessage('配置文件仅包含非敏感数据。');
|
|
117
117
|
}
|
|
118
118
|
else if (newMode === 'passphrase') {
|
|
119
|
-
displayWarning('\
|
|
120
|
-
displayWarning('
|
|
119
|
+
displayWarning('\n重要:请记住您的密码!');
|
|
120
|
+
displayWarning('每次使用 hop-claude 时都需要输入密码。');
|
|
121
121
|
if (passphrase) {
|
|
122
122
|
this.configManager.setSessionPassphrase(passphrase);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
displayMessage(`\
|
|
126
|
-
displayMessage('
|
|
125
|
+
displayMessage(`\n备份文件:${backupPath}`);
|
|
126
|
+
displayMessage('验证迁移成功后可以删除备份文件。\n');
|
|
127
127
|
}
|
|
128
128
|
catch (error) {
|
|
129
129
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
130
|
-
displayError(
|
|
130
|
+
displayError(`迁移失败:${err.message}`);
|
|
131
131
|
if (process.env.DEBUG) {
|
|
132
|
-
console.error('\
|
|
132
|
+
console.error('\n堆栈跟踪:');
|
|
133
133
|
console.error(err.stack);
|
|
134
134
|
}
|
|
135
|
-
displayWarning('\
|
|
136
|
-
displayWarning('
|
|
135
|
+
displayWarning('\n您的配置已备份。');
|
|
136
|
+
displayWarning('如有需要请从备份恢复。');
|
|
137
137
|
process.exit(1);
|
|
138
138
|
}
|
|
139
139
|
}
|
|
@@ -143,33 +143,33 @@ export class EncryptionMigration {
|
|
|
143
143
|
async showEncryptionInfo() {
|
|
144
144
|
const mode = await this.configManager.getEncryptionMode();
|
|
145
145
|
const keychainAvailable = await KeychainManager.isAvailable();
|
|
146
|
-
displayMessage('\n===
|
|
147
|
-
displayMessage(
|
|
146
|
+
displayMessage('\n=== 加密模式信息 ===\n');
|
|
147
|
+
displayMessage(`当前模式:${mode}`);
|
|
148
148
|
switch (mode) {
|
|
149
149
|
case 'legacy':
|
|
150
|
-
displayMessage('\nLegacy
|
|
151
|
-
displayMessage(' -
|
|
152
|
-
displayMessage(' -
|
|
153
|
-
displayMessage(' -
|
|
154
|
-
displayWarning('\n
|
|
155
|
-
displayMessage('
|
|
150
|
+
displayMessage('\nLegacy 模式:');
|
|
151
|
+
displayMessage(' - 使用机器绑定加密(hostname + username)');
|
|
152
|
+
displayMessage(' - 密钥已加密但绑定到本机');
|
|
153
|
+
displayMessage(' - 导出的配置无法在其他机器上恢复');
|
|
154
|
+
displayWarning('\n 警告:此模式已弃用且安全性较低。');
|
|
155
|
+
displayMessage(' 建议迁移到 keychain 或 passphrase 模式。');
|
|
156
156
|
break;
|
|
157
157
|
case 'keychain':
|
|
158
|
-
displayMessage('\nKeychain
|
|
159
|
-
displayMessage(' -
|
|
160
|
-
displayMessage(' -
|
|
161
|
-
displayMessage(' -
|
|
162
|
-
displayWarning('\n
|
|
158
|
+
displayMessage('\nKeychain 模式:');
|
|
159
|
+
displayMessage(' - 密钥存储在系统 keychain(最安全)');
|
|
160
|
+
displayMessage(' - 日常使用无需输入密码');
|
|
161
|
+
displayMessage(' - 密钥永不写入磁盘');
|
|
162
|
+
displayWarning('\n 注意:无法跨机器导出/导入密钥。');
|
|
163
163
|
break;
|
|
164
164
|
case 'passphrase':
|
|
165
|
-
displayMessage('\nPassphrase
|
|
166
|
-
displayMessage(' -
|
|
167
|
-
displayMessage(' -
|
|
168
|
-
displayMessage(' -
|
|
165
|
+
displayMessage('\nPassphrase 模式:');
|
|
166
|
+
displayMessage(' - 使用密码加密密钥');
|
|
167
|
+
displayMessage(' - 完全可跨机器移植');
|
|
168
|
+
displayMessage(' - 每次操作需要输入密码');
|
|
169
169
|
break;
|
|
170
170
|
}
|
|
171
|
-
displayMessage(`\
|
|
172
|
-
displayMessage('\
|
|
171
|
+
displayMessage(`\n系统 Keychain 可用:${keychainAvailable ? '是' : '否'}`);
|
|
172
|
+
displayMessage('\n要迁移到不同模式,请运行:');
|
|
173
173
|
displayMessage(' hop-claude --migrate-encryption\n');
|
|
174
174
|
}
|
|
175
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGhG;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACtB,aAAa,CAAgB;IAErC,YAAY,aAA4B;QACtC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"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"}
|