ccjk 13.5.1 → 13.5.3

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.
@@ -305,16 +305,8 @@ async function checkAndUpdateTools(skipPrompt = false) {
305
305
  console.warn(a.yellow(`\u26A0 Duplicate installation check failed: ${errorMessage}`));
306
306
  }
307
307
  const results = [];
308
- console.log(a.bold("\u{1F4E6} CCJK"));
309
- try {
310
- await checkCcjkVersionAndPrompt(skipPrompt);
311
- results.push({ tool: "CCJK", success: true });
312
- } catch (error) {
313
- const errorMessage = error instanceof Error ? error.message : String(error);
314
- console.error(a.red(`\u274C ${format(i18n.t("updater:updateFailed"), { tool: "CCJK" })}: ${errorMessage}`));
315
- results.push({ tool: "CCJK", success: false, error: errorMessage });
316
- }
317
- console.log();
308
+ let ccjkUpdated = false;
309
+ let ccjkResult = null;
318
310
  console.log(a.bold("\u{1F500} CCR"));
319
311
  try {
320
312
  const success = await updateCcr(false, skipPrompt);
@@ -342,13 +334,24 @@ async function checkAndUpdateTools(skipPrompt = false) {
342
334
  console.error(a.red(`\u274C ${format(i18n.t("updater:updateFailed"), { tool: "CCometixLine" })}: ${errorMessage}`));
343
335
  results.push({ tool: "CCometixLine", success: false, error: errorMessage });
344
336
  }
337
+ console.log();
338
+ console.log(a.bold("\u{1F4E6} CCJK"));
339
+ try {
340
+ const result = await checkCcjkVersionAndPrompt(skipPrompt);
341
+ ccjkUpdated = result.updated;
342
+ ccjkResult = {
343
+ tool: "CCJK",
344
+ success: result.success,
345
+ error: result.error
346
+ };
347
+ } catch (error) {
348
+ const errorMessage = error instanceof Error ? error.message : String(error);
349
+ console.error(a.red(`\u274C ${format(i18n.t("updater:updateFailed"), { tool: "CCJK" })}: ${errorMessage}`));
350
+ ccjkResult = { tool: "CCJK", success: false, error: errorMessage };
351
+ }
345
352
  console.log(a.bold.cyan(`
346
353
  \u{1F4CB} ${i18n.t("updater:updateSummary")}`));
347
- let ccjkUpdated = false;
348
- for (const result of results) {
349
- if (result.tool === "CCJK" && result.success) {
350
- ccjkUpdated = true;
351
- }
354
+ for (const result of ccjkResult ? [ccjkResult, ...results] : results) {
352
355
  if (result.success) {
353
356
  console.log(a.green(`\u2714 ${result.tool}: ${i18n.t("updater:success")}`));
354
357
  } else {
@@ -375,7 +378,7 @@ async function checkCcjkVersionAndPrompt(skipPrompt) {
375
378
  console.log(a.cyan(`${i18n.t("updater:latestVersion")} v${latestVersion}`));
376
379
  if (currentVersion === latestVersion) {
377
380
  console.log(a.green(`\u2713 ${i18n.t("updater:alreadyLatest")}`));
378
- return;
381
+ return { success: true, updated: false };
379
382
  }
380
383
  console.log(a.green(`\u2714 ${i18n.t("updater:updatePrompt")} Yes`));
381
384
  console.log(a.dim("Clearing npx cache..."));
@@ -388,13 +391,18 @@ async function checkCcjkVersionAndPrompt(skipPrompt) {
388
391
  try {
389
392
  await execWithSudoIfNeeded("npm", ["install", "-g", "ccjk@latest", "--force"]);
390
393
  updateSpinner.succeed(a.green(`\u2713 CCJK updated to v${latestVersion}`));
394
+ return { success: true, updated: true };
391
395
  } catch (error) {
396
+ const errorMessage = error instanceof Error ? error.message : String(error);
392
397
  updateSpinner.fail(a.red("\u2717 CCJK update failed"));
393
- console.error(a.red(error instanceof Error ? error.message : String(error)));
398
+ console.error(a.red(errorMessage));
394
399
  console.log(a.gray("\nTry manually: npm install -g ccjk@latest"));
400
+ return { success: false, updated: false, error: errorMessage };
395
401
  }
396
402
  } catch (error) {
397
- console.error(a.red(`${i18n.t("updater:checkFailed")} ${error instanceof Error ? error.message : String(error)}`));
403
+ const errorMessage = error instanceof Error ? error.message : String(error);
404
+ console.error(a.red(`${i18n.t("updater:checkFailed")} ${errorMessage}`));
405
+ return { success: false, updated: false, error: errorMessage };
398
406
  }
399
407
  }
400
408
 
@@ -24,7 +24,7 @@ import 'node:os';
24
24
  import 'node:crypto';
25
25
  import 'buffer';
26
26
  import 'string_decoder';
27
- import '../shared/ccjk.0aJQmVxS.mjs';
27
+ import '../shared/ccjk.miT0g_vA.mjs';
28
28
  import 'node:child_process';
29
29
  import './constants.mjs';
30
30
  import './ccjk-config.mjs';
@@ -81,7 +81,7 @@ import './uninstall.mjs';
81
81
  import '../shared/ccjk.CvChMYvB.mjs';
82
82
  import 'globby';
83
83
  import './update.mjs';
84
- import '../shared/ccjk.LTONy3IS.mjs';
84
+ import '../shared/ccjk.BOfPON0N.mjs';
85
85
 
86
86
  async function ccr(options = {}) {
87
87
  try {
@@ -49,7 +49,7 @@ import '../shared/ccjk.DScm_NnL.mjs';
49
49
  import '../shared/ccjk.BFQ7yr5S.mjs';
50
50
  import './prompts.mjs';
51
51
  import '../shared/ccjk.gDEDGD_t.mjs';
52
- import '../shared/ccjk.0aJQmVxS.mjs';
52
+ import '../shared/ccjk.miT0g_vA.mjs';
53
53
 
54
54
  class ToolUpdateScheduler {
55
55
  /**
@@ -45,7 +45,7 @@ import './platform.mjs';
45
45
  import '../shared/ccjk.DScm_NnL.mjs';
46
46
  import './prompts.mjs';
47
47
  import '../shared/ccjk.gDEDGD_t.mjs';
48
- import '../shared/ccjk.0aJQmVxS.mjs';
48
+ import '../shared/ccjk.miT0g_vA.mjs';
49
49
 
50
50
  async function configureIncrementalManagement() {
51
51
  ensureI18nInitialized();
@@ -44,7 +44,7 @@ import '../shared/ccjk.BFQ7yr5S.mjs';
44
44
  import './prompts.mjs';
45
45
  import '../shared/ccjk.gDEDGD_t.mjs';
46
46
  import '../shared/ccjk.BWFpnOr3.mjs';
47
- import '../shared/ccjk.0aJQmVxS.mjs';
47
+ import '../shared/ccjk.miT0g_vA.mjs';
48
48
 
49
49
  async function addProviderToExisting(provider, apiKey, allowOverwrite = false) {
50
50
  ensureI18nInitialized();
@@ -7,7 +7,7 @@ import ora from './index7.mjs';
7
7
  import { a as semver } from '../shared/ccjk.CxpGa6MC.mjs';
8
8
  import { p as parse } from '../shared/ccjk.BBtCGd_g.mjs';
9
9
  import { x as K } from './main.mjs';
10
- import { CODEX_AUTH_FILE, SUPPORTED_LANGS, CODEX_CONFIG_FILE, CODEX_DIR, CODEX_AGENTS_FILE, CODEX_PROMPTS_DIR, AI_OUTPUT_LANGUAGES, ZCF_CONFIG_FILE } from './constants.mjs';
10
+ import { CODEX_CONFIG_FILE, CODEX_AUTH_FILE, CODEX_DIR, SUPPORTED_LANGS, CODEX_AGENTS_FILE, CODEX_PROMPTS_DIR, ZCF_CONFIG_FILE, AI_OUTPUT_LANGUAGES } from './constants.mjs';
11
11
  import { ensureI18nInitialized, i18n, format } from './index5.mjs';
12
12
  import { updateZcfConfig, readZcfConfig, readDefaultTomlConfig, updateTomlConfig } from './ccjk-config.mjs';
13
13
  import { e as applyAiLanguageDirective } from './config2.mjs';
@@ -17,7 +17,7 @@ import { i as isWindows, m as getMcpCommand, l as getSystemRoot, w as wrapComman
17
17
  import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
18
18
  import { resolveAiOutputLanguage } from './prompts.mjs';
19
19
  import { p as promptBoolean } from '../shared/ccjk.BWFpnOr3.mjs';
20
- import { M as MCP_SERVICE_CONFIGS, s as selectMcpServices, g as getMcpServices } from '../shared/ccjk.0aJQmVxS.mjs';
20
+ import { M as MCP_SERVICE_CONFIGS, s as selectMcpServices, g as getMcpServices } from '../shared/ccjk.miT0g_vA.mjs';
21
21
  import { j as join, d as dirname } from '../shared/ccjk.bQ7Dh1g4.mjs';
22
22
 
23
23
  function detectConfigManagementMode() {
@@ -56,7 +56,7 @@ const COMPLETION_COMMANDS = [
56
56
  subcommands: [
57
57
  { name: "status", description: "Quick MCP status overview" },
58
58
  { name: "doctor", description: "Health check and diagnostics" },
59
- { name: "profile", description: "Switch profile (minimal/dev/full)" },
59
+ { name: "profile", description: "Switch profile (minimal/development/full)" },
60
60
  { name: "release", description: "Release idle services" },
61
61
  { name: "market", description: "MCP service marketplace" },
62
62
  { name: "list", description: "List installed services" },
@@ -46,7 +46,7 @@ import '../shared/ccjk.CxpGa6MC.mjs';
46
46
  import './prompts.mjs';
47
47
  import '../shared/ccjk.gDEDGD_t.mjs';
48
48
  import '../shared/ccjk.BWFpnOr3.mjs';
49
- import '../shared/ccjk.0aJQmVxS.mjs';
49
+ import '../shared/ccjk.miT0g_vA.mjs';
50
50
 
51
51
  async function configSwitchCommand(options) {
52
52
  try {
@@ -3,7 +3,7 @@ import { homedir } from 'node:os';
3
3
  import process__default from 'node:process';
4
4
  import a from './index2.mjs';
5
5
  import { i as inquirer } from './index3.mjs';
6
- import { s as selectMcpServices, g as getMcpServices } from '../shared/ccjk.0aJQmVxS.mjs';
6
+ import { s as selectMcpServices, g as getMcpServices } from '../shared/ccjk.miT0g_vA.mjs';
7
7
  import { SUPPORTED_LANGS, LANG_LABELS } from './constants.mjs';
8
8
  import { ensureI18nInitialized, i18n, changeLanguage } from './index5.mjs';
9
9
  import { updateZcfConfig, readZcfConfig } from './ccjk-config.mjs';
@@ -600,7 +600,7 @@ async function mcpManagerFeature() {
600
600
  value: "list"
601
601
  },
602
602
  {
603
- name: isZh ? `\u{1F504} \u5207\u6362\u914D\u7F6E\u9884\u8BBE ${a.gray("- minimal\uFF08\u8F7B\u91CF\uFF09/ dev\uFF08\u5F00\u53D1\uFF09/ full\uFF08\u5B8C\u6574\uFF09")}` : `\u{1F504} Switch profile ${a.gray("- minimal / dev / full preset")}`,
603
+ name: isZh ? `\u{1F504} \u5207\u6362\u914D\u7F6E\u9884\u8BBE ${a.gray("- minimal\uFF08\u8F7B\u91CF\uFF09/ development\uFF08\u5F00\u53D1\uFF09/ full\uFF08\u5B8C\u6574\uFF09")}` : `\u{1F504} Switch profile ${a.gray("- minimal / development / full preset")}`,
604
604
  value: "profile"
605
605
  },
606
606
  {
@@ -636,18 +636,19 @@ async function mcpManagerFeature() {
636
636
  }
637
637
  case "profile": {
638
638
  const { listProfiles, useProfile } = await import('./mcp.mjs');
639
- await listProfiles();
639
+ const targetTool = readZcfConfig()?.codeToolType === "codex" ? "codex" : "claude-code";
640
+ await listProfiles({ tool: targetTool });
640
641
  const { profileId } = await inquirer.prompt({
641
642
  type: "list",
642
643
  name: "profileId",
643
644
  message: isZh ? "\u9009\u62E9\u8981\u5207\u6362\u7684\u9884\u8BBE:" : "Select profile to switch:",
644
645
  choices: [
645
646
  { name: isZh ? "minimal \u2014 \u4EC5\u6838\u5FC3\u670D\u52A1\uFF08\u6700\u4F4E\u8D44\u6E90\u5360\u7528\uFF09" : "minimal \u2014 Core services only (least resources)", value: "minimal" },
646
- { name: isZh ? "dev \u2014 \u5F00\u53D1\u5E38\u7528\u670D\u52A1\u5957\u88C5" : "dev \u2014 Dev-oriented service bundle", value: "dev" },
647
+ { name: isZh ? "development \u2014 \u5F00\u53D1\u5E38\u7528\u670D\u52A1\u5957\u88C5" : "development \u2014 Dev-oriented service bundle", value: "development" },
647
648
  { name: isZh ? "full \u2014 \u5B8C\u6574\u670D\u52A1\uFF08\u9AD8\u6027\u80FD\u673A\u5668\u63A8\u8350\uFF09" : "full \u2014 Full services (high-end machines)", value: "full" }
648
649
  ]
649
650
  });
650
- await useProfile(profileId);
651
+ await useProfile(profileId, { tool: targetTool });
651
652
  break;
652
653
  }
653
654
  case "release": {
@@ -2,7 +2,7 @@ import { existsSync } from 'node:fs';
2
2
  import process__default from 'node:process';
3
3
  import a from './index2.mjs';
4
4
  import { i as inquirer } from './index3.mjs';
5
- import { s as selectMcpServices, g as getMcpServices, M as MCP_SERVICE_CONFIGS } from '../shared/ccjk.0aJQmVxS.mjs';
5
+ import { s as selectMcpServices, g as getMcpServices, M as MCP_SERVICE_CONFIGS } from '../shared/ccjk.miT0g_vA.mjs';
6
6
  import { s as selectAndInstallWorkflows, W as WORKFLOW_CONFIG_BASE } from '../shared/ccjk.C3o4BXvM.mjs';
7
7
  import { SETTINGS_FILE, DEFAULT_CODE_TOOL_TYPE, CODE_TOOL_BANNERS, API_DEFAULT_URL } from './constants.mjs';
8
8
  import { ensureI18nInitialized, i18n } from './index5.mjs';
@@ -44,9 +44,9 @@ import 'node:os';
44
44
  import 'node:crypto';
45
45
  import 'buffer';
46
46
  import 'string_decoder';
47
- import '../shared/ccjk.bQ7Dh1g4.mjs';
48
47
  import 'node:fs/promises';
49
48
  import 'node:url';
49
+ import '../shared/ccjk.bQ7Dh1g4.mjs';
50
50
  import '../shared/ccjk.BBtCGd_g.mjs';
51
51
  import './index6.mjs';
52
52
  import '../shared/ccjk.RyizuzOI.mjs';
@@ -1,8 +1,8 @@
1
1
  import a from './index2.mjs';
2
- import { g as getMcpServices } from '../shared/ccjk.0aJQmVxS.mjs';
2
+ import { g as getMcpServices } from '../shared/ccjk.miT0g_vA.mjs';
3
3
  import { i18n } from './index5.mjs';
4
4
  import { r as readMcpConfig } from './claude-config.mjs';
5
- import { i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.LTONy3IS.mjs';
5
+ import { i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.BOfPON0N.mjs';
6
6
  import '../shared/ccjk.BAGoDD49.mjs';
7
7
  import './index3.mjs';
8
8
  import 'node:readline';
@@ -21,9 +21,9 @@ import 'node:crypto';
21
21
  import 'buffer';
22
22
  import 'string_decoder';
23
23
  import 'node:child_process';
24
- import '../shared/ccjk.bQ7Dh1g4.mjs';
25
24
  import 'node:fs';
26
25
  import 'node:url';
26
+ import '../shared/ccjk.bQ7Dh1g4.mjs';
27
27
  import './constants.mjs';
28
28
  import './json-config.mjs';
29
29
  import '../shared/ccjk.RyizuzOI.mjs';
@@ -1,28 +1,28 @@
1
1
  import a from './index2.mjs';
2
+ import { CLOUD_ENDPOINTS, isCodeToolType } from './constants.mjs';
2
3
  import { i18n } from './index5.mjs';
4
+ import { readZcfConfig } from './ccjk-config.mjs';
3
5
  import 'node:child_process';
4
6
  import 'node:process';
5
7
  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
8
  import { r as readMcpConfig, b as backupMcpConfig, w as writeMcpConfig } from './claude-config.mjs';
7
9
  import { i as inquirer } from './index3.mjs';
8
- import { M as MCP_SERVICE_CONFIGS } from '../shared/ccjk.0aJQmVxS.mjs';
9
- import { d as displayInstalledMcpServices, b as isMcpServiceInstalled, i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.LTONy3IS.mjs';
10
+ import { M as MCP_SERVICE_CONFIGS } from '../shared/ccjk.miT0g_vA.mjs';
11
+ import { d as displayInstalledMcpServices, b as isMcpServiceInstalled, i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.BOfPON0N.mjs';
10
12
  import { existsSync, unlinkSync, statSync, mkdirSync, readFileSync } from 'node:fs';
11
13
  import { homedir } from 'node:os';
12
14
  import { writeFileAtomic } from './fs-operations.mjs';
13
- import { CLOUD_ENDPOINTS } from './constants.mjs';
14
15
  import { j as join } from '../shared/ccjk.bQ7Dh1g4.mjs';
16
+ import { a as readCodexConfig, d as backupCodexComplete, w as writeCodexConfig, g as applyCodexPlatformCommand } from './codex.mjs';
17
+ import { i as isWindows, l as getSystemRoot } from './platform.mjs';
15
18
  import '../shared/ccjk.BAGoDD49.mjs';
16
19
  import 'node:url';
20
+ import '../shared/ccjk.BBtCGd_g.mjs';
21
+ import './index6.mjs';
17
22
  import './json-config.mjs';
18
23
  import '../shared/ccjk.RyizuzOI.mjs';
19
24
  import 'node:crypto';
20
25
  import 'node:fs/promises';
21
- import './platform.mjs';
22
- import './main.mjs';
23
- import 'module';
24
- import 'node:path';
25
- import 'node:stream';
26
26
  import 'node:readline';
27
27
  import 'stream';
28
28
  import 'node:tty';
@@ -32,15 +32,15 @@ import 'node:util';
32
32
  import 'tty';
33
33
  import 'fs';
34
34
  import 'child_process';
35
+ import 'node:path';
35
36
  import 'buffer';
36
37
  import 'string_decoder';
37
- import './codex.mjs';
38
38
  import './index7.mjs';
39
39
  import '../shared/ccjk.DeWpAShp.mjs';
40
40
  import '../shared/ccjk.CxpGa6MC.mjs';
41
- import '../shared/ccjk.BBtCGd_g.mjs';
42
- import './ccjk-config.mjs';
43
- import './index6.mjs';
41
+ import './main.mjs';
42
+ import 'module';
43
+ import 'node:stream';
44
44
  import './config2.mjs';
45
45
  import '../shared/ccjk.DScm_NnL.mjs';
46
46
  import '../shared/ccjk.BFQ7yr5S.mjs';
@@ -1082,6 +1082,97 @@ function getProfileDescription(profile, lang = "en") {
1082
1082
  return lang === "zh-CN" ? profile.descriptionZh : profile.description;
1083
1083
  }
1084
1084
 
1085
+ function resolveProfileTool(options = {}) {
1086
+ if (options.tool === "codex" || options.tool === "claude-code") {
1087
+ return options.tool;
1088
+ }
1089
+ const zcfConfig = readZcfConfig();
1090
+ if (zcfConfig?.codeToolType && isCodeToolType(zcfConfig.codeToolType)) {
1091
+ return zcfConfig.codeToolType === "codex" ? "codex" : "claude-code";
1092
+ }
1093
+ return "claude-code";
1094
+ }
1095
+ function getToolDisplayName(tool, isZh) {
1096
+ if (tool === "codex") {
1097
+ return "Codex";
1098
+ }
1099
+ return isZh ? "Claude Code" : "Claude Code";
1100
+ }
1101
+ function getConfiguredServiceIds(tool) {
1102
+ if (tool === "codex") {
1103
+ const config2 = readCodexConfig();
1104
+ return (config2?.mcpServices || []).map((service) => service.id);
1105
+ }
1106
+ const config = readMcpConfig();
1107
+ return config?.mcpServers ? Object.keys(config.mcpServers) : [];
1108
+ }
1109
+ function buildCodexProfileService(serviceId) {
1110
+ const serviceConfig = MCP_SERVICE_CONFIGS.find((service) => service.id.toLowerCase() === serviceId.toLowerCase());
1111
+ if (!serviceConfig) {
1112
+ return null;
1113
+ }
1114
+ let command = serviceConfig.config.command || serviceId;
1115
+ let args = (serviceConfig.config.args || []).map((arg) => String(arg));
1116
+ if (serviceId === "serena") {
1117
+ const idx = args.indexOf("--context");
1118
+ if (idx >= 0 && idx + 1 < args.length) {
1119
+ args[idx + 1] = "codex";
1120
+ } else {
1121
+ args.push("--context", "codex");
1122
+ }
1123
+ }
1124
+ const normalizedService = {
1125
+ id: serviceId.toLowerCase(),
1126
+ command,
1127
+ args
1128
+ };
1129
+ applyCodexPlatformCommand(normalizedService);
1130
+ const env = { ...serviceConfig.config.env || {} };
1131
+ if (isWindows()) {
1132
+ const systemRoot = getSystemRoot();
1133
+ if (systemRoot) {
1134
+ env.SYSTEMROOT = systemRoot;
1135
+ }
1136
+ }
1137
+ return {
1138
+ id: normalizedService.id,
1139
+ command: normalizedService.command,
1140
+ args: normalizedService.args || [],
1141
+ env: Object.keys(env).length > 0 ? env : void 0,
1142
+ startup_timeout_sec: 30
1143
+ };
1144
+ }
1145
+ function backupProfileConfig(tool) {
1146
+ return tool === "codex" ? backupCodexComplete() : backupMcpConfig();
1147
+ }
1148
+ function writeProfileForTool(tool, servicesToEnable) {
1149
+ if (tool === "codex") {
1150
+ const existingConfig2 = readCodexConfig();
1151
+ const mcpServices = servicesToEnable.map(buildCodexProfileService).filter((service) => service !== null);
1152
+ const newConfig = {
1153
+ model: existingConfig2?.model || null,
1154
+ modelProvider: existingConfig2?.modelProvider || null,
1155
+ providers: existingConfig2?.providers || [],
1156
+ mcpServices,
1157
+ otherConfig: existingConfig2?.otherConfig || [],
1158
+ modelProviderCommented: existingConfig2?.modelProviderCommented
1159
+ };
1160
+ writeCodexConfig(newConfig);
1161
+ return;
1162
+ }
1163
+ const newServers = {};
1164
+ for (const serviceId of servicesToEnable) {
1165
+ const serviceConfig = MCP_SERVICE_CONFIGS.find((s) => s.id.toLowerCase() === serviceId.toLowerCase());
1166
+ if (serviceConfig) {
1167
+ newServers[serviceId] = serviceConfig.config;
1168
+ }
1169
+ }
1170
+ const existingConfig = readMcpConfig() || {};
1171
+ writeMcpConfig({
1172
+ ...existingConfig,
1173
+ mcpServers: newServers
1174
+ });
1175
+ }
1085
1176
  async function listProfiles(options = {}) {
1086
1177
  const lang = options.lang || i18n.language || "en";
1087
1178
  const isZh = lang === "zh-CN";
@@ -1106,16 +1197,54 @@ async function listProfiles(options = {}) {
1106
1197
  console.log(a.dim(isZh ? "\u4F7F\u7528 `ccjk mcp profile use <id>` \u5207\u6362\u914D\u7F6E" : "Use `ccjk mcp profile use <id>` to switch profile"));
1107
1198
  console.log("");
1108
1199
  }
1200
+ async function showCurrentProfile(options = {}) {
1201
+ const lang = options.lang || i18n.language || "en";
1202
+ const isZh = lang === "zh-CN";
1203
+ const tool = resolveProfileTool(options);
1204
+ const toolName = getToolDisplayName(tool, isZh);
1205
+ const currentServices = getConfiguredServiceIds(tool);
1206
+ const normalizedServices = currentServices.map((service) => service.toLowerCase());
1207
+ console.log("");
1208
+ console.log(a.bold.cyan(isZh ? `\u{1F4CA} \u5F53\u524D ${toolName} MCP \u914D\u7F6E\u72B6\u6001` : `\u{1F4CA} Current ${toolName} MCP Configuration`));
1209
+ console.log(a.dim("\u2500".repeat(50)));
1210
+ console.log("");
1211
+ console.log(`${a.bold(isZh ? "\u5DF2\u914D\u7F6E\u670D\u52A1" : "Configured Services")}: ${currentServices.length}`);
1212
+ if (currentServices.length > 0) {
1213
+ console.log(a.dim(` ${currentServices.join(", ")}`));
1214
+ }
1215
+ const warning = checkMcpPerformance(currentServices.length);
1216
+ if (warning) {
1217
+ console.log("");
1218
+ console.log(formatPerformanceWarning(warning, lang));
1219
+ }
1220
+ const matchedProfile = MCP_PROFILES.find((profile) => {
1221
+ if (profile.services.length === 0)
1222
+ return false;
1223
+ if (profile.services.length !== currentServices.length)
1224
+ return false;
1225
+ return profile.services.every((s) => normalizedServices.includes(s.toLowerCase()));
1226
+ });
1227
+ if (matchedProfile) {
1228
+ console.log("");
1229
+ console.log(`${a.bold(isZh ? "\u5339\u914D\u9884\u8BBE" : "Matched Profile")}: ${a.green(matchedProfile.id)}`);
1230
+ } else {
1231
+ console.log("");
1232
+ console.log(a.dim(isZh ? "\u5F53\u524D\u914D\u7F6E\u4E0D\u5339\u914D\u4EFB\u4F55\u9884\u8BBE" : "Current config does not match any profile"));
1233
+ }
1234
+ console.log("");
1235
+ }
1109
1236
  async function useProfile(profileId, options = {}) {
1110
1237
  const lang = options.lang || i18n.language || "en";
1111
1238
  const isZh = lang === "zh-CN";
1239
+ const tool = resolveProfileTool(options);
1240
+ const toolName = getToolDisplayName(tool, isZh);
1112
1241
  const profile = getProfileById(profileId);
1113
1242
  if (!profile) {
1114
1243
  console.log(a.red(isZh ? `\u274C \u672A\u627E\u5230\u914D\u7F6E\u9884\u8BBE: ${profileId}` : `\u274C Profile not found: ${profileId}`));
1115
1244
  console.log(a.dim(isZh ? `\u53EF\u7528\u9884\u8BBE: ${getProfileIds().join(", ")}` : `Available profiles: ${getProfileIds().join(", ")}`));
1116
1245
  return;
1117
1246
  }
1118
- const backupPath = backupMcpConfig();
1247
+ const backupPath = backupProfileConfig(tool);
1119
1248
  if (backupPath) {
1120
1249
  console.log(a.gray(`\u2714 ${isZh ? "\u5DF2\u5907\u4EFD\u5F53\u524D\u914D\u7F6E" : "Backed up current config"}: ${backupPath}`));
1121
1250
  }
@@ -1125,21 +1254,9 @@ async function useProfile(profileId, options = {}) {
1125
1254
  } else {
1126
1255
  servicesToEnable = profile.services;
1127
1256
  }
1128
- const newServers = {};
1129
- for (const serviceId of servicesToEnable) {
1130
- const serviceConfig = MCP_SERVICE_CONFIGS.find((s) => s.id === serviceId);
1131
- if (serviceConfig) {
1132
- newServers[serviceId] = serviceConfig.config;
1133
- }
1134
- }
1135
- const existingConfig = readMcpConfig() || {};
1136
- const newConfig = {
1137
- ...existingConfig,
1138
- mcpServers: newServers
1139
- };
1140
- writeMcpConfig(newConfig);
1257
+ writeProfileForTool(tool, servicesToEnable);
1141
1258
  const profileName = getProfileName(profile, lang);
1142
- console.log(a.green(`\u2714 ${isZh ? "\u5DF2\u5207\u6362\u5230\u914D\u7F6E\u9884\u8BBE" : "Switched to profile"}: ${profileName}`));
1259
+ console.log(a.green(`\u2714 ${isZh ? "\u5DF2\u4E3A" : "Switched"} ${toolName}${isZh ? " \u5207\u6362\u5230\u914D\u7F6E\u9884\u8BBE" : " profile"}: ${profileName}`));
1143
1260
  console.log(a.dim(` ${isZh ? "\u5DF2\u542F\u7528\u670D\u52A1" : "Enabled services"}: ${servicesToEnable.length}`));
1144
1261
  const warning = checkMcpPerformance(servicesToEnable.length);
1145
1262
  if (warning) {
@@ -1147,25 +1264,46 @@ async function useProfile(profileId, options = {}) {
1147
1264
  console.log(formatPerformanceWarning(warning, lang));
1148
1265
  }
1149
1266
  console.log("");
1150
- console.log(a.yellow(isZh ? "\u26A0\uFE0F \u8BF7\u91CD\u542F Claude Code \u4EE5\u4F7F\u66F4\u6539\u751F\u6548" : "\u26A0\uFE0F Please restart Claude Code for changes to take effect"));
1267
+ console.log(a.yellow(isZh ? `\u26A0\uFE0F \u8BF7\u91CD\u542F ${toolName} \u4EE5\u4F7F\u66F4\u6539\u751F\u6548` : `\u26A0\uFE0F Please restart ${toolName} for changes to take effect`));
1151
1268
  }
1152
1269
 
1270
+ function resolveMcpTool(options = {}) {
1271
+ if (options.tool === "codex" || options.tool === "claude-code") {
1272
+ return options.tool;
1273
+ }
1274
+ const zcfConfig = readZcfConfig();
1275
+ if (zcfConfig?.codeToolType && isCodeToolType(zcfConfig.codeToolType)) {
1276
+ return zcfConfig.codeToolType === "codex" ? "codex" : "claude-code";
1277
+ }
1278
+ return "claude-code";
1279
+ }
1280
+ function getServiceTier(serviceId, tiers) {
1281
+ const directMatch = tiers[serviceId];
1282
+ if (directMatch) {
1283
+ return directMatch;
1284
+ }
1285
+ const caseInsensitiveMatch = Object.entries(tiers).find(
1286
+ ([id]) => id.toLowerCase() === serviceId.toLowerCase()
1287
+ );
1288
+ return caseInsensitiveMatch?.[1] || "ondemand";
1289
+ }
1153
1290
  async function mcpStatus(options = {}) {
1154
1291
  const { readMcpConfig } = await import('./claude-config.mjs').then(function (n) { return n.h; });
1292
+ const { readCodexConfig } = await import('./codex.mjs').then(function (n) { return n.i; });
1155
1293
  const { checkMcpPerformance, formatPerformanceWarning } = await import('./mcp-performance.mjs').then(function (n) { return n.e; });
1156
1294
  const { MCP_SERVICE_TIERS } = await import('./mcp-performance.mjs').then(function (n) { return n.m; });
1157
1295
  const lang = options.lang || i18n.language || "en";
1158
1296
  const isZh = lang === "zh-CN";
1297
+ const targetTool = resolveMcpTool(options);
1298
+ const services = targetTool === "codex" ? (readCodexConfig()?.mcpServices || []).map((service) => service.id) : Object.keys((await readMcpConfig())?.mcpServers || {});
1159
1299
  console.log("");
1160
- console.log(a.bold.cyan(isZh ? "\u26A1 MCP \u5FEB\u901F\u72B6\u6001" : "\u26A1 MCP Quick Status"));
1300
+ console.log(a.bold.cyan(isZh ? `\u26A1 ${targetTool === "codex" ? "Codex" : "Claude Code"} MCP \u5FEB\u901F\u72B6\u6001` : `\u26A1 ${targetTool === "codex" ? "Codex" : "Claude Code"} MCP Quick Status`));
1161
1301
  console.log(a.dim("\u2500".repeat(40)));
1162
- const config = await readMcpConfig();
1163
- const services = Object.keys(config?.mcpServers || {});
1164
1302
  let coreCount = 0;
1165
1303
  let ondemandCount = 0;
1166
1304
  let scenarioCount = 0;
1167
1305
  for (const svc of services) {
1168
- const tier = MCP_SERVICE_TIERS[svc] || "ondemand";
1306
+ const tier = getServiceTier(svc, MCP_SERVICE_TIERS);
1169
1307
  if (tier === "core")
1170
1308
  coreCount++;
1171
1309
  else if (tier === "ondemand")
@@ -1186,7 +1324,7 @@ async function mcpStatus(options = {}) {
1186
1324
  console.log(a.green(isZh ? "\u2713 \u6027\u80FD\u72B6\u6001\u826F\u597D" : "\u2713 Performance OK"));
1187
1325
  }
1188
1326
  console.log("");
1189
- console.log(a.dim(isZh ? "\u63D0\u793A: \u4F7F\u7528 ccjk mcp doctor \u67E5\u770B\u8BE6\u7EC6\u8BCA\u65AD" : "Tip: Use ccjk mcp doctor for detailed diagnostics"));
1327
+ console.log(a.dim(isZh ? `\u63D0\u793A: \u4F7F\u7528 ccjk mcp doctor${targetTool === "codex" ? " -T codex" : ""} \u67E5\u770B\u8BE6\u7EC6\u8BCA\u65AD` : `Tip: Use ccjk mcp doctor${targetTool === "codex" ? " -T codex" : ""} for detailed diagnostics`));
1190
1328
  }
1191
1329
  function mcpHelp(options = {}) {
1192
1330
  const lang = options.lang || i18n.language || "en";
@@ -1206,7 +1344,11 @@ function mcpHelp(options = {}) {
1206
1344
  },
1207
1345
  {
1208
1346
  cmd: "ccjk mcp profile [name]",
1209
- desc: isZh ? "\u5207\u6362\u914D\u7F6E\u9884\u8BBE (minimal/dev/full)" : "Switch profile (minimal/dev/full)"
1347
+ desc: isZh ? "\u5207\u6362\u914D\u7F6E\u9884\u8BBE (minimal/development/full)" : "Switch profile (minimal/development/full)"
1348
+ },
1349
+ {
1350
+ cmd: "ccjk mcp profile use minimal -T codex",
1351
+ desc: isZh ? "\u5207\u6362 Codex \u542F\u52A8\u65F6\u52A0\u8F7D\u7684 MCP \u7EC4\u5408" : "Switch the MCP set loaded on Codex startup"
1210
1352
  },
1211
1353
  {
1212
1354
  cmd: "ccjk mcp release",
@@ -1230,4 +1372,4 @@ function mcpHelp(options = {}) {
1230
1372
  console.log(a.dim(isZh ? "\u{1F4A1} \u63A8\u8350: \u4F7F\u7528 minimal \u9884\u8BBE\u53EF\u663E\u8457\u63D0\u5347\u6027\u80FD" : "\u{1F4A1} Tip: Use minimal profile for best performance"));
1231
1373
  }
1232
1374
 
1233
- export { listProfiles, mcpDoctor, mcpHelp, mcpInstall, mcpList, mcpRelease, mcpSearch, mcpStatus, mcpUninstall, useProfile };
1375
+ export { listProfiles, mcpDoctor, mcpHelp, mcpInstall, mcpList, mcpRelease, mcpSearch, mcpStatus, mcpUninstall, showCurrentProfile, useProfile };
@@ -21,7 +21,7 @@ import 'string_decoder';
21
21
  import 'node:fs';
22
22
  import 'node:url';
23
23
  import '../shared/ccjk.bQ7Dh1g4.mjs';
24
- import '../shared/ccjk.0aJQmVxS.mjs';
24
+ import '../shared/ccjk.miT0g_vA.mjs';
25
25
  import 'node:child_process';
26
26
  import './constants.mjs';
27
27
  import './banner.mjs';
@@ -81,7 +81,7 @@ import './uninstall.mjs';
81
81
  import '../shared/ccjk.CvChMYvB.mjs';
82
82
  import 'globby';
83
83
  import './update.mjs';
84
- import '../shared/ccjk.LTONy3IS.mjs';
84
+ import '../shared/ccjk.BOfPON0N.mjs';
85
85
 
86
86
  function renderMenuHeader(context, _isZh) {
87
87
  const title = context.breadcrumb.join(i18n.t("menu:menu.breadcrumb.separator"));
@@ -2,7 +2,7 @@ import { existsSync } from 'node:fs';
2
2
  import process__default from 'node:process';
3
3
  import a from './index2.mjs';
4
4
  import { i as inquirer } from './index3.mjs';
5
- import { M as MCP_SERVICE_CONFIGS } from '../shared/ccjk.0aJQmVxS.mjs';
5
+ import { M as MCP_SERVICE_CONFIGS } from '../shared/ccjk.miT0g_vA.mjs';
6
6
  import { CODE_TOOL_BANNERS, CLAUDE_DIR, isCodeToolType, DEFAULT_CODE_TOOL_TYPE } from './constants.mjs';
7
7
  import { ensureI18nInitialized, i18n } from './index5.mjs';
8
8
  import { displayBannerWithInfo } from './banner.mjs';
@@ -1,3 +1,3 @@
1
- const version = "13.5.1";
1
+ const version = "13.5.3";
2
2
 
3
3
  export { version };
@@ -37,7 +37,7 @@ import '../shared/ccjk.DJuyfrlL.mjs';
37
37
  import 'node:url';
38
38
  import '../shared/ccjk.BBtCGd_g.mjs';
39
39
  import './index6.mjs';
40
- import '../shared/ccjk.0aJQmVxS.mjs';
40
+ import '../shared/ccjk.miT0g_vA.mjs';
41
41
  import '../shared/ccjk.C3o4BXvM.mjs';
42
42
  import './banner.mjs';
43
43
  import './config.mjs';
@@ -285,26 +285,7 @@ class SmartDefaultsDetector {
285
285
  * Get recommended MCP services based on environment + project context
286
286
  */
287
287
  getRecommendedMcpServices(platform, project) {
288
- const runtime = project?.runtime;
289
- if (runtime?.isCI) {
290
- return ["context7", "mcp-deepwiki"];
291
- }
292
- if (runtime?.isContainer) {
293
- return ["context7", "mcp-deepwiki"];
294
- }
295
- const core = ["context7", "mcp-deepwiki", "open-websearch"];
296
- const extras = [];
297
- const hasBrowser = runtime?.hasBrowser ?? (platform === "darwin" || platform === "win32");
298
- if (hasBrowser) {
299
- extras.push("Playwright");
300
- }
301
- extras.push("sqlite");
302
- if (project && ["typescript", "java", "csharp"].includes(project.language)) {
303
- if (!runtime?.isHeadless) {
304
- extras.push("serena");
305
- }
306
- }
307
- return [...core, ...extras];
288
+ return ["context7"];
308
289
  }
309
290
  /**
310
291
  * Get recommended hook template IDs based on project toolchain
@@ -1,7 +1,7 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import a from './index2.mjs';
3
3
  import { i as inquirer } from './index3.mjs';
4
- import { M as MCP_SERVICE_CONFIGS, g as getMcpServices } from '../shared/ccjk.0aJQmVxS.mjs';
4
+ import { M as MCP_SERVICE_CONFIGS, g as getMcpServices } from '../shared/ccjk.miT0g_vA.mjs';
5
5
  import { SETTINGS_FILE, DEFAULT_CODE_TOOL_TYPE, resolveCodeToolType as resolveCodeToolType$1, isCodeToolType } from './constants.mjs';
6
6
  import { i18n } from './index5.mjs';
7
7
  import { displayBanner } from './banner.mjs';
@@ -12,7 +12,7 @@ import { c as copyConfigFiles } from './config2.mjs';
12
12
  import { n as needsMigration, m as migrateSettingsForTokenRetrieval, d as displayMigrationResult, p as promptMigration } from '../shared/ccjk.byom1b8z.mjs';
13
13
  import { u as updatePromptOnly } from '../shared/ccjk.Dgq22o6V.mjs';
14
14
  import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.BIxuVL3_.mjs';
15
- import { a as installMcpServices } from '../shared/ccjk.LTONy3IS.mjs';
15
+ import { a as installMcpServices } from '../shared/ccjk.BOfPON0N.mjs';
16
16
  import { resolveAiOutputLanguage } from './prompts.mjs';
17
17
  import { g as getRuntimeVersion } from '../shared/ccjk.gDEDGD_t.mjs';
18
18
  import { checkClaudeCodeVersionAndPrompt } from './version-checker.mjs';
package/dist/cli.mjs CHANGED
@@ -135,6 +135,7 @@ const COMMANDS = [
135
135
  description: "MCP Server management",
136
136
  tier: "extended",
137
137
  options: [
138
+ { flags: "--tool, -T <type>", description: "Target tool (claude-code, codex)" },
138
139
  { flags: "--verbose, -v", description: "Verbose output" },
139
140
  { flags: "--dry-run, -d", description: "Preview changes" },
140
141
  { flags: "--yes, -y", description: "Skip confirmation prompts" },
@@ -152,9 +153,13 @@ const COMMANDS = [
152
153
  const { mcpDoctor } = await import('./chunks/mcp.mjs');
153
154
  await mcpDoctor(options);
154
155
  } else if (actionStr === "profile") {
155
- const { listProfiles, useProfile } = await import('./chunks/mcp.mjs');
156
- if (!argsArr[0] || argsArr[0] === "list") {
156
+ const { listProfiles, showCurrentProfile, useProfile } = await import('./chunks/mcp.mjs');
157
+ if (!argsArr[0] || argsArr[0] === "list" || argsArr[0] === "ls") {
157
158
  await listProfiles(options);
159
+ } else if (argsArr[0] === "current" || argsArr[0] === "status") {
160
+ await showCurrentProfile(options);
161
+ } else if (argsArr[0] === "use" || argsArr[0] === "switch") {
162
+ await useProfile(argsArr[1] || "", options);
158
163
  } else {
159
164
  await useProfile(argsArr[0], options);
160
165
  }
@@ -1,6 +1,6 @@
1
1
  import a from '../chunks/index2.mjs';
2
2
  import { i as inquirer } from '../chunks/index3.mjs';
3
- import { a as getMcpService, d as dynamicMcpRegistry, M as MCP_SERVICE_CONFIGS } from './ccjk.0aJQmVxS.mjs';
3
+ import { a as getMcpService, d as dynamicMcpRegistry, M as MCP_SERVICE_CONFIGS } from './ccjk.miT0g_vA.mjs';
4
4
  import { SETTINGS_FILE, CLAUDE_DIR, ClAUDE_CONFIG_FILE, CODEX_CONFIG_FILE } from '../chunks/constants.mjs';
5
5
  import { exists, ensureDir } from '../chunks/fs-operations.mjs';
6
6
  import { readJsonConfig, writeJsonConfig } from '../chunks/json-config.mjs';
@@ -1,187 +1,30 @@
1
1
  import a from '../chunks/index2.mjs';
2
2
  import { i as inquirer } from '../chunks/index3.mjs';
3
3
  import 'node:child_process';
4
- import { homedir } from 'node:os';
5
4
  import process__default from 'node:process';
6
5
  import { ensureI18nInitialized, i18n } from '../chunks/index5.mjs';
7
- import { j as join } from './ccjk.bQ7Dh1g4.mjs';
8
6
 
9
- const PLAYWRIGHT_PROFILES_DIR = join(homedir(), ".ccjk", "playwright");
10
- function createPlaywrightMcpConfig(options = {}) {
11
- const {
12
- profile = "default",
13
- headless = false,
14
- browser = "chromium",
15
- userDataDir
16
- } = options;
17
- const resolvedUserDataDir = userDataDir || join(PLAYWRIGHT_PROFILES_DIR, profile);
18
- const args = ["-y", "@playwright/mcp@latest"];
19
- args.push("--browser", browser);
20
- args.push("--user-data-dir", resolvedUserDataDir);
21
- if (headless) {
22
- args.push("--headless");
23
- }
24
- return {
25
- type: "stdio",
26
- command: "npx",
27
- args,
28
- env: {}
29
- };
30
- }
31
7
  const MCP_SERVICE_CONFIGS = [
32
- // Documentation and Search Services - Universal (no GUI required)
8
+ // Documentation service - the only MCP we currently keep enabled in-product
33
9
  {
34
10
  id: "context7",
35
11
  requiresApiKey: false,
36
- config: {
37
- type: "stdio",
38
- command: "npx",
39
- args: ["-y", "@upstash/context7-mcp@latest"],
40
- env: {}
41
- }
42
- // Works on all platforms - no special requirements
43
- },
44
- {
45
- id: "open-websearch",
46
- requiresApiKey: false,
47
- config: {
48
- type: "stdio",
49
- command: "npx",
50
- args: ["-y", "open-websearch@latest"],
51
- env: {
52
- MODE: "stdio",
53
- DEFAULT_SEARCH_ENGINE: "duckduckgo",
54
- ALLOWED_SEARCH_ENGINES: "duckduckgo,bing,brave"
55
- }
56
- }
57
- // Works on all platforms - no special requirements
58
- },
59
- {
60
- id: "mcp-deepwiki",
61
- requiresApiKey: false,
62
- config: {
63
- type: "stdio",
64
- command: "npx",
65
- args: ["-y", "mcp-deepwiki@latest"],
66
- env: {}
67
- }
68
- // Works on all platforms - no special requirements
69
- },
70
- // Development Workflow Services
71
- {
72
- id: "spec-workflow",
73
- requiresApiKey: false,
74
- config: {
75
- type: "stdio",
76
- command: "npx",
77
- args: ["-y", "@pimzino/spec-workflow-mcp@latest"],
78
- env: {}
79
- }
80
- // Works on all platforms - no special requirements
81
- },
82
- {
83
- id: "serena",
84
- requiresApiKey: false,
85
- config: {
86
- type: "stdio",
87
- command: "uvx",
88
- args: ["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server", "--context", "ide-assistant", "--enable-web-dashboard", "false"],
89
- env: {}
90
- },
91
- platformRequirements: {
92
- requiredCommands: ["uvx"]
93
- // Requires uv/uvx to be installed
94
- }
95
- },
96
- // Browser and Automation Services - Require GUI environment
97
- {
98
- id: "Playwright",
99
- requiresApiKey: false,
100
- config: createPlaywrightMcpConfig(),
101
- // Uses default profile with chromium browser
102
- platformRequirements: {
103
- platforms: ["macos", "windows"],
104
- // GUI required - exclude headless Linux/WSL/Termux
105
- requiresGui: true
106
- }
107
- },
108
- // Cross-session Memory Services
109
- {
110
- id: "intent-engine",
111
- requiresApiKey: false,
112
12
  defaultSelected: true,
113
13
  config: {
114
14
  type: "stdio",
115
15
  command: "npx",
116
- args: ["-y", "@origintask/intent-engine@latest", "mcp"],
117
- env: {}
118
- }
119
- // Works on all platforms - no special requirements
120
- },
121
- // Anthropic Official MCP Services - Universal
122
- // Note: Removed low-value services: filesystem (buggy), puppeteer (duplicate of Playwright),
123
- // memory (Claude has built-in memory), fetch (Claude has WebFetch), sequential-thinking (limited value)
124
- {
125
- id: "sqlite",
126
- requiresApiKey: false,
127
- config: {
128
- type: "stdio",
129
- command: "npx",
130
- args: ["-y", "@anthropic-ai/mcp-server-sqlite@latest"],
16
+ args: ["-y", "@upstash/context7-mcp@latest"],
131
17
  env: {}
132
18
  }
133
- // Works on all platforms - no special requirements
134
19
  }
135
20
  ];
136
21
  async function getMcpServices() {
137
22
  ensureI18nInitialized();
138
23
  const mcpServiceList = [
139
- // Documentation and Search Services
140
24
  {
141
25
  id: "context7",
142
26
  name: i18n.t("mcp:services.context7.name"),
143
27
  description: i18n.t("mcp:services.context7.description")
144
- },
145
- {
146
- id: "open-websearch",
147
- name: i18n.t("mcp:services.open-websearch.name"),
148
- description: i18n.t("mcp:services.open-websearch.description")
149
- },
150
- {
151
- id: "mcp-deepwiki",
152
- name: i18n.t("mcp:services.mcp-deepwiki.name"),
153
- description: i18n.t("mcp:services.mcp-deepwiki.description")
154
- },
155
- // Development Workflow Services
156
- {
157
- id: "spec-workflow",
158
- name: i18n.t("mcp:services.spec-workflow.name"),
159
- description: i18n.t("mcp:services.spec-workflow.description")
160
- },
161
- {
162
- id: "serena",
163
- name: i18n.t("mcp:services.serena.name"),
164
- description: i18n.t("mcp:services.serena.description")
165
- },
166
- // Browser and Automation Services
167
- {
168
- id: "Playwright",
169
- name: i18n.t("mcp:services.playwright.name"),
170
- description: i18n.t("mcp:services.playwright.description")
171
- },
172
- // Cross-session Memory Services
173
- {
174
- id: "intent-engine",
175
- name: i18n.t("mcp:services.intent-engine.name"),
176
- description: i18n.t("mcp:services.intent-engine.description")
177
- },
178
- // Anthropic Official MCP Services
179
- // Note: Removed low-value services: filesystem (buggy), puppeteer (duplicate),
180
- // memory (Claude built-in), fetch (Claude WebFetch), sequential-thinking (limited value)
181
- {
182
- id: "sqlite",
183
- name: i18n.t("mcp:services.sqlite.name"),
184
- description: i18n.t("mcp:services.sqlite.description")
185
28
  }
186
29
  ];
187
30
  return MCP_SERVICE_CONFIGS.map((config) => {
@@ -205,7 +48,7 @@ async function getMcpService(id) {
205
48
  }
206
49
  const DEFAULT_MCP_TOOL_SEARCH_CONFIG = {
207
50
  mcpAutoEnableThreshold: 10,
208
- excludedServices: ["mcp-search", "context7", "sqlite"]
51
+ excludedServices: ["mcp-search", "context7"]
209
52
  };
210
53
  function getMcpToolSearchConfig() {
211
54
  const env = process__default.env;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ccjk",
3
3
  "type": "module",
4
- "version": "13.5.1",
4
+ "version": "13.5.3",
5
5
  "description": "Turn Claude Code into a production-ready AI dev environment with one-command setup, persistent memory, MCP automation, cloud sync, and zero-config browser workflows.",
6
6
  "author": {
7
7
  "name": "CCJK Team",