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.
- package/dist/chunks/auto-updater.mjs +26 -18
- package/dist/chunks/ccr.mjs +2 -2
- package/dist/chunks/check-updates.mjs +1 -1
- package/dist/chunks/codex-config-switch.mjs +1 -1
- package/dist/chunks/codex-provider-manager.mjs +1 -1
- package/dist/chunks/codex.mjs +2 -2
- package/dist/chunks/completion.mjs +1 -1
- package/dist/chunks/config-switch.mjs +1 -1
- package/dist/chunks/features.mjs +6 -5
- package/dist/chunks/init.mjs +2 -2
- package/dist/chunks/mcp-cli.mjs +3 -3
- package/dist/chunks/mcp.mjs +177 -35
- package/dist/chunks/menu-hierarchical.mjs +2 -2
- package/dist/chunks/menu.mjs +1 -1
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/quick-setup.mjs +1 -1
- package/dist/chunks/smart-defaults.mjs +1 -20
- package/dist/chunks/update.mjs +2 -2
- package/dist/cli.mjs +7 -2
- package/dist/shared/{ccjk.LTONy3IS.mjs → ccjk.BOfPON0N.mjs} +1 -1
- package/dist/shared/{ccjk.0aJQmVxS.mjs → ccjk.miT0g_vA.mjs} +3 -160
- package/package.json +1 -1
|
@@ -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
|
-
|
|
309
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
|
package/dist/chunks/ccr.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
47
|
+
import '../shared/ccjk.miT0g_vA.mjs';
|
|
48
48
|
|
|
49
49
|
async function addProviderToExisting(provider, apiKey, allowOverwrite = false) {
|
|
50
50
|
ensureI18nInitialized();
|
package/dist/chunks/codex.mjs
CHANGED
|
@@ -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 {
|
|
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.
|
|
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/
|
|
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.
|
|
49
|
+
import '../shared/ccjk.miT0g_vA.mjs';
|
|
50
50
|
|
|
51
51
|
async function configSwitchCommand(options) {
|
|
52
52
|
try {
|
package/dist/chunks/features.mjs
CHANGED
|
@@ -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.
|
|
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/
|
|
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
|
-
|
|
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 ? "
|
|
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": {
|
package/dist/chunks/init.mjs
CHANGED
|
@@ -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.
|
|
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';
|
package/dist/chunks/mcp-cli.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import a from './index2.mjs';
|
|
2
|
-
import { g as getMcpServices } from '../shared/ccjk.
|
|
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.
|
|
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';
|
package/dist/chunks/mcp.mjs
CHANGED
|
@@ -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.
|
|
9
|
-
import { d as displayInstalledMcpServices, b as isMcpServiceInstalled, i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.
|
|
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 '
|
|
42
|
-
import '
|
|
43
|
-
import '
|
|
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 =
|
|
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
|
-
|
|
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" : "
|
|
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 ?
|
|
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 ?
|
|
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 =
|
|
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 ?
|
|
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/
|
|
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.
|
|
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.
|
|
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"));
|
package/dist/chunks/menu.mjs
CHANGED
|
@@ -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.
|
|
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';
|
package/dist/chunks/package.mjs
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|
package/dist/chunks/update.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|
|
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", "@
|
|
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"
|
|
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.
|
|
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",
|