hop-claude 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,93 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - c835b69: 移除 Legacy 加密模式支持
8
+
9
+ **破坏性变更**:
10
+
11
+ - 完全移除 legacy 加密模式(机器绑定加密)
12
+ - 移除 legacy 向后兼容代码
13
+ - 删除 encryption.ts 文件
14
+
15
+ **新默认行为**:
16
+
17
+ - 新安装自动选择最佳加密模式:
18
+ - 支持 Keychain 的系统默认使用 Keychain 模式
19
+ - 不支持 Keychain 的系统默认使用密码加密模式
20
+ - 更简洁的代码库和更好的安全性
21
+
22
+ **迁移说明**:
23
+ 如果你已有配置,系统会自动检测并提示迁移到新的加密模式。
24
+ 建议使用 Keychain 模式(macOS/Linux)或密码加密模式(Windows/其他)。
25
+
26
+ **改进**:
27
+
28
+ - 简化了加密模式选择逻辑
29
+ - 移除了不安全的机器绑定加密
30
+ - 提升了整体安全性
31
+ - 减少了代码复杂度
32
+
33
+ ## 1.1.0
34
+
35
+ ### Minor Changes
36
+
37
+ - 5b6991c: 解决参数透传冲突,支持 Claude CLI 的 -c 参数
38
+
39
+ **破坏性变更**:
40
+
41
+ - `-c, --config` 已更改为 `-m, --manage`(进入配置管理模式)
42
+
43
+ **新功能**:
44
+
45
+ - 现在 `-c` 参数可以正确透传给 Claude CLI(用于继续上次对话)
46
+ - 支持 `--` 分隔符来明确区分 hop-claude 参数和 Claude 参数
47
+
48
+ **使用示例**:
49
+
50
+ ```bash
51
+ # 进入配置管理(原 -c 改为 -m)
52
+ hop-claude -m
53
+
54
+ # 继续上次对话(-c 透传给 Claude)
55
+ hop-claude -c
56
+
57
+ # 使用 -- 分隔符(推荐,更明确)
58
+ hop-claude -- -c
59
+ hop-claude -s myprofile -- -c --verbose
60
+
61
+ # 切换配置后继续对话
62
+ hop-claude -s myprofile -c
63
+ ```
64
+
65
+ **迁移指南**:
66
+ 如果你之前使用 `hop-claude -c` 进入配置管理,现在需要改为 `hop-claude -m`
67
+
68
+ ### Patch Changes
69
+
70
+ - 81e95cf: 改进密码加密模式的用户体验
71
+
72
+ **修正**:
73
+
74
+ - 修复从密码模式迁移时缺少密码输入提示的问题
75
+ - 支持空密码作为默认值,失败后再提示输入
76
+ - 改进密码验证逻辑,避免不必要的交互
77
+
78
+ **改进**:
79
+
80
+ - 简化"Passphrase"表述为"密码加密",更易理解
81
+ - 优化密码输入提示,支持直接回车使用空密码
82
+ - 空密码时不再要求确认密码
83
+ - 更清晰的迁移后提示信息
84
+
85
+ **用户体验**:
86
+
87
+ - 迁移时先尝试空密码自动解密,失败才提示输入
88
+ - 创建新密码时可以直接回车使用空密码(简化使用)
89
+ - 使用空密码时自动跳过密码确认步骤
90
+
3
91
  ## 1.0.2
4
92
 
5
93
  ### Patch Changes
package/dist/cli.js CHANGED
@@ -17,7 +17,7 @@ export async function createCLI() {
17
17
  .name('hop-claude')
18
18
  .version(pkg.version)
19
19
  .description('Claude Code 配置管理和启动工具')
20
- .option('-c, --config', '进入配置管理模式')
20
+ .option('-m, --manage', '进入配置管理模式')
21
21
  .option('-l, --list', '列出所有配置')
22
22
  .option('-s, --switch [profile]', '切换到指定配置(不提供名称则显示选择列表)')
23
23
  .option('-e, --export <file>', '导出配置到文件')
@@ -92,7 +92,7 @@ export async function createCLI() {
92
92
  return;
93
93
  }
94
94
  // 强制进入配置模式
95
- if (options.config) {
95
+ if (options.manage) {
96
96
  const shouldContinue = await ui.manageConfiguration();
97
97
  if (!shouldContinue) {
98
98
  return; // 导入/导出等操作后直接退出
@@ -131,11 +131,12 @@ export async function createCLI() {
131
131
  }
132
132
  /**
133
133
  * 获取需要透传给 claude 的参数
134
- * 过滤掉 cproxy 自己的参数
134
+ * 支持 -- 分隔符来明确区分 hop-claude 参数和 claude 参数
135
+ * 过滤掉 hop-claude 自己的参数
135
136
  */
136
137
  function getClaudeArgs(argv) {
137
- const cproxyFlags = [
138
- '-c', '--config',
138
+ const hopClaudeFlags = [
139
+ '-m', '--manage',
139
140
  '-l', '--list',
140
141
  '-s', '--switch',
141
142
  '-e', '--export',
@@ -145,6 +146,13 @@ function getClaudeArgs(argv) {
145
146
  '--migrate-encryption',
146
147
  '--encryption-info'
147
148
  ];
149
+ // 查找 -- 分隔符
150
+ const separatorIndex = argv.indexOf('--');
151
+ // 如果有 -- 分隔符,直接返回分隔符后面的所有参数
152
+ if (separatorIndex !== -1) {
153
+ return argv.slice(separatorIndex + 1);
154
+ }
155
+ // 否则,过滤掉 hop-claude 的参数
148
156
  const result = [];
149
157
  let skip = false;
150
158
  for (let i = 2; i < argv.length; i++) {
@@ -153,8 +161,8 @@ function getClaudeArgs(argv) {
153
161
  skip = false;
154
162
  continue;
155
163
  }
156
- // 跳过 cproxy 的选项
157
- if (cproxyFlags.includes(arg)) {
164
+ // 跳过 hop-claude 的选项
165
+ if (hopClaudeFlags.includes(arg)) {
158
166
  // 如果是需要值的选项,跳过下一个参数
159
167
  if (['-s', '--switch', '-e', '--export', '-i', '--import'].includes(arg)) {
160
168
  skip = true;
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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"}
@@ -1,14 +1,12 @@
1
1
  import type { ConfigStore, ProfileConfig, DecryptedProfile, EncryptionMode } from '../types/index.js';
2
2
  /**
3
3
  * 配置管理核心类
4
- * 支持三种加密模式:
5
- * - legacy: 机器绑定加密(向后兼容)
4
+ * 支持两种加密模式:
6
5
  * - keychain: OS 密钥链存储(推荐)
7
- * - passphrase: 用户密码加密(可移植)
6
+ * - passphrase: 密码加密(可移植)
8
7
  */
9
8
  export declare class ConfigManager {
10
9
  private storage;
11
- private legacyEncryption;
12
10
  private passphraseEncryption;
13
11
  private keychainManager;
14
12
  private sessionPassphrase?;
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtG;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,iBAAiB,CAAC,CAAS;;IASnC;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAI9B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAKlD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAsBxC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAYvC;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiEhF;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAuDvF;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD;;;OAGG;IACG,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAM9E;;;OAGG;IACG,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA0DjG;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlD;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAWrC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/C;;;;OAIG;IACG,oBAAoB,CACxB,OAAO,EAAE,cAAc,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAyChB;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtG;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,iBAAiB,CAAC,CAAS;;IAQnC;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAI9B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAUlD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA2BxC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAavC;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDhF;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAuCvF;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD;;;OAGG;IACG,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAM9E;;;OAGG;IACG,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA6CjG;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlD;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAWrC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C;;;;OAIG;IACG,oBAAoB,CACxB,OAAO,EAAE,cAAc,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAyChB;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}
@@ -1,24 +1,20 @@
1
1
  import { ConfigStorage } from './storage.js';
2
- import { Encryption } from './encryption.js';
3
2
  import { PassphraseEncryption } from './encryption-v2.js';
4
3
  import { KeychainManager } from './keychain.js';
5
4
  /**
6
5
  * 配置管理核心类
7
- * 支持三种加密模式:
8
- * - legacy: 机器绑定加密(向后兼容)
6
+ * 支持两种加密模式:
9
7
  * - keychain: OS 密钥链存储(推荐)
10
- * - passphrase: 用户密码加密(可移植)
8
+ * - passphrase: 密码加密(可移植)
11
9
  */
12
10
  export class ConfigManager {
13
11
  storage;
14
- legacyEncryption;
15
12
  passphraseEncryption;
16
13
  keychainManager;
17
14
  // 用于临时存储用户输入的 passphrase(仅在当前会话有效)
18
15
  sessionPassphrase;
19
16
  constructor() {
20
17
  this.storage = new ConfigStorage();
21
- this.legacyEncryption = new Encryption();
22
18
  this.passphraseEncryption = new PassphraseEncryption();
23
19
  this.keychainManager = new KeychainManager();
24
20
  }
@@ -39,7 +35,12 @@ export class ConfigManager {
39
35
  */
40
36
  async getEncryptionMode() {
41
37
  const config = await this.storage.read();
42
- return config?.encryptionMode || 'legacy'; // 默认 legacy 保持向后兼容
38
+ if (config?.encryptionMode) {
39
+ return config.encryptionMode;
40
+ }
41
+ // 默认:keychain 可用则用 keychain,否则用 passphrase
42
+ const keychainAvailable = await KeychainManager.isAvailable();
43
+ return keychainAvailable ? 'keychain' : 'passphrase';
43
44
  }
44
45
  /**
45
46
  * 初始化配置文件
@@ -47,18 +48,22 @@ export class ConfigManager {
47
48
  async initialize() {
48
49
  const existing = await this.storage.read();
49
50
  if (existing) {
50
- // 确保有 encryptionMode 字段(向后兼容)
51
+ // 确保有 encryptionMode 字段
51
52
  if (!existing.encryptionMode) {
52
- existing.encryptionMode = 'legacy';
53
+ const keychainAvailable = await KeychainManager.isAvailable();
54
+ existing.encryptionMode = keychainAvailable ? 'keychain' : 'passphrase';
53
55
  }
54
56
  return existing;
55
57
  }
58
+ // 检测系统支持的加密模式
59
+ const keychainAvailable = await KeychainManager.isAvailable();
60
+ const encryptionMode = keychainAvailable ? 'keychain' : 'passphrase';
56
61
  const newConfig = {
57
62
  version: '1.0.0',
58
63
  currentProfile: '',
59
64
  profiles: [],
60
- encryptionSalt: this.legacyEncryption.generateSalt(),
61
- encryptionMode: 'legacy', // 默认使用 legacy 模式
65
+ encryptionSalt: encryptionMode === 'passphrase' ? this.passphraseEncryption.generateSalt() : undefined,
66
+ encryptionMode,
62
67
  };
63
68
  await this.storage.write(newConfig);
64
69
  return newConfig;
@@ -70,9 +75,10 @@ export class ConfigManager {
70
75
  const config = await this.storage.read();
71
76
  if (!config)
72
77
  return await this.initialize();
73
- // 向后兼容:添加默认的 encryptionMode
78
+ // 确保有 encryptionMode 字段
74
79
  if (!config.encryptionMode) {
75
- config.encryptionMode = 'legacy';
80
+ const keychainAvailable = await KeychainManager.isAvailable();
81
+ config.encryptionMode = keychainAvailable ? 'keychain' : 'passphrase';
76
82
  }
77
83
  return config;
78
84
  }
@@ -83,38 +89,28 @@ export class ConfigManager {
83
89
  */
84
90
  async saveProfile(profile, passphrase) {
85
91
  const config = await this.getConfig();
86
- const mode = config.encryptionMode || 'legacy';
87
- if (!config.encryptionSalt && mode !== 'keychain') {
88
- config.encryptionSalt = this.legacyEncryption.generateSalt();
92
+ const mode = config.encryptionMode;
93
+ if (!config.encryptionSalt && mode === 'passphrase') {
94
+ config.encryptionSalt = this.passphraseEncryption.generateSalt();
89
95
  }
90
96
  let encryptedApiKey;
91
97
  // 根据加密模式处理 API Key
92
- switch (mode) {
93
- case 'keychain':
94
- // Keychain 模式:存储到 OS 密钥链
95
- await this.keychainManager.setAPIKey(profile.domain, profile.apiKey);
96
- // config.json 中存储占位符
97
- encryptedApiKey = '__KEYCHAIN__';
98
- break;
99
- case 'passphrase':
100
- // Passphrase 模式:使用用户密码加密
101
- const pwd = passphrase || this.sessionPassphrase;
102
- if (!pwd) {
103
- throw new Error('Passphrase required for passphrase encryption mode');
104
- }
105
- if (!config.encryptionSalt) {
106
- config.encryptionSalt = this.passphraseEncryption.generateSalt();
107
- }
108
- encryptedApiKey = this.passphraseEncryption.encrypt(profile.apiKey, pwd, config.encryptionSalt);
109
- break;
110
- case 'legacy':
111
- default:
112
- // Legacy 模式:机器绑定加密
113
- if (!config.encryptionSalt) {
114
- config.encryptionSalt = this.legacyEncryption.generateSalt();
115
- }
116
- encryptedApiKey = this.legacyEncryption.encrypt(profile.apiKey, config.encryptionSalt);
117
- break;
98
+ if (mode === 'keychain') {
99
+ // Keychain 模式:存储到 OS 密钥链
100
+ await this.keychainManager.setAPIKey(profile.domain, profile.apiKey);
101
+ // config.json 中存储占位符
102
+ encryptedApiKey = '__KEYCHAIN__';
103
+ }
104
+ else {
105
+ // Passphrase 模式:使用用户密码加密
106
+ const pwd = passphrase || this.sessionPassphrase;
107
+ if (!pwd && pwd !== '') {
108
+ throw new Error('需要密码来加密 API Key');
109
+ }
110
+ if (!config.encryptionSalt) {
111
+ config.encryptionSalt = this.passphraseEncryption.generateSalt();
112
+ }
113
+ encryptedApiKey = this.passphraseEncryption.encrypt(profile.apiKey, pwd, config.encryptionSalt);
118
114
  }
119
115
  const encryptedProfile = {
120
116
  ...profile,
@@ -141,37 +137,27 @@ export class ConfigManager {
141
137
  const profile = config.profiles.find(p => p.domain === domain);
142
138
  if (!profile)
143
139
  return null;
144
- const mode = config.encryptionMode || 'legacy';
140
+ const mode = config.encryptionMode;
145
141
  let decryptedApiKey;
146
142
  // 根据加密模式解密 API Key
147
- switch (mode) {
148
- case 'keychain':
149
- // Keychain 模式:从 OS 密钥链读取
150
- const keychainKey = await this.keychainManager.getAPIKey(domain);
151
- if (!keychainKey) {
152
- throw new Error(`API key not found in keychain for profile: ${domain}`);
153
- }
154
- decryptedApiKey = keychainKey;
155
- break;
156
- case 'passphrase':
157
- // Passphrase 模式:使用用户密码解密
158
- const pwd = passphrase || this.sessionPassphrase;
159
- if (!pwd) {
160
- throw new Error('Passphrase required to decrypt API key');
161
- }
162
- if (!config.encryptionSalt) {
163
- throw new Error('Encryption salt not found');
164
- }
165
- decryptedApiKey = this.passphraseEncryption.decrypt(profile.apiKey, pwd, config.encryptionSalt);
166
- break;
167
- case 'legacy':
168
- default:
169
- // Legacy 模式:机器绑定解密
170
- if (!config.encryptionSalt) {
171
- throw new Error('Encryption salt not found');
172
- }
173
- decryptedApiKey = this.legacyEncryption.decrypt(profile.apiKey, config.encryptionSalt);
174
- break;
143
+ if (mode === 'keychain') {
144
+ // Keychain 模式:从 OS 密钥链读取
145
+ const keychainKey = await this.keychainManager.getAPIKey(domain);
146
+ if (!keychainKey) {
147
+ throw new Error(`密钥链中未找到配置 ${domain} 的 API key`);
148
+ }
149
+ decryptedApiKey = keychainKey;
150
+ }
151
+ else {
152
+ // Passphrase 模式:使用用户密码解密
153
+ const pwd = passphrase || this.sessionPassphrase;
154
+ if (!pwd && pwd !== '') {
155
+ throw new Error('需要密码来解密 API key');
156
+ }
157
+ if (!config.encryptionSalt) {
158
+ throw new Error('未找到加密 salt');
159
+ }
160
+ decryptedApiKey = this.passphraseEncryption.decrypt(profile.apiKey, pwd, config.encryptionSalt);
175
161
  }
176
162
  return {
177
163
  ...profile,
@@ -202,36 +188,31 @@ export class ConfigManager {
202
188
  */
203
189
  async listProfiles(passphrase) {
204
190
  const config = await this.getConfig();
205
- const mode = config.encryptionMode || 'legacy';
191
+ const mode = config.encryptionMode;
206
192
  const results = [];
207
193
  for (const p of config.profiles) {
208
194
  try {
209
195
  let decryptedKey;
210
- switch (mode) {
211
- case 'keychain':
212
- const keychainKey = await this.keychainManager.getAPIKey(p.domain);
213
- decryptedKey = keychainKey || '';
214
- break;
215
- case 'passphrase':
216
- const pwd = passphrase || this.sessionPassphrase;
217
- if (!pwd || !config.encryptionSalt) {
218
- decryptedKey = '';
219
- break;
220
- }
196
+ if (mode === 'keychain') {
197
+ const keychainKey = await this.keychainManager.getAPIKey(p.domain);
198
+ decryptedKey = keychainKey || '';
199
+ }
200
+ else {
201
+ // Passphrase 模式
202
+ const pwd = passphrase || this.sessionPassphrase;
203
+ if (!pwd && pwd !== '') {
204
+ decryptedKey = '';
205
+ }
206
+ else if (!config.encryptionSalt) {
207
+ decryptedKey = '';
208
+ }
209
+ else {
221
210
  decryptedKey = this.passphraseEncryption.decrypt(p.apiKey, pwd, config.encryptionSalt);
222
- break;
223
- case 'legacy':
224
- default:
225
- if (!config.encryptionSalt) {
226
- decryptedKey = '';
227
- break;
228
- }
229
- decryptedKey = this.legacyEncryption.decrypt(p.apiKey, config.encryptionSalt);
230
- break;
211
+ }
231
212
  }
232
213
  results.push({
233
214
  ...p,
234
- maskedApiKey: this.legacyEncryption.maskApiKey(decryptedKey),
215
+ maskedApiKey: this.passphraseEncryption.maskApiKey(decryptedKey),
235
216
  });
236
217
  }
237
218
  catch (error) {
@@ -249,7 +230,7 @@ export class ConfigManager {
249
230
  */
250
231
  async deleteProfile(domain) {
251
232
  const config = await this.getConfig();
252
- const mode = config.encryptionMode || 'legacy';
233
+ const mode = config.encryptionMode;
253
234
  // Keychain 模式下,同时从密钥链中删除
254
235
  if (mode === 'keychain') {
255
236
  await this.keychainManager.deleteAPIKey(domain);
@@ -281,9 +262,10 @@ export class ConfigManager {
281
262
  if (!config.version || !Array.isArray(config.profiles)) {
282
263
  throw new Error('Invalid configuration format');
283
264
  }
284
- // 向后兼容:如果没有 encryptionMode,设置为 legacy
265
+ // 确保有加密模式
285
266
  if (!config.encryptionMode) {
286
- config.encryptionMode = 'legacy';
267
+ const keychainAvailable = await KeychainManager.isAvailable();
268
+ config.encryptionMode = keychainAvailable ? 'keychain' : 'passphrase';
287
269
  }
288
270
  await this.storage.write(config);
289
271
  }
@@ -294,7 +276,7 @@ export class ConfigManager {
294
276
  */
295
277
  async switchEncryptionMode(newMode, passphrase) {
296
278
  const config = await this.getConfig();
297
- const oldMode = config.encryptionMode || 'legacy';
279
+ const oldMode = config.encryptionMode;
298
280
  if (oldMode === newMode) {
299
281
  return; // 无需切换
300
282
  }
@@ -308,7 +290,7 @@ export class ConfigManager {
308
290
  }
309
291
  // 更新加密模式
310
292
  config.encryptionMode = newMode;
311
- // 如果切换到非 legacy/passphrase 模式,可能需要新的 salt
293
+ // 如果切换到 passphrase 模式,可能需要新的 salt
312
294
  if (newMode === 'passphrase' && !config.encryptionSalt) {
313
295
  config.encryptionSalt = this.passphraseEncryption.generateSalt();
314
296
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IAChB,OAAO,CAAgB;IACvB,gBAAgB,CAAa;IAC7B,oBAAoB,CAAuB;IAC3C,eAAe,CAAkB;IAEzC,mCAAmC;IAC3B,iBAAiB,CAAU;IAEnC;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,UAAkB;QACrC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACzC,OAAO,MAAM,EAAE,cAAc,IAAI,QAAQ,CAAC,CAAE,mBAAmB;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,8BAA8B;YAC9B,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC7B,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC;YACrC,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAgB;YAC7B,OAAO,EAAE,OAAO;YAChB,cAAc,EAAE,EAAE;YAClB,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;YACpD,cAAc,EAAE,QAAQ,EAAG,iBAAiB;SAC7C,CAAC;QAEF,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAE5C,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,CAAC,cAAc,GAAG,QAAQ,CAAC;QACnC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,OAAyB,EAAE,UAAmB;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC;QAE/C,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAClD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QAC/D,CAAC;QAED,IAAI,eAAuB,CAAC;QAE5B,mBAAmB;QACnB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,UAAU;gBACb,yBAAyB;gBACzB,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBACrE,qBAAqB;gBACrB,eAAe,GAAG,cAAc,CAAC;gBACjC,MAAM;YAER,KAAK,YAAY;gBACf,yBAAyB;gBACzB,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;gBACjD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACxE,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC3B,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;gBACnE,CAAC;gBACD,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CACjD,OAAO,CAAC,MAAM,EACd,GAAG,EACH,MAAM,CAAC,cAAc,CACtB,CAAC;gBACF,MAAM;YAER,KAAK,QAAQ,CAAC;YACd;gBACE,mBAAmB;gBACnB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC3B,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;gBAC/D,CAAC;gBACD,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC7C,OAAO,CAAC,MAAM,EACd,MAAM,CAAC,cAAc,CACtB,CAAC;gBACF,MAAM;QACV,CAAC;QAED,MAAM,gBAAgB,GAAkB;YACtC,GAAG,OAAO;YACV,MAAM,EAAE,eAAe;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1E,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,UAAmB;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC;QAC/C,IAAI,eAAuB,CAAC;QAE5B,mBAAmB;QACnB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,UAAU;gBACb,yBAAyB;gBACzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACjE,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,eAAe,GAAG,WAAW,CAAC;gBAC9B,MAAM;YAER,KAAK,YAAY;gBACf,yBAAyB;gBACzB,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;gBACjD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC/C,CAAC;gBACD,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CACjD,OAAO,CAAC,MAAM,EACd,GAAG,EACH,MAAM,CAAC,cAAc,CACtB,CAAC;gBACF,MAAM;YAER,KAAK,QAAQ,CAAC;YACd;gBACE,mBAAmB;gBACnB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC/C,CAAC;gBACD,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC7C,OAAO,CAAC,MAAM,EACd,MAAM,CAAC,cAAc,CACtB,CAAC;gBACF,MAAM;QACV,CAAC;QAED,OAAO;YACL,GAAG,OAAO;YACV,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC;QAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,UAAmB;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,UAAmB;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC;QAE/C,MAAM,OAAO,GAAoD,EAAE,CAAC;QAEpE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,YAAoB,CAAC;gBAEzB,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,UAAU;wBACb,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACnE,YAAY,GAAG,WAAW,IAAI,EAAE,CAAC;wBACjC,MAAM;oBAER,KAAK,YAAY;wBACf,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;wBACjD,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;4BACnC,YAAY,GAAG,EAAE,CAAC;4BAClB,MAAM;wBACR,CAAC;wBACD,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAC9C,CAAC,CAAC,MAAM,EACR,GAAG,EACH,MAAM,CAAC,cAAc,CACtB,CAAC;wBACF,MAAM;oBAER,KAAK,QAAQ,CAAC;oBACd;wBACE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;4BAC3B,YAAY,GAAG,EAAE,CAAC;4BAClB,MAAM;wBACR,CAAC;wBACD,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC1C,CAAC,CAAC,MAAM,EACR,MAAM,CAAC,cAAc,CACtB,CAAC;wBACF,MAAM;gBACV,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC;oBACX,GAAG,CAAC;oBACJ,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,YAAY,CAAC;iBAC7D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,gBAAgB;gBAChB,OAAO,CAAC,IAAI,CAAC;oBACX,GAAG,CAAC;oBACJ,YAAY,EAAE,iBAAiB;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC;QAE/C,yBAAyB;QACzB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAEnE,IAAI,MAAM,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YACrC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAEtC,uBAAuB;QACvB,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;QACtH,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,MAAM,MAAM,GAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,SAAS;QACT,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,CAAC,cAAc,GAAG,QAAQ,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CACxB,OAAuB,EACvB,UAAmB;QAEnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAC;QAElD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,OAAO;QACjB,CAAC;QAED,6BAA6B;QAC7B,MAAM,iBAAiB,GAAuB,EAAE,CAAC;QAEjD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC9D,IAAI,SAAS,EAAE,CAAC;gBACd,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,SAAS;QACT,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC;QAEhC,0CAA0C;QAC1C,IAAI,OAAO,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACvD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;QACnE,CAAC;QAED,gBAAgB;QAChB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEjC,uBAAuB;QACvB,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;QAED,0BAA0B;QAC1B,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * 加密模式
3
- * - legacy: 旧版机器绑定加密(已弃用,但保持向后兼容)
4
3
  * - keychain: OS 密钥链存储(推荐,最安全)
5
- * - passphrase: 用户密码加密(可移植)
4
+ * - passphrase: 密码加密(可移植)
6
5
  */
7
- export type EncryptionMode = 'legacy' | 'keychain' | 'passphrase';
6
+ export type EncryptionMode = 'keychain' | 'passphrase';
8
7
  export interface ProfileConfig {
9
8
  domain: string;
10
9
  apiKey: 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,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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvD,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAIxC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsJ9B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;CAsC1C"}
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAIxC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqL9B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B1C"}
@@ -18,11 +18,6 @@ export class EncryptionMigration {
18
18
  // 获取当前加密模式
19
19
  const currentMode = await this.configManager.getEncryptionMode();
20
20
  displayMessage(`当前加密模式:${currentMode}`);
21
- if (currentMode === 'legacy') {
22
- displayWarning('\nLegacy 模式使用机器绑定加密。');
23
- displayWarning('导出的配置无法在其他机器上恢复。');
24
- displayMessage('\n建议:迁移到更安全和可移植的模式。\n');
25
- }
26
21
  // 检查 keychain 是否可用
27
22
  const keychainAvailable = await KeychainManager.isAvailable();
28
23
  // 选择新的加密模式
@@ -38,17 +33,10 @@ export class EncryptionMigration {
38
33
  displayWarning('注意:本系统不支持 OS Keychain。');
39
34
  }
40
35
  choices.push({
41
- title: 'Passphrase(密码)',
36
+ title: '密码加密',
42
37
  value: 'passphrase',
43
38
  description: '使用密码加密 - 可跨机器移植,每次需要输入密码',
44
39
  });
45
- if (currentMode !== 'legacy') {
46
- choices.push({
47
- title: 'Legacy(不推荐)',
48
- value: 'legacy',
49
- description: '机器绑定加密 - 无法在其他机器上恢复',
50
- });
51
- }
52
40
  const { newMode } = await prompts({
53
41
  type: 'select',
54
42
  name: 'newMode',
@@ -63,29 +51,64 @@ export class EncryptionMigration {
63
51
  displayMessage('已在使用此模式,无需迁移。');
64
52
  return;
65
53
  }
66
- // 如果选择 passphrase 模式,需要输入密码
67
- let passphrase;
54
+ // 如果当前模式是密码模式,需要密码来解密
55
+ let currentPassphrase;
56
+ if (currentMode === 'passphrase') {
57
+ // 先尝试空密码
58
+ this.configManager.setSessionPassphrase('');
59
+ // 验证空密码是否可以解密
60
+ try {
61
+ const config = await this.configManager.getConfig();
62
+ if (config.profiles.length > 0) {
63
+ // 尝试解密第一个配置来验证密码
64
+ await this.configManager.getProfile(config.profiles[0].domain, '');
65
+ }
66
+ // 空密码可用
67
+ currentPassphrase = '';
68
+ }
69
+ catch {
70
+ // 空密码失败,提示输入
71
+ this.configManager.clearSessionPassphrase();
72
+ const { currentPwd } = await prompts({
73
+ type: 'password',
74
+ name: 'currentPwd',
75
+ message: '输入当前密码以解密配置:',
76
+ validate: (value) => value.trim() !== '' ? true : '密码不能为空',
77
+ });
78
+ if (!currentPwd) {
79
+ displayWarning('已取消迁移');
80
+ return;
81
+ }
82
+ currentPassphrase = currentPwd;
83
+ this.configManager.setSessionPassphrase(currentPassphrase);
84
+ }
85
+ }
86
+ // 如果选择密码模式,需要输入新密码
87
+ let newPassphrase;
68
88
  if (newMode === 'passphrase') {
69
89
  const { pwd1 } = await prompts({
70
90
  type: 'password',
71
91
  name: 'pwd1',
72
- message: '输入新密码用于加密:',
73
- validate: (value) => value.length >= 8 ? true : '密码至少需要 8 个字符',
92
+ message: '输入新密码用于加密(直接回车使用空密码):',
93
+ validate: (value) => value.length === 0 || value.length >= 8 ? true : '密码至少需要 8 个字符',
74
94
  });
75
- if (!pwd1) {
95
+ if (pwd1 === undefined) {
76
96
  displayWarning('已取消迁移');
77
97
  return;
78
98
  }
79
- const { pwd2 } = await prompts({
80
- type: 'password',
81
- name: 'pwd2',
82
- message: '确认密码:',
83
- });
84
- if (pwd1 !== pwd2) {
85
- displayError('两次密码输入不一致');
86
- return;
99
+ // 如果不是空密码,需要确认
100
+ if (pwd1.length > 0) {
101
+ const { pwd2 } = await prompts({
102
+ type: 'password',
103
+ name: 'pwd2',
104
+ message: '确认新密码:',
105
+ });
106
+ if (pwd1 !== pwd2) {
107
+ displayError('两次密码输入不一致');
108
+ return;
109
+ }
87
110
  }
88
- passphrase = pwd1;
111
+ newPassphrase = pwd1;
89
112
  }
90
113
  // 确认迁移
91
114
  const { confirm } = await prompts({
@@ -108,7 +131,7 @@ export class EncryptionMigration {
108
131
  displaySuccess(`备份已创建:${backupPath}`);
109
132
  displayMessage('\n正在迁移加密模式...');
110
133
  // 执行迁移
111
- await this.configManager.switchEncryptionMode(newMode, passphrase);
134
+ await this.configManager.switchEncryptionMode(newMode, newPassphrase);
112
135
  displaySuccess(`\n迁移完成!`);
113
136
  displayMessage(`\n加密模式已更改:${currentMode} → ${newMode}`);
114
137
  if (newMode === 'keychain') {
@@ -116,10 +139,16 @@ export class EncryptionMigration {
116
139
  displayMessage('配置文件仅包含非敏感数据。');
117
140
  }
118
141
  else if (newMode === 'passphrase') {
119
- displayWarning('\n重要:请记住您的密码!');
120
- displayWarning('每次使用 hop-claude 时都需要输入密码。');
121
- if (passphrase) {
122
- this.configManager.setSessionPassphrase(passphrase);
142
+ if (newPassphrase && newPassphrase.length > 0) {
143
+ displayWarning('\n重要:请记住您的密码!');
144
+ displayWarning('每次使用 hop-claude 时都需要输入密码。');
145
+ }
146
+ else {
147
+ displayMessage('\n您使用了空密码加密。');
148
+ displayMessage('每次启动将自动使用空密码解密。');
149
+ }
150
+ if (newPassphrase !== undefined) {
151
+ this.configManager.setSessionPassphrase(newPassphrase);
123
152
  }
124
153
  }
125
154
  displayMessage(`\n备份文件:${backupPath}`);
@@ -146,14 +175,6 @@ export class EncryptionMigration {
146
175
  displayMessage('\n=== 加密模式信息 ===\n');
147
176
  displayMessage(`当前模式:${mode}`);
148
177
  switch (mode) {
149
- case 'legacy':
150
- displayMessage('\nLegacy 模式:');
151
- displayMessage(' - 使用机器绑定加密(hostname + username)');
152
- displayMessage(' - 密钥已加密但绑定到本机');
153
- displayMessage(' - 导出的配置无法在其他机器上恢复');
154
- displayWarning('\n 警告:此模式已弃用且安全性较低。');
155
- displayMessage(' 建议迁移到 keychain 或 passphrase 模式。');
156
- break;
157
178
  case 'keychain':
158
179
  displayMessage('\nKeychain 模式:');
159
180
  displayMessage(' - 密钥存储在系统 keychain(最安全)');
@@ -162,7 +183,7 @@ export class EncryptionMigration {
162
183
  displayWarning('\n 注意:无法跨机器导出/导入密钥。');
163
184
  break;
164
185
  case 'passphrase':
165
- displayMessage('\nPassphrase 模式:');
186
+ displayMessage('\n密码加密模式:');
166
187
  displayMessage(' - 使用密码加密密钥');
167
188
  displayMessage(' - 完全可跨机器移植');
168
189
  displayMessage(' - 每次操作需要输入密码');
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hop-claude",
3
- "version": "1.0.2",
3
+ "version": "2.0.0",
4
4
  "description": "Claude Code configuration manager and launcher",
5
5
  "keywords": [
6
6
  "claude",
@@ -1,36 +0,0 @@
1
- /**
2
- * 加密类:使用 AES-256-GCM 对称加密
3
- * 密钥派生:基于机器标识(hostname + username)+ 随机盐
4
- */
5
- export declare class Encryption {
6
- private algorithm;
7
- /**
8
- * 生成加密密钥(基于机器信息 + salt)
9
- */
10
- private deriveKey;
11
- /**
12
- * 生成随机 salt
13
- */
14
- generateSalt(): string;
15
- /**
16
- * 加密明文
17
- * @param plaintext 要加密的明文
18
- * @param salt 盐值
19
- * @returns 加密后的密文,格式:iv:authTag:encrypted
20
- */
21
- encrypt(plaintext: string, salt: string): string;
22
- /**
23
- * 解密密文
24
- * @param ciphertext 密文,格式:iv:authTag:encrypted
25
- * @param salt 盐值
26
- * @returns 解密后的明文
27
- */
28
- decrypt(ciphertext: string, salt: string): string;
29
- /**
30
- * 部分隐藏 API Key(用于显示)
31
- * @param apiKey API Key
32
- * @returns 部分隐藏的 API Key,如:sk-ant-***xyz
33
- */
34
- maskApiKey(apiKey: string): string;
35
- }
36
- //# sourceMappingURL=encryption.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/config/encryption.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAiB;IAElC;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAchD;;;;;OAKG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAqBjD;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAOnC"}
@@ -1,72 +0,0 @@
1
- import crypto from 'crypto';
2
- import os from 'os';
3
- /**
4
- * 加密类:使用 AES-256-GCM 对称加密
5
- * 密钥派生:基于机器标识(hostname + username)+ 随机盐
6
- */
7
- export class Encryption {
8
- algorithm = 'aes-256-gcm';
9
- /**
10
- * 生成加密密钥(基于机器信息 + salt)
11
- */
12
- deriveKey(salt) {
13
- const machineId = `${os.hostname()}-${os.userInfo().username}`;
14
- return crypto.pbkdf2Sync(machineId, salt, 100000, 32, 'sha512');
15
- }
16
- /**
17
- * 生成随机 salt
18
- */
19
- generateSalt() {
20
- return crypto.randomBytes(32).toString('hex');
21
- }
22
- /**
23
- * 加密明文
24
- * @param plaintext 要加密的明文
25
- * @param salt 盐值
26
- * @returns 加密后的密文,格式:iv:authTag:encrypted
27
- */
28
- encrypt(plaintext, salt) {
29
- const key = this.deriveKey(salt);
30
- const iv = crypto.randomBytes(16);
31
- const cipher = crypto.createCipheriv(this.algorithm, key, iv);
32
- let encrypted = cipher.update(plaintext, 'utf8', 'hex');
33
- encrypted += cipher.final('hex');
34
- const authTag = cipher.getAuthTag();
35
- // 格式: iv:authTag:encrypted
36
- return `${iv.toString('hex')}:${authTag.toString('hex')}:${encrypted}`;
37
- }
38
- /**
39
- * 解密密文
40
- * @param ciphertext 密文,格式:iv:authTag:encrypted
41
- * @param salt 盐值
42
- * @returns 解密后的明文
43
- */
44
- decrypt(ciphertext, salt) {
45
- const key = this.deriveKey(salt);
46
- const parts = ciphertext.split(':');
47
- if (parts.length !== 3) {
48
- throw new Error('Invalid encrypted data format');
49
- }
50
- const [ivHex, authTagHex, encrypted] = parts;
51
- const iv = Buffer.from(ivHex, 'hex');
52
- const authTag = Buffer.from(authTagHex, 'hex');
53
- const decipher = crypto.createDecipheriv(this.algorithm, key, iv);
54
- decipher.setAuthTag(authTag);
55
- let decrypted = decipher.update(encrypted, 'hex', 'utf8');
56
- decrypted += decipher.final('utf8');
57
- return decrypted;
58
- }
59
- /**
60
- * 部分隐藏 API Key(用于显示)
61
- * @param apiKey API Key
62
- * @returns 部分隐藏的 API Key,如:sk-ant-***xyz
63
- */
64
- maskApiKey(apiKey) {
65
- if (!apiKey || apiKey.length < 8)
66
- return '***';
67
- const prefix = apiKey.slice(0, 6);
68
- const suffix = apiKey.slice(-3);
69
- return `${prefix}***${suffix}`;
70
- }
71
- }
72
- //# sourceMappingURL=encryption.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/config/encryption.ts"],"names":[],"mappings":"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"}