ccman 3.0.21 → 3.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +581 -556
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -39,7 +39,7 @@ var init_package = __esm({
39
39
  "../core/package.json"() {
40
40
  package_default = {
41
41
  name: "@ccman/core",
42
- version: "3.0.21",
42
+ version: "3.0.23",
43
43
  type: "module",
44
44
  description: "Core business logic for ccman",
45
45
  main: "./dist/index.js",
@@ -2672,6 +2672,13 @@ function saveSyncConfig(syncConfig) {
2672
2672
  config.sync = syncConfig;
2673
2673
  saveConfig(config);
2674
2674
  }
2675
+ function updateLastSyncTime() {
2676
+ const config = loadConfig();
2677
+ if (config.sync) {
2678
+ config.sync.lastSync = Date.now();
2679
+ saveConfig(config);
2680
+ }
2681
+ }
2675
2682
  var fs4;
2676
2683
  var init_config = __esm({
2677
2684
  "../core/dist/config.js"() {
@@ -15951,12 +15958,12 @@ function createWebDAVClient(config) {
15951
15958
  return client;
15952
15959
  }
15953
15960
  async function testWebDAVConnection(config) {
15961
+ const remoteDir = normalizePath(config.remoteDir || "/");
15954
15962
  try {
15955
15963
  const client = createWebDAVClient(config);
15956
- await client.exists("/");
15964
+ await client.getDirectoryContents(remoteDir);
15957
15965
  return true;
15958
15966
  } catch (error) {
15959
- console.error("WebDAV \u8FDE\u63A5\u5931\u8D25:", error.message);
15960
15967
  return false;
15961
15968
  }
15962
15969
  }
@@ -16051,67 +16058,6 @@ var init_webdav_client = __esm({
16051
16058
  }
16052
16059
  });
16053
16060
 
16054
- // ../core/dist/sync/merge.js
16055
- function backupConfig(configPath, keepCount = 3) {
16056
- if (!import_fs.default.existsSync(configPath)) {
16057
- throw new Error(`\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728: ${configPath}`);
16058
- }
16059
- const timestamp = Date.now();
16060
- const backupPath = `${configPath}.backup.${timestamp}`;
16061
- import_fs.default.copyFileSync(configPath, backupPath);
16062
- cleanupOldBackups(configPath, keepCount);
16063
- return backupPath;
16064
- }
16065
- function cleanupOldBackups(configPath, keepCount) {
16066
- const dir = import_path17.default.dirname(configPath);
16067
- const basename2 = import_path17.default.basename(configPath);
16068
- const backupPrefix = `${basename2}.backup.`;
16069
- try {
16070
- const files = import_fs.default.readdirSync(dir);
16071
- const backups = files.filter((f3) => f3.startsWith(backupPrefix)).map((f3) => {
16072
- const timestampStr = f3.substring(backupPrefix.length);
16073
- const timestamp = parseInt(timestampStr, 10);
16074
- if (isNaN(timestamp)) {
16075
- return null;
16076
- }
16077
- return {
16078
- name: f3,
16079
- path: import_path17.default.join(dir, f3),
16080
- timestamp
16081
- };
16082
- }).filter((backup) => backup !== null).sort((a, b) => b.timestamp - a.timestamp);
16083
- const toDelete = backups.slice(keepCount);
16084
- for (const backup of toDelete) {
16085
- try {
16086
- import_fs.default.unlinkSync(backup.path);
16087
- } catch (error) {
16088
- console.warn(`\u65E0\u6CD5\u5220\u9664\u65E7\u5907\u4EFD\u6587\u4EF6 ${backup.name}: ${error.message}`);
16089
- }
16090
- }
16091
- } catch (error) {
16092
- console.warn(`\u6E05\u7406\u65E7\u5907\u4EFD\u65F6\u51FA\u9519: ${error.message}`);
16093
- }
16094
- }
16095
- var import_fs, import_path17;
16096
- var init_merge2 = __esm({
16097
- "../core/dist/sync/merge.js"() {
16098
- "use strict";
16099
- import_fs = __toESM(require("fs"), 1);
16100
- import_path17 = __toESM(require("path"), 1);
16101
- }
16102
- });
16103
-
16104
- // ../core/dist/sync/sync.js
16105
- var init_sync = __esm({
16106
- "../core/dist/sync/sync.js"() {
16107
- "use strict";
16108
- init_webdav_client();
16109
- init_merge2();
16110
- init_paths();
16111
- init_file();
16112
- }
16113
- });
16114
-
16115
16061
  // ../core/dist/sync/crypto.js
16116
16062
  function deriveKey(password, salt) {
16117
16063
  return crypto.pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, KEY_LENGTH, "sha256");
@@ -16146,24 +16092,14 @@ function decryptApiKey(encryptedApiKey, password) {
16146
16092
  }
16147
16093
  function encryptProviders(providers, password) {
16148
16094
  return providers.map((provider) => ({
16149
- id: provider.id,
16150
- name: provider.name,
16151
- baseUrl: provider.baseUrl,
16152
- encryptedApiKey: encryptApiKey(provider.apiKey, password),
16153
- createdAt: provider.createdAt,
16154
- lastModified: provider.lastModified,
16155
- lastUsedAt: provider.lastUsedAt
16095
+ ...provider,
16096
+ apiKey: encryptApiKey(provider.apiKey, password)
16156
16097
  }));
16157
16098
  }
16158
16099
  function decryptProviders(encryptedProviders, password) {
16159
16100
  return encryptedProviders.map((provider) => ({
16160
- id: provider.id,
16161
- name: provider.name,
16162
- baseUrl: provider.baseUrl,
16163
- apiKey: decryptApiKey(provider.encryptedApiKey, password),
16164
- createdAt: provider.createdAt,
16165
- lastModified: provider.lastModified,
16166
- lastUsedAt: provider.lastUsedAt
16101
+ ...provider,
16102
+ apiKey: decryptApiKey(provider.apiKey, password)
16167
16103
  }));
16168
16104
  }
16169
16105
  var crypto, ALGORITHM, KEY_LENGTH, IV_LENGTH, SALT_LENGTH, TAG_LENGTH, PBKDF2_ITERATIONS;
@@ -16181,15 +16117,6 @@ var init_crypto2 = __esm({
16181
16117
  });
16182
16118
 
16183
16119
  // ../core/dist/sync/merge-advanced.js
16184
- function ensureLastModified(provider) {
16185
- if (provider.lastModified === void 0) {
16186
- return {
16187
- ...provider,
16188
- lastModified: provider.createdAt
16189
- };
16190
- }
16191
- return provider;
16192
- }
16193
16120
  function isSameConfig(a, b) {
16194
16121
  return a.baseUrl === b.baseUrl && a.apiKey === b.apiKey;
16195
16122
  }
@@ -16214,49 +16141,26 @@ function resolveNameConflict(existingProviders, newProvider) {
16214
16141
  };
16215
16142
  }
16216
16143
  function mergeProviders(local, remote) {
16217
- const localProviders = local.map(ensureLastModified);
16218
- const remoteProviders = remote.map(ensureLastModified);
16219
16144
  const mergedMap = /* @__PURE__ */ new Map();
16220
16145
  let hasChanges = false;
16221
- for (const localProvider of localProviders) {
16146
+ for (const localProvider of local) {
16222
16147
  mergedMap.set(localProvider.id, localProvider);
16223
16148
  }
16224
- for (const remoteProvider of remoteProviders) {
16225
- if (mergedMap.has(remoteProvider.id)) {
16226
- const localProvider = mergedMap.get(remoteProvider.id);
16227
- if (remoteProvider.lastModified > localProvider.lastModified) {
16228
- console.log(`provider ${remoteProvider.id} \u8FDC\u7A0B\u66F4\u65B0\uFF0C\u4F7F\u7528\u8FDC\u7A0B\u7248\u672C`);
16229
- mergedMap.set(remoteProvider.id, remoteProvider);
16149
+ for (const remoteProvider of remote) {
16150
+ const existingLocal = Array.from(mergedMap.values()).find((p) => isSameConfig(p, remoteProvider));
16151
+ if (existingLocal) {
16152
+ mergedMap.delete(existingLocal.id);
16153
+ mergedMap.set(remoteProvider.id, remoteProvider);
16154
+ if (!isProviderEqual(existingLocal, remoteProvider)) {
16230
16155
  hasChanges = true;
16231
- } else if (remoteProvider.lastModified < localProvider.lastModified) {
16232
- console.log(`provider ${remoteProvider.id} \u672C\u5730\u66F4\u65B0\uFF0C\u4F7F\u7528\u672C\u5730\u7248\u672C`);
16233
- hasChanges = true;
16234
- } else {
16235
- if (!isProviderEqual(localProvider, remoteProvider)) {
16236
- console.log(`provider ${remoteProvider.id} \u65F6\u95F4\u6233\u76F8\u540C\u4F46\u5185\u5BB9\u4E0D\u540C\uFF0C\u4F7F\u7528\u8FDC\u7A0B\u7248\u672C`);
16237
- mergedMap.set(remoteProvider.id, remoteProvider);
16238
- hasChanges = true;
16239
- }
16156
+ console.log(`\u76F8\u540C\u914D\u7F6E (${remoteProvider.baseUrl})\uFF0C\u4F7F\u7528\u4E91\u7AEF\u6570\u636E`);
16240
16157
  }
16241
16158
  } else {
16242
- const existingWithSameConfig = Array.from(mergedMap.values()).find((p) => isSameConfig(p, remoteProvider));
16243
- if (existingWithSameConfig) {
16244
- if (remoteProvider.lastModified > existingWithSameConfig.lastModified) {
16245
- console.log(`\u76F8\u540C\u914D\u7F6E (${remoteProvider.baseUrl})\uFF0C\u8FDC\u7A0B\u66F4\u65B0\uFF0C\u66FF\u6362 ${existingWithSameConfig.id} \u4E3A ${remoteProvider.id}`);
16246
- mergedMap.delete(existingWithSameConfig.id);
16247
- mergedMap.set(remoteProvider.id, remoteProvider);
16248
- hasChanges = true;
16249
- } else {
16250
- console.log(`\u76F8\u540C\u914D\u7F6E (${remoteProvider.baseUrl})\uFF0C\u672C\u5730\u66F4\u65B0\uFF0C\u4FDD\u7559 ${existingWithSameConfig.id}`);
16251
- hasChanges = true;
16252
- }
16253
- } else {
16254
- console.log(`\u65B0 provider ${remoteProvider.id}\uFF0C\u6DFB\u52A0\u5230\u5408\u5E76\u5217\u8868`);
16255
- const existingProviders = Array.from(mergedMap.values());
16256
- const resolvedProvider = resolveNameConflict(existingProviders, remoteProvider);
16257
- mergedMap.set(resolvedProvider.id, resolvedProvider);
16258
- hasChanges = true;
16259
- }
16159
+ const existingProviders = Array.from(mergedMap.values());
16160
+ const resolvedProvider = resolveNameConflict(existingProviders, remoteProvider);
16161
+ mergedMap.set(resolvedProvider.id, resolvedProvider);
16162
+ hasChanges = true;
16163
+ console.log(`\u65B0 provider ${resolvedProvider.name}\uFF0C\u6DFB\u52A0\u5230\u5408\u5E76\u5217\u8868`);
16260
16164
  }
16261
16165
  }
16262
16166
  const merged = Array.from(mergedMap.values());
@@ -16265,12 +16169,99 @@ function mergeProviders(local, remote) {
16265
16169
  hasChanges
16266
16170
  };
16267
16171
  }
16172
+ function resolvePresetNameConflict(existingPresets, newPreset) {
16173
+ const existingNames = new Set(existingPresets.map((p) => p.name));
16174
+ if (!existingNames.has(newPreset.name)) {
16175
+ return newPreset;
16176
+ }
16177
+ let suffix = 2;
16178
+ let newName = `${newPreset.name}_${suffix}`;
16179
+ while (existingNames.has(newName)) {
16180
+ suffix++;
16181
+ newName = `${newPreset.name}_${suffix}`;
16182
+ }
16183
+ console.log(`preset name \u51B2\u7A81\uFF1A\u5C06 "${newPreset.name}" \u91CD\u547D\u540D\u4E3A "${newName}"`);
16184
+ return {
16185
+ ...newPreset,
16186
+ name: newName
16187
+ };
16188
+ }
16189
+ function mergePresets(local, remote) {
16190
+ const localPresets = local || [];
16191
+ const remotePresets = remote || [];
16192
+ const mergedMap = /* @__PURE__ */ new Map();
16193
+ for (const preset of localPresets) {
16194
+ mergedMap.set(preset.baseUrl, preset);
16195
+ }
16196
+ for (const remotePreset of remotePresets) {
16197
+ const existingLocal = mergedMap.get(remotePreset.baseUrl);
16198
+ if (existingLocal) {
16199
+ mergedMap.set(remotePreset.baseUrl, remotePreset);
16200
+ console.log(`preset ${remotePreset.name} (${remotePreset.baseUrl})\uFF0C\u4F7F\u7528\u4E91\u7AEF\u6570\u636E`);
16201
+ } else {
16202
+ const existingPresets = Array.from(mergedMap.values());
16203
+ const resolvedPreset = resolvePresetNameConflict(existingPresets, remotePreset);
16204
+ mergedMap.set(resolvedPreset.baseUrl, resolvedPreset);
16205
+ }
16206
+ }
16207
+ return Array.from(mergedMap.values());
16208
+ }
16268
16209
  var init_merge_advanced = __esm({
16269
16210
  "../core/dist/sync/merge-advanced.js"() {
16270
16211
  "use strict";
16271
16212
  }
16272
16213
  });
16273
16214
 
16215
+ // ../core/dist/sync/merge.js
16216
+ function backupConfig(configPath, keepCount = 3) {
16217
+ if (!import_fs.default.existsSync(configPath)) {
16218
+ throw new Error(`\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728: ${configPath}`);
16219
+ }
16220
+ const timestamp = Date.now();
16221
+ const backupPath = `${configPath}.backup.${timestamp}`;
16222
+ import_fs.default.copyFileSync(configPath, backupPath);
16223
+ cleanupOldBackups(configPath, keepCount);
16224
+ return backupPath;
16225
+ }
16226
+ function cleanupOldBackups(configPath, keepCount) {
16227
+ const dir = import_path17.default.dirname(configPath);
16228
+ const basename2 = import_path17.default.basename(configPath);
16229
+ const backupPrefix = `${basename2}.backup.`;
16230
+ try {
16231
+ const files = import_fs.default.readdirSync(dir);
16232
+ const backups = files.filter((f3) => f3.startsWith(backupPrefix)).map((f3) => {
16233
+ const timestampStr = f3.substring(backupPrefix.length);
16234
+ const timestamp = parseInt(timestampStr, 10);
16235
+ if (isNaN(timestamp)) {
16236
+ return null;
16237
+ }
16238
+ return {
16239
+ name: f3,
16240
+ path: import_path17.default.join(dir, f3),
16241
+ timestamp
16242
+ };
16243
+ }).filter((backup) => backup !== null).sort((a, b) => b.timestamp - a.timestamp);
16244
+ const toDelete = backups.slice(keepCount);
16245
+ for (const backup of toDelete) {
16246
+ try {
16247
+ import_fs.default.unlinkSync(backup.path);
16248
+ } catch (error) {
16249
+ console.warn(`\u65E0\u6CD5\u5220\u9664\u65E7\u5907\u4EFD\u6587\u4EF6 ${backup.name}: ${error.message}`);
16250
+ }
16251
+ }
16252
+ } catch (error) {
16253
+ console.warn(`\u6E05\u7406\u65E7\u5907\u4EFD\u65F6\u51FA\u9519: ${error.message}`);
16254
+ }
16255
+ }
16256
+ var import_fs, import_path17;
16257
+ var init_merge2 = __esm({
16258
+ "../core/dist/sync/merge.js"() {
16259
+ "use strict";
16260
+ import_fs = __toESM(require("fs"), 1);
16261
+ import_path17 = __toESM(require("path"), 1);
16262
+ }
16263
+ });
16264
+
16274
16265
  // ../core/dist/sync/sync-v2.js
16275
16266
  async function uploadToCloud(config, password) {
16276
16267
  const ccmanDir2 = getCcmanDir();
@@ -16281,17 +16272,22 @@ async function uploadToCloud(config, password) {
16281
16272
  const encryptedCodexProviders = encryptProviders(codexConfig.providers, password);
16282
16273
  const encryptedClaudeProviders = encryptProviders(claudeConfig.providers, password);
16283
16274
  const encryptedCodexConfig = {
16284
- currentProviderId: codexConfig.currentProviderId,
16275
+ ...codexConfig,
16276
+ // 保留所有字段
16285
16277
  providers: encryptedCodexProviders
16278
+ // 只替换 providers(加密后的)
16286
16279
  };
16287
16280
  const encryptedClaudeConfig = {
16288
- currentProviderId: claudeConfig.currentProviderId,
16281
+ ...claudeConfig,
16282
+ // 保留所有字段
16289
16283
  providers: encryptedClaudeProviders
16284
+ // 只替换 providers(加密后的)
16290
16285
  };
16291
16286
  const codexJson = JSON.stringify(encryptedCodexConfig, null, 2);
16292
16287
  const claudeJson = JSON.stringify(encryptedClaudeConfig, null, 2);
16293
16288
  await uploadToWebDAV(config, CODEX_REMOTE_PATH, codexJson);
16294
16289
  await uploadToWebDAV(config, CLAUDE_REMOTE_PATH, claudeJson);
16290
+ updateLastSyncTime();
16295
16291
  console.log("\u2705 \u914D\u7F6E\u5DF2\u4E0A\u4F20\u5230\u4E91\u7AEF");
16296
16292
  }
16297
16293
  async function downloadFromCloud(config, password) {
@@ -16331,28 +16327,27 @@ async function downloadFromCloud(config, password) {
16331
16327
  throw new Error(`\u5907\u4EFD\u5931\u8D25: ${error.message}`);
16332
16328
  }
16333
16329
  try {
16334
- const currentCodexConfig = readJSON(codexConfigPath);
16335
- const currentClaudeConfig = readJSON(claudeConfigPath);
16336
16330
  if (remoteCodexConfig && decryptedCodexProviders) {
16337
16331
  const newCodexConfig = {
16338
- currentProviderId: remoteCodexConfig.currentProviderId,
16339
- providers: decryptedCodexProviders,
16340
- presets: currentCodexConfig.presets
16341
- // 保留本地 presets
16332
+ ...remoteCodexConfig,
16333
+ // 使用云端配置的所有字段
16334
+ providers: decryptedCodexProviders
16335
+ // 只替换 providers(解密后的)
16342
16336
  };
16343
16337
  writeJSON(codexConfigPath, newCodexConfig);
16344
16338
  applyCurrentProvider("codex", newCodexConfig);
16345
16339
  }
16346
16340
  if (remoteClaudeConfig && decryptedClaudeProviders) {
16347
16341
  const newClaudeConfig = {
16348
- currentProviderId: remoteClaudeConfig.currentProviderId,
16349
- providers: decryptedClaudeProviders,
16350
- presets: currentClaudeConfig.presets
16351
- // 保留本地 presets
16342
+ ...remoteClaudeConfig,
16343
+ // 使用云端配置的所有字段
16344
+ providers: decryptedClaudeProviders
16345
+ // 只替换 providers(解密后的)
16352
16346
  };
16353
16347
  writeJSON(claudeConfigPath, newClaudeConfig);
16354
16348
  applyCurrentProvider("claude", newClaudeConfig);
16355
16349
  }
16350
+ updateLastSyncTime();
16356
16351
  console.log("\u2705 \u914D\u7F6E\u5DF2\u4ECE\u4E91\u7AEF\u4E0B\u8F7D\u5E76\u5E94\u7528");
16357
16352
  return backupPaths;
16358
16353
  } catch (error) {
@@ -16418,16 +16413,24 @@ async function mergeSync(config, password) {
16418
16413
  } catch (error) {
16419
16414
  throw new Error(`\u5907\u4EFD\u5931\u8D25: ${error.message}`);
16420
16415
  }
16416
+ const mergedCodexPresets = mergePresets(localCodexConfig.presets, remoteCodexConfig?.presets);
16417
+ const mergedClaudePresets = mergePresets(localClaudeConfig.presets, remoteClaudeConfig?.presets);
16421
16418
  try {
16422
16419
  const mergedCodexConfig = {
16423
- currentProviderId: localCodexConfig.currentProviderId,
16420
+ ...localCodexConfig,
16421
+ // 保留本地配置的所有字段
16424
16422
  providers: codexMergeResult.merged,
16425
- presets: localCodexConfig.presets
16423
+ // 替换为合并后的 providers
16424
+ presets: mergedCodexPresets
16425
+ // 替换为合并后的 presets
16426
16426
  };
16427
16427
  const mergedClaudeConfig = {
16428
- currentProviderId: localClaudeConfig.currentProviderId,
16428
+ ...localClaudeConfig,
16429
+ // 保留本地配置的所有字段
16429
16430
  providers: claudeMergeResult.merged,
16430
- presets: localClaudeConfig.presets
16431
+ // 替换为合并后的 providers
16432
+ presets: mergedClaudePresets
16433
+ // 替换为合并后的 presets
16431
16434
  };
16432
16435
  writeJSON(codexConfigPath, mergedCodexConfig);
16433
16436
  writeJSON(claudeConfigPath, mergedClaudeConfig);
@@ -16436,17 +16439,22 @@ async function mergeSync(config, password) {
16436
16439
  const encryptedCodexProviders = encryptProviders(codexMergeResult.merged, password);
16437
16440
  const encryptedClaudeProviders = encryptProviders(claudeMergeResult.merged, password);
16438
16441
  const encryptedCodexConfig = {
16439
- currentProviderId: mergedCodexConfig.currentProviderId,
16442
+ ...mergedCodexConfig,
16443
+ // 保留合并后配置的所有字段
16440
16444
  providers: encryptedCodexProviders
16445
+ // 只替换 providers(加密后的)
16441
16446
  };
16442
16447
  const encryptedClaudeConfig = {
16443
- currentProviderId: mergedClaudeConfig.currentProviderId,
16448
+ ...mergedClaudeConfig,
16449
+ // 保留合并后配置的所有字段
16444
16450
  providers: encryptedClaudeProviders
16451
+ // 只替换 providers(加密后的)
16445
16452
  };
16446
16453
  const codexJson2 = JSON.stringify(encryptedCodexConfig, null, 2);
16447
16454
  const claudeJson2 = JSON.stringify(encryptedClaudeConfig, null, 2);
16448
16455
  await uploadToWebDAV(config, CODEX_REMOTE_PATH, codexJson2);
16449
16456
  await uploadToWebDAV(config, CLAUDE_REMOTE_PATH, claudeJson2);
16457
+ updateLastSyncTime();
16450
16458
  console.log("\u2705 \u914D\u7F6E\u5DF2\u5408\u5E76\u5E76\u540C\u6B65\u5230\u4E91\u7AEF");
16451
16459
  return {
16452
16460
  hasChanges: true,
@@ -16482,6 +16490,7 @@ var init_sync_v2 = __esm({
16482
16490
  "use strict";
16483
16491
  import_fs2 = __toESM(require("fs"), 1);
16484
16492
  import_path18 = __toESM(require("path"), 1);
16493
+ init_config();
16485
16494
  init_webdav_client();
16486
16495
  init_crypto2();
16487
16496
  init_merge_advanced();
@@ -16650,7 +16659,6 @@ var init_dist4 = __esm({
16650
16659
  init_migrate();
16651
16660
  init_paths();
16652
16661
  init_config();
16653
- init_sync();
16654
16662
  init_webdav_client();
16655
16663
  init_sync_v2();
16656
16664
  init_crypto2();
@@ -16661,45 +16669,12 @@ var init_dist4 = __esm({
16661
16669
  });
16662
16670
 
16663
16671
  // src/utils/sync-config.ts
16664
- function getMachineId() {
16665
- return import_crypto4.default.createHash("sha256").update(import_os.default.hostname() + import_os.default.userInfo().username).digest();
16666
- }
16667
- function encrypt(text) {
16668
- const key = getMachineId();
16669
- const iv = import_crypto4.default.randomBytes(16);
16670
- const cipher = import_crypto4.default.createCipheriv("aes-256-cbc", key, iv);
16671
- let encrypted = cipher.update(text, "utf8", "hex");
16672
- encrypted += cipher.final("hex");
16673
- return iv.toString("hex") + ":" + encrypted;
16674
- }
16675
- function decrypt(encrypted) {
16676
- const parts = encrypted.split(":");
16677
- const iv = Buffer.from(parts[0], "hex");
16678
- const encryptedText = parts[1];
16679
- const key = getMachineId();
16680
- const decipher = import_crypto4.default.createDecipheriv("aes-256-cbc", key, iv);
16681
- let decrypted = decipher.update(encryptedText, "hex", "utf8");
16682
- decrypted += decipher.final("utf8");
16683
- return decrypted;
16684
- }
16685
16672
  function loadSyncConfig() {
16686
16673
  try {
16687
16674
  const config = getSyncConfig();
16688
16675
  if (!config) {
16689
16676
  return null;
16690
16677
  }
16691
- if (config.password && config.password.includes(":")) {
16692
- try {
16693
- config.password = decrypt(config.password);
16694
- } catch {
16695
- }
16696
- }
16697
- if (config.syncPassword && config.syncPassword.includes(":")) {
16698
- try {
16699
- config.syncPassword = decrypt(config.syncPassword);
16700
- } catch {
16701
- }
16702
- }
16703
16678
  return config;
16704
16679
  } catch (error) {
16705
16680
  throw new Error(`\u8BFB\u53D6\u540C\u6B65\u914D\u7F6E\u5931\u8D25: ${error.message}`);
@@ -16708,15 +16683,9 @@ function loadSyncConfig() {
16708
16683
  function saveSyncConfig2(config) {
16709
16684
  try {
16710
16685
  const configToSave = { ...config };
16711
- if (configToSave.password) {
16712
- configToSave.password = encrypt(configToSave.password);
16713
- }
16714
- if (configToSave.syncPassword && configToSave.rememberSyncPassword) {
16715
- configToSave.syncPassword = encrypt(configToSave.syncPassword);
16716
- } else {
16686
+ if (!configToSave.rememberSyncPassword) {
16717
16687
  delete configToSave.syncPassword;
16718
16688
  }
16719
- configToSave.lastSync = Date.now();
16720
16689
  saveSyncConfig(configToSave);
16721
16690
  } catch (error) {
16722
16691
  throw new Error(`\u4FDD\u5B58\u540C\u6B65\u914D\u7F6E\u5931\u8D25: ${error.message}`);
@@ -16725,12 +16694,9 @@ function saveSyncConfig2(config) {
16725
16694
  function getSyncConfigPath() {
16726
16695
  return getConfigPath();
16727
16696
  }
16728
- var import_crypto4, import_os;
16729
16697
  var init_sync_config = __esm({
16730
16698
  "src/utils/sync-config.ts"() {
16731
16699
  "use strict";
16732
- import_crypto4 = __toESM(require("crypto"));
16733
- import_os = __toESM(require("os"));
16734
16700
  init_dist4();
16735
16701
  }
16736
16702
  });
@@ -16835,8 +16801,7 @@ function configCommand(program2) {
16835
16801
  hasChanges = true;
16836
16802
  }
16837
16803
  } else if (!existingConfig) {
16838
- console.log(import_chalk3.default.red("\n\u274C WebDAV \u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A\n"));
16839
- process.exit(1);
16804
+ throw new Error("WebDAV \u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A");
16840
16805
  }
16841
16806
  if (trimmedAnswers.username) {
16842
16807
  if (trimmedAnswers.username !== existingConfig?.username) {
@@ -16844,8 +16809,7 @@ function configCommand(program2) {
16844
16809
  hasChanges = true;
16845
16810
  }
16846
16811
  } else if (!existingConfig) {
16847
- console.log(import_chalk3.default.red("\n\u274C \u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A\n"));
16848
- process.exit(1);
16812
+ throw new Error("\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A");
16849
16813
  }
16850
16814
  if (trimmedAnswers.password) {
16851
16815
  if (trimmedAnswers.password !== existingConfig?.password) {
@@ -16853,8 +16817,7 @@ function configCommand(program2) {
16853
16817
  hasChanges = true;
16854
16818
  }
16855
16819
  } else if (!existingConfig) {
16856
- console.log(import_chalk3.default.red("\n\u274C \u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A\n"));
16857
- process.exit(1);
16820
+ throw new Error("\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A");
16858
16821
  }
16859
16822
  if (trimmedAnswers.authType !== existingConfig?.authType) {
16860
16823
  newConfig.authType = trimmedAnswers.authType;
@@ -16874,8 +16837,7 @@ function configCommand(program2) {
16874
16837
  hasChanges = true;
16875
16838
  }
16876
16839
  } else if (!existingConfig) {
16877
- console.log(import_chalk3.default.red("\n\u274C \u540C\u6B65\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A\n"));
16878
- process.exit(1);
16840
+ throw new Error("\u540C\u6B65\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A");
16879
16841
  }
16880
16842
  if (trimmedAnswers.rememberSyncPassword !== existingConfig?.rememberSyncPassword) {
16881
16843
  newConfig.rememberSyncPassword = trimmedAnswers.rememberSyncPassword;
@@ -16902,13 +16864,30 @@ function configCommand(program2) {
16902
16864
  }
16903
16865
  ]);
16904
16866
  if (testNow) {
16905
- console.log(import_chalk3.default.blue("\n\u{1F4A1} \u8BF7\u8FD0\u884C: ccman sync test\n"));
16867
+ console.log(import_chalk3.default.bold("\n\u{1F50D} \u6D4B\u8BD5 WebDAV \u8FDE\u63A5...\n"));
16868
+ const success = await testWebDAVConnection(newConfig);
16869
+ if (success) {
16870
+ console.log(import_chalk3.default.green("\u2705 \u8FDE\u63A5\u6210\u529F"));
16871
+ console.log();
16872
+ console.log(" ", import_chalk3.default.gray("URL:"), newConfig.webdavUrl);
16873
+ console.log(" ", import_chalk3.default.gray("\u7528\u6237:"), newConfig.username);
16874
+ console.log(" ", import_chalk3.default.gray("\u8FDC\u7A0B\u76EE\u5F55:"), newConfig.remoteDir || "/");
16875
+ console.log(" ", import_chalk3.default.gray("\u8BA4\u8BC1\u7C7B\u578B:"), newConfig.authType === "password" ? "Basic Auth" : "Digest Auth");
16876
+ console.log();
16877
+ } else {
16878
+ console.log(import_chalk3.default.red("\u274C \u8FDE\u63A5\u5931\u8D25"));
16879
+ console.log();
16880
+ console.log(import_chalk3.default.yellow("\u8BF7\u68C0\u67E5:"));
16881
+ console.log(" 1. WebDAV \u670D\u52A1\u5668\u5730\u5740\u662F\u5426\u6B63\u786E");
16882
+ console.log(" 2. \u7528\u6237\u540D\u548C\u5BC6\u7801\u662F\u5426\u6B63\u786E");
16883
+ console.log(" 3. \u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u6B63\u5E38");
16884
+ console.log();
16885
+ }
16906
16886
  }
16907
16887
  } catch (error) {
16908
16888
  console.error(import_chalk3.default.red(`
16909
16889
  \u274C ${error.message}
16910
16890
  `));
16911
- process.exit(1);
16912
16891
  }
16913
16892
  });
16914
16893
  }
@@ -16919,6 +16898,42 @@ var init_config2 = __esm({
16919
16898
  import_chalk3 = __toESM(require("chalk"));
16920
16899
  import_inquirer = __toESM(require("inquirer"));
16921
16900
  init_sync_config();
16901
+ init_dist4();
16902
+ }
16903
+ });
16904
+
16905
+ // src/commands/sync/helpers.ts
16906
+ async function ensureConfigExists() {
16907
+ const config = loadSyncConfig();
16908
+ if (config) {
16909
+ return config;
16910
+ }
16911
+ console.log(import_chalk4.default.yellow("\n\u26A0\uFE0F \u672A\u627E\u5230 WebDAV \u914D\u7F6E\n"));
16912
+ const { shouldConfig } = await import_inquirer2.default.prompt([
16913
+ {
16914
+ type: "confirm",
16915
+ name: "shouldConfig",
16916
+ message: "\u662F\u5426\u73B0\u5728\u914D\u7F6E WebDAV?",
16917
+ default: true
16918
+ }
16919
+ ]);
16920
+ if (!shouldConfig) {
16921
+ return null;
16922
+ }
16923
+ const { configCommand: configCommand2 } = await Promise.resolve().then(() => (init_config2(), config_exports));
16924
+ const cmd = new import_commander.Command();
16925
+ configCommand2(cmd);
16926
+ await cmd.parseAsync(["node", "ccman", "config"]);
16927
+ return loadSyncConfig();
16928
+ }
16929
+ var import_inquirer2, import_chalk4, import_commander;
16930
+ var init_helpers = __esm({
16931
+ "src/commands/sync/helpers.ts"() {
16932
+ "use strict";
16933
+ import_inquirer2 = __toESM(require("inquirer"));
16934
+ import_chalk4 = __toESM(require("chalk"));
16935
+ import_commander = require("commander");
16936
+ init_sync_config();
16922
16937
  }
16923
16938
  });
16924
16939
 
@@ -16930,47 +16945,44 @@ __export(test_exports, {
16930
16945
  function testCommand(program2) {
16931
16946
  program2.command("test").description("\u6D4B\u8BD5 WebDAV \u8FDE\u63A5").action(async () => {
16932
16947
  try {
16933
- const config = loadSyncConfig();
16948
+ const config = await ensureConfigExists();
16934
16949
  if (!config) {
16935
- console.log(import_chalk4.default.yellow("\n\u26A0\uFE0F \u672A\u627E\u5230 WebDAV \u914D\u7F6E\n"));
16936
- console.log(import_chalk4.default.blue("\u{1F4A1} \u8BF7\u5148\u914D\u7F6E: ccman sync config\n"));
16937
- process.exit(1);
16950
+ console.log(import_chalk5.default.gray("\n\u5DF2\u53D6\u6D88\n"));
16951
+ return;
16938
16952
  }
16939
- console.log(import_chalk4.default.bold("\n\u{1F50D} \u6D4B\u8BD5 WebDAV \u8FDE\u63A5...\n"));
16953
+ console.log(import_chalk5.default.bold("\n\u{1F50D} \u6D4B\u8BD5 WebDAV \u8FDE\u63A5...\n"));
16940
16954
  const success = await testWebDAVConnection(config);
16941
16955
  if (success) {
16942
- console.log(import_chalk4.default.green("\u2705 \u8FDE\u63A5\u6210\u529F"));
16956
+ console.log(import_chalk5.default.green("\u2705 \u8FDE\u63A5\u6210\u529F"));
16943
16957
  console.log();
16944
- console.log(" ", import_chalk4.default.gray("URL:"), config.webdavUrl);
16945
- console.log(" ", import_chalk4.default.gray("\u7528\u6237:"), config.username);
16946
- console.log(" ", import_chalk4.default.gray("\u8FDC\u7A0B\u76EE\u5F55:"), config.remoteDir);
16947
- console.log(" ", import_chalk4.default.gray("\u8BA4\u8BC1\u7C7B\u578B:"), config.authType === "password" ? "Basic Auth" : "Digest Auth");
16958
+ console.log(" ", import_chalk5.default.gray("URL:"), config.webdavUrl);
16959
+ console.log(" ", import_chalk5.default.gray("\u7528\u6237:"), config.username);
16960
+ console.log(" ", import_chalk5.default.gray("\u8FDC\u7A0B\u76EE\u5F55:"), config.remoteDir);
16961
+ console.log(" ", import_chalk5.default.gray("\u8BA4\u8BC1\u7C7B\u578B:"), config.authType === "password" ? "Basic Auth" : "Digest Auth");
16948
16962
  console.log();
16949
16963
  } else {
16950
- console.log(import_chalk4.default.red("\u274C \u8FDE\u63A5\u5931\u8D25"));
16964
+ console.log(import_chalk5.default.red("\u274C \u8FDE\u63A5\u5931\u8D25"));
16951
16965
  console.log();
16952
- console.log(import_chalk4.default.yellow("\u8BF7\u68C0\u67E5:"));
16966
+ console.log(import_chalk5.default.yellow("\u8BF7\u68C0\u67E5:"));
16953
16967
  console.log(" 1. WebDAV \u670D\u52A1\u5668\u5730\u5740\u662F\u5426\u6B63\u786E");
16954
16968
  console.log(" 2. \u7528\u6237\u540D\u548C\u5BC6\u7801\u662F\u5426\u6B63\u786E");
16955
16969
  console.log(" 3. \u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u6B63\u5E38");
16956
16970
  console.log();
16957
- process.exit(1);
16958
16971
  }
16959
16972
  } catch (error) {
16960
- console.error(import_chalk4.default.red(`
16973
+ console.error(import_chalk5.default.red(`
16961
16974
  \u274C ${error.message}
16962
16975
  `));
16963
- process.exit(1);
16964
16976
  }
16965
16977
  });
16966
16978
  }
16967
- var import_chalk4;
16979
+ var import_chalk5;
16968
16980
  var init_test = __esm({
16969
16981
  "src/commands/sync/test.ts"() {
16970
16982
  "use strict";
16971
- import_chalk4 = __toESM(require("chalk"));
16983
+ import_chalk5 = __toESM(require("chalk"));
16972
16984
  init_dist4();
16973
- init_sync_config();
16985
+ init_helpers();
16974
16986
  }
16975
16987
  });
16976
16988
 
@@ -16982,15 +16994,14 @@ __export(upload_exports, {
16982
16994
  function uploadCommand(program2) {
16983
16995
  program2.command("upload").description("\u4E0A\u4F20\u672C\u5730\u914D\u7F6E\u5230\u4E91\u7AEF").action(async () => {
16984
16996
  try {
16985
- const config = loadSyncConfig();
16997
+ const config = await ensureConfigExists();
16986
16998
  if (!config) {
16987
- console.log(import_chalk5.default.yellow("\n\u26A0\uFE0F \u672A\u627E\u5230 WebDAV \u914D\u7F6E\n"));
16988
- console.log(import_chalk5.default.blue("\u{1F4A1} \u8BF7\u5148\u914D\u7F6E: ccman sync config\n"));
16989
- process.exit(1);
16999
+ console.log(import_chalk6.default.gray("\n\u5DF2\u53D6\u6D88\n"));
17000
+ return;
16990
17001
  }
16991
17002
  let syncPassword = config.syncPassword;
16992
17003
  if (!syncPassword) {
16993
- const { password } = await import_inquirer2.default.prompt([
17004
+ const { password } = await import_inquirer3.default.prompt([
16994
17005
  {
16995
17006
  type: "password",
16996
17007
  name: "password",
@@ -17005,14 +17016,14 @@ function uploadCommand(program2) {
17005
17016
  const claudeManager = createClaudeManager();
17006
17017
  const codexProviders = codexManager.list();
17007
17018
  const claudeProviders = claudeManager.list();
17008
- console.log(import_chalk5.default.bold("\n\u{1F4E4} \u4E0A\u4F20\u914D\u7F6E\u5230\u4E91\u7AEF\n"));
17019
+ console.log(import_chalk6.default.bold("\n\u{1F4E4} \u4E0A\u4F20\u914D\u7F6E\u5230\u4E91\u7AEF\n"));
17009
17020
  console.log("\u914D\u7F6E\u4FE1\u606F:");
17010
- console.log(` Codex \u670D\u52A1\u5546: ${import_chalk5.default.cyan(codexProviders.length)} \u4E2A`);
17011
- console.log(` Claude \u670D\u52A1\u5546: ${import_chalk5.default.cyan(claudeProviders.length)} \u4E2A`);
17021
+ console.log(` Codex \u670D\u52A1\u5546: ${import_chalk6.default.cyan(codexProviders.length)} \u4E2A`);
17022
+ console.log(` Claude \u670D\u52A1\u5546: ${import_chalk6.default.cyan(claudeProviders.length)} \u4E2A`);
17012
17023
  console.log();
17013
- console.log(import_chalk5.default.yellow("\u26A0\uFE0F \u4E91\u7AEF\u73B0\u6709\u914D\u7F6E\u5C06\u88AB\u8986\u76D6"));
17024
+ console.log(import_chalk6.default.yellow("\u26A0\uFE0F \u4E91\u7AEF\u73B0\u6709\u914D\u7F6E\u5C06\u88AB\u8986\u76D6"));
17014
17025
  console.log();
17015
- const { confirm } = await import_inquirer2.default.prompt([
17026
+ const { confirm } = await import_inquirer3.default.prompt([
17016
17027
  {
17017
17028
  type: "confirm",
17018
17029
  name: "confirm",
@@ -17021,37 +17032,36 @@ function uploadCommand(program2) {
17021
17032
  }
17022
17033
  ]);
17023
17034
  if (!confirm) {
17024
- console.log(import_chalk5.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
17035
+ console.log(import_chalk6.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
17025
17036
  return;
17026
17037
  }
17027
17038
  console.log();
17028
- console.log(import_chalk5.default.gray("\u{1F510} \u52A0\u5BC6 API Key..."));
17029
- console.log(import_chalk5.default.gray("\u{1F4E4} \u4E0A\u4F20\u5230 WebDAV..."));
17039
+ console.log(import_chalk6.default.gray("\u{1F510} \u52A0\u5BC6 API Key..."));
17040
+ console.log(import_chalk6.default.gray("\u{1F4E4} \u4E0A\u4F20\u5230 WebDAV..."));
17030
17041
  await uploadToCloud(config, syncPassword);
17031
17042
  console.log();
17032
- console.log(import_chalk5.default.green("\u2705 \u4E0A\u4F20\u6210\u529F"));
17043
+ console.log(import_chalk6.default.green("\u2705 \u4E0A\u4F20\u6210\u529F"));
17033
17044
  console.log();
17034
- console.log(import_chalk5.default.gray("\u8FDC\u7A0B\u6587\u4EF6:"));
17035
- console.log(import_chalk5.default.gray(` ${config.webdavUrl}${config.remoteDir}/.ccman/codex.json`));
17036
- console.log(import_chalk5.default.gray(` ${config.webdavUrl}${config.remoteDir}/.ccman/claude.json`));
17045
+ console.log(import_chalk6.default.gray("\u8FDC\u7A0B\u6587\u4EF6:"));
17046
+ console.log(import_chalk6.default.gray(` ${config.webdavUrl}${config.remoteDir}/.ccman/codex.json`));
17047
+ console.log(import_chalk6.default.gray(` ${config.webdavUrl}${config.remoteDir}/.ccman/claude.json`));
17037
17048
  console.log();
17038
- console.log(import_chalk5.default.blue("\u{1F4A1} \u5176\u4ED6\u8BBE\u5907\u53EF\u901A\u8FC7 'ccman sync download' \u83B7\u53D6\u914D\u7F6E\n"));
17049
+ console.log(import_chalk6.default.blue("\u{1F4A1} \u5176\u4ED6\u8BBE\u5907\u53EF\u901A\u8FC7 'ccman sync download' \u83B7\u53D6\u914D\u7F6E\n"));
17039
17050
  } catch (error) {
17040
- console.error(import_chalk5.default.red(`
17051
+ console.error(import_chalk6.default.red(`
17041
17052
  \u274C ${error.message}
17042
17053
  `));
17043
- process.exit(1);
17044
17054
  }
17045
17055
  });
17046
17056
  }
17047
- var import_chalk5, import_inquirer2;
17057
+ var import_chalk6, import_inquirer3;
17048
17058
  var init_upload = __esm({
17049
17059
  "src/commands/sync/upload.ts"() {
17050
17060
  "use strict";
17051
- import_chalk5 = __toESM(require("chalk"));
17052
- import_inquirer2 = __toESM(require("inquirer"));
17061
+ import_chalk6 = __toESM(require("chalk"));
17062
+ import_inquirer3 = __toESM(require("inquirer"));
17053
17063
  init_dist4();
17054
- init_sync_config();
17064
+ init_helpers();
17055
17065
  }
17056
17066
  });
17057
17067
 
@@ -17063,15 +17073,14 @@ __export(download_exports, {
17063
17073
  function downloadCommand(program2) {
17064
17074
  program2.command("download").description("\u4ECE\u4E91\u7AEF\u4E0B\u8F7D\u914D\u7F6E\u5230\u672C\u5730").action(async () => {
17065
17075
  try {
17066
- const config = loadSyncConfig();
17076
+ const config = await ensureConfigExists();
17067
17077
  if (!config) {
17068
- console.log(import_chalk6.default.yellow("\n\u26A0\uFE0F \u672A\u627E\u5230 WebDAV \u914D\u7F6E\n"));
17069
- console.log(import_chalk6.default.blue("\u{1F4A1} \u8BF7\u5148\u914D\u7F6E: ccman sync config\n"));
17070
- process.exit(1);
17078
+ console.log(import_chalk7.default.gray("\n\u5DF2\u53D6\u6D88\n"));
17079
+ return;
17071
17080
  }
17072
17081
  let syncPassword = config.syncPassword;
17073
17082
  if (!syncPassword) {
17074
- const { password } = await import_inquirer3.default.prompt([
17083
+ const { password } = await import_inquirer4.default.prompt([
17075
17084
  {
17076
17085
  type: "password",
17077
17086
  name: "password",
@@ -17082,10 +17091,10 @@ function downloadCommand(program2) {
17082
17091
  ]);
17083
17092
  syncPassword = password;
17084
17093
  }
17085
- console.log(import_chalk6.default.bold("\n\u{1F4E5} \u4ECE\u4E91\u7AEF\u4E0B\u8F7D\u914D\u7F6E\n"));
17086
- console.log(import_chalk6.default.yellow("\u26A0\uFE0F \u5C06\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF08\u81EA\u52A8\u5907\u4EFD\uFF09"));
17094
+ console.log(import_chalk7.default.bold("\n\u{1F4E5} \u4ECE\u4E91\u7AEF\u4E0B\u8F7D\u914D\u7F6E\n"));
17095
+ console.log(import_chalk7.default.yellow("\u26A0\uFE0F \u5C06\u8986\u76D6\u672C\u5730\u914D\u7F6E\uFF08\u81EA\u52A8\u5907\u4EFD\uFF09"));
17087
17096
  console.log();
17088
- const { confirm } = await import_inquirer3.default.prompt([
17097
+ const { confirm } = await import_inquirer4.default.prompt([
17089
17098
  {
17090
17099
  type: "confirm",
17091
17100
  name: "confirm",
@@ -17094,41 +17103,40 @@ function downloadCommand(program2) {
17094
17103
  }
17095
17104
  ]);
17096
17105
  if (!confirm) {
17097
- console.log(import_chalk6.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
17106
+ console.log(import_chalk7.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
17098
17107
  return;
17099
17108
  }
17100
17109
  console.log();
17101
- console.log(import_chalk6.default.gray("\u{1F4BE} \u5907\u4EFD\u672C\u5730\u914D\u7F6E..."));
17102
- console.log(import_chalk6.default.gray("\u{1F4E5} \u4E0B\u8F7D\u8FDC\u7A0B\u914D\u7F6E..."));
17103
- console.log(import_chalk6.default.gray("\u{1F513} \u89E3\u5BC6 API Key..."));
17110
+ console.log(import_chalk7.default.gray("\u{1F4BE} \u5907\u4EFD\u672C\u5730\u914D\u7F6E..."));
17111
+ console.log(import_chalk7.default.gray("\u{1F4E5} \u4E0B\u8F7D\u8FDC\u7A0B\u914D\u7F6E..."));
17112
+ console.log(import_chalk7.default.gray("\u{1F513} \u89E3\u5BC6 API Key..."));
17104
17113
  const backupPaths = await downloadFromCloud(config, syncPassword);
17105
17114
  console.log();
17106
- console.log(import_chalk6.default.green("\u2705 \u4E0B\u8F7D\u6210\u529F"));
17115
+ console.log(import_chalk7.default.green("\u2705 \u4E0B\u8F7D\u6210\u529F"));
17107
17116
  console.log();
17108
17117
  if (backupPaths.length > 0) {
17109
- console.log(import_chalk6.default.gray("\u672C\u5730\u5907\u4EFD:"));
17118
+ console.log(import_chalk7.default.gray("\u672C\u5730\u5907\u4EFD:"));
17110
17119
  backupPaths.forEach((path12) => {
17111
- console.log(import_chalk6.default.gray(` ${path12}`));
17120
+ console.log(import_chalk7.default.gray(` ${path12}`));
17112
17121
  });
17113
17122
  console.log();
17114
17123
  }
17115
- console.log(import_chalk6.default.blue("\u{1F4A1} \u914D\u7F6E\u5DF2\u66F4\u65B0\uFF0C\u91CD\u65B0\u52A0\u8F7D\u751F\u6548\n"));
17124
+ console.log(import_chalk7.default.blue("\u{1F4A1} \u914D\u7F6E\u5DF2\u66F4\u65B0\uFF0C\u91CD\u65B0\u52A0\u8F7D\u751F\u6548\n"));
17116
17125
  } catch (error) {
17117
- console.error(import_chalk6.default.red(`
17126
+ console.error(import_chalk7.default.red(`
17118
17127
  \u274C ${error.message}
17119
17128
  `));
17120
- process.exit(1);
17121
17129
  }
17122
17130
  });
17123
17131
  }
17124
- var import_chalk6, import_inquirer3;
17132
+ var import_chalk7, import_inquirer4;
17125
17133
  var init_download = __esm({
17126
17134
  "src/commands/sync/download.ts"() {
17127
17135
  "use strict";
17128
- import_chalk6 = __toESM(require("chalk"));
17129
- import_inquirer3 = __toESM(require("inquirer"));
17136
+ import_chalk7 = __toESM(require("chalk"));
17137
+ import_inquirer4 = __toESM(require("inquirer"));
17130
17138
  init_dist4();
17131
- init_sync_config();
17139
+ init_helpers();
17132
17140
  }
17133
17141
  });
17134
17142
 
@@ -17140,15 +17148,14 @@ __export(merge_exports, {
17140
17148
  function mergeCommand(program2) {
17141
17149
  program2.command("merge").description("\u667A\u80FD\u5408\u5E76\u672C\u5730\u548C\u4E91\u7AEF\u914D\u7F6E").action(async () => {
17142
17150
  try {
17143
- const config = loadSyncConfig();
17151
+ const config = await ensureConfigExists();
17144
17152
  if (!config) {
17145
- console.log(import_chalk7.default.yellow("\n\u26A0\uFE0F \u672A\u627E\u5230 WebDAV \u914D\u7F6E\n"));
17146
- console.log(import_chalk7.default.blue("\u{1F4A1} \u8BF7\u5148\u914D\u7F6E: ccman sync config\n"));
17147
- process.exit(1);
17153
+ console.log(import_chalk8.default.gray("\n\u5DF2\u53D6\u6D88\n"));
17154
+ return;
17148
17155
  }
17149
17156
  let syncPassword = config.syncPassword;
17150
17157
  if (!syncPassword) {
17151
- const { password } = await import_inquirer4.default.prompt([
17158
+ const { password } = await import_inquirer5.default.prompt([
17152
17159
  {
17153
17160
  type: "password",
17154
17161
  name: "password",
@@ -17159,45 +17166,44 @@ function mergeCommand(program2) {
17159
17166
  ]);
17160
17167
  syncPassword = password;
17161
17168
  }
17162
- console.log(import_chalk7.default.bold("\n\u{1F504} \u667A\u80FD\u5408\u5E76\u914D\u7F6E\n"));
17163
- console.log(import_chalk7.default.gray("\u5206\u6790\u672C\u5730\u548C\u4E91\u7AEF\u914D\u7F6E..."));
17169
+ console.log(import_chalk8.default.bold("\n\u{1F504} \u667A\u80FD\u5408\u5E76\u914D\u7F6E\n"));
17170
+ console.log(import_chalk8.default.gray("\u5206\u6790\u672C\u5730\u548C\u4E91\u7AEF\u914D\u7F6E..."));
17164
17171
  const result = await mergeSync(config, syncPassword);
17165
17172
  if (!result.hasChanges) {
17166
17173
  console.log();
17167
- console.log(import_chalk7.default.blue("\u2139\uFE0F \u914D\u7F6E\u5DF2\u540C\u6B65\uFF0C\u65E0\u9700\u64CD\u4F5C\n"));
17174
+ console.log(import_chalk8.default.blue("\u2139\uFE0F \u914D\u7F6E\u5DF2\u540C\u6B65\uFF0C\u65E0\u9700\u64CD\u4F5C\n"));
17168
17175
  return;
17169
17176
  }
17170
17177
  console.log();
17171
- console.log(import_chalk7.default.green("\u2705 \u914D\u7F6E\u5DF2\u667A\u80FD\u5408\u5E76\u5E76\u540C\u6B65"));
17178
+ console.log(import_chalk8.default.green("\u2705 \u914D\u7F6E\u5DF2\u667A\u80FD\u5408\u5E76\u5E76\u540C\u6B65"));
17172
17179
  console.log();
17173
17180
  if (result.backupPaths.length > 0) {
17174
- console.log(import_chalk7.default.gray("\u5907\u4EFD:"));
17181
+ console.log(import_chalk8.default.gray("\u5907\u4EFD:"));
17175
17182
  result.backupPaths.forEach((path12) => {
17176
- console.log(import_chalk7.default.gray(` ${path12}`));
17183
+ console.log(import_chalk8.default.gray(` ${path12}`));
17177
17184
  });
17178
17185
  console.log();
17179
17186
  }
17180
- console.log(import_chalk7.default.blue("\u5408\u5E76\u89C4\u5219:"));
17181
- console.log(import_chalk7.default.gray(" \u2022 \u76F8\u540C ID\uFF1A\u4FDD\u7559\u6700\u65B0\u4FEE\u6539"));
17182
- console.log(import_chalk7.default.gray(" \u2022 \u76F8\u540C\u914D\u7F6E\uFF08URL+Key\uFF09\uFF1A\u4FDD\u7559\u6700\u65B0\u4FEE\u6539"));
17183
- console.log(import_chalk7.default.gray(" \u2022 \u4E0D\u540C\u914D\u7F6E\uFF1A\u5168\u90E8\u4FDD\u7559\uFF0C\u81EA\u52A8\u5904\u7406 name \u51B2\u7A81"));
17187
+ console.log(import_chalk8.default.blue("\u5408\u5E76\u89C4\u5219:"));
17188
+ console.log(import_chalk8.default.gray(" \u2022 \u76F8\u540C ID\uFF1A\u4FDD\u7559\u6700\u65B0\u4FEE\u6539"));
17189
+ console.log(import_chalk8.default.gray(" \u2022 \u76F8\u540C\u914D\u7F6E\uFF08URL+Key\uFF09\uFF1A\u4FDD\u7559\u6700\u65B0\u4FEE\u6539"));
17190
+ console.log(import_chalk8.default.gray(" \u2022 \u4E0D\u540C\u914D\u7F6E\uFF1A\u5168\u90E8\u4FDD\u7559\uFF0C\u81EA\u52A8\u5904\u7406 name \u51B2\u7A81"));
17184
17191
  console.log();
17185
17192
  } catch (error) {
17186
- console.error(import_chalk7.default.red(`
17193
+ console.error(import_chalk8.default.red(`
17187
17194
  \u274C ${error.message}
17188
17195
  `));
17189
- process.exit(1);
17190
17196
  }
17191
17197
  });
17192
17198
  }
17193
- var import_chalk7, import_inquirer4;
17199
+ var import_chalk8, import_inquirer5;
17194
17200
  var init_merge3 = __esm({
17195
17201
  "src/commands/sync/merge.ts"() {
17196
17202
  "use strict";
17197
- import_chalk7 = __toESM(require("chalk"));
17198
- import_inquirer4 = __toESM(require("inquirer"));
17203
+ import_chalk8 = __toESM(require("chalk"));
17204
+ import_inquirer5 = __toESM(require("inquirer"));
17199
17205
  init_dist4();
17200
- init_sync_config();
17206
+ init_helpers();
17201
17207
  }
17202
17208
  });
17203
17209
 
@@ -17210,50 +17216,49 @@ function statusCommand(program2) {
17210
17216
  program2.command("status").description("\u67E5\u770B\u540C\u6B65\u72B6\u6001").action(async () => {
17211
17217
  try {
17212
17218
  const config = loadSyncConfig();
17213
- console.log(import_chalk8.default.bold("\n\u{1F4CA} \u540C\u6B65\u72B6\u6001\n"));
17219
+ console.log(import_chalk9.default.bold("\n\u{1F4CA} \u540C\u6B65\u72B6\u6001\n"));
17214
17220
  if (!config) {
17215
- console.log(import_chalk8.default.yellow("\u26A0\uFE0F \u672A\u914D\u7F6E WebDAV \u540C\u6B65"));
17221
+ console.log(import_chalk9.default.yellow("\u26A0\uFE0F \u672A\u914D\u7F6E WebDAV \u540C\u6B65"));
17216
17222
  console.log();
17217
- console.log(import_chalk8.default.blue("\u{1F4A1} \u5F00\u59CB\u914D\u7F6E: ccman sync config\n"));
17223
+ console.log(import_chalk9.default.blue("\u{1F4A1} \u5F00\u59CB\u914D\u7F6E: ccman sync config\n"));
17218
17224
  return;
17219
17225
  }
17220
- console.log(import_chalk8.default.bold("WebDAV \u914D\u7F6E:"));
17221
- console.log(` URL: ${import_chalk8.default.gray(config.webdavUrl)}`);
17222
- console.log(` \u7528\u6237: ${import_chalk8.default.gray(config.username)}`);
17223
- console.log(` \u8FDC\u7A0B\u76EE\u5F55: ${import_chalk8.default.gray(config.remoteDir)}`);
17224
- console.log(` \u8BA4\u8BC1: ${import_chalk8.default.gray(config.authType === "password" ? "Basic Auth" : "Digest Auth")}`);
17225
- console.log(` \u540C\u6B65\u5BC6\u7801: ${config.syncPassword ? import_chalk8.default.green("\u2713 \u5DF2\u4FDD\u5B58") : import_chalk8.default.yellow("\u2717 \u672A\u4FDD\u5B58")}`);
17226
+ console.log(import_chalk9.default.bold("WebDAV \u914D\u7F6E:"));
17227
+ console.log(` URL: ${import_chalk9.default.gray(config.webdavUrl)}`);
17228
+ console.log(` \u7528\u6237: ${import_chalk9.default.gray(config.username)}`);
17229
+ console.log(` \u8FDC\u7A0B\u76EE\u5F55: ${import_chalk9.default.gray(config.remoteDir)}`);
17230
+ console.log(` \u8BA4\u8BC1: ${import_chalk9.default.gray(config.authType === "password" ? "Basic Auth" : "Digest Auth")}`);
17231
+ console.log(` \u540C\u6B65\u5BC6\u7801: ${config.syncPassword ? import_chalk9.default.green("\u2713 \u5DF2\u4FDD\u5B58") : import_chalk9.default.yellow("\u2717 \u672A\u4FDD\u5B58")}`);
17226
17232
  console.log();
17227
17233
  const codexManager = createCodexManager();
17228
17234
  const claudeManager = createClaudeManager();
17229
17235
  const codexProviders = codexManager.list();
17230
17236
  const claudeProviders = claudeManager.list();
17231
- console.log(import_chalk8.default.bold("\u672C\u5730\u914D\u7F6E:"));
17232
- console.log(` Codex: ${import_chalk8.default.cyan(codexProviders.length)} \u4E2A\u670D\u52A1\u5546`);
17233
- console.log(` Claude: ${import_chalk8.default.cyan(claudeProviders.length)} \u4E2A\u670D\u52A1\u5546`);
17237
+ console.log(import_chalk9.default.bold("\u672C\u5730\u914D\u7F6E:"));
17238
+ console.log(` Codex: ${import_chalk9.default.cyan(codexProviders.length)} \u4E2A\u670D\u52A1\u5546`);
17239
+ console.log(` Claude: ${import_chalk9.default.cyan(claudeProviders.length)} \u4E2A\u670D\u52A1\u5546`);
17234
17240
  if (config.lastSync) {
17235
17241
  const date = new Date(config.lastSync).toLocaleString("zh-CN");
17236
- console.log(` \u6700\u540E\u540C\u6B65: ${import_chalk8.default.gray(date)}`);
17242
+ console.log(` \u6700\u540E\u540C\u6B65: ${import_chalk9.default.gray(date)}`);
17237
17243
  }
17238
17244
  console.log();
17239
- console.log(import_chalk8.default.bold("\u540C\u6B65\u5EFA\u8BAE:"));
17240
- console.log(import_chalk8.default.blue(" \u{1F4A1} \u4E0A\u4F20\u5230\u4E91\u7AEF: ccman sync upload"));
17241
- console.log(import_chalk8.default.blue(" \u{1F4A1} \u4ECE\u4E91\u7AEF\u4E0B\u8F7D: ccman sync download"));
17242
- console.log(import_chalk8.default.blue(" \u{1F4A1} \u667A\u80FD\u5408\u5E76: ccman sync merge"));
17245
+ console.log(import_chalk9.default.bold("\u540C\u6B65\u5EFA\u8BAE:"));
17246
+ console.log(import_chalk9.default.blue(" \u{1F4A1} \u4E0A\u4F20\u5230\u4E91\u7AEF: ccman sync upload"));
17247
+ console.log(import_chalk9.default.blue(" \u{1F4A1} \u4ECE\u4E91\u7AEF\u4E0B\u8F7D: ccman sync download"));
17248
+ console.log(import_chalk9.default.blue(" \u{1F4A1} \u667A\u80FD\u5408\u5E76: ccman sync merge"));
17243
17249
  console.log();
17244
17250
  } catch (error) {
17245
- console.error(import_chalk8.default.red(`
17251
+ console.error(import_chalk9.default.red(`
17246
17252
  \u274C ${error.message}
17247
17253
  `));
17248
- process.exit(1);
17249
17254
  }
17250
17255
  });
17251
17256
  }
17252
- var import_chalk8;
17257
+ var import_chalk9;
17253
17258
  var init_status = __esm({
17254
17259
  "src/commands/sync/status.ts"() {
17255
17260
  "use strict";
17256
- import_chalk8 = __toESM(require("chalk"));
17261
+ import_chalk9 = __toESM(require("chalk"));
17257
17262
  init_dist4();
17258
17263
  init_sync_config();
17259
17264
  }
@@ -17276,7 +17281,7 @@ function createSyncCommands(program2) {
17276
17281
  async function startSyncMenu() {
17277
17282
  while (true) {
17278
17283
  console.log();
17279
- const { action } = await import_inquirer5.default.prompt([
17284
+ const { action } = await import_inquirer6.default.prompt([
17280
17285
  {
17281
17286
  type: "list",
17282
17287
  name: "action",
@@ -17288,7 +17293,7 @@ async function startSyncMenu() {
17288
17293
  { name: "\u{1F4E5} \u4ECE\u4E91\u7AEF\u4E0B\u8F7D", value: "download" },
17289
17294
  { name: "\u{1F504} \u667A\u80FD\u5408\u5E76", value: "merge" },
17290
17295
  { name: "\u{1F4CA} \u67E5\u770B\u540C\u6B65\u72B6\u6001", value: "status" },
17291
- { name: "\u2B05\uFE0F \u8FD4\u56DE\u4E3B\u83DC\u5355", value: "back" }
17296
+ { name: "\u2B05\uFE0F \u8FD4\u56DE\u4E0A\u4E00\u7EA7", value: "back" }
17292
17297
  ]
17293
17298
  }
17294
17299
  ]);
@@ -17299,53 +17304,53 @@ async function startSyncMenu() {
17299
17304
  switch (action) {
17300
17305
  case "config": {
17301
17306
  const { configCommand: configCommand2 } = await Promise.resolve().then(() => (init_config2(), config_exports));
17302
- const cmd = new import_commander.Command();
17307
+ const cmd = new import_commander2.Command();
17303
17308
  configCommand2(cmd);
17304
17309
  await cmd.parseAsync(["node", "ccman", "config"]);
17305
17310
  break;
17306
17311
  }
17307
17312
  case "test": {
17308
17313
  const { testCommand: testCommand2 } = await Promise.resolve().then(() => (init_test(), test_exports));
17309
- const cmd = new import_commander.Command();
17314
+ const cmd = new import_commander2.Command();
17310
17315
  testCommand2(cmd);
17311
17316
  await cmd.parseAsync(["node", "ccman", "test"]);
17312
17317
  break;
17313
17318
  }
17314
17319
  case "upload": {
17315
17320
  const { uploadCommand: uploadCommand2 } = await Promise.resolve().then(() => (init_upload(), upload_exports));
17316
- const cmd = new import_commander.Command();
17321
+ const cmd = new import_commander2.Command();
17317
17322
  uploadCommand2(cmd);
17318
17323
  await cmd.parseAsync(["node", "ccman", "upload"]);
17319
17324
  break;
17320
17325
  }
17321
17326
  case "download": {
17322
17327
  const { downloadCommand: downloadCommand2 } = await Promise.resolve().then(() => (init_download(), download_exports));
17323
- const cmd = new import_commander.Command();
17328
+ const cmd = new import_commander2.Command();
17324
17329
  downloadCommand2(cmd);
17325
17330
  await cmd.parseAsync(["node", "ccman", "download"]);
17326
17331
  break;
17327
17332
  }
17328
17333
  case "merge": {
17329
17334
  const { mergeCommand: mergeCommand2 } = await Promise.resolve().then(() => (init_merge3(), merge_exports));
17330
- const cmd = new import_commander.Command();
17335
+ const cmd = new import_commander2.Command();
17331
17336
  mergeCommand2(cmd);
17332
17337
  await cmd.parseAsync(["node", "ccman", "merge"]);
17333
17338
  break;
17334
17339
  }
17335
17340
  case "status": {
17336
17341
  const { statusCommand: statusCommand2 } = await Promise.resolve().then(() => (init_status(), status_exports));
17337
- const cmd = new import_commander.Command();
17342
+ const cmd = new import_commander2.Command();
17338
17343
  statusCommand2(cmd);
17339
17344
  await cmd.parseAsync(["node", "ccman", "status"]);
17340
17345
  break;
17341
17346
  }
17342
17347
  }
17343
17348
  } catch (error) {
17344
- console.error(import_chalk9.default.red(`
17349
+ console.error(import_chalk10.default.red(`
17345
17350
  \u274C ${error.message}
17346
17351
  `));
17347
17352
  }
17348
- await import_inquirer5.default.prompt([
17353
+ await import_inquirer6.default.prompt([
17349
17354
  {
17350
17355
  type: "input",
17351
17356
  name: "continue",
@@ -17354,13 +17359,13 @@ async function startSyncMenu() {
17354
17359
  ]);
17355
17360
  }
17356
17361
  }
17357
- var import_commander, import_inquirer5, import_chalk9;
17358
- var init_sync2 = __esm({
17362
+ var import_commander2, import_inquirer6, import_chalk10;
17363
+ var init_sync = __esm({
17359
17364
  "src/commands/sync/index.ts"() {
17360
17365
  "use strict";
17361
- import_commander = require("commander");
17362
- import_inquirer5 = __toESM(require("inquirer"));
17363
- import_chalk9 = __toESM(require("chalk"));
17366
+ import_commander2 = require("commander");
17367
+ import_inquirer6 = __toESM(require("inquirer"));
17368
+ import_chalk10 = __toESM(require("chalk"));
17364
17369
  init_config2();
17365
17370
  init_test();
17366
17371
  init_upload();
@@ -17371,8 +17376,8 @@ var init_sync2 = __esm({
17371
17376
  });
17372
17377
 
17373
17378
  // src/index.ts
17374
- var import_commander2 = require("commander");
17375
- var import_chalk27 = __toESM(require("chalk"));
17379
+ var import_commander3 = require("commander");
17380
+ var import_chalk28 = __toESM(require("chalk"));
17376
17381
 
17377
17382
  // src/utils/logo.ts
17378
17383
  var import_chalk = __toESM(require("chalk"));
@@ -17396,13 +17401,13 @@ function printLogo() {
17396
17401
  }
17397
17402
 
17398
17403
  // src/commands/codex/add.ts
17399
- var import_chalk11 = __toESM(require("chalk"));
17400
- var import_inquirer7 = __toESM(require("inquirer"));
17404
+ var import_chalk12 = __toESM(require("chalk"));
17405
+ var import_inquirer8 = __toESM(require("inquirer"));
17401
17406
  init_dist4();
17402
17407
 
17403
17408
  // src/interactive.ts
17404
- var import_inquirer6 = __toESM(require("inquirer"));
17405
- var import_chalk10 = __toESM(require("chalk"));
17409
+ var import_inquirer7 = __toESM(require("inquirer"));
17410
+ var import_chalk11 = __toESM(require("chalk"));
17406
17411
  init_dist4();
17407
17412
 
17408
17413
  // src/utils/format.ts
@@ -17428,7 +17433,7 @@ function formatProviderTable(providers, currentId) {
17428
17433
 
17429
17434
  // src/interactive.ts
17430
17435
  async function promptProviderForm(defaults2) {
17431
- const answers = await import_inquirer6.default.prompt([
17436
+ const answers = await import_inquirer7.default.prompt([
17432
17437
  {
17433
17438
  type: "input",
17434
17439
  name: "name",
@@ -17473,7 +17478,7 @@ async function promptProviderForm(defaults2) {
17473
17478
  async function startMainMenu() {
17474
17479
  while (true) {
17475
17480
  console.log();
17476
- const { choice } = await import_inquirer6.default.prompt([
17481
+ const { choice } = await import_inquirer7.default.prompt([
17477
17482
  {
17478
17483
  type: "list",
17479
17484
  name: "choice",
@@ -17488,7 +17493,7 @@ async function startMainMenu() {
17488
17493
  }
17489
17494
  ]);
17490
17495
  if (choice === "exit") {
17491
- console.log(import_chalk10.default.gray("\n\u{1F44B} \u518D\u89C1!\n"));
17496
+ console.log(import_chalk11.default.gray("\n\u{1F44B} \u518D\u89C1!\n"));
17492
17497
  break;
17493
17498
  }
17494
17499
  if (choice === "claude") {
@@ -17496,7 +17501,7 @@ async function startMainMenu() {
17496
17501
  } else if (choice === "codex") {
17497
17502
  await startCodexMenu();
17498
17503
  } else if (choice === "sync") {
17499
- const { startSyncMenu: startSyncMenu2 } = await Promise.resolve().then(() => (init_sync2(), sync_exports));
17504
+ const { startSyncMenu: startSyncMenu2 } = await Promise.resolve().then(() => (init_sync(), sync_exports));
17500
17505
  await startSyncMenu2();
17501
17506
  } else if (choice === "presets") {
17502
17507
  await showPresetsMenu();
@@ -17514,7 +17519,7 @@ async function showToolMenu(tool) {
17514
17519
  const toolEmoji = tool === "claude" ? "\u{1F537}" : "\u{1F536}";
17515
17520
  while (true) {
17516
17521
  console.log();
17517
- const { action } = await import_inquirer6.default.prompt([
17522
+ const { action } = await import_inquirer7.default.prompt([
17518
17523
  {
17519
17524
  type: "list",
17520
17525
  name: "action",
@@ -17559,11 +17564,11 @@ async function showToolMenu(tool) {
17559
17564
  break;
17560
17565
  }
17561
17566
  } catch (error) {
17562
- console.error(import_chalk10.default.red(`
17567
+ console.error(import_chalk11.default.red(`
17563
17568
  \u274C ${error.message}
17564
17569
  `));
17565
17570
  }
17566
- await import_inquirer6.default.prompt([
17571
+ await import_inquirer7.default.prompt([
17567
17572
  {
17568
17573
  type: "input",
17569
17574
  name: "continue",
@@ -17573,16 +17578,16 @@ async function showToolMenu(tool) {
17573
17578
  }
17574
17579
  }
17575
17580
  async function showPresetsMenu() {
17576
- console.log(import_chalk10.default.yellow("\n\u26A0\uFE0F \u9884\u7F6E\u670D\u52A1\u5546\u7BA1\u7406\u529F\u80FD\u5373\u5C06\u63A8\u51FA\n"));
17581
+ console.log(import_chalk11.default.yellow("\n\u26A0\uFE0F \u9884\u7F6E\u670D\u52A1\u5546\u7BA1\u7406\u529F\u80FD\u5373\u5C06\u63A8\u51FA\n"));
17577
17582
  }
17578
17583
  async function handleAdd(tool) {
17579
17584
  const manager = tool === "codex" ? createCodexManager() : createClaudeManager();
17580
17585
  const toolName = tool === "claude" ? "Claude" : "Codex";
17581
17586
  const presets = manager.listPresets();
17582
- console.log(import_chalk10.default.bold(`
17587
+ console.log(import_chalk11.default.bold(`
17583
17588
  \u{1F4DD} \u6DFB\u52A0 ${toolName} \u670D\u52A1\u5546
17584
17589
  `));
17585
- const { usePreset } = await import_inquirer6.default.prompt([
17590
+ const { usePreset } = await import_inquirer7.default.prompt([
17586
17591
  {
17587
17592
  type: "list",
17588
17593
  name: "usePreset",
@@ -17597,7 +17602,7 @@ async function handleAdd(tool) {
17597
17602
  let baseUrl;
17598
17603
  let apiKey;
17599
17604
  if (usePreset) {
17600
- const { presetName } = await import_inquirer6.default.prompt([
17605
+ const { presetName } = await import_inquirer7.default.prompt([
17601
17606
  {
17602
17607
  type: "list",
17603
17608
  name: "presetName",
@@ -17609,7 +17614,7 @@ async function handleAdd(tool) {
17609
17614
  }
17610
17615
  ]);
17611
17616
  const preset = presets.find((p) => p.name === presetName);
17612
- console.log(import_chalk10.default.blue(`
17617
+ console.log(import_chalk11.default.blue(`
17613
17618
  \u4F7F\u7528\u9884\u8BBE: ${preset.name} - ${preset.description}
17614
17619
  `));
17615
17620
  const input = await promptProviderForm({
@@ -17621,7 +17626,7 @@ async function handleAdd(tool) {
17621
17626
  baseUrl = input.baseUrl;
17622
17627
  apiKey = input.apiKey;
17623
17628
  } else {
17624
- const answers = await import_inquirer6.default.prompt([
17629
+ const answers = await import_inquirer7.default.prompt([
17625
17630
  {
17626
17631
  type: "input",
17627
17632
  name: "name",
@@ -17654,12 +17659,12 @@ async function handleAdd(tool) {
17654
17659
  }
17655
17660
  const provider = manager.add({ name, baseUrl, apiKey });
17656
17661
  console.log();
17657
- console.log(import_chalk10.default.green("\u2705 \u6DFB\u52A0\u6210\u529F"));
17662
+ console.log(import_chalk11.default.green("\u2705 \u6DFB\u52A0\u6210\u529F"));
17658
17663
  console.log();
17659
- console.log(` ${import_chalk10.default.bold(provider.name)} ${import_chalk10.default.blue(`[${toolName}]`)}`);
17660
- console.log(` ${import_chalk10.default.gray(provider.baseUrl)}`);
17664
+ console.log(` ${import_chalk11.default.bold(provider.name)} ${import_chalk11.default.blue(`[${toolName}]`)}`);
17665
+ console.log(` ${import_chalk11.default.gray(provider.baseUrl)}`);
17661
17666
  console.log();
17662
- const { switchNow } = await import_inquirer6.default.prompt([
17667
+ const { switchNow } = await import_inquirer7.default.prompt([
17663
17668
  {
17664
17669
  type: "confirm",
17665
17670
  name: "switchNow",
@@ -17669,9 +17674,9 @@ async function handleAdd(tool) {
17669
17674
  ]);
17670
17675
  if (switchNow) {
17671
17676
  manager.switch(provider.id);
17672
- console.log(import_chalk10.default.green("\u2705 \u5DF2\u5207\u6362\u5230\u65B0\u670D\u52A1\u5546\n"));
17677
+ console.log(import_chalk11.default.green("\u2705 \u5DF2\u5207\u6362\u5230\u65B0\u670D\u52A1\u5546\n"));
17673
17678
  } else {
17674
- console.log(import_chalk10.default.blue("\u{1F4A1} \u7A0D\u540E\u5207\u6362:") + import_chalk10.default.white(` ccman ${tool === "codex" ? "cx" : "cc"} use "${provider.name}"
17679
+ console.log(import_chalk11.default.blue("\u{1F4A1} \u7A0D\u540E\u5207\u6362:") + import_chalk11.default.white(` ccman ${tool === "codex" ? "cx" : "cc"} use "${provider.name}"
17675
17680
  `));
17676
17681
  }
17677
17682
  }
@@ -17680,23 +17685,23 @@ async function handleSwitch(tool) {
17680
17685
  const providers = manager.list();
17681
17686
  const current = manager.getCurrent();
17682
17687
  if (providers.length === 0) {
17683
- console.log(import_chalk10.default.yellow("\n\u26A0\uFE0F \u6682\u65E0\u670D\u52A1\u5546\n"));
17688
+ console.log(import_chalk11.default.yellow("\n\u26A0\uFE0F \u6682\u65E0\u670D\u52A1\u5546\n"));
17684
17689
  return;
17685
17690
  }
17686
- const { providerId } = await import_inquirer6.default.prompt([
17691
+ const { providerId } = await import_inquirer7.default.prompt([
17687
17692
  {
17688
17693
  type: "list",
17689
17694
  name: "providerId",
17690
17695
  message: "\u9009\u62E9\u8981\u5207\u6362\u7684\u670D\u52A1\u5546:",
17691
17696
  choices: providers.map((p) => ({
17692
- name: `${p.name}${current?.id === p.id ? import_chalk10.default.green(" (\u5F53\u524D)") : ""}`,
17697
+ name: `${p.name}${current?.id === p.id ? import_chalk11.default.green(" (\u5F53\u524D)") : ""}`,
17693
17698
  value: p.id
17694
17699
  }))
17695
17700
  }
17696
17701
  ]);
17697
17702
  manager.switch(providerId);
17698
17703
  const provider = providers.find((p) => p.id === providerId);
17699
- console.log(import_chalk10.default.green(`
17704
+ console.log(import_chalk11.default.green(`
17700
17705
  \u2705 \u5DF2\u5207\u6362\u5230: ${provider.name}
17701
17706
  `));
17702
17707
  }
@@ -17706,12 +17711,12 @@ async function handleList(tool) {
17706
17711
  const current = manager.getCurrent();
17707
17712
  const toolName = tool === "claude" ? "Claude" : "Codex";
17708
17713
  if (providers.length === 0) {
17709
- console.log(import_chalk10.default.yellow(`
17714
+ console.log(import_chalk11.default.yellow(`
17710
17715
  \u26A0\uFE0F \u6682\u65E0 ${toolName} \u670D\u52A1\u5546
17711
17716
  `));
17712
17717
  return;
17713
17718
  }
17714
- console.log(import_chalk10.default.bold(`
17719
+ console.log(import_chalk11.default.bold(`
17715
17720
  \u{1F4CB} ${toolName} \u670D\u52A1\u5546 (${providers.length} \u4E2A)`));
17716
17721
  console.log(formatProviderTable(providers, current?.id, toolName));
17717
17722
  }
@@ -17720,19 +17725,19 @@ async function handleCurrent(tool) {
17720
17725
  const current = manager.getCurrent();
17721
17726
  const toolName = tool === "claude" ? "Claude" : "Codex";
17722
17727
  if (!current) {
17723
- console.log(import_chalk10.default.yellow(`
17728
+ console.log(import_chalk11.default.yellow(`
17724
17729
  \u26A0\uFE0F \u672A\u9009\u62E9\u4EFB\u4F55 ${toolName} \u670D\u52A1\u5546
17725
17730
  `));
17726
17731
  return;
17727
17732
  }
17728
- console.log(import_chalk10.default.bold(`
17733
+ console.log(import_chalk11.default.bold(`
17729
17734
  \u{1F441}\uFE0F \u5F53\u524D ${toolName} \u670D\u52A1\u5546
17730
17735
  `));
17731
- console.log(` ${import_chalk10.default.green.bold(current.name)}`);
17732
- console.log(` ${import_chalk10.default.gray(current.baseUrl)}`);
17736
+ console.log(` ${import_chalk11.default.green.bold(current.name)}`);
17737
+ console.log(` ${import_chalk11.default.gray(current.baseUrl)}`);
17733
17738
  if (current.lastUsedAt) {
17734
17739
  const date = new Date(current.lastUsedAt).toLocaleString("zh-CN");
17735
- console.log(` ${import_chalk10.default.gray(`\u6700\u540E\u4F7F\u7528: ${date}`)}`);
17740
+ console.log(` ${import_chalk11.default.gray(`\u6700\u540E\u4F7F\u7528: ${date}`)}`);
17736
17741
  }
17737
17742
  console.log();
17738
17743
  }
@@ -17740,10 +17745,10 @@ async function handleEdit(tool) {
17740
17745
  const manager = tool === "codex" ? createCodexManager() : createClaudeManager();
17741
17746
  const providers = manager.list();
17742
17747
  if (providers.length === 0) {
17743
- console.log(import_chalk10.default.yellow("\n\u26A0\uFE0F \u6682\u65E0\u670D\u52A1\u5546\n"));
17748
+ console.log(import_chalk11.default.yellow("\n\u26A0\uFE0F \u6682\u65E0\u670D\u52A1\u5546\n"));
17744
17749
  return;
17745
17750
  }
17746
- const { providerId } = await import_inquirer6.default.prompt([
17751
+ const { providerId } = await import_inquirer7.default.prompt([
17747
17752
  {
17748
17753
  type: "list",
17749
17754
  name: "providerId",
@@ -17755,7 +17760,7 @@ async function handleEdit(tool) {
17755
17760
  }
17756
17761
  ]);
17757
17762
  const provider = providers.find((p) => p.id === providerId);
17758
- const answers = await import_inquirer6.default.prompt([
17763
+ const answers = await import_inquirer7.default.prompt([
17759
17764
  {
17760
17765
  type: "input",
17761
17766
  name: "name",
@@ -17788,16 +17793,16 @@ async function handleEdit(tool) {
17788
17793
  baseUrl: answers.baseUrl,
17789
17794
  apiKey: answers.apiKey || void 0
17790
17795
  });
17791
- console.log(import_chalk10.default.green("\n\u2705 \u7F16\u8F91\u6210\u529F\n"));
17796
+ console.log(import_chalk11.default.green("\n\u2705 \u7F16\u8F91\u6210\u529F\n"));
17792
17797
  }
17793
17798
  async function handleClone(tool) {
17794
17799
  const manager = tool === "codex" ? createCodexManager() : createClaudeManager();
17795
17800
  const providers = manager.list();
17796
17801
  if (providers.length === 0) {
17797
- console.log(import_chalk10.default.yellow("\n\u26A0\uFE0F \u6682\u65E0\u670D\u52A1\u5546\n"));
17802
+ console.log(import_chalk11.default.yellow("\n\u26A0\uFE0F \u6682\u65E0\u670D\u52A1\u5546\n"));
17798
17803
  return;
17799
17804
  }
17800
- const { providerId } = await import_inquirer6.default.prompt([
17805
+ const { providerId } = await import_inquirer7.default.prompt([
17801
17806
  {
17802
17807
  type: "list",
17803
17808
  name: "providerId",
@@ -17809,7 +17814,7 @@ async function handleClone(tool) {
17809
17814
  }
17810
17815
  ]);
17811
17816
  const provider = providers.find((p) => p.id === providerId);
17812
- const answers = await import_inquirer6.default.prompt([
17817
+ const answers = await import_inquirer7.default.prompt([
17813
17818
  {
17814
17819
  type: "input",
17815
17820
  name: "name",
@@ -17830,19 +17835,19 @@ async function handleClone(tool) {
17830
17835
  baseUrl: provider.baseUrl,
17831
17836
  apiKey: answers.apiKey
17832
17837
  });
17833
- console.log(import_chalk10.default.green("\n\u2705 \u514B\u9686\u6210\u529F\n"));
17834
- console.log(` ${import_chalk10.default.bold(newProvider.name)}`);
17835
- console.log(` ${import_chalk10.default.gray(newProvider.baseUrl)}`);
17838
+ console.log(import_chalk11.default.green("\n\u2705 \u514B\u9686\u6210\u529F\n"));
17839
+ console.log(` ${import_chalk11.default.bold(newProvider.name)}`);
17840
+ console.log(` ${import_chalk11.default.gray(newProvider.baseUrl)}`);
17836
17841
  console.log();
17837
17842
  }
17838
17843
  async function handleRemove(tool) {
17839
17844
  const manager = tool === "codex" ? createCodexManager() : createClaudeManager();
17840
17845
  const providers = manager.list();
17841
17846
  if (providers.length === 0) {
17842
- console.log(import_chalk10.default.yellow("\n\u26A0\uFE0F \u6682\u65E0\u670D\u52A1\u5546\n"));
17847
+ console.log(import_chalk11.default.yellow("\n\u26A0\uFE0F \u6682\u65E0\u670D\u52A1\u5546\n"));
17843
17848
  return;
17844
17849
  }
17845
- const { providerId } = await import_inquirer6.default.prompt([
17850
+ const { providerId } = await import_inquirer7.default.prompt([
17846
17851
  {
17847
17852
  type: "list",
17848
17853
  name: "providerId",
@@ -17854,7 +17859,7 @@ async function handleRemove(tool) {
17854
17859
  }
17855
17860
  ]);
17856
17861
  const provider = providers.find((p) => p.id === providerId);
17857
- const { confirm } = await import_inquirer6.default.prompt([
17862
+ const { confirm } = await import_inquirer7.default.prompt([
17858
17863
  {
17859
17864
  type: "confirm",
17860
17865
  name: "confirm",
@@ -17864,11 +17869,11 @@ async function handleRemove(tool) {
17864
17869
  ]);
17865
17870
  if (confirm) {
17866
17871
  manager.remove(providerId);
17867
- console.log(import_chalk10.default.green(`
17872
+ console.log(import_chalk11.default.green(`
17868
17873
  \u2705 \u5DF2\u5220\u9664: ${provider.name}
17869
17874
  `));
17870
17875
  } else {
17871
- console.log(import_chalk10.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
17876
+ console.log(import_chalk11.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
17872
17877
  }
17873
17878
  }
17874
17879
 
@@ -17877,8 +17882,8 @@ function addCommand(program2) {
17877
17882
  program2.command("add").description("\u6DFB\u52A0\u65B0\u7684 Codex \u670D\u52A1\u5546(\u4EA4\u4E92\u5F0F)").action(async () => {
17878
17883
  try {
17879
17884
  const manager = createCodexManager();
17880
- console.log(import_chalk11.default.bold("\n\u{1F4DD} \u6DFB\u52A0 Codex \u670D\u52A1\u5546\n"));
17881
- const { usePreset } = await import_inquirer7.default.prompt([
17885
+ console.log(import_chalk12.default.bold("\n\u{1F4DD} \u6DFB\u52A0 Codex \u670D\u52A1\u5546\n"));
17886
+ const { usePreset } = await import_inquirer8.default.prompt([
17882
17887
  {
17883
17888
  type: "list",
17884
17889
  name: "usePreset",
@@ -17893,7 +17898,7 @@ function addCommand(program2) {
17893
17898
  let baseUrl;
17894
17899
  let apiKey;
17895
17900
  if (usePreset) {
17896
- const { presetName } = await import_inquirer7.default.prompt([
17901
+ const { presetName } = await import_inquirer8.default.prompt([
17897
17902
  {
17898
17903
  type: "list",
17899
17904
  name: "presetName",
@@ -17905,7 +17910,7 @@ function addCommand(program2) {
17905
17910
  }
17906
17911
  ]);
17907
17912
  const preset = CODEX_PRESETS.find((p) => p.name === presetName);
17908
- console.log(import_chalk11.default.blue(`
17913
+ console.log(import_chalk12.default.blue(`
17909
17914
  \u4F7F\u7528\u9884\u8BBE: ${preset.name} - ${preset.description}
17910
17915
  `));
17911
17916
  const input = await promptProviderForm({
@@ -17917,7 +17922,7 @@ function addCommand(program2) {
17917
17922
  baseUrl = input.baseUrl;
17918
17923
  apiKey = input.apiKey;
17919
17924
  } else {
17920
- const answers = await import_inquirer7.default.prompt([
17925
+ const answers = await import_inquirer8.default.prompt([
17921
17926
  {
17922
17927
  type: "input",
17923
17928
  name: "name",
@@ -17956,12 +17961,12 @@ function addCommand(program2) {
17956
17961
  }
17957
17962
  const provider = manager.add({ name, baseUrl, apiKey });
17958
17963
  console.log();
17959
- console.log(import_chalk11.default.green("\u2705 \u6DFB\u52A0\u6210\u529F"));
17964
+ console.log(import_chalk12.default.green("\u2705 \u6DFB\u52A0\u6210\u529F"));
17960
17965
  console.log();
17961
- console.log(` ${import_chalk11.default.bold(provider.name)} ${import_chalk11.default.blue("[Codex]")}`);
17962
- console.log(` ${import_chalk11.default.gray(provider.baseUrl)}`);
17966
+ console.log(` ${import_chalk12.default.bold(provider.name)} ${import_chalk12.default.blue("[Codex]")}`);
17967
+ console.log(` ${import_chalk12.default.gray(provider.baseUrl)}`);
17963
17968
  console.log();
17964
- const { switchNow } = await import_inquirer7.default.prompt([
17969
+ const { switchNow } = await import_inquirer8.default.prompt([
17965
17970
  {
17966
17971
  type: "confirm",
17967
17972
  name: "switchNow",
@@ -17971,16 +17976,16 @@ function addCommand(program2) {
17971
17976
  ]);
17972
17977
  if (switchNow) {
17973
17978
  manager.switch(provider.id);
17974
- console.log(import_chalk11.default.green("\u2705 \u5DF2\u5207\u6362\u5230\u65B0\u670D\u52A1\u5546"));
17979
+ console.log(import_chalk12.default.green("\u2705 \u5DF2\u5207\u6362\u5230\u65B0\u670D\u52A1\u5546"));
17975
17980
  console.log();
17976
- console.log(import_chalk11.default.gray("\u914D\u7F6E\u5DF2\u66F4\u65B0:"));
17977
- console.log(import_chalk11.default.gray(` - ${getCodexConfigPath()}`));
17978
- console.log(import_chalk11.default.gray(` - ${getCodexAuthPath()}`));
17981
+ console.log(import_chalk12.default.gray("\u914D\u7F6E\u5DF2\u66F4\u65B0:"));
17982
+ console.log(import_chalk12.default.gray(` - ${getCodexConfigPath()}`));
17983
+ console.log(import_chalk12.default.gray(` - ${getCodexAuthPath()}`));
17979
17984
  } else {
17980
- console.log(import_chalk11.default.blue("\u{1F4A1} \u7A0D\u540E\u5207\u6362:") + import_chalk11.default.white(` ccman cx use "${provider.name}"`));
17985
+ console.log(import_chalk12.default.blue("\u{1F4A1} \u7A0D\u540E\u5207\u6362:") + import_chalk12.default.white(` ccman cx use "${provider.name}"`));
17981
17986
  }
17982
17987
  } catch (error) {
17983
- console.error(import_chalk11.default.red(`
17988
+ console.error(import_chalk12.default.red(`
17984
17989
  \u274C ${error.message}
17985
17990
  `));
17986
17991
  process.exit(1);
@@ -17989,7 +17994,7 @@ function addCommand(program2) {
17989
17994
  }
17990
17995
 
17991
17996
  // src/commands/codex/list.ts
17992
- var import_chalk12 = __toESM(require("chalk"));
17997
+ var import_chalk13 = __toESM(require("chalk"));
17993
17998
  init_dist4();
17994
17999
  function listCommand(program2) {
17995
18000
  program2.command("list").alias("ls").description("\u5217\u51FA\u6240\u6709 Codex \u670D\u52A1\u5546").action(async () => {
@@ -17998,15 +18003,15 @@ function listCommand(program2) {
17998
18003
  const providers = manager.list();
17999
18004
  const current = manager.getCurrent();
18000
18005
  if (providers.length === 0) {
18001
- console.log(import_chalk12.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18002
- console.log(import_chalk12.default.blue("\u{1F4A1} \u6DFB\u52A0\u670D\u52A1\u5546:") + import_chalk12.default.white(" ccman cx add\n"));
18006
+ console.log(import_chalk13.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18007
+ console.log(import_chalk13.default.blue("\u{1F4A1} \u6DFB\u52A0\u670D\u52A1\u5546:") + import_chalk13.default.white(" ccman cx add\n"));
18003
18008
  return;
18004
18009
  }
18005
- console.log(import_chalk12.default.bold(`
18010
+ console.log(import_chalk13.default.bold(`
18006
18011
  \u{1F4CB} Codex \u670D\u52A1\u5546 (${providers.length} \u4E2A)`));
18007
18012
  console.log(formatProviderTable(providers, current?.id, "Codex"));
18008
18013
  } catch (error) {
18009
- console.error(import_chalk12.default.red(`
18014
+ console.error(import_chalk13.default.red(`
18010
18015
  \u274C ${error.message}
18011
18016
  `));
18012
18017
  process.exit(1);
@@ -18015,8 +18020,8 @@ function listCommand(program2) {
18015
18020
  }
18016
18021
 
18017
18022
  // src/commands/codex/use.ts
18018
- var import_chalk13 = __toESM(require("chalk"));
18019
- var import_inquirer8 = __toESM(require("inquirer"));
18023
+ var import_chalk14 = __toESM(require("chalk"));
18024
+ var import_inquirer9 = __toESM(require("inquirer"));
18020
18025
  init_dist4();
18021
18026
  function useCommand(program2) {
18022
18027
  program2.command("use [name]").description("\u5207\u6362 Codex \u670D\u52A1\u5546").action(async (name) => {
@@ -18024,8 +18029,8 @@ function useCommand(program2) {
18024
18029
  const manager = createCodexManager();
18025
18030
  const providers = manager.list();
18026
18031
  if (providers.length === 0) {
18027
- console.log(import_chalk13.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18028
- console.log(import_chalk13.default.blue("\u{1F4A1} \u6DFB\u52A0\u670D\u52A1\u5546:") + import_chalk13.default.white(" ccman cx add\n"));
18032
+ console.log(import_chalk14.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18033
+ console.log(import_chalk14.default.blue("\u{1F4A1} \u6DFB\u52A0\u670D\u52A1\u5546:") + import_chalk14.default.white(" ccman cx add\n"));
18029
18034
  return;
18030
18035
  }
18031
18036
  let targetId;
@@ -18036,7 +18041,7 @@ function useCommand(program2) {
18036
18041
  }
18037
18042
  targetId = provider2.id;
18038
18043
  } else {
18039
- const { selectedId } = await import_inquirer8.default.prompt([
18044
+ const { selectedId } = await import_inquirer9.default.prompt([
18040
18045
  {
18041
18046
  type: "list",
18042
18047
  name: "selectedId",
@@ -18052,23 +18057,23 @@ function useCommand(program2) {
18052
18057
  manager.switch(targetId);
18053
18058
  const provider = manager.get(targetId);
18054
18059
  console.log();
18055
- console.log(import_chalk13.default.green("\u2705 \u5207\u6362\u6210\u529F"));
18060
+ console.log(import_chalk14.default.green("\u2705 \u5207\u6362\u6210\u529F"));
18056
18061
  console.log();
18057
- console.log(` ${import_chalk13.default.bold(provider.name)} ${import_chalk13.default.blue("[Codex]")}`);
18058
- console.log(` ${import_chalk13.default.gray(`URL: ${provider.baseUrl}`)}`);
18062
+ console.log(` ${import_chalk14.default.bold(provider.name)} ${import_chalk14.default.blue("[Codex]")}`);
18063
+ console.log(` ${import_chalk14.default.gray(`URL: ${provider.baseUrl}`)}`);
18059
18064
  console.log();
18060
- console.log(import_chalk13.default.gray("\u914D\u7F6E\u5DF2\u66F4\u65B0:"));
18061
- console.log(import_chalk13.default.gray(` - ${getCodexConfigPath()}`));
18062
- console.log(import_chalk13.default.gray(` - ${getCodexAuthPath()}`));
18065
+ console.log(import_chalk14.default.gray("\u914D\u7F6E\u5DF2\u66F4\u65B0:"));
18066
+ console.log(import_chalk14.default.gray(` - ${getCodexConfigPath()}`));
18067
+ console.log(import_chalk14.default.gray(` - ${getCodexAuthPath()}`));
18063
18068
  console.log();
18064
18069
  } catch (error) {
18065
18070
  if (error instanceof ProviderNotFoundError) {
18066
- console.error(import_chalk13.default.red(`
18071
+ console.error(import_chalk14.default.red(`
18067
18072
  \u274C \u670D\u52A1\u5546\u4E0D\u5B58\u5728: ${error.message}
18068
18073
  `));
18069
- console.log(import_chalk13.default.blue("\u{1F4A1} \u67E5\u770B\u6240\u6709\u670D\u52A1\u5546:") + import_chalk13.default.white(" ccman cx list\n"));
18074
+ console.log(import_chalk14.default.blue("\u{1F4A1} \u67E5\u770B\u6240\u6709\u670D\u52A1\u5546:") + import_chalk14.default.white(" ccman cx list\n"));
18070
18075
  } else {
18071
- console.error(import_chalk13.default.red(`
18076
+ console.error(import_chalk14.default.red(`
18072
18077
  \u274C ${error.message}
18073
18078
  `));
18074
18079
  }
@@ -18078,7 +18083,7 @@ function useCommand(program2) {
18078
18083
  }
18079
18084
 
18080
18085
  // src/commands/codex/current.ts
18081
- var import_chalk14 = __toESM(require("chalk"));
18086
+ var import_chalk15 = __toESM(require("chalk"));
18082
18087
  init_dist4();
18083
18088
  function currentCommand(program2) {
18084
18089
  program2.command("current").description("\u663E\u793A\u5F53\u524D\u4F7F\u7528\u7684 Codex \u670D\u52A1\u5546").action(async () => {
@@ -18086,21 +18091,21 @@ function currentCommand(program2) {
18086
18091
  const manager = createCodexManager();
18087
18092
  const current = manager.getCurrent();
18088
18093
  if (!current) {
18089
- console.log(import_chalk14.default.yellow("\n\u26A0\uFE0F \u672A\u9009\u62E9\u4EFB\u4F55 Codex \u670D\u52A1\u5546\n"));
18090
- console.log(import_chalk14.default.blue("\u{1F4A1} \u9009\u62E9\u670D\u52A1\u5546:") + import_chalk14.default.white(" ccman cx use\n"));
18094
+ console.log(import_chalk15.default.yellow("\n\u26A0\uFE0F \u672A\u9009\u62E9\u4EFB\u4F55 Codex \u670D\u52A1\u5546\n"));
18095
+ console.log(import_chalk15.default.blue("\u{1F4A1} \u9009\u62E9\u670D\u52A1\u5546:") + import_chalk15.default.white(" ccman cx use\n"));
18091
18096
  return;
18092
18097
  }
18093
- console.log(import_chalk14.default.bold("\n\u{1F4CD} \u5F53\u524D Codex \u670D\u52A1\u5546\n"));
18094
- console.log(` ${import_chalk14.default.green.bold(current.name)}`);
18095
- console.log(` ${import_chalk14.default.gray(`ID: ${current.id}`)}`);
18096
- console.log(` ${import_chalk14.default.gray(`URL: ${current.baseUrl}`)}`);
18098
+ console.log(import_chalk15.default.bold("\n\u{1F4CD} \u5F53\u524D Codex \u670D\u52A1\u5546\n"));
18099
+ console.log(` ${import_chalk15.default.green.bold(current.name)}`);
18100
+ console.log(` ${import_chalk15.default.gray(`ID: ${current.id}`)}`);
18101
+ console.log(` ${import_chalk15.default.gray(`URL: ${current.baseUrl}`)}`);
18097
18102
  if (current.lastUsedAt) {
18098
18103
  const date = new Date(current.lastUsedAt).toLocaleString("zh-CN");
18099
- console.log(` ${import_chalk14.default.gray(`\u6700\u540E\u4F7F\u7528: ${date}`)}`);
18104
+ console.log(` ${import_chalk15.default.gray(`\u6700\u540E\u4F7F\u7528: ${date}`)}`);
18100
18105
  }
18101
18106
  console.log();
18102
18107
  } catch (error) {
18103
- console.error(import_chalk14.default.red(`
18108
+ console.error(import_chalk15.default.red(`
18104
18109
  \u274C ${error.message}
18105
18110
  `));
18106
18111
  process.exit(1);
@@ -18109,8 +18114,8 @@ function currentCommand(program2) {
18109
18114
  }
18110
18115
 
18111
18116
  // src/commands/codex/remove.ts
18112
- var import_chalk15 = __toESM(require("chalk"));
18113
- var import_inquirer9 = __toESM(require("inquirer"));
18117
+ var import_chalk16 = __toESM(require("chalk"));
18118
+ var import_inquirer10 = __toESM(require("inquirer"));
18114
18119
  init_dist4();
18115
18120
  function removeCommand(program2) {
18116
18121
  program2.command("remove [name]").alias("rm").description("\u5220\u9664 Codex \u670D\u52A1\u5546").action(async (name) => {
@@ -18118,7 +18123,7 @@ function removeCommand(program2) {
18118
18123
  const manager = createCodexManager();
18119
18124
  const providers = manager.list();
18120
18125
  if (providers.length === 0) {
18121
- console.log(import_chalk15.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18126
+ console.log(import_chalk16.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18122
18127
  return;
18123
18128
  }
18124
18129
  let targetId;
@@ -18131,7 +18136,7 @@ function removeCommand(program2) {
18131
18136
  targetId = provider.id;
18132
18137
  targetName = provider.name;
18133
18138
  } else {
18134
- const { selectedId } = await import_inquirer9.default.prompt([
18139
+ const { selectedId } = await import_inquirer10.default.prompt([
18135
18140
  {
18136
18141
  type: "list",
18137
18142
  name: "selectedId",
@@ -18146,7 +18151,7 @@ function removeCommand(program2) {
18146
18151
  targetId = selectedId;
18147
18152
  targetName = provider.name;
18148
18153
  }
18149
- const { confirmed } = await import_inquirer9.default.prompt([
18154
+ const { confirmed } = await import_inquirer10.default.prompt([
18150
18155
  {
18151
18156
  type: "confirm",
18152
18157
  name: "confirmed",
@@ -18155,21 +18160,21 @@ function removeCommand(program2) {
18155
18160
  }
18156
18161
  ]);
18157
18162
  if (!confirmed) {
18158
- console.log(import_chalk15.default.gray("\n\u5DF2\u53D6\u6D88\n"));
18163
+ console.log(import_chalk16.default.gray("\n\u5DF2\u53D6\u6D88\n"));
18159
18164
  return;
18160
18165
  }
18161
18166
  manager.remove(targetId);
18162
18167
  console.log();
18163
- console.log(import_chalk15.default.green(`\u2705 \u5DF2\u5220\u9664: ${targetName}`));
18168
+ console.log(import_chalk16.default.green(`\u2705 \u5DF2\u5220\u9664: ${targetName}`));
18164
18169
  console.log();
18165
18170
  } catch (error) {
18166
18171
  if (error instanceof ProviderNotFoundError) {
18167
- console.error(import_chalk15.default.red(`
18172
+ console.error(import_chalk16.default.red(`
18168
18173
  \u274C \u670D\u52A1\u5546\u4E0D\u5B58\u5728
18169
18174
  `));
18170
- console.log(import_chalk15.default.blue("\u{1F4A1} \u67E5\u770B\u6240\u6709\u670D\u52A1\u5546:") + import_chalk15.default.white(" ccman cx list\n"));
18175
+ console.log(import_chalk16.default.blue("\u{1F4A1} \u67E5\u770B\u6240\u6709\u670D\u52A1\u5546:") + import_chalk16.default.white(" ccman cx list\n"));
18171
18176
  } else {
18172
- console.error(import_chalk15.default.red(`
18177
+ console.error(import_chalk16.default.red(`
18173
18178
  \u274C ${error.message}
18174
18179
  `));
18175
18180
  }
@@ -18179,8 +18184,8 @@ function removeCommand(program2) {
18179
18184
  }
18180
18185
 
18181
18186
  // src/commands/codex/edit.ts
18182
- var import_chalk16 = __toESM(require("chalk"));
18183
- var import_inquirer10 = __toESM(require("inquirer"));
18187
+ var import_chalk17 = __toESM(require("chalk"));
18188
+ var import_inquirer11 = __toESM(require("inquirer"));
18184
18189
  init_dist4();
18185
18190
  function editCommand(program2) {
18186
18191
  program2.command("edit [name]").description("\u7F16\u8F91 Codex \u670D\u52A1\u5546").action(async (name) => {
@@ -18188,7 +18193,7 @@ function editCommand(program2) {
18188
18193
  const manager = createCodexManager();
18189
18194
  const providers = manager.list();
18190
18195
  if (providers.length === 0) {
18191
- console.log(import_chalk16.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18196
+ console.log(import_chalk17.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18192
18197
  return;
18193
18198
  }
18194
18199
  let targetId;
@@ -18199,7 +18204,7 @@ function editCommand(program2) {
18199
18204
  }
18200
18205
  targetId = provider2.id;
18201
18206
  } else {
18202
- const { selectedId } = await import_inquirer10.default.prompt([
18207
+ const { selectedId } = await import_inquirer11.default.prompt([
18203
18208
  {
18204
18209
  type: "list",
18205
18210
  name: "selectedId",
@@ -18213,9 +18218,9 @@ function editCommand(program2) {
18213
18218
  targetId = selectedId;
18214
18219
  }
18215
18220
  const provider = manager.get(targetId);
18216
- console.log(import_chalk16.default.bold("\n\u270F\uFE0F \u7F16\u8F91\u670D\u52A1\u5546\n"));
18217
- console.log(import_chalk16.default.gray("\u63D0\u793A: \u7559\u7A7A\u5219\u4FDD\u6301\u539F\u503C\n"));
18218
- const answers = await import_inquirer10.default.prompt([
18221
+ console.log(import_chalk17.default.bold("\n\u270F\uFE0F \u7F16\u8F91\u670D\u52A1\u5546\n"));
18222
+ console.log(import_chalk17.default.gray("\u63D0\u793A: \u7559\u7A7A\u5219\u4FDD\u6301\u539F\u503C\n"));
18223
+ const answers = await import_inquirer11.default.prompt([
18219
18224
  {
18220
18225
  type: "input",
18221
18226
  name: "name",
@@ -18246,19 +18251,19 @@ function editCommand(program2) {
18246
18251
  if (answers.baseUrl && answers.baseUrl !== provider.baseUrl) updates.baseUrl = answers.baseUrl;
18247
18252
  if (answers.apiKey) updates.apiKey = answers.apiKey;
18248
18253
  if (Object.keys(updates).length === 0) {
18249
- console.log(import_chalk16.default.gray("\n\u672A\u505A\u4EFB\u4F55\u4FEE\u6539\n"));
18254
+ console.log(import_chalk17.default.gray("\n\u672A\u505A\u4EFB\u4F55\u4FEE\u6539\n"));
18250
18255
  return;
18251
18256
  }
18252
18257
  const updated = manager.edit(targetId, updates);
18253
18258
  console.log();
18254
- console.log(import_chalk16.default.green("\u2705 \u7F16\u8F91\u6210\u529F"));
18259
+ console.log(import_chalk17.default.green("\u2705 \u7F16\u8F91\u6210\u529F"));
18255
18260
  console.log();
18256
- console.log(` ${import_chalk16.default.bold(updated.name)} ${import_chalk16.default.blue("[Codex]")}`);
18257
- console.log(` ${import_chalk16.default.gray(`ID: ${updated.id}`)}`);
18258
- console.log(` ${import_chalk16.default.gray(`URL: ${updated.baseUrl}`)}`);
18261
+ console.log(` ${import_chalk17.default.bold(updated.name)} ${import_chalk17.default.blue("[Codex]")}`);
18262
+ console.log(` ${import_chalk17.default.gray(`ID: ${updated.id}`)}`);
18263
+ console.log(` ${import_chalk17.default.gray(`URL: ${updated.baseUrl}`)}`);
18259
18264
  console.log();
18260
18265
  } catch (error) {
18261
- console.error(import_chalk16.default.red(`
18266
+ console.error(import_chalk17.default.red(`
18262
18267
  \u274C ${error.message}
18263
18268
  `));
18264
18269
  process.exit(1);
@@ -18267,8 +18272,8 @@ function editCommand(program2) {
18267
18272
  }
18268
18273
 
18269
18274
  // src/commands/codex/clone.ts
18270
- var import_chalk17 = __toESM(require("chalk"));
18271
- var import_inquirer11 = __toESM(require("inquirer"));
18275
+ var import_chalk18 = __toESM(require("chalk"));
18276
+ var import_inquirer12 = __toESM(require("inquirer"));
18272
18277
  init_dist4();
18273
18278
  function cloneCommand(program2) {
18274
18279
  program2.command("clone [source-name] [new-name]").description("\u514B\u9686 Codex \u670D\u52A1\u5546").action(async (sourceName, newName) => {
@@ -18276,7 +18281,7 @@ function cloneCommand(program2) {
18276
18281
  const manager = createCodexManager();
18277
18282
  const providers = manager.list();
18278
18283
  if (providers.length === 0) {
18279
- console.log(import_chalk17.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18284
+ console.log(import_chalk18.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Codex \u670D\u52A1\u5546\n"));
18280
18285
  return;
18281
18286
  }
18282
18287
  let sourceId;
@@ -18287,7 +18292,7 @@ function cloneCommand(program2) {
18287
18292
  }
18288
18293
  sourceId = provider.id;
18289
18294
  } else {
18290
- const { selectedId } = await import_inquirer11.default.prompt([
18295
+ const { selectedId } = await import_inquirer12.default.prompt([
18291
18296
  {
18292
18297
  type: "list",
18293
18298
  name: "selectedId",
@@ -18305,7 +18310,7 @@ function cloneCommand(program2) {
18305
18310
  if (newName) {
18306
18311
  cloned = manager.clone(sourceId, newName);
18307
18312
  } else {
18308
- console.log(import_chalk17.default.blue(`
18313
+ console.log(import_chalk18.default.blue(`
18309
18314
  \u514B\u9686\u81EA: ${source.name}
18310
18315
  `));
18311
18316
  const input = await promptProviderForm({
@@ -18316,14 +18321,14 @@ function cloneCommand(program2) {
18316
18321
  cloned = manager.add(input);
18317
18322
  }
18318
18323
  console.log();
18319
- console.log(import_chalk17.default.green("\u2705 \u514B\u9686\u6210\u529F"));
18324
+ console.log(import_chalk18.default.green("\u2705 \u514B\u9686\u6210\u529F"));
18320
18325
  console.log();
18321
- console.log(` ${import_chalk17.default.bold(cloned.name)} ${import_chalk17.default.blue("[Codex]")}`);
18322
- console.log(` ${import_chalk17.default.gray(`ID: ${cloned.id}`)}`);
18323
- console.log(` ${import_chalk17.default.gray(`URL: ${cloned.baseUrl}`)}`);
18326
+ console.log(` ${import_chalk18.default.bold(cloned.name)} ${import_chalk18.default.blue("[Codex]")}`);
18327
+ console.log(` ${import_chalk18.default.gray(`ID: ${cloned.id}`)}`);
18328
+ console.log(` ${import_chalk18.default.gray(`URL: ${cloned.baseUrl}`)}`);
18324
18329
  console.log();
18325
18330
  } catch (error) {
18326
- console.error(import_chalk17.default.red(`
18331
+ console.error(import_chalk18.default.red(`
18327
18332
  \u274C ${error.message}
18328
18333
  `));
18329
18334
  process.exit(1);
@@ -18343,15 +18348,15 @@ function createCodexCommands(program2) {
18343
18348
  }
18344
18349
 
18345
18350
  // src/commands/claude/add.ts
18346
- var import_chalk18 = __toESM(require("chalk"));
18347
- var import_inquirer12 = __toESM(require("inquirer"));
18351
+ var import_chalk19 = __toESM(require("chalk"));
18352
+ var import_inquirer13 = __toESM(require("inquirer"));
18348
18353
  init_dist4();
18349
18354
  function addCommand2(program2) {
18350
18355
  program2.command("add").description("\u6DFB\u52A0\u65B0\u7684 Claude Code \u670D\u52A1\u5546(\u4EA4\u4E92\u5F0F)").action(async () => {
18351
18356
  try {
18352
18357
  const manager = createClaudeManager();
18353
- console.log(import_chalk18.default.bold("\n\u{1F4DD} \u6DFB\u52A0 Claude Code \u670D\u52A1\u5546\n"));
18354
- const { usePreset } = await import_inquirer12.default.prompt([
18358
+ console.log(import_chalk19.default.bold("\n\u{1F4DD} \u6DFB\u52A0 Claude Code \u670D\u52A1\u5546\n"));
18359
+ const { usePreset } = await import_inquirer13.default.prompt([
18355
18360
  {
18356
18361
  type: "list",
18357
18362
  name: "usePreset",
@@ -18366,7 +18371,7 @@ function addCommand2(program2) {
18366
18371
  let baseUrl;
18367
18372
  let apiKey;
18368
18373
  if (usePreset) {
18369
- const { presetName } = await import_inquirer12.default.prompt([
18374
+ const { presetName } = await import_inquirer13.default.prompt([
18370
18375
  {
18371
18376
  type: "list",
18372
18377
  name: "presetName",
@@ -18378,7 +18383,7 @@ function addCommand2(program2) {
18378
18383
  }
18379
18384
  ]);
18380
18385
  const preset = CC_PRESETS.find((p) => p.name === presetName);
18381
- console.log(import_chalk18.default.blue(`
18386
+ console.log(import_chalk19.default.blue(`
18382
18387
  \u4F7F\u7528\u9884\u8BBE: ${preset.name} - ${preset.description}
18383
18388
  `));
18384
18389
  const input = await promptProviderForm({
@@ -18390,7 +18395,7 @@ function addCommand2(program2) {
18390
18395
  baseUrl = input.baseUrl;
18391
18396
  apiKey = input.apiKey;
18392
18397
  } else {
18393
- const answers = await import_inquirer12.default.prompt([
18398
+ const answers = await import_inquirer13.default.prompt([
18394
18399
  {
18395
18400
  type: "input",
18396
18401
  name: "name",
@@ -18429,12 +18434,12 @@ function addCommand2(program2) {
18429
18434
  }
18430
18435
  const provider = manager.add({ name, baseUrl, apiKey });
18431
18436
  console.log();
18432
- console.log(import_chalk18.default.green("\u2705 \u6DFB\u52A0\u6210\u529F"));
18437
+ console.log(import_chalk19.default.green("\u2705 \u6DFB\u52A0\u6210\u529F"));
18433
18438
  console.log();
18434
- console.log(` ${import_chalk18.default.bold(provider.name)} ${import_chalk18.default.blue("[Claude Code]")}`);
18435
- console.log(` ${import_chalk18.default.gray(provider.baseUrl)}`);
18439
+ console.log(` ${import_chalk19.default.bold(provider.name)} ${import_chalk19.default.blue("[Claude Code]")}`);
18440
+ console.log(` ${import_chalk19.default.gray(provider.baseUrl)}`);
18436
18441
  console.log();
18437
- const { switchNow } = await import_inquirer12.default.prompt([
18442
+ const { switchNow } = await import_inquirer13.default.prompt([
18438
18443
  {
18439
18444
  type: "confirm",
18440
18445
  name: "switchNow",
@@ -18444,15 +18449,15 @@ function addCommand2(program2) {
18444
18449
  ]);
18445
18450
  if (switchNow) {
18446
18451
  manager.switch(provider.id);
18447
- console.log(import_chalk18.default.green("\u2705 \u5DF2\u5207\u6362\u5230\u65B0\u670D\u52A1\u5546"));
18452
+ console.log(import_chalk19.default.green("\u2705 \u5DF2\u5207\u6362\u5230\u65B0\u670D\u52A1\u5546"));
18448
18453
  console.log();
18449
- console.log(import_chalk18.default.gray("\u914D\u7F6E\u5DF2\u66F4\u65B0:"));
18450
- console.log(import_chalk18.default.gray(` - ${getClaudeConfigPath()}`));
18454
+ console.log(import_chalk19.default.gray("\u914D\u7F6E\u5DF2\u66F4\u65B0:"));
18455
+ console.log(import_chalk19.default.gray(` - ${getClaudeConfigPath()}`));
18451
18456
  } else {
18452
- console.log(import_chalk18.default.blue("\u{1F4A1} \u7A0D\u540E\u5207\u6362:") + import_chalk18.default.white(` ccman cc use "${provider.name}"`));
18457
+ console.log(import_chalk19.default.blue("\u{1F4A1} \u7A0D\u540E\u5207\u6362:") + import_chalk19.default.white(` ccman cc use "${provider.name}"`));
18453
18458
  }
18454
18459
  } catch (error) {
18455
- console.error(import_chalk18.default.red(`
18460
+ console.error(import_chalk19.default.red(`
18456
18461
  \u274C ${error.message}
18457
18462
  `));
18458
18463
  process.exit(1);
@@ -18461,7 +18466,7 @@ function addCommand2(program2) {
18461
18466
  }
18462
18467
 
18463
18468
  // src/commands/claude/list.ts
18464
- var import_chalk19 = __toESM(require("chalk"));
18469
+ var import_chalk20 = __toESM(require("chalk"));
18465
18470
  init_dist4();
18466
18471
  function listCommand2(program2) {
18467
18472
  program2.command("list").alias("ls").description("\u5217\u51FA\u6240\u6709 Claude Code \u670D\u52A1\u5546").action(async () => {
@@ -18470,15 +18475,15 @@ function listCommand2(program2) {
18470
18475
  const providers = manager.list();
18471
18476
  const current = manager.getCurrent();
18472
18477
  if (providers.length === 0) {
18473
- console.log(import_chalk19.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18474
- console.log(import_chalk19.default.blue("\u{1F4A1} \u6DFB\u52A0\u670D\u52A1\u5546:") + import_chalk19.default.white(" ccman cc add\n"));
18478
+ console.log(import_chalk20.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18479
+ console.log(import_chalk20.default.blue("\u{1F4A1} \u6DFB\u52A0\u670D\u52A1\u5546:") + import_chalk20.default.white(" ccman cc add\n"));
18475
18480
  return;
18476
18481
  }
18477
- console.log(import_chalk19.default.bold(`
18482
+ console.log(import_chalk20.default.bold(`
18478
18483
  \u{1F4CB} Claude Code \u670D\u52A1\u5546 (${providers.length} \u4E2A)`));
18479
18484
  console.log(formatProviderTable(providers, current?.id, "Claude Code"));
18480
18485
  } catch (error) {
18481
- console.error(import_chalk19.default.red(`
18486
+ console.error(import_chalk20.default.red(`
18482
18487
  \u274C ${error.message}
18483
18488
  `));
18484
18489
  process.exit(1);
@@ -18487,8 +18492,8 @@ function listCommand2(program2) {
18487
18492
  }
18488
18493
 
18489
18494
  // src/commands/claude/use.ts
18490
- var import_chalk20 = __toESM(require("chalk"));
18491
- var import_inquirer13 = __toESM(require("inquirer"));
18495
+ var import_chalk21 = __toESM(require("chalk"));
18496
+ var import_inquirer14 = __toESM(require("inquirer"));
18492
18497
  init_dist4();
18493
18498
  function useCommand2(program2) {
18494
18499
  program2.command("use [name]").description("\u5207\u6362 Claude Code \u670D\u52A1\u5546").action(async (name) => {
@@ -18496,8 +18501,8 @@ function useCommand2(program2) {
18496
18501
  const manager = createClaudeManager();
18497
18502
  const providers = manager.list();
18498
18503
  if (providers.length === 0) {
18499
- console.log(import_chalk20.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18500
- console.log(import_chalk20.default.blue("\u{1F4A1} \u6DFB\u52A0\u670D\u52A1\u5546:") + import_chalk20.default.white(" ccman cc add\n"));
18504
+ console.log(import_chalk21.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18505
+ console.log(import_chalk21.default.blue("\u{1F4A1} \u6DFB\u52A0\u670D\u52A1\u5546:") + import_chalk21.default.white(" ccman cc add\n"));
18501
18506
  return;
18502
18507
  }
18503
18508
  let targetId;
@@ -18508,7 +18513,7 @@ function useCommand2(program2) {
18508
18513
  }
18509
18514
  targetId = provider2.id;
18510
18515
  } else {
18511
- const { selectedId } = await import_inquirer13.default.prompt([
18516
+ const { selectedId } = await import_inquirer14.default.prompt([
18512
18517
  {
18513
18518
  type: "list",
18514
18519
  name: "selectedId",
@@ -18524,22 +18529,22 @@ function useCommand2(program2) {
18524
18529
  manager.switch(targetId);
18525
18530
  const provider = manager.get(targetId);
18526
18531
  console.log();
18527
- console.log(import_chalk20.default.green("\u2705 \u5207\u6362\u6210\u529F"));
18532
+ console.log(import_chalk21.default.green("\u2705 \u5207\u6362\u6210\u529F"));
18528
18533
  console.log();
18529
- console.log(` ${import_chalk20.default.bold(provider.name)} ${import_chalk20.default.blue("[Claude Code]")}`);
18530
- console.log(` ${import_chalk20.default.gray(`URL: ${provider.baseUrl}`)}`);
18534
+ console.log(` ${import_chalk21.default.bold(provider.name)} ${import_chalk21.default.blue("[Claude Code]")}`);
18535
+ console.log(` ${import_chalk21.default.gray(`URL: ${provider.baseUrl}`)}`);
18531
18536
  console.log();
18532
- console.log(import_chalk20.default.gray("\u914D\u7F6E\u5DF2\u66F4\u65B0:"));
18533
- console.log(import_chalk20.default.gray(` - ${getClaudeConfigPath()}`));
18537
+ console.log(import_chalk21.default.gray("\u914D\u7F6E\u5DF2\u66F4\u65B0:"));
18538
+ console.log(import_chalk21.default.gray(` - ${getClaudeConfigPath()}`));
18534
18539
  console.log();
18535
18540
  } catch (error) {
18536
18541
  if (error instanceof ProviderNotFoundError) {
18537
- console.error(import_chalk20.default.red(`
18542
+ console.error(import_chalk21.default.red(`
18538
18543
  \u274C \u670D\u52A1\u5546\u4E0D\u5B58\u5728: ${error.message}
18539
18544
  `));
18540
- console.log(import_chalk20.default.blue("\u{1F4A1} \u67E5\u770B\u6240\u6709\u670D\u52A1\u5546:") + import_chalk20.default.white(" ccman cc list\n"));
18545
+ console.log(import_chalk21.default.blue("\u{1F4A1} \u67E5\u770B\u6240\u6709\u670D\u52A1\u5546:") + import_chalk21.default.white(" ccman cc list\n"));
18541
18546
  } else {
18542
- console.error(import_chalk20.default.red(`
18547
+ console.error(import_chalk21.default.red(`
18543
18548
  \u274C ${error.message}
18544
18549
  `));
18545
18550
  }
@@ -18549,7 +18554,7 @@ function useCommand2(program2) {
18549
18554
  }
18550
18555
 
18551
18556
  // src/commands/claude/current.ts
18552
- var import_chalk21 = __toESM(require("chalk"));
18557
+ var import_chalk22 = __toESM(require("chalk"));
18553
18558
  init_dist4();
18554
18559
  function currentCommand2(program2) {
18555
18560
  program2.command("current").description("\u663E\u793A\u5F53\u524D\u4F7F\u7528\u7684 Claude Code \u670D\u52A1\u5546").action(async () => {
@@ -18557,21 +18562,21 @@ function currentCommand2(program2) {
18557
18562
  const manager = createClaudeManager();
18558
18563
  const current = manager.getCurrent();
18559
18564
  if (!current) {
18560
- console.log(import_chalk21.default.yellow("\n\u26A0\uFE0F \u672A\u9009\u62E9\u4EFB\u4F55 Claude Code \u670D\u52A1\u5546\n"));
18561
- console.log(import_chalk21.default.blue("\u{1F4A1} \u9009\u62E9\u670D\u52A1\u5546:") + import_chalk21.default.white(" ccman cc use\n"));
18565
+ console.log(import_chalk22.default.yellow("\n\u26A0\uFE0F \u672A\u9009\u62E9\u4EFB\u4F55 Claude Code \u670D\u52A1\u5546\n"));
18566
+ console.log(import_chalk22.default.blue("\u{1F4A1} \u9009\u62E9\u670D\u52A1\u5546:") + import_chalk22.default.white(" ccman cc use\n"));
18562
18567
  return;
18563
18568
  }
18564
- console.log(import_chalk21.default.bold("\n\u{1F4CD} \u5F53\u524D Claude Code \u670D\u52A1\u5546\n"));
18565
- console.log(` ${import_chalk21.default.green.bold(current.name)}`);
18566
- console.log(` ${import_chalk21.default.gray(`ID: ${current.id}`)}`);
18567
- console.log(` ${import_chalk21.default.gray(`URL: ${current.baseUrl}`)}`);
18569
+ console.log(import_chalk22.default.bold("\n\u{1F4CD} \u5F53\u524D Claude Code \u670D\u52A1\u5546\n"));
18570
+ console.log(` ${import_chalk22.default.green.bold(current.name)}`);
18571
+ console.log(` ${import_chalk22.default.gray(`ID: ${current.id}`)}`);
18572
+ console.log(` ${import_chalk22.default.gray(`URL: ${current.baseUrl}`)}`);
18568
18573
  if (current.lastUsedAt) {
18569
18574
  const date = new Date(current.lastUsedAt).toLocaleString("zh-CN");
18570
- console.log(` ${import_chalk21.default.gray(`\u6700\u540E\u4F7F\u7528: ${date}`)}`);
18575
+ console.log(` ${import_chalk22.default.gray(`\u6700\u540E\u4F7F\u7528: ${date}`)}`);
18571
18576
  }
18572
18577
  console.log();
18573
18578
  } catch (error) {
18574
- console.error(import_chalk21.default.red(`
18579
+ console.error(import_chalk22.default.red(`
18575
18580
  \u274C ${error.message}
18576
18581
  `));
18577
18582
  process.exit(1);
@@ -18580,8 +18585,8 @@ function currentCommand2(program2) {
18580
18585
  }
18581
18586
 
18582
18587
  // src/commands/claude/remove.ts
18583
- var import_chalk22 = __toESM(require("chalk"));
18584
- var import_inquirer14 = __toESM(require("inquirer"));
18588
+ var import_chalk23 = __toESM(require("chalk"));
18589
+ var import_inquirer15 = __toESM(require("inquirer"));
18585
18590
  init_dist4();
18586
18591
  function removeCommand2(program2) {
18587
18592
  program2.command("remove [name]").alias("rm").description("\u5220\u9664 Claude Code \u670D\u52A1\u5546").action(async (name) => {
@@ -18589,7 +18594,7 @@ function removeCommand2(program2) {
18589
18594
  const manager = createClaudeManager();
18590
18595
  const providers = manager.list();
18591
18596
  if (providers.length === 0) {
18592
- console.log(import_chalk22.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18597
+ console.log(import_chalk23.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18593
18598
  return;
18594
18599
  }
18595
18600
  let targetId;
@@ -18602,7 +18607,7 @@ function removeCommand2(program2) {
18602
18607
  targetId = provider.id;
18603
18608
  targetName = provider.name;
18604
18609
  } else {
18605
- const { selectedId } = await import_inquirer14.default.prompt([
18610
+ const { selectedId } = await import_inquirer15.default.prompt([
18606
18611
  {
18607
18612
  type: "list",
18608
18613
  name: "selectedId",
@@ -18617,7 +18622,7 @@ function removeCommand2(program2) {
18617
18622
  targetId = selectedId;
18618
18623
  targetName = provider.name;
18619
18624
  }
18620
- const { confirmed } = await import_inquirer14.default.prompt([
18625
+ const { confirmed } = await import_inquirer15.default.prompt([
18621
18626
  {
18622
18627
  type: "confirm",
18623
18628
  name: "confirmed",
@@ -18626,21 +18631,21 @@ function removeCommand2(program2) {
18626
18631
  }
18627
18632
  ]);
18628
18633
  if (!confirmed) {
18629
- console.log(import_chalk22.default.gray("\n\u5DF2\u53D6\u6D88\n"));
18634
+ console.log(import_chalk23.default.gray("\n\u5DF2\u53D6\u6D88\n"));
18630
18635
  return;
18631
18636
  }
18632
18637
  manager.remove(targetId);
18633
18638
  console.log();
18634
- console.log(import_chalk22.default.green(`\u2705 \u5DF2\u5220\u9664: ${targetName}`));
18639
+ console.log(import_chalk23.default.green(`\u2705 \u5DF2\u5220\u9664: ${targetName}`));
18635
18640
  console.log();
18636
18641
  } catch (error) {
18637
18642
  if (error instanceof ProviderNotFoundError) {
18638
- console.error(import_chalk22.default.red(`
18643
+ console.error(import_chalk23.default.red(`
18639
18644
  \u274C \u670D\u52A1\u5546\u4E0D\u5B58\u5728
18640
18645
  `));
18641
- console.log(import_chalk22.default.blue("\u{1F4A1} \u67E5\u770B\u6240\u6709\u670D\u52A1\u5546:") + import_chalk22.default.white(" ccman cc list\n"));
18646
+ console.log(import_chalk23.default.blue("\u{1F4A1} \u67E5\u770B\u6240\u6709\u670D\u52A1\u5546:") + import_chalk23.default.white(" ccman cc list\n"));
18642
18647
  } else {
18643
- console.error(import_chalk22.default.red(`
18648
+ console.error(import_chalk23.default.red(`
18644
18649
  \u274C ${error.message}
18645
18650
  `));
18646
18651
  }
@@ -18650,8 +18655,8 @@ function removeCommand2(program2) {
18650
18655
  }
18651
18656
 
18652
18657
  // src/commands/claude/edit.ts
18653
- var import_chalk23 = __toESM(require("chalk"));
18654
- var import_inquirer15 = __toESM(require("inquirer"));
18658
+ var import_chalk24 = __toESM(require("chalk"));
18659
+ var import_inquirer16 = __toESM(require("inquirer"));
18655
18660
  init_dist4();
18656
18661
  function editCommand2(program2) {
18657
18662
  program2.command("edit [name]").description("\u7F16\u8F91 Claude Code \u670D\u52A1\u5546").action(async (name) => {
@@ -18659,7 +18664,7 @@ function editCommand2(program2) {
18659
18664
  const manager = createClaudeManager();
18660
18665
  const providers = manager.list();
18661
18666
  if (providers.length === 0) {
18662
- console.log(import_chalk23.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18667
+ console.log(import_chalk24.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18663
18668
  return;
18664
18669
  }
18665
18670
  let targetId;
@@ -18670,7 +18675,7 @@ function editCommand2(program2) {
18670
18675
  }
18671
18676
  targetId = provider2.id;
18672
18677
  } else {
18673
- const { selectedId } = await import_inquirer15.default.prompt([
18678
+ const { selectedId } = await import_inquirer16.default.prompt([
18674
18679
  {
18675
18680
  type: "list",
18676
18681
  name: "selectedId",
@@ -18684,9 +18689,9 @@ function editCommand2(program2) {
18684
18689
  targetId = selectedId;
18685
18690
  }
18686
18691
  const provider = manager.get(targetId);
18687
- console.log(import_chalk23.default.bold("\n\u270F\uFE0F \u7F16\u8F91\u670D\u52A1\u5546\n"));
18688
- console.log(import_chalk23.default.gray("\u63D0\u793A: \u7559\u7A7A\u5219\u4FDD\u6301\u539F\u503C\n"));
18689
- const answers = await import_inquirer15.default.prompt([
18692
+ console.log(import_chalk24.default.bold("\n\u270F\uFE0F \u7F16\u8F91\u670D\u52A1\u5546\n"));
18693
+ console.log(import_chalk24.default.gray("\u63D0\u793A: \u7559\u7A7A\u5219\u4FDD\u6301\u539F\u503C\n"));
18694
+ const answers = await import_inquirer16.default.prompt([
18690
18695
  {
18691
18696
  type: "input",
18692
18697
  name: "name",
@@ -18717,19 +18722,19 @@ function editCommand2(program2) {
18717
18722
  if (answers.baseUrl && answers.baseUrl !== provider.baseUrl) updates.baseUrl = answers.baseUrl;
18718
18723
  if (answers.apiKey) updates.apiKey = answers.apiKey;
18719
18724
  if (Object.keys(updates).length === 0) {
18720
- console.log(import_chalk23.default.gray("\n\u672A\u505A\u4EFB\u4F55\u4FEE\u6539\n"));
18725
+ console.log(import_chalk24.default.gray("\n\u672A\u505A\u4EFB\u4F55\u4FEE\u6539\n"));
18721
18726
  return;
18722
18727
  }
18723
18728
  const updated = manager.edit(targetId, updates);
18724
18729
  console.log();
18725
- console.log(import_chalk23.default.green("\u2705 \u7F16\u8F91\u6210\u529F"));
18730
+ console.log(import_chalk24.default.green("\u2705 \u7F16\u8F91\u6210\u529F"));
18726
18731
  console.log();
18727
- console.log(` ${import_chalk23.default.bold(updated.name)} ${import_chalk23.default.blue("[Claude Code]")}`);
18728
- console.log(` ${import_chalk23.default.gray(`ID: ${updated.id}`)}`);
18729
- console.log(` ${import_chalk23.default.gray(`URL: ${updated.baseUrl}`)}`);
18732
+ console.log(` ${import_chalk24.default.bold(updated.name)} ${import_chalk24.default.blue("[Claude Code]")}`);
18733
+ console.log(` ${import_chalk24.default.gray(`ID: ${updated.id}`)}`);
18734
+ console.log(` ${import_chalk24.default.gray(`URL: ${updated.baseUrl}`)}`);
18730
18735
  console.log();
18731
18736
  } catch (error) {
18732
- console.error(import_chalk23.default.red(`
18737
+ console.error(import_chalk24.default.red(`
18733
18738
  \u274C ${error.message}
18734
18739
  `));
18735
18740
  process.exit(1);
@@ -18738,8 +18743,8 @@ function editCommand2(program2) {
18738
18743
  }
18739
18744
 
18740
18745
  // src/commands/claude/clone.ts
18741
- var import_chalk24 = __toESM(require("chalk"));
18742
- var import_inquirer16 = __toESM(require("inquirer"));
18746
+ var import_chalk25 = __toESM(require("chalk"));
18747
+ var import_inquirer17 = __toESM(require("inquirer"));
18743
18748
  init_dist4();
18744
18749
  function cloneCommand2(program2) {
18745
18750
  program2.command("clone [source-name] [new-name]").description("\u514B\u9686 Claude Code \u670D\u52A1\u5546").action(async (sourceName, newName) => {
@@ -18747,7 +18752,7 @@ function cloneCommand2(program2) {
18747
18752
  const manager = createClaudeManager();
18748
18753
  const providers = manager.list();
18749
18754
  if (providers.length === 0) {
18750
- console.log(import_chalk24.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18755
+ console.log(import_chalk25.default.yellow("\n\u26A0\uFE0F \u6682\u65E0 Claude Code \u670D\u52A1\u5546\n"));
18751
18756
  return;
18752
18757
  }
18753
18758
  let sourceId;
@@ -18758,7 +18763,7 @@ function cloneCommand2(program2) {
18758
18763
  }
18759
18764
  sourceId = provider.id;
18760
18765
  } else {
18761
- const { selectedId } = await import_inquirer16.default.prompt([
18766
+ const { selectedId } = await import_inquirer17.default.prompt([
18762
18767
  {
18763
18768
  type: "list",
18764
18769
  name: "selectedId",
@@ -18776,7 +18781,7 @@ function cloneCommand2(program2) {
18776
18781
  if (newName) {
18777
18782
  cloned = manager.clone(sourceId, newName);
18778
18783
  } else {
18779
- console.log(import_chalk24.default.blue(`
18784
+ console.log(import_chalk25.default.blue(`
18780
18785
  \u514B\u9686\u81EA: ${source.name}
18781
18786
  `));
18782
18787
  const input = await promptProviderForm({
@@ -18787,14 +18792,14 @@ function cloneCommand2(program2) {
18787
18792
  cloned = manager.add(input);
18788
18793
  }
18789
18794
  console.log();
18790
- console.log(import_chalk24.default.green("\u2705 \u514B\u9686\u6210\u529F"));
18795
+ console.log(import_chalk25.default.green("\u2705 \u514B\u9686\u6210\u529F"));
18791
18796
  console.log();
18792
- console.log(` ${import_chalk24.default.bold(cloned.name)} ${import_chalk24.default.blue("[Claude Code]")}`);
18793
- console.log(` ${import_chalk24.default.gray(`ID: ${cloned.id}`)}`);
18794
- console.log(` ${import_chalk24.default.gray(`URL: ${cloned.baseUrl}`)}`);
18797
+ console.log(` ${import_chalk25.default.bold(cloned.name)} ${import_chalk25.default.blue("[Claude Code]")}`);
18798
+ console.log(` ${import_chalk25.default.gray(`ID: ${cloned.id}`)}`);
18799
+ console.log(` ${import_chalk25.default.gray(`URL: ${cloned.baseUrl}`)}`);
18795
18800
  console.log();
18796
18801
  } catch (error) {
18797
- console.error(import_chalk24.default.red(`
18802
+ console.error(import_chalk25.default.red(`
18798
18803
  \u274C ${error.message}
18799
18804
  `));
18800
18805
  process.exit(1);
@@ -18814,43 +18819,43 @@ function createClaudeCommands(program2) {
18814
18819
  }
18815
18820
 
18816
18821
  // src/index.ts
18817
- init_sync2();
18822
+ init_sync();
18818
18823
 
18819
18824
  // src/commands/export.ts
18820
- var import_chalk25 = __toESM(require("chalk"));
18825
+ var import_chalk26 = __toESM(require("chalk"));
18821
18826
  var import_path19 = __toESM(require("path"));
18822
18827
  init_dist4();
18823
18828
  function exportCommand(program2) {
18824
18829
  program2.command("export <\u76EE\u6807\u76EE\u5F55>").description("\u5BFC\u51FA\u914D\u7F6E\u5230\u672C\u5730\u76EE\u5F55\uFF08\u5305\u542B API Key\uFF09").action(async (targetDir) => {
18825
18830
  try {
18826
- console.log(import_chalk25.default.bold("\n\u{1F4E6} \u5BFC\u51FA\u914D\u7F6E\n"));
18831
+ console.log(import_chalk26.default.bold("\n\u{1F4E6} \u5BFC\u51FA\u914D\u7F6E\n"));
18827
18832
  const validation = validateExport();
18828
18833
  if (!validation.valid) {
18829
- console.log(import_chalk25.default.red(`\u274C ${validation.message}
18834
+ console.log(import_chalk26.default.red(`\u274C ${validation.message}
18830
18835
  `));
18831
18836
  process.exit(1);
18832
18837
  }
18833
18838
  const resolvedPath = targetDir.startsWith("~") ? import_path19.default.join(process.env.HOME || "", targetDir.slice(1)) : import_path19.default.resolve(targetDir);
18834
18839
  console.log("\u5BFC\u51FA\u6587\u4EF6:");
18835
- console.log(` ${import_chalk25.default.cyan("codex.json")} - Codex \u914D\u7F6E`);
18836
- console.log(` ${import_chalk25.default.cyan("claude.json")} - Claude \u914D\u7F6E`);
18840
+ console.log(` ${import_chalk26.default.cyan("codex.json")} - Codex \u914D\u7F6E`);
18841
+ console.log(` ${import_chalk26.default.cyan("claude.json")} - Claude \u914D\u7F6E`);
18837
18842
  console.log();
18838
- console.log(`\u76EE\u6807\u76EE\u5F55: ${import_chalk25.default.cyan(resolvedPath)}`);
18843
+ console.log(`\u76EE\u6807\u76EE\u5F55: ${import_chalk26.default.cyan(resolvedPath)}`);
18839
18844
  console.log();
18840
- console.log(import_chalk25.default.yellow("\u26A0\uFE0F \u5BFC\u51FA\u6587\u4EF6\u5305\u542B API Key\uFF0C\u8BF7\u59A5\u5584\u4FDD\u7BA1"));
18845
+ console.log(import_chalk26.default.yellow("\u26A0\uFE0F \u5BFC\u51FA\u6587\u4EF6\u5305\u542B API Key\uFF0C\u8BF7\u59A5\u5584\u4FDD\u7BA1"));
18841
18846
  console.log();
18842
18847
  const result = exportConfig(resolvedPath);
18843
- console.log(import_chalk25.default.green("\u2705 \u5BFC\u51FA\u6210\u529F"));
18848
+ console.log(import_chalk26.default.green("\u2705 \u5BFC\u51FA\u6210\u529F"));
18844
18849
  console.log();
18845
18850
  console.log("\u5DF2\u5BFC\u51FA\u6587\u4EF6:");
18846
18851
  for (const file of result.exportedFiles) {
18847
- console.log(` ${import_chalk25.default.cyan("\u2713")} ${file}`);
18852
+ console.log(` ${import_chalk26.default.cyan("\u2713")} ${file}`);
18848
18853
  }
18849
18854
  console.log();
18850
- console.log(import_chalk25.default.blue(`\u{1F4A1} \u5BFC\u5165\u547D\u4EE4: ccman import ${resolvedPath}
18855
+ console.log(import_chalk26.default.blue(`\u{1F4A1} \u5BFC\u5165\u547D\u4EE4: ccman import ${resolvedPath}
18851
18856
  `));
18852
18857
  } catch (error) {
18853
- console.error(import_chalk25.default.red(`
18858
+ console.error(import_chalk26.default.red(`
18854
18859
  \u274C ${error.message}
18855
18860
  `));
18856
18861
  process.exit(1);
@@ -18859,32 +18864,32 @@ function exportCommand(program2) {
18859
18864
  }
18860
18865
 
18861
18866
  // src/commands/import.ts
18862
- var import_chalk26 = __toESM(require("chalk"));
18863
- var import_inquirer17 = __toESM(require("inquirer"));
18867
+ var import_chalk27 = __toESM(require("chalk"));
18868
+ var import_inquirer18 = __toESM(require("inquirer"));
18864
18869
  var import_path20 = __toESM(require("path"));
18865
18870
  init_dist4();
18866
18871
  function importCommand(program2) {
18867
18872
  program2.command("import <\u6E90\u76EE\u5F55>").description("\u4ECE\u672C\u5730\u76EE\u5F55\u5BFC\u5165\u914D\u7F6E\uFF08\u4F1A\u8986\u76D6\u5F53\u524D\u914D\u7F6E\uFF09").action(async (sourceDir) => {
18868
18873
  try {
18869
18874
  const resolvedPath = sourceDir.startsWith("~") ? import_path20.default.join(process.env.HOME || "", sourceDir.slice(1)) : import_path20.default.resolve(sourceDir);
18870
- console.log(import_chalk26.default.bold("\n\u{1F4E5} \u5BFC\u5165\u914D\u7F6E\n"));
18875
+ console.log(import_chalk27.default.bold("\n\u{1F4E5} \u5BFC\u5165\u914D\u7F6E\n"));
18871
18876
  const validation = validateImportDir(resolvedPath);
18872
18877
  if (!validation.valid) {
18873
- console.log(import_chalk26.default.red(`\u274C ${validation.message}
18878
+ console.log(import_chalk27.default.red(`\u274C ${validation.message}
18874
18879
  `));
18875
18880
  process.exit(1);
18876
18881
  }
18877
- console.log(import_chalk26.default.yellow("\u26A0\uFE0F \u8B66\u544A\uFF1A\u5BFC\u5165\u5C06\u8986\u76D6\u5F53\u524D\u914D\u7F6E\n"));
18878
- console.log(`\u6E90\u76EE\u5F55: ${import_chalk26.default.cyan(resolvedPath)}`);
18882
+ console.log(import_chalk27.default.yellow("\u26A0\uFE0F \u8B66\u544A\uFF1A\u5BFC\u5165\u5C06\u8986\u76D6\u5F53\u524D\u914D\u7F6E\n"));
18883
+ console.log(`\u6E90\u76EE\u5F55: ${import_chalk27.default.cyan(resolvedPath)}`);
18879
18884
  console.log();
18880
18885
  console.log("\u627E\u5230\u914D\u7F6E\u6587\u4EF6:");
18881
18886
  for (const file of validation.foundFiles) {
18882
- console.log(` ${import_chalk26.default.cyan("\u2713")} ${file}`);
18887
+ console.log(` ${import_chalk27.default.cyan("\u2713")} ${file}`);
18883
18888
  }
18884
18889
  console.log();
18885
- console.log(import_chalk26.default.gray("\u5F53\u524D\u914D\u7F6E\u5C06\u88AB\u8986\u76D6\uFF08\u81EA\u52A8\u5907\u4EFD\uFF09"));
18890
+ console.log(import_chalk27.default.gray("\u5F53\u524D\u914D\u7F6E\u5C06\u88AB\u8986\u76D6\uFF08\u81EA\u52A8\u5907\u4EFD\uFF09"));
18886
18891
  console.log();
18887
- const { confirmFirst } = await import_inquirer17.default.prompt([
18892
+ const { confirmFirst } = await import_inquirer18.default.prompt([
18888
18893
  {
18889
18894
  type: "confirm",
18890
18895
  name: "confirmFirst",
@@ -18893,13 +18898,13 @@ function importCommand(program2) {
18893
18898
  }
18894
18899
  ]);
18895
18900
  if (!confirmFirst) {
18896
- console.log(import_chalk26.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
18901
+ console.log(import_chalk27.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
18897
18902
  return;
18898
18903
  }
18899
18904
  console.log();
18900
- console.log(import_chalk26.default.red.bold("\u26A0\uFE0F \u6700\u540E\u786E\u8BA4\uFF1A\u6B64\u64CD\u4F5C\u5C06\u8986\u76D6\u6240\u6709\u5F53\u524D\u914D\u7F6E\uFF01"));
18905
+ console.log(import_chalk27.default.red.bold("\u26A0\uFE0F \u6700\u540E\u786E\u8BA4\uFF1A\u6B64\u64CD\u4F5C\u5C06\u8986\u76D6\u6240\u6709\u5F53\u524D\u914D\u7F6E\uFF01"));
18901
18906
  console.log();
18902
- const { confirmSecond } = await import_inquirer17.default.prompt([
18907
+ const { confirmSecond } = await import_inquirer18.default.prompt([
18903
18908
  {
18904
18909
  type: "confirm",
18905
18910
  name: "confirmSecond",
@@ -18908,31 +18913,31 @@ function importCommand(program2) {
18908
18913
  }
18909
18914
  ]);
18910
18915
  if (!confirmSecond) {
18911
- console.log(import_chalk26.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
18916
+ console.log(import_chalk27.default.gray("\n\u274C \u5DF2\u53D6\u6D88\n"));
18912
18917
  return;
18913
18918
  }
18914
18919
  console.log();
18915
- console.log(import_chalk26.default.gray("\u{1F4BE} \u5907\u4EFD\u5F53\u524D\u914D\u7F6E..."));
18916
- console.log(import_chalk26.default.gray("\u{1F4E5} \u5BFC\u5165\u65B0\u914D\u7F6E..."));
18920
+ console.log(import_chalk27.default.gray("\u{1F4BE} \u5907\u4EFD\u5F53\u524D\u914D\u7F6E..."));
18921
+ console.log(import_chalk27.default.gray("\u{1F4E5} \u5BFC\u5165\u65B0\u914D\u7F6E..."));
18917
18922
  const result = importConfig(resolvedPath);
18918
18923
  console.log();
18919
- console.log(import_chalk26.default.green("\u2705 \u5BFC\u5165\u6210\u529F"));
18924
+ console.log(import_chalk27.default.green("\u2705 \u5BFC\u5165\u6210\u529F"));
18920
18925
  console.log();
18921
18926
  if (result.backupPaths.length > 0) {
18922
18927
  console.log("\u5907\u4EFD\u6587\u4EF6:");
18923
18928
  for (const backupPath of result.backupPaths) {
18924
- console.log(` ${import_chalk26.default.gray(backupPath)}`);
18929
+ console.log(` ${import_chalk27.default.gray(backupPath)}`);
18925
18930
  }
18926
18931
  console.log();
18927
18932
  }
18928
18933
  console.log("\u5DF2\u5BFC\u5165\u6587\u4EF6:");
18929
18934
  for (const file of result.importedFiles) {
18930
- console.log(` ${import_chalk26.default.cyan("\u2713")} ${file}`);
18935
+ console.log(` ${import_chalk27.default.cyan("\u2713")} ${file}`);
18931
18936
  }
18932
18937
  console.log();
18933
- console.log(import_chalk26.default.blue("\u{1F4A1} \u8BF7\u4F7F\u7528 'ccman cx use' \u6216 'ccman cc use' \u5207\u6362\u670D\u52A1\u5546\n"));
18938
+ console.log(import_chalk27.default.blue("\u{1F4A1} \u8BF7\u4F7F\u7528 'ccman cx use' \u6216 'ccman cc use' \u5207\u6362\u670D\u52A1\u5546\n"));
18934
18939
  } catch (error) {
18935
- console.error(import_chalk26.default.red(`
18940
+ console.error(import_chalk27.default.red(`
18936
18941
  \u274C ${error.message}
18937
18942
  `));
18938
18943
  process.exit(1);
@@ -18943,19 +18948,39 @@ function importCommand(program2) {
18943
18948
  // src/index.ts
18944
18949
  init_dist4();
18945
18950
  if (process.env.NODE_ENV === "development") {
18946
- console.log(import_chalk27.default.gray("\n[\u5F00\u53D1\u6A21\u5F0F] \u914D\u7F6E\u76EE\u5F55:"));
18947
- console.log(import_chalk27.default.gray(` ccman: ${getCcmanDir()}`));
18948
- console.log(import_chalk27.default.gray(` codex: ${getCodexDir()}`));
18949
- console.log(import_chalk27.default.gray(` claude: ${getClaudeDir()}`));
18951
+ console.log(import_chalk28.default.gray("\n[\u5F00\u53D1\u6A21\u5F0F] \u914D\u7F6E\u76EE\u5F55:"));
18952
+ console.log(import_chalk28.default.gray(` ccman: ${getCcmanDir()}`));
18953
+ console.log(import_chalk28.default.gray(` codex: ${getCodexDir()}`));
18954
+ console.log(import_chalk28.default.gray(` claude: ${getClaudeDir()}`));
18950
18955
  console.log();
18951
18956
  }
18952
- var program = new import_commander2.Command();
18957
+ var program = new import_commander3.Command();
18953
18958
  program.name("ccman").description("Codex/Claude Code API \u670D\u52A1\u5546\u914D\u7F6E\u7BA1\u7406\u5DE5\u5177").version(VERSION).showHelpAfterError(false).exitOverride((err) => {
18954
18959
  if (err.code === "commander.helpDisplayed" || err.code === "commander.version") {
18955
18960
  process.exit(0);
18956
18961
  }
18957
18962
  throw err;
18958
18963
  });
18964
+ program.on("command:*", (operands) => {
18965
+ const unknownCommand = operands[0];
18966
+ console.error(import_chalk28.default.red(`
18967
+ \u274C \u672A\u77E5\u547D\u4EE4: ${unknownCommand}
18968
+ `));
18969
+ const availableCommands = ["cx", "cc", "sync", "export", "import"];
18970
+ const suggestions = availableCommands.filter(
18971
+ (cmd) => cmd.includes(unknownCommand) || unknownCommand.includes(cmd)
18972
+ );
18973
+ if (suggestions.length > 0) {
18974
+ console.log(import_chalk28.default.yellow("\u{1F4A1} \u4F60\u662F\u4E0D\u662F\u60F3\u8F93\u5165:"));
18975
+ suggestions.forEach((cmd) => {
18976
+ console.log(import_chalk28.default.cyan(` ccman ${cmd}`));
18977
+ });
18978
+ console.log();
18979
+ }
18980
+ console.log(import_chalk28.default.gray("\u67E5\u770B\u6240\u6709\u53EF\u7528\u547D\u4EE4: ") + import_chalk28.default.cyan("ccman --help"));
18981
+ console.log();
18982
+ process.exit(1);
18983
+ });
18959
18984
  var cx = program.command("cx").description("\u7BA1\u7406 Codex \u670D\u52A1\u5546");
18960
18985
  createCodexCommands(cx);
18961
18986
  cx.action(async () => {