ccjk 11.1.2 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/chunks/agent-teams.mjs +1 -1
  2. package/dist/chunks/agent.mjs +1 -1
  3. package/dist/chunks/api-cli.mjs +118 -0
  4. package/dist/chunks/api-providers.mjs +1 -1
  5. package/dist/chunks/api.mjs +8 -759
  6. package/dist/chunks/auto-bootstrap.mjs +1 -1
  7. package/dist/chunks/auto-init.mjs +1 -1
  8. package/dist/chunks/auto-updater.mjs +1 -1
  9. package/dist/chunks/banner.mjs +1 -1
  10. package/dist/chunks/boost.mjs +1 -1
  11. package/dist/chunks/ccjk-agents.mjs +1 -1
  12. package/dist/chunks/ccjk-all.mjs +1 -1
  13. package/dist/chunks/ccjk-config.mjs +1 -1
  14. package/dist/chunks/ccjk-hooks.mjs +1 -1
  15. package/dist/chunks/ccjk-mcp.mjs +1 -1
  16. package/dist/chunks/ccjk-setup.mjs +1 -1
  17. package/dist/chunks/ccjk-skills.mjs +1 -1
  18. package/dist/chunks/ccr.mjs +6 -6
  19. package/dist/chunks/ccu.mjs +1 -1
  20. package/dist/chunks/check-updates.mjs +2 -2
  21. package/dist/chunks/claude-code-config-manager.mjs +2 -2
  22. package/dist/chunks/claude-code-incremental-manager.mjs +2 -2
  23. package/dist/chunks/claude-config.mjs +1 -1
  24. package/dist/chunks/claude-wrapper.mjs +1 -1
  25. package/dist/chunks/codex-config-switch.mjs +1 -1
  26. package/dist/chunks/codex-provider-manager.mjs +1 -1
  27. package/dist/chunks/codex-uninstaller.mjs +1 -1
  28. package/dist/chunks/codex.mjs +1 -1
  29. package/dist/chunks/commands.mjs +1 -1
  30. package/dist/chunks/completion.mjs +1 -1
  31. package/dist/chunks/config-consolidator.mjs +1 -1
  32. package/dist/chunks/config-switch.mjs +2 -2
  33. package/dist/chunks/config.mjs +1 -1
  34. package/dist/chunks/config2.mjs +1 -1
  35. package/dist/chunks/config3.mjs +1 -1
  36. package/dist/chunks/constants.mjs +1 -1
  37. package/dist/chunks/dashboard.mjs +1 -1
  38. package/dist/chunks/doctor.mjs +31 -7
  39. package/dist/chunks/evolution.mjs +1 -1
  40. package/dist/chunks/features.mjs +5 -5
  41. package/dist/chunks/index.mjs +7 -7
  42. package/dist/chunks/index2.mjs +10 -177
  43. package/dist/chunks/index3.mjs +168 -1162
  44. package/dist/chunks/index4.mjs +1076 -910
  45. package/dist/chunks/index5.mjs +947 -137
  46. package/dist/chunks/index6.mjs +167 -635
  47. package/dist/chunks/index7.mjs +663 -0
  48. package/dist/chunks/init.mjs +17 -17
  49. package/dist/chunks/installer.mjs +1 -1
  50. package/dist/chunks/interview.mjs +2 -2
  51. package/dist/chunks/marketplace.mjs +1 -1
  52. package/dist/chunks/mcp-cli.mjs +191 -0
  53. package/dist/chunks/mcp.mjs +2 -2
  54. package/dist/chunks/menu.mjs +3 -3
  55. package/dist/chunks/migrator.mjs +1 -1
  56. package/dist/chunks/monitor.mjs +1 -1
  57. package/dist/chunks/notification.mjs +1 -1
  58. package/dist/chunks/onboarding.mjs +1 -1
  59. package/dist/chunks/package.mjs +1 -1
  60. package/dist/chunks/permission-manager.mjs +1 -1
  61. package/dist/chunks/permissions.mjs +1 -1
  62. package/dist/chunks/persistence-manager.mjs +1 -1
  63. package/dist/chunks/plugin.mjs +1 -1
  64. package/dist/chunks/prompts.mjs +1 -1
  65. package/dist/chunks/providers.mjs +1 -1
  66. package/dist/chunks/quick-actions.mjs +1 -1
  67. package/dist/chunks/quick-setup.mjs +5 -5
  68. package/dist/chunks/remote.mjs +2 -2
  69. package/dist/chunks/silent-updater.mjs +1 -1
  70. package/dist/chunks/simple-config.mjs +1 -1
  71. package/dist/chunks/skill.mjs +1 -1
  72. package/dist/chunks/skills-sync.mjs +1 -1
  73. package/dist/chunks/skills.mjs +1 -1
  74. package/dist/chunks/slash-commands.mjs +2 -2
  75. package/dist/chunks/startup.mjs +1 -1
  76. package/dist/chunks/stats.mjs +1 -1
  77. package/dist/chunks/status.mjs +1 -1
  78. package/dist/chunks/team.mjs +1 -1
  79. package/dist/chunks/thinking.mjs +2 -2
  80. package/dist/chunks/uninstall.mjs +3 -3
  81. package/dist/chunks/update.mjs +4 -4
  82. package/dist/chunks/upgrade-manager.mjs +1 -1
  83. package/dist/chunks/version-checker.mjs +1 -1
  84. package/dist/chunks/vim.mjs +1 -1
  85. package/dist/chunks/zero-config.mjs +1 -1
  86. package/dist/cli.mjs +76 -16
  87. package/dist/index.d.mts +37 -10
  88. package/dist/index.d.ts +37 -10
  89. package/dist/index.mjs +2 -2
  90. package/dist/shared/{ccjk.DB2UYcq0.mjs → ccjk.BOIUTf5z.mjs} +2 -2
  91. package/dist/shared/ccjk.CL4Yat0G.mjs +303 -0
  92. package/dist/shared/{ccjk.CxtuJxaS.mjs → ccjk.CN0edl87.mjs} +1 -1
  93. package/dist/shared/{ccjk.BKoi8-Hy.mjs → ccjk.CrB6OYHv.mjs} +1 -1
  94. package/dist/shared/{ccjk.DVBW2wxp.mjs → ccjk.Dk1HDseQ.mjs} +1 -1
  95. package/dist/shared/ccjk.bhFAMRyc.mjs +460 -0
  96. package/dist/shared/ccjk.cChAaGgT.mjs +88 -0
  97. package/dist/shared/{ccjk.DrMygfCF.mjs → ccjk.j4uut26D.mjs} +1 -1
  98. package/package.json +2 -3
  99. package/dist/shared/ccjk.Cu_R2MbQ.mjs +0 -75
@@ -4,9 +4,9 @@ import ansis from 'ansis';
4
4
  import inquirer from 'inquirer';
5
5
  import { version } from './package.mjs';
6
6
  import { m as runCodexFullInit, d as selectMcpServices, g as getMcpServices, M as MCP_SERVICE_CONFIGS } from './codex.mjs';
7
- import { a as modifyApiConfigPartially, b as configureApiCompletely, n as needsMigration, m as migrateSettingsForTokenRetrieval, d as displayMigrationResult, p as promptMigration, s as selectAndInstallWorkflows, c as configureOutputStyle, f as formatApiKeyDisplay, W as WORKFLOW_CONFIG_BASE } from '../shared/ccjk.DVBW2wxp.mjs';
7
+ import { a as modifyApiConfigPartially, b as configureApiCompletely, n as needsMigration, m as migrateSettingsForTokenRetrieval, d as displayMigrationResult, p as promptMigration, s as selectAndInstallWorkflows, c as configureOutputStyle, f as formatApiKeyDisplay, W as WORKFLOW_CONFIG_BASE } from '../shared/ccjk.Dk1HDseQ.mjs';
8
8
  import { SETTINGS_FILE, DEFAULT_CODE_TOOL_TYPE, CODE_TOOL_BANNERS, API_DEFAULT_URL } from './constants.mjs';
9
- import { ensureI18nInitialized, i18n } from './index2.mjs';
9
+ import { ensureI18nInitialized, i18n } from './index3.mjs';
10
10
  import { displayBannerWithInfo, padToDisplayWidth } from './banner.mjs';
11
11
  import { readZcfConfig, updateZcfConfig } from './ccjk-config.mjs';
12
12
  import { readCcrConfig, backupCcrConfig, createDefaultCcrConfig, writeCcrConfig, configureCcrProxy, setupCcrConfiguration } from './config2.mjs';
@@ -15,15 +15,15 @@ import { promisify } from 'node:util';
15
15
  import { updateCcr } from './auto-updater.mjs';
16
16
  import { w as wrapCommandWithSudo, i as isWindows, b as isTermux } from './platform.mjs';
17
17
  import { c as addCompletedOnboarding, s as setPrimaryApiKey, b as backupMcpConfig, a as buildMcpServerConfig, r as readMcpConfig, e as replaceMcpServers, f as fixWindowsMcpConfig, w as writeMcpConfig, g as syncMcpPermissions } from './claude-config.mjs';
18
- import { r as resolveCodeType } from '../shared/ccjk.CxtuJxaS.mjs';
18
+ import { r as resolveCodeType } from '../shared/ccjk.CN0edl87.mjs';
19
19
  import { exists } from './fs-operations.mjs';
20
20
  import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
21
21
  import { p as promptApiConfigurationAction, i as ensureClaudeDir, e as getExistingApiConfig, s as switchToOfficialLogin, b as backupExistingConfig, c as copyConfigFiles, a as applyAiLanguageDirective, f as configureApi } from './config.mjs';
22
- import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.DrMygfCF.mjs';
22
+ import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.j4uut26D.mjs';
23
23
  import { getInstallationStatus, installClaudeCode } from './installer.mjs';
24
24
  import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
25
25
  import { resolveAiOutputLanguage } from './prompts.mjs';
26
- import { c as checkSuperpowersInstalled, i as installSuperpowers } from '../shared/ccjk.BKoi8-Hy.mjs';
26
+ import { c as checkSuperpowersInstalled, i as installSuperpowers } from '../shared/ccjk.CrB6OYHv.mjs';
27
27
  import { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
28
28
  import { checkClaudeCodeVersionAndPrompt } from './version-checker.mjs';
29
29
 
@@ -260,11 +260,11 @@ function formatError(error, context) {
260
260
  function displayError(error, context) {
261
261
  const formatted = formatError(error, context);
262
262
  console.error();
263
- console.error(ansis.red.bold(formatted.title));
264
- console.error(ansis.white(formatted.message));
263
+ console.error(ansis.red(formatted.title));
264
+ console.error(formatted.message);
265
265
  if (formatted.suggestion) {
266
266
  console.error();
267
- console.error(ansis.yellow("\u{1F4A1} Suggestion:"), ansis.white(formatted.suggestion));
267
+ console.error(ansis.yellow("\u{1F4A1} Suggestion:"), formatted.suggestion);
268
268
  }
269
269
  if (formatted.command) {
270
270
  console.error(ansis.cyan(" Run:"), ansis.green(formatted.command));
@@ -287,7 +287,7 @@ class ProgressTracker {
287
287
  }
288
288
  start() {
289
289
  console.log();
290
- console.log(ansis.cyan.bold("\u{1F680} Starting setup..."));
290
+ console.log(ansis.cyan("\u{1F680} Starting setup..."));
291
291
  console.log(ansis.gray(` ${this.totalSteps} steps to complete`));
292
292
  console.log();
293
293
  }
@@ -297,19 +297,19 @@ class ProgressTracker {
297
297
  const progress = Math.round(this.currentStep / this.totalSteps * 100);
298
298
  const bar = this.renderProgressBar(progress);
299
299
  console.log();
300
- console.log(ansis.cyan(`[${this.currentStep}/${this.totalSteps}]`), ansis.white(stepName));
300
+ console.log(ansis.cyan(`[${this.currentStep}/${this.totalSteps}]`), stepName);
301
301
  console.log(ansis.gray(` ${bar} ${progress}%`));
302
302
  }
303
303
  complete() {
304
304
  const duration = ((Date.now() - this.startTime) / 1e3).toFixed(1);
305
305
  console.log();
306
- console.log(ansis.green.bold("\u2705 Setup complete!"));
306
+ console.log(ansis.green("\u2705 Setup complete!"));
307
307
  console.log(ansis.gray(` Completed in ${duration}s`));
308
308
  console.log();
309
309
  }
310
310
  error(message) {
311
311
  console.log();
312
- console.log(ansis.red.bold("\u274C Setup failed"));
312
+ console.log(ansis.red("\u274C Setup failed"));
313
313
  console.log(ansis.white(` ${message}`));
314
314
  console.log();
315
315
  }
@@ -642,7 +642,7 @@ async function init(options = {}) {
642
642
  try {
643
643
  setPrimaryApiKey();
644
644
  } catch (error) {
645
- const { ensureI18nInitialized, i18n: i18nModule } = await import('./index2.mjs');
645
+ const { ensureI18nInitialized, i18n: i18nModule } = await import('./index3.mjs');
646
646
  ensureI18nInitialized();
647
647
  console.error(i18nModule.t("mcp:primaryApiKeySetFailed"), error);
648
648
  }
@@ -1173,7 +1173,7 @@ async function init(options = {}) {
1173
1173
  }
1174
1174
  }
1175
1175
  async function handleMultiConfigurations(options, codeToolType) {
1176
- const { ensureI18nInitialized } = await import('./index2.mjs');
1176
+ const { ensureI18nInitialized } = await import('./index3.mjs');
1177
1177
  ensureI18nInitialized();
1178
1178
  try {
1179
1179
  let configs = [];
@@ -1412,7 +1412,7 @@ async function smartInit(options = {}) {
1412
1412
  try {
1413
1413
  console.log(ansis.bold.green("\n\u{1F9E0} Smart Initialization Mode\n"));
1414
1414
  console.log(ansis.gray("Analyzing your project to generate optimal configuration...\n"));
1415
- const { analyzeProject } = await import('./index6.mjs');
1415
+ const { analyzeProject } = await import('./index7.mjs');
1416
1416
  const analysis = await analyzeProject();
1417
1417
  console.log(ansis.cyan("\u{1F4CA} Project Analysis:"));
1418
1418
  console.log(ansis.gray(` \u2022 Type: ${analysis.projectType}`));
@@ -1431,7 +1431,7 @@ async function smartInit(options = {}) {
1431
1431
  console.log(ansis.gray(` \u2022 CI/CD: ${analysis.cicd.join(", ")}`));
1432
1432
  }
1433
1433
  console.log("");
1434
- const { selectTemplates } = await import('./index6.mjs');
1434
+ const { selectTemplates } = await import('./index7.mjs');
1435
1435
  const selection = await selectTemplates(analysis);
1436
1436
  console.log(ansis.cyan("\u{1F3AF} Template Selection:"));
1437
1437
  console.log(ansis.gray(` \u2022 Agents: ${selection.agents.length} selected`));
@@ -1457,7 +1457,7 @@ async function smartInit(options = {}) {
1457
1457
  }
1458
1458
  }
1459
1459
  console.log(ansis.gray("\n\u{1F527} Generating configurations...\n"));
1460
- const { generateConfigs, writeConfigs } = await import('./index6.mjs');
1460
+ const { generateConfigs, writeConfigs } = await import('./index7.mjs');
1461
1461
  const config = await generateConfigs(selection);
1462
1462
  await writeConfigs(config);
1463
1463
  console.log(ansis.green("\u2714 Configurations generated successfully!"));
@@ -6,7 +6,7 @@ import inquirer from 'inquirer';
6
6
  import ora from 'ora';
7
7
  import { join } from 'pathe';
8
8
  import { exec } from 'tinyexec';
9
- import { ensureI18nInitialized, i18n } from './index2.mjs';
9
+ import { ensureI18nInitialized, i18n } from './index3.mjs';
10
10
  import { updateClaudeCode } from './auto-updater.mjs';
11
11
  import { exists } from './fs-operations.mjs';
12
12
  import { f as findCommandPath, g as getPlatform, a as getHomebrewCommandPaths, b as isTermux, c as getTermuxPrefix, d as isWSL, e as getWSLInfo, w as wrapCommandWithSudo, h as commandExists, j as getRecommendedInstallMethods } from './platform.mjs';
@@ -4,8 +4,8 @@ import { resolve, dirname, join } from 'node:path';
4
4
  import process__default from 'node:process';
5
5
  import ansis from 'ansis';
6
6
  import inquirer from 'inquirer';
7
- import { i18n } from './index2.mjs';
8
- import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.DrMygfCF.mjs';
7
+ import { i18n } from './index3.mjs';
8
+ import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.j4uut26D.mjs';
9
9
  import { randomUUID } from 'node:crypto';
10
10
  import 'node:url';
11
11
  import 'i18next';
@@ -1,5 +1,5 @@
1
1
  import ansis from 'ansis';
2
- import { i18n } from './index2.mjs';
2
+ import { i18n } from './index3.mjs';
3
3
  import { createHash } from 'node:crypto';
4
4
  import { existsSync, createWriteStream } from 'node:fs';
5
5
  import { readFile, mkdir, rm } from 'node:fs/promises';
@@ -0,0 +1,191 @@
1
+ import ansis from 'ansis';
2
+ import { i18n } from './index3.mjs';
3
+ import { g as getMcpServices } from './codex.mjs';
4
+ import { r as readMcpConfig } from './claude-config.mjs';
5
+ import { i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.BOIUTf5z.mjs';
6
+ import 'node:fs';
7
+ import 'node:process';
8
+ import 'node:url';
9
+ import 'i18next';
10
+ import 'i18next-fs-backend';
11
+ import 'pathe';
12
+ import 'dayjs';
13
+ import 'inquirer';
14
+ import 'ora';
15
+ import 'semver';
16
+ import 'smol-toml';
17
+ import 'tinyexec';
18
+ import './constants.mjs';
19
+ import 'node:os';
20
+ import './ccjk-config.mjs';
21
+ import './fs-operations.mjs';
22
+ import 'node:crypto';
23
+ import 'node:fs/promises';
24
+ import './json-config.mjs';
25
+ import './config.mjs';
26
+ import '../shared/ccjk.BiCrMV5O.mjs';
27
+ import './platform.mjs';
28
+ import '../shared/ccjk.BFQ7yr5S.mjs';
29
+ import './prompts.mjs';
30
+ import './package.mjs';
31
+ import '../shared/ccjk.DHbrGcgg.mjs';
32
+ import 'inquirer-toggle';
33
+ import 'node:child_process';
34
+
35
+ async function mcpInstallCli(options) {
36
+ const lang = options.lang || i18n.language || "en";
37
+ const isZh = lang === "zh-CN";
38
+ if (!options.services || options.services.length === 0) {
39
+ console.log(ansis.red(isZh ? "\u9519\u8BEF: \u5FC5\u987B\u6307\u5B9A\u670D\u52A1\u540D\u79F0" : "Error: Service names required"));
40
+ console.log(ansis.dim(isZh ? "\u7528\u6CD5: ccjk mcp install <service1> [service2...]" : "Usage: ccjk mcp install <service1> [service2...]"));
41
+ process.exit(1);
42
+ }
43
+ const availableServices = await getMcpServices();
44
+ const invalidServices = options.services.filter(
45
+ (s) => !availableServices.some((svc) => svc.id === s)
46
+ );
47
+ if (invalidServices.length > 0) {
48
+ console.log(ansis.red(isZh ? `\u9519\u8BEF: \u672A\u77E5\u7684\u670D\u52A1: ${invalidServices.join(", ")}` : `Error: Unknown services: ${invalidServices.join(", ")}`));
49
+ console.log(ansis.dim(isZh ? "\u63D0\u793A: \u4F7F\u7528 ccjk mcp list \u67E5\u770B\u53EF\u7528\u670D\u52A1" : "Tip: Use ccjk mcp list to see available services"));
50
+ process.exit(1);
51
+ }
52
+ if (!options.yes) {
53
+ const inquirer = await import('inquirer');
54
+ const { confirm } = await inquirer.default.prompt([{
55
+ type: "confirm",
56
+ name: "confirm",
57
+ message: isZh ? `\u786E\u8BA4\u5B89\u88C5 ${options.services.length} \u4E2A MCP \u670D\u52A1?` : `Install ${options.services.length} MCP service(s)?`,
58
+ default: true
59
+ }]);
60
+ if (!confirm) {
61
+ console.log(ansis.yellow(isZh ? "\u5DF2\u53D6\u6D88" : "Cancelled"));
62
+ return;
63
+ }
64
+ }
65
+ let successCount = 0;
66
+ let failCount = 0;
67
+ for (const serviceId of options.services) {
68
+ const result = await installMcpService(serviceId, options.tool);
69
+ if (result.success) {
70
+ successCount++;
71
+ } else {
72
+ failCount++;
73
+ console.log(ansis.red(isZh ? `\u2717 \u5B89\u88C5 ${serviceId} \u5931\u8D25: ${result.error || "\u672A\u77E5\u9519\u8BEF"}` : `\u2717 Failed to install ${serviceId}: ${result.error || "Unknown error"}`));
74
+ }
75
+ }
76
+ if (successCount > 0) {
77
+ console.log(ansis.green(isZh ? `\u2713 \u5DF2\u5B89\u88C5 ${successCount} \u4E2A\u670D\u52A1` : `\u2713 Installed ${successCount} service(s)`));
78
+ }
79
+ if (failCount > 0) {
80
+ console.log(ansis.red(isZh ? `\u2717 ${failCount} \u4E2A\u670D\u52A1\u5B89\u88C5\u5931\u8D25` : `\u2717 ${failCount} service(s) failed`));
81
+ }
82
+ if (successCount > 0) {
83
+ console.log(ansis.dim(isZh ? "\u63D0\u793A: \u91CD\u542F Claude Code \u4EE5\u5E94\u7528\u66F4\u6539" : "Tip: Restart Claude Code to apply changes"));
84
+ }
85
+ }
86
+ async function mcpUninstallCli(options) {
87
+ const lang = options.lang || i18n.language || "en";
88
+ const isZh = lang === "zh-CN";
89
+ if (!options.services || options.services.length === 0) {
90
+ console.log(ansis.red(isZh ? "\u9519\u8BEF: \u5FC5\u987B\u6307\u5B9A\u670D\u52A1\u540D\u79F0" : "Error: Service names required"));
91
+ console.log(ansis.dim(isZh ? "\u7528\u6CD5: ccjk mcp uninstall <service1> [service2...]" : "Usage: ccjk mcp uninstall <service1> [service2...]"));
92
+ process.exit(1);
93
+ }
94
+ const config = readMcpConfig();
95
+ if (!config || !config.mcpServers) {
96
+ console.log(ansis.yellow(isZh ? "\u672A\u5B89\u88C5\u4EFB\u4F55 MCP \u670D\u52A1" : "No MCP services installed"));
97
+ return;
98
+ }
99
+ const notInstalled = options.services.filter((s) => !config.mcpServers[s]);
100
+ if (notInstalled.length > 0) {
101
+ console.log(ansis.yellow(isZh ? `\u8B66\u544A: \u4EE5\u4E0B\u670D\u52A1\u672A\u5B89\u88C5: ${notInstalled.join(", ")}` : `Warning: Not installed: ${notInstalled.join(", ")}`));
102
+ }
103
+ const toRemove = options.services.filter((s) => config.mcpServers[s]);
104
+ if (toRemove.length === 0) {
105
+ console.log(ansis.yellow(isZh ? "\u6CA1\u6709\u670D\u52A1\u9700\u8981\u5378\u8F7D" : "No services to uninstall"));
106
+ return;
107
+ }
108
+ if (!options.yes) {
109
+ const inquirer = await import('inquirer');
110
+ const { confirm } = await inquirer.default.prompt([{
111
+ type: "confirm",
112
+ name: "confirm",
113
+ message: isZh ? `\u786E\u8BA4\u5378\u8F7D ${toRemove.length} \u4E2A MCP \u670D\u52A1?` : `Uninstall ${toRemove.length} MCP service(s)?`,
114
+ default: true
115
+ }]);
116
+ if (!confirm) {
117
+ console.log(ansis.yellow(isZh ? "\u5DF2\u53D6\u6D88" : "Cancelled"));
118
+ return;
119
+ }
120
+ }
121
+ let successCount = 0;
122
+ let failCount = 0;
123
+ for (const serviceId of toRemove) {
124
+ const result = await uninstallMcpService(serviceId, options.tool);
125
+ if (result.success) {
126
+ successCount++;
127
+ } else {
128
+ failCount++;
129
+ console.log(ansis.red(isZh ? `\u2717 \u5378\u8F7D ${serviceId} \u5931\u8D25: ${result.error || "\u672A\u77E5\u9519\u8BEF"}` : `\u2717 Failed to uninstall ${serviceId}: ${result.error || "Unknown error"}`));
130
+ }
131
+ }
132
+ if (successCount > 0) {
133
+ console.log(ansis.green(isZh ? `\u2713 \u5DF2\u5378\u8F7D ${successCount} \u4E2A\u670D\u52A1` : `\u2713 Uninstalled ${successCount} service(s)`));
134
+ }
135
+ if (failCount > 0) {
136
+ console.log(ansis.red(isZh ? `\u2717 ${failCount} \u4E2A\u670D\u52A1\u5378\u8F7D\u5931\u8D25` : `\u2717 ${failCount} service(s) failed`));
137
+ }
138
+ if (successCount > 0) {
139
+ console.log(ansis.dim(isZh ? "\u63D0\u793A: \u91CD\u542F Claude Code \u4EE5\u5E94\u7528\u66F4\u6539" : "Tip: Restart Claude Code to apply changes"));
140
+ }
141
+ }
142
+ async function mcpListCli(options = {}) {
143
+ const lang = options.lang || i18n.language || "en";
144
+ const isZh = lang === "zh-CN";
145
+ const availableServices = await getMcpServices();
146
+ const config = readMcpConfig();
147
+ const installedServices = Object.keys(config?.mcpServers || {});
148
+ if (options.json) {
149
+ const output = {
150
+ installed: installedServices,
151
+ available: availableServices.map((s) => ({
152
+ id: s.id,
153
+ name: s.name,
154
+ description: s.description,
155
+ installed: installedServices.includes(s.id)
156
+ }))
157
+ };
158
+ console.log(JSON.stringify(output, null, 2));
159
+ return;
160
+ }
161
+ console.log("");
162
+ console.log(ansis.bold.cyan(isZh ? "\u{1F4E6} MCP \u670D\u52A1" : "\u{1F4E6} MCP Services"));
163
+ console.log(ansis.dim("\u2500".repeat(50)));
164
+ console.log("");
165
+ if (options.installed) {
166
+ if (installedServices.length === 0) {
167
+ console.log(ansis.yellow(isZh ? "\u672A\u5B89\u88C5\u4EFB\u4F55\u670D\u52A1" : "No services installed"));
168
+ } else {
169
+ console.log(ansis.green(isZh ? `\u5DF2\u5B89\u88C5 ${installedServices.length} \u4E2A\u670D\u52A1:` : `${installedServices.length} service(s) installed:`));
170
+ for (const serviceId of installedServices) {
171
+ const service = availableServices.find((s) => s.id === serviceId);
172
+ const name = service ? service.name : serviceId;
173
+ console.log(` ${ansis.green("\u25CF")} ${name} ${ansis.dim(`(${serviceId})`)}`);
174
+ }
175
+ }
176
+ } else {
177
+ console.log(ansis.dim(isZh ? "\u53EF\u7528\u670D\u52A1:" : "Available services:"));
178
+ for (const service of availableServices) {
179
+ const installed = installedServices.includes(service.id);
180
+ const icon = installed ? ansis.green("\u2713") : ansis.dim("\u25CB");
181
+ const name = service.name;
182
+ const desc = service.description;
183
+ console.log(` ${icon} ${ansis.bold(name)} ${ansis.dim(`(${service.id})`)}`);
184
+ console.log(` ${ansis.dim(desc)}`);
185
+ }
186
+ }
187
+ console.log("");
188
+ console.log(ansis.dim(isZh ? "\u63D0\u793A: \u4F7F\u7528 ccjk mcp install <service> \u5B89\u88C5\u670D\u52A1" : "Tip: Use ccjk mcp install <service> to install a service"));
189
+ }
190
+
191
+ export { mcpInstallCli, mcpListCli, mcpUninstallCli };
@@ -1,12 +1,12 @@
1
1
  import ansis from 'ansis';
2
- import { i18n } from './index2.mjs';
2
+ import { i18n } from './index3.mjs';
3
3
  import 'node:child_process';
4
4
  import 'node:process';
5
5
  import { M as MCP_SERVICE_TIERS, i as isCoreService, g as getServicesByTier, c as checkMcpPerformance, f as formatPerformanceWarning, a as calculateResourceUsage, b as getOptimizationSuggestions, d as getMcpTierConfig } from './mcp-performance.mjs';
6
6
  import { r as readMcpConfig, b as backupMcpConfig, w as writeMcpConfig } from './claude-config.mjs';
7
7
  import inquirer from 'inquirer';
8
8
  import { M as MCP_SERVICE_CONFIGS } from './codex.mjs';
9
- import { d as displayInstalledMcpServices, a as isMcpServiceInstalled, b as installMcpService, u as uninstallMcpService } from '../shared/ccjk.DB2UYcq0.mjs';
9
+ import { d as displayInstalledMcpServices, b as isMcpServiceInstalled, i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.BOIUTf5z.mjs';
10
10
  import { existsSync, unlinkSync, statSync, mkdirSync, readFileSync } from 'node:fs';
11
11
  import { homedir } from 'node:os';
12
12
  import { join } from 'pathe';
@@ -5,12 +5,12 @@ import process__default from 'node:process';
5
5
  import { join } from 'pathe';
6
6
  import { M as MCP_SERVICE_CONFIGS } from './codex.mjs';
7
7
  import { CODE_TOOL_BANNERS, CLAUDE_DIR, isCodeToolType, DEFAULT_CODE_TOOL_TYPE } from './constants.mjs';
8
- import { ensureI18nInitialized, i18n } from './index2.mjs';
8
+ import { ensureI18nInitialized, i18n } from './index3.mjs';
9
9
  import { displayBannerWithInfo } from './banner.mjs';
10
10
  import { updateZcfConfig, readZcfConfig } from './ccjk-config.mjs';
11
11
  import { r as readMcpConfig } from './claude-config.mjs';
12
- import { r as resolveCodeType } from '../shared/ccjk.CxtuJxaS.mjs';
13
- import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.DrMygfCF.mjs';
12
+ import { r as resolveCodeType } from '../shared/ccjk.CN0edl87.mjs';
13
+ import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.j4uut26D.mjs';
14
14
  import { changeScriptLanguageFeature, mcpManagerFeature, configureMergedPermissionsFeature, configureAiMemoryFeature, configureDefaultModelFeature, configureMcpFeature, configureApiFeature } from './features.mjs';
15
15
  import { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
16
16
  import { homedir } from 'node:os';
@@ -3,7 +3,7 @@ import { exists } from './fs-operations.mjs';
3
3
  import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
4
4
  import 'node:os';
5
5
  import 'pathe';
6
- import './index2.mjs';
6
+ import './index3.mjs';
7
7
  import 'node:fs';
8
8
  import 'node:process';
9
9
  import 'node:url';
@@ -1,5 +1,5 @@
1
1
  import ansis from 'ansis';
2
- import { i18n } from './index2.mjs';
2
+ import { i18n } from './index3.mjs';
3
3
  import { displayBannerWithInfo } from './banner.mjs';
4
4
  import process__default from 'node:process';
5
5
  import { nanoid } from 'nanoid';
@@ -1,6 +1,6 @@
1
1
  import ansis from 'ansis';
2
2
  import inquirer from 'inquirer';
3
- import { i18n } from './index2.mjs';
3
+ import { i18n } from './index3.mjs';
4
4
  import { m as maskToken, a as isValidTokenFormat, c as generateDeviceToken, d as decryptToken, e as encryptToken, f as getDeviceInfo, i as isDeviceBound, g as getBindingStatus, u as unbindDevice, b as bindDevice, s as sendNotification } from '../shared/ccjk.CGcy7cNM.mjs';
5
5
  import { exec } from 'node:child_process';
6
6
  import * as nodeFs from 'node:fs';
@@ -10,7 +10,7 @@ import { d as detectProject, g as getProjectSummary, a as generateSuggestions }
10
10
  import { boxify, COLORS as theme, STATUS } from './banner.mjs';
11
11
  import { writeFileAtomic } from './fs-operations.mjs';
12
12
  import 'node:os';
13
- import './index2.mjs';
13
+ import './index3.mjs';
14
14
  import 'node:url';
15
15
  import 'i18next';
16
16
  import 'i18next-fs-backend';
@@ -1,4 +1,4 @@
1
- const version = "11.1.2";
1
+ const version = "12.0.0";
2
2
  const homepage = "https://github.com/miounet11/ccjk";
3
3
 
4
4
  export { homepage, version };
@@ -4,7 +4,7 @@ import { join } from 'pathe';
4
4
  import { SETTINGS_FILE, CCJK_CONFIG_DIR } from './constants.mjs';
5
5
  import { STATUS } from './banner.mjs';
6
6
  import 'node:os';
7
- import './index2.mjs';
7
+ import './index3.mjs';
8
8
  import 'node:process';
9
9
  import 'node:url';
10
10
  import 'i18next';
@@ -2,7 +2,7 @@ import process__default from 'node:process';
2
2
  import ansis from 'ansis';
3
3
  import inquirer from 'inquirer';
4
4
  import 'tinyexec';
5
- import { i18n } from './index2.mjs';
5
+ import { i18n } from './index3.mjs';
6
6
  import { g as getPermissionManager } from '../shared/ccjk.h7_W-wTs.mjs';
7
7
  import 'node:fs';
8
8
  import 'node:url';
@@ -2,7 +2,7 @@ import ansis from 'ansis';
2
2
  import inquirer from 'inquirer';
3
3
  import { writeFileSync } from 'node:fs';
4
4
  import { join } from 'pathe';
5
- import { i18n } from './index2.mjs';
5
+ import { i18n } from './index3.mjs';
6
6
  import { getContextPersistence } from './persistence.mjs';
7
7
  import 'node:process';
8
8
  import 'node:url';
@@ -4,7 +4,7 @@ import { Buffer } from 'node:buffer';
4
4
  import { existsSync, mkdirSync, readFileSync, unlinkSync, readdirSync, statSync, rmSync } from 'node:fs';
5
5
  import { join } from 'pathe';
6
6
  import { CCJK_CLOUD_PLUGINS_DIR, CCJK_CLOUD_PLUGINS_CACHE_DIR, CCJK_CLOUD_PLUGINS_INSTALLED_DIR } from './constants.mjs';
7
- import { i18n } from './index2.mjs';
7
+ import { i18n } from './index3.mjs';
8
8
  import { writeFileAtomic } from './fs-operations.mjs';
9
9
  import { homedir } from 'node:os';
10
10
  import { d as detectProject } from '../shared/ccjk.CBhIZiPz.mjs';
@@ -3,7 +3,7 @@ import ansis from 'ansis';
3
3
  import inquirer from 'inquirer';
4
4
  import { version } from './package.mjs';
5
5
  import { LANG_LABELS, getAiOutputLanguageLabel, SUPPORTED_LANGS, AI_OUTPUT_LANGUAGES } from './constants.mjs';
6
- import { ensureI18nInitialized, i18n } from './index2.mjs';
6
+ import { ensureI18nInitialized, i18n } from './index3.mjs';
7
7
  import { readZcfConfig, updateZcfConfig } from './ccjk-config.mjs';
8
8
  import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
9
9
  import { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
@@ -1,6 +1,6 @@
1
1
  import ansis from 'ansis';
2
2
  import { getApiProviderPresets } from './api-providers.mjs';
3
- import { i18n } from './index2.mjs';
3
+ import { i18n } from './index3.mjs';
4
4
  import { P as ProviderHealthMonitor } from '../shared/ccjk.J8YiPsOw.mjs';
5
5
  import './constants.mjs';
6
6
  import 'node:os';
@@ -7,7 +7,7 @@ import { MetricsDisplay } from './metrics-display.mjs';
7
7
  import { r as runHealthCheck } from '../shared/ccjk.DfwJOEok.mjs';
8
8
  import 'better-sqlite3';
9
9
  import './constants.mjs';
10
- import './index2.mjs';
10
+ import './index3.mjs';
11
11
  import 'node:process';
12
12
  import 'node:url';
13
13
  import 'i18next';
@@ -2,7 +2,7 @@ import ansis from 'ansis';
2
2
  import inquirer from 'inquirer';
3
3
  import { version } from './package.mjs';
4
4
  import { detectSmartDefaults } from './smart-defaults.mjs';
5
- import { i18n } from './index2.mjs';
5
+ import { i18n } from './index3.mjs';
6
6
  import { updateZcfConfig } from './ccjk-config.mjs';
7
7
  import { i as init } from './init.mjs';
8
8
  import 'node:child_process';
@@ -33,17 +33,17 @@ import '../shared/ccjk.BFQ7yr5S.mjs';
33
33
  import './prompts.mjs';
34
34
  import '../shared/ccjk.DHbrGcgg.mjs';
35
35
  import 'inquirer-toggle';
36
- import '../shared/ccjk.DVBW2wxp.mjs';
36
+ import '../shared/ccjk.Dk1HDseQ.mjs';
37
37
  import './banner.mjs';
38
38
  import './config2.mjs';
39
39
  import 'node:util';
40
40
  import './auto-updater.mjs';
41
41
  import './version-checker.mjs';
42
42
  import 'node:path';
43
- import '../shared/ccjk.CxtuJxaS.mjs';
44
- import '../shared/ccjk.DrMygfCF.mjs';
43
+ import '../shared/ccjk.CN0edl87.mjs';
44
+ import '../shared/ccjk.j4uut26D.mjs';
45
45
  import './installer.mjs';
46
- import '../shared/ccjk.BKoi8-Hy.mjs';
46
+ import '../shared/ccjk.CrB6OYHv.mjs';
47
47
 
48
48
  function displayHeader() {
49
49
  console.log("");
@@ -4,9 +4,9 @@ import inquirer from 'inquirer';
4
4
  import ora from 'ora';
5
5
  import { homedir } from 'os';
6
6
  import { join } from 'path';
7
- import { i18n } from './index2.mjs';
7
+ import { i18n } from './index3.mjs';
8
8
  import { i as isDeviceBound, g as getBindingStatus, b as bindDevice } from '../shared/ccjk.CGcy7cNM.mjs';
9
- import { l as logger } from '../shared/ccjk.Cu_R2MbQ.mjs';
9
+ import { l as logger } from '../shared/ccjk.cChAaGgT.mjs';
10
10
  import 'node:fs';
11
11
  import 'node:process';
12
12
  import 'node:url';
@@ -5,7 +5,7 @@ import { fileURLToPath } from 'node:url';
5
5
  import { join, dirname } from 'pathe';
6
6
  import { CCJK_CONFIG_DIR } from './constants.mjs';
7
7
  import { getCloudState, updateCloudState } from './auto-bootstrap.mjs';
8
- import './index2.mjs';
8
+ import './index3.mjs';
9
9
  import 'i18next';
10
10
  import 'i18next-fs-backend';
11
11
  import 'node:crypto';
@@ -7,7 +7,7 @@ import { ensureDir, writeFileAtomic } from './fs-operations.mjs';
7
7
  import { m as mergeAndCleanPermissions } from '../shared/ccjk.BiCrMV5O.mjs';
8
8
  import { g as getPlatform } from './platform.mjs';
9
9
  import 'node:os';
10
- import './index2.mjs';
10
+ import './index3.mjs';
11
11
  import 'node:process';
12
12
  import 'i18next';
13
13
  import 'i18next-fs-backend';
@@ -8,7 +8,7 @@ import { join, dirname } from 'pathe';
8
8
  import { g as getPluginManager } from '../shared/ccjk.BsXQugfY.mjs';
9
9
  import 'tinyexec';
10
10
  import './constants.mjs';
11
- import './index2.mjs';
11
+ import './index3.mjs';
12
12
  import 'node:process';
13
13
  import 'i18next';
14
14
  import 'i18next-fs-backend';
@@ -1,6 +1,6 @@
1
1
  import ansis from 'ansis';
2
2
  import inquirer from 'inquirer';
3
- import { getTranslation } from './index2.mjs';
3
+ import { getTranslation } from './index3.mjs';
4
4
  import { createHash } from 'node:crypto';
5
5
  import { existsSync, readdirSync, readFileSync, mkdirSync } from 'node:fs';
6
6
  import process__default from 'node:process';
@@ -1,6 +1,6 @@
1
1
  import ansis from 'ansis';
2
2
  import inquirer from 'inquirer';
3
- import { i18n } from './index2.mjs';
3
+ import { i18n } from './index3.mjs';
4
4
  import { existsSync, unlinkSync, mkdirSync, readdirSync, readFileSync } from 'node:fs';
5
5
  import 'node:os';
6
6
  import { join } from 'pathe';
@@ -1,5 +1,5 @@
1
1
  import ansis from 'ansis';
2
- import { i18n } from './index2.mjs';
2
+ import { i18n } from './index3.mjs';
3
3
  import { getContextPersistence } from './persistence.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:process';
@@ -39,7 +39,7 @@ function getSlashCommands() {
39
39
  descriptionZh: "\u8FD0\u884C\u5168\u9762\u5065\u5EB7\u68C0\u67E5",
40
40
  category: "brain",
41
41
  handler: async () => {
42
- const { runHealthCheck } = await import('./index.mjs');
42
+ const { runHealthCheck } = await import('./index2.mjs');
43
43
  const report = await runHealthCheck();
44
44
  console.log(ansis.cyan.bold("\n\u{1F3E5} Health Check Results\n"));
45
45
  console.log(`${ansis.gray("Overall Score:")} ${ansis.green.bold(report.totalScore + "/100")}`);
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync } from
2
2
  import { mkdir } from 'node:fs/promises';
3
3
  import { homedir } from 'node:os';
4
4
  import { join, basename } from 'pathe';
5
- import { i18n } from './index2.mjs';
5
+ import { i18n } from './index3.mjs';
6
6
  import 'node:process';
7
7
  import 'node:url';
8
8
  import 'i18next';
@@ -1,5 +1,5 @@
1
1
  import ansis from 'ansis';
2
- import { i18n } from './index2.mjs';
2
+ import { i18n } from './index3.mjs';
3
3
  import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';
4
4
  import { homedir } from 'node:os';
5
5
  import { join } from 'pathe';
@@ -10,7 +10,7 @@ import { r as runHealthCheck } from '../shared/ccjk.DfwJOEok.mjs';
10
10
  import 'node:child_process';
11
11
  import 'better-sqlite3';
12
12
  import './constants.mjs';
13
- import './index2.mjs';
13
+ import './index3.mjs';
14
14
  import 'node:url';
15
15
  import 'i18next';
16
16
  import 'i18next-fs-backend';