ccjk 9.3.2 → 9.3.4
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/ccjk-mcp.mjs +1 -1
- package/dist/chunks/ccr.mjs +26 -26
- package/dist/chunks/claude-config.mjs +2 -2
- package/dist/chunks/claude-wrapper.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/config.mjs +1 -1
- package/dist/chunks/config2.mjs +1 -1
- package/dist/chunks/doctor.mjs +1 -1
- package/dist/chunks/features.mjs +17 -68
- package/dist/chunks/init.mjs +3 -3
- package/dist/chunks/installer.mjs +1 -1
- package/dist/chunks/mcp.mjs +2 -2
- package/dist/chunks/menu.mjs +308 -115
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/platform.mjs +1 -1
- package/dist/chunks/quick-setup.mjs +37 -31
- package/package.json +2 -2
package/dist/chunks/ccjk-mcp.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import ansis from 'ansis';
|
|
|
6
6
|
import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
7
7
|
import { a as analyzeProject, g as getTemplatesClient } from '../shared/ccjk.DKM8a98N.mjs';
|
|
8
8
|
import { b as backupMcpConfig, r as readMcpConfig, m as mergeMcpServers, w as writeMcpConfig } from './claude-config.mjs';
|
|
9
|
-
import {
|
|
9
|
+
import { e as commandExists } from './platform.mjs';
|
|
10
10
|
import { CLAUDE_DIR } from './constants.mjs';
|
|
11
11
|
import 'node:fs';
|
|
12
12
|
import 'node:url';
|
package/dist/chunks/ccr.mjs
CHANGED
|
@@ -20,55 +20,55 @@ import 'node:crypto';
|
|
|
20
20
|
import 'node:fs/promises';
|
|
21
21
|
import './json-config.mjs';
|
|
22
22
|
import 'dayjs';
|
|
23
|
+
import '../shared/ccjk.SIo9I8q3.mjs';
|
|
23
24
|
import './features.mjs';
|
|
24
|
-
import './
|
|
25
|
-
import '
|
|
26
|
-
import '
|
|
27
|
-
import 'tinyexec';
|
|
28
|
-
import './config.mjs';
|
|
25
|
+
import './config2.mjs';
|
|
26
|
+
import 'node:child_process';
|
|
27
|
+
import 'node:util';
|
|
29
28
|
import './claude-config.mjs';
|
|
30
29
|
import './platform.mjs';
|
|
31
|
-
import '
|
|
32
|
-
import './
|
|
30
|
+
import 'tinyexec';
|
|
31
|
+
import './config.mjs';
|
|
33
32
|
import '../shared/ccjk.DHbrGcgg.mjs';
|
|
34
33
|
import 'inquirer-toggle';
|
|
35
|
-
import 'node:child_process';
|
|
36
|
-
import './config2.mjs';
|
|
37
|
-
import 'node:util';
|
|
38
34
|
import './init.mjs';
|
|
35
|
+
import './codex.mjs';
|
|
36
|
+
import 'ora';
|
|
37
|
+
import 'semver';
|
|
38
|
+
import '../shared/ccjk.BFQ7yr5S.mjs';
|
|
39
|
+
import './prompts.mjs';
|
|
39
40
|
import './workflows.mjs';
|
|
40
41
|
import './auto-updater.mjs';
|
|
41
42
|
import './version-checker.mjs';
|
|
42
43
|
import 'node:path';
|
|
43
|
-
import '../shared/ccjk.SIo9I8q3.mjs';
|
|
44
44
|
import '../shared/ccjk.KfIN1Sqj.mjs';
|
|
45
45
|
import './installer.mjs';
|
|
46
46
|
import './ccu.mjs';
|
|
47
47
|
import './commands.mjs';
|
|
48
|
-
import './update.mjs';
|
|
49
|
-
import './doctor.mjs';
|
|
50
|
-
import './api-providers.mjs';
|
|
51
|
-
import '../shared/ccjk.pi0nsyn3.mjs';
|
|
52
|
-
import '../shared/ccjk.J8YiPsOw.mjs';
|
|
53
|
-
import './config-switch.mjs';
|
|
54
48
|
import './claude-code-config-manager.mjs';
|
|
55
|
-
import './
|
|
56
|
-
import '
|
|
57
|
-
import '../shared/ccjk.DGjQxTq_.mjs';
|
|
58
|
-
import 'trash';
|
|
59
|
-
import './check-updates.mjs';
|
|
60
|
-
import './ccjk-skills.mjs';
|
|
49
|
+
import './config-switch.mjs';
|
|
50
|
+
import './ccjk-agents.mjs';
|
|
61
51
|
import 'consola';
|
|
62
52
|
import '../shared/ccjk.DKM8a98N.mjs';
|
|
53
|
+
import 'fs-extra';
|
|
63
54
|
import 'fs';
|
|
64
55
|
import 'path';
|
|
65
56
|
import 'url';
|
|
66
57
|
import 'module';
|
|
67
58
|
import 'ofetch';
|
|
68
|
-
import '../shared/ccjk.Bdhyg3X-.mjs';
|
|
69
|
-
import './ccjk-mcp.mjs';
|
|
70
|
-
import './ccjk-agents.mjs';
|
|
71
59
|
import '../shared/ccjk.AqnXPAzw.mjs';
|
|
60
|
+
import './ccjk-mcp.mjs';
|
|
61
|
+
import './ccjk-skills.mjs';
|
|
62
|
+
import '../shared/ccjk.Bdhyg3X-.mjs';
|
|
63
|
+
import './check-updates.mjs';
|
|
64
|
+
import './doctor.mjs';
|
|
65
|
+
import './api-providers.mjs';
|
|
66
|
+
import '../shared/ccjk.pi0nsyn3.mjs';
|
|
67
|
+
import '../shared/ccjk.J8YiPsOw.mjs';
|
|
68
|
+
import './uninstall.mjs';
|
|
69
|
+
import '../shared/ccjk.DGjQxTq_.mjs';
|
|
70
|
+
import 'trash';
|
|
71
|
+
import './update.mjs';
|
|
72
72
|
|
|
73
73
|
async function ccr(options = {}) {
|
|
74
74
|
try {
|
|
@@ -2,7 +2,7 @@ import { join } from 'pathe';
|
|
|
2
2
|
import { CLAUDE_VSC_CONFIG_FILE, CLAUDE_DIR, ClAUDE_CONFIG_FILE } from './constants.mjs';
|
|
3
3
|
import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
4
4
|
import { readJsonConfig, writeJsonConfig, backupJsonConfig } from './json-config.mjs';
|
|
5
|
-
import {
|
|
5
|
+
import { k as isWindows, l as getMcpCommand } from './platform.mjs';
|
|
6
6
|
|
|
7
7
|
function mergeArraysUnique(arr1, arr2) {
|
|
8
8
|
const combined = [...arr1 || [], ...arr2 || []];
|
|
@@ -206,4 +206,4 @@ const claudeConfig = {
|
|
|
206
206
|
writeMcpConfig: writeMcpConfig
|
|
207
207
|
};
|
|
208
208
|
|
|
209
|
-
export {
|
|
209
|
+
export { addCompletedOnboarding as a, backupMcpConfig as b, buildMcpServerConfig as c, deepMerge as d, claudeConfig as e, fixWindowsMcpConfig as f, mergeMcpServers as m, readMcpConfig as r, setPrimaryApiKey as s, writeMcpConfig as w };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import process__default from 'node:process';
|
|
2
2
|
import { exec } from 'tinyexec';
|
|
3
3
|
import { i18n, initI18n } from './index.mjs';
|
|
4
|
-
import {
|
|
4
|
+
import { j as findRealCommandPath } from './platform.mjs';
|
|
5
5
|
import 'node:fs';
|
|
6
6
|
import 'node:url';
|
|
7
7
|
import 'i18next';
|
|
@@ -5,7 +5,7 @@ import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
|
5
5
|
import { readJsonConfig } from './json-config.mjs';
|
|
6
6
|
import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
|
|
7
7
|
import { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
|
|
8
|
-
import {
|
|
8
|
+
import { f as detectConfigManagementMode } from './codex.mjs';
|
|
9
9
|
import { deleteProviders, addProviderToExisting, editExistingProvider } from './codex-provider-manager.mjs';
|
|
10
10
|
import 'node:os';
|
|
11
11
|
import 'pathe';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
2
|
-
import { a as readCodexConfig,
|
|
2
|
+
import { a as readCodexConfig, d as backupCodexComplete, w as writeCodexConfig, e as writeAuthFile } from './codex.mjs';
|
|
3
3
|
import 'node:fs';
|
|
4
4
|
import 'node:process';
|
|
5
5
|
import 'node:url';
|
package/dist/chunks/codex.mjs
CHANGED
|
@@ -14,7 +14,7 @@ import { updateZcfConfig, readZcfConfig, readDefaultTomlConfig, updateTomlConfig
|
|
|
14
14
|
import { e as applyAiLanguageDirective } from './config.mjs';
|
|
15
15
|
import { exists, readFile, ensureDir, writeFileAtomic, writeFile, copyFile, copyDir } from './fs-operations.mjs';
|
|
16
16
|
import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
|
|
17
|
-
import {
|
|
17
|
+
import { k as isWindows, l as getMcpCommand, m as getSystemRoot, w as wrapCommandWithSudo, n as normalizeTomlPath } from './platform.mjs';
|
|
18
18
|
import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
|
|
19
19
|
import { resolveAiOutputLanguage } from './prompts.mjs';
|
|
20
20
|
import { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
|
|
@@ -1947,4 +1947,4 @@ const codex = {
|
|
|
1947
1947
|
writeCodexConfig: writeCodexConfig
|
|
1948
1948
|
};
|
|
1949
1949
|
|
|
1950
|
-
export { MCP_SERVICE_CONFIGS as M, readCodexConfig as a, switchToOfficialLogin as b, switchToProvider as c,
|
|
1950
|
+
export { MCP_SERVICE_CONFIGS as M, readCodexConfig as a, switchToOfficialLogin as b, switchToProvider as c, backupCodexComplete as d, writeAuthFile as e, detectConfigManagementMode as f, runCodexFullInit as g, selectMcpServices as h, getMcpServices as i, getMcpService as j, applyCodexPlatformCommand as k, listCodexProviders as l, codex as m, runCodexUpdate as r, switchCodexProvider as s, writeCodexConfig as w };
|
package/dist/chunks/config.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import inquirer from 'inquirer';
|
|
|
5
5
|
import { join, dirname } from 'pathe';
|
|
6
6
|
import { SETTINGS_FILE, CLAUDE_VSC_CONFIG_FILE, CLAUDE_DIR, AI_OUTPUT_LANGUAGES } from './constants.mjs';
|
|
7
7
|
import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
8
|
-
import { d as deepMerge, s as setPrimaryApiKey,
|
|
8
|
+
import { d as deepMerge, s as setPrimaryApiKey, a as addCompletedOnboarding } from './claude-config.mjs';
|
|
9
9
|
import { ensureDir, exists, copyDir, writeFileAtomic, copyFile } from './fs-operations.mjs';
|
|
10
10
|
import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
|
|
11
11
|
|
package/dist/chunks/config2.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import inquirer from 'inquirer';
|
|
|
9
9
|
import { join } from 'pathe';
|
|
10
10
|
import { SETTINGS_FILE } from './constants.mjs';
|
|
11
11
|
import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
12
|
-
import { s as setPrimaryApiKey,
|
|
12
|
+
import { s as setPrimaryApiKey, a as addCompletedOnboarding } from './claude-config.mjs';
|
|
13
13
|
import { b as backupExistingConfig } from './config.mjs';
|
|
14
14
|
import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
|
|
15
15
|
import { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
|
package/dist/chunks/doctor.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { getApiProviderPresets } from './api-providers.mjs';
|
|
|
7
7
|
import { SETTINGS_FILE, CLAUDE_DIR } from './constants.mjs';
|
|
8
8
|
import { i18n } from './index.mjs';
|
|
9
9
|
import { g as getPermissionManager } from '../shared/ccjk.pi0nsyn3.mjs';
|
|
10
|
-
import {
|
|
10
|
+
import { e as commandExists } from './platform.mjs';
|
|
11
11
|
import { P as ProviderHealthMonitor } from '../shared/ccjk.J8YiPsOw.mjs';
|
|
12
12
|
import { platform, userInfo, homedir } from 'node:os';
|
|
13
13
|
import ora from 'ora';
|
package/dist/chunks/features.mjs
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
1
|
import ansis from 'ansis';
|
|
2
2
|
import inquirer from 'inquirer';
|
|
3
|
-
import { d as selectMcpServices, g as getMcpServices } from './codex.mjs';
|
|
4
3
|
import { SUPPORTED_LANGS, LANG_LABELS } from './constants.mjs';
|
|
5
4
|
import { ensureI18nInitialized, i18n, changeLanguage } from './index.mjs';
|
|
6
5
|
import { updateZcfConfig, readZcfConfig } from './ccjk-config.mjs';
|
|
7
6
|
import { setupCcrConfiguration } from './config2.mjs';
|
|
8
7
|
import { a as isCcrInstalled, b as installCcr } from './init.mjs';
|
|
9
|
-
import { r as readMcpConfig, f as fixWindowsMcpConfig, w as writeMcpConfig, b as backupMcpConfig, a as buildMcpServerConfig, m as mergeMcpServers } from './claude-config.mjs';
|
|
10
8
|
import { g as getExistingApiConfig, p as promptApiConfigurationAction, a as configureApi, s as switchToOfficialLogin } from './config.mjs';
|
|
11
9
|
import { a as modifyApiConfigPartially, v as validateApiKey, f as formatApiKeyDisplay } from '../shared/ccjk.KfIN1Sqj.mjs';
|
|
12
|
-
import { i as isWindows } from './platform.mjs';
|
|
13
10
|
import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
|
|
14
|
-
import
|
|
11
|
+
import 'node:os';
|
|
12
|
+
import 'pathe';
|
|
13
|
+
import 'node:fs';
|
|
15
14
|
import 'node:process';
|
|
16
15
|
import 'node:url';
|
|
17
|
-
import '
|
|
18
|
-
import '
|
|
19
|
-
import 'pathe';
|
|
20
|
-
import 'semver';
|
|
16
|
+
import 'i18next';
|
|
17
|
+
import 'i18next-fs-backend';
|
|
21
18
|
import 'smol-toml';
|
|
22
|
-
import 'tinyexec';
|
|
23
19
|
import './fs-operations.mjs';
|
|
24
20
|
import 'node:crypto';
|
|
25
|
-
import 'node:fs';
|
|
26
21
|
import 'node:fs/promises';
|
|
27
22
|
import './json-config.mjs';
|
|
28
|
-
import '
|
|
29
|
-
import './package.mjs';
|
|
23
|
+
import 'dayjs';
|
|
30
24
|
import 'node:child_process';
|
|
31
|
-
import 'node:os';
|
|
32
|
-
import 'i18next';
|
|
33
|
-
import 'i18next-fs-backend';
|
|
34
25
|
import 'node:util';
|
|
26
|
+
import './claude-config.mjs';
|
|
27
|
+
import './platform.mjs';
|
|
28
|
+
import 'tinyexec';
|
|
29
|
+
import '../shared/ccjk.DHbrGcgg.mjs';
|
|
30
|
+
import 'inquirer-toggle';
|
|
31
|
+
import './package.mjs';
|
|
32
|
+
import './codex.mjs';
|
|
33
|
+
import 'ora';
|
|
34
|
+
import 'semver';
|
|
35
|
+
import './prompts.mjs';
|
|
35
36
|
import './workflows.mjs';
|
|
36
37
|
import '../shared/ccjk.Br91zBIG.mjs';
|
|
37
38
|
import './auto-updater.mjs';
|
|
@@ -40,7 +41,6 @@ import 'node:path';
|
|
|
40
41
|
import '../shared/ccjk.SIo9I8q3.mjs';
|
|
41
42
|
import '../shared/ccjk.DvIrK0wz.mjs';
|
|
42
43
|
import './installer.mjs';
|
|
43
|
-
import 'inquirer-toggle';
|
|
44
44
|
|
|
45
45
|
async function handleCancellation() {
|
|
46
46
|
ensureI18nInitialized();
|
|
@@ -199,57 +199,6 @@ async function configureApiFeature() {
|
|
|
199
199
|
break;
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
|
-
async function configureMcpFeature() {
|
|
203
|
-
ensureI18nInitialized();
|
|
204
|
-
if (isWindows()) {
|
|
205
|
-
const fixWindows = await promptBoolean({
|
|
206
|
-
message: i18n.t("configuration:fixWindowsMcp") || "Fix Windows MCP configuration?",
|
|
207
|
-
defaultValue: true
|
|
208
|
-
});
|
|
209
|
-
if (fixWindows) {
|
|
210
|
-
const existingConfig = readMcpConfig() || { mcpServers: {} };
|
|
211
|
-
const fixedConfig = fixWindowsMcpConfig(existingConfig);
|
|
212
|
-
writeMcpConfig(fixedConfig);
|
|
213
|
-
console.log(ansis.green(`\u2714 ${i18n.t("configuration:windowsMcpConfigFixed")}`));
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
const selectedServices = await selectMcpServices();
|
|
217
|
-
if (!selectedServices) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
if (selectedServices.length > 0) {
|
|
221
|
-
const mcpBackupPath = backupMcpConfig();
|
|
222
|
-
if (mcpBackupPath) {
|
|
223
|
-
console.log(ansis.gray(`\u2714 ${i18n.t("mcp:mcpBackupSuccess")}: ${mcpBackupPath}`));
|
|
224
|
-
}
|
|
225
|
-
const newServers = {};
|
|
226
|
-
for (const serviceId of selectedServices) {
|
|
227
|
-
const service = (await getMcpServices()).find((s) => s.id === serviceId);
|
|
228
|
-
if (!service)
|
|
229
|
-
continue;
|
|
230
|
-
let config = service.config;
|
|
231
|
-
if (service.requiresApiKey) {
|
|
232
|
-
const { apiKey } = await inquirer.prompt({
|
|
233
|
-
type: "input",
|
|
234
|
-
name: "apiKey",
|
|
235
|
-
message: service.apiKeyPrompt,
|
|
236
|
-
validate: async (value) => !!value || i18n.t("api:keyRequired")
|
|
237
|
-
});
|
|
238
|
-
if (apiKey) {
|
|
239
|
-
config = buildMcpServerConfig(service.config, apiKey, service.apiKeyPlaceholder, service.apiKeyEnvVar);
|
|
240
|
-
} else {
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
newServers[service.id] = config;
|
|
245
|
-
}
|
|
246
|
-
const existingConfig = readMcpConfig();
|
|
247
|
-
let mergedConfig = mergeMcpServers(existingConfig, newServers);
|
|
248
|
-
mergedConfig = fixWindowsMcpConfig(mergedConfig);
|
|
249
|
-
writeMcpConfig(mergedConfig);
|
|
250
|
-
console.log(ansis.green(`\u2714 ${i18n.t("mcp:mcpConfigSuccess")}`));
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
202
|
async function promptCustomModels(defaultPrimaryModel, defaultHaikuModel, defaultSonnetModel, defaultOpusModel) {
|
|
254
203
|
const { primaryModel } = await inquirer.prompt({
|
|
255
204
|
type: "input",
|
|
@@ -300,4 +249,4 @@ async function changeScriptLanguageFeature(currentLang) {
|
|
|
300
249
|
return lang;
|
|
301
250
|
}
|
|
302
251
|
|
|
303
|
-
export { changeScriptLanguageFeature, configureApiFeature,
|
|
252
|
+
export { changeScriptLanguageFeature, configureApiFeature, promptCustomModels };
|
package/dist/chunks/init.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import process__default from 'node:process';
|
|
|
3
3
|
import ansis from 'ansis';
|
|
4
4
|
import inquirer from 'inquirer';
|
|
5
5
|
import { version } from './package.mjs';
|
|
6
|
-
import {
|
|
6
|
+
import { g as runCodexFullInit, h as selectMcpServices, i as getMcpServices, M as MCP_SERVICE_CONFIGS } from './codex.mjs';
|
|
7
7
|
import { WORKFLOW_CONFIG_BASE } from './workflows.mjs';
|
|
8
8
|
import { SETTINGS_FILE, DEFAULT_CODE_TOOL_TYPE, CODE_TOOL_BANNERS, API_DEFAULT_URL } from './constants.mjs';
|
|
9
9
|
import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
@@ -13,8 +13,8 @@ import { readCcrConfig, backupCcrConfig, createDefaultCcrConfig, writeCcrConfig,
|
|
|
13
13
|
import { exec } from 'node:child_process';
|
|
14
14
|
import { promisify } from 'node:util';
|
|
15
15
|
import { updateCcr } from './auto-updater.mjs';
|
|
16
|
-
import { w as wrapCommandWithSudo,
|
|
17
|
-
import {
|
|
16
|
+
import { w as wrapCommandWithSudo, k as isWindows, i as isTermux } from './platform.mjs';
|
|
17
|
+
import { a as addCompletedOnboarding, s as setPrimaryApiKey, b as backupMcpConfig, c as buildMcpServerConfig, r as readMcpConfig, m as mergeMcpServers, f as fixWindowsMcpConfig, w as writeMcpConfig } from './claude-config.mjs';
|
|
18
18
|
import { r as resolveCodeType } from '../shared/ccjk.SIo9I8q3.mjs';
|
|
19
19
|
import { exists } from './fs-operations.mjs';
|
|
20
20
|
import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
|
|
@@ -9,7 +9,7 @@ import { exec } from 'tinyexec';
|
|
|
9
9
|
import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
10
10
|
import { updateClaudeCode } from './auto-updater.mjs';
|
|
11
11
|
import { exists } from './fs-operations.mjs';
|
|
12
|
-
import { f as findCommandPath, g as getPlatform, a as getHomebrewCommandPaths,
|
|
12
|
+
import { f as findCommandPath, g as getPlatform, a as getHomebrewCommandPaths, i as isTermux, b as getTermuxPrefix, c as isWSL, d as getWSLInfo, w as wrapCommandWithSudo, e as commandExists, h as getRecommendedInstallMethods } from './platform.mjs';
|
|
13
13
|
import 'node:url';
|
|
14
14
|
import 'i18next';
|
|
15
15
|
import 'i18next-fs-backend';
|
package/dist/chunks/mcp.mjs
CHANGED
|
@@ -3,12 +3,12 @@ import { i18n, ensureI18nInitialized } from './index.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
|
-
import { r as readMcpConfig, b as backupMcpConfig, w as writeMcpConfig,
|
|
6
|
+
import { r as readMcpConfig, b as backupMcpConfig, w as writeMcpConfig, c as buildMcpServerConfig } from './claude-config.mjs';
|
|
7
7
|
import inquirer from 'inquirer';
|
|
8
8
|
import { j as getMcpService, a as readCodexConfig, k as applyCodexPlatformCommand, w as writeCodexConfig, M as MCP_SERVICE_CONFIGS } from './codex.mjs';
|
|
9
9
|
import { ClAUDE_CONFIG_FILE, CODEX_CONFIG_FILE } from './constants.mjs';
|
|
10
10
|
import { writeFileAtomic, exists } from './fs-operations.mjs';
|
|
11
|
-
import {
|
|
11
|
+
import { k as isWindows, m as getSystemRoot } from './platform.mjs';
|
|
12
12
|
import { existsSync, unlinkSync, statSync, mkdirSync, readFileSync } from 'node:fs';
|
|
13
13
|
import { homedir } from 'node:os';
|
|
14
14
|
import { join } from 'pathe';
|
package/dist/chunks/menu.mjs
CHANGED
|
@@ -2,15 +2,15 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import ansis from 'ansis';
|
|
3
3
|
import inquirer from 'inquirer';
|
|
4
4
|
import { join } from 'pathe';
|
|
5
|
-
import {
|
|
5
|
+
import { isCodeToolType, DEFAULT_CODE_TOOL_TYPE, CODE_TOOL_BANNERS, CLAUDE_DIR } from './constants.mjs';
|
|
6
6
|
import { ensureI18nInitialized, i18n } from './index.mjs';
|
|
7
7
|
import { d as displayBannerWithInfo } from '../shared/ccjk.Br91zBIG.mjs';
|
|
8
|
-
import {
|
|
9
|
-
import { configureMcpFeature, configureApiFeature, changeScriptLanguageFeature } from './features.mjs';
|
|
10
|
-
import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.DvIrK0wz.mjs';
|
|
8
|
+
import { readZcfConfig, updateZcfConfig } from './ccjk-config.mjs';
|
|
11
9
|
import { r as resolveCodeType } from '../shared/ccjk.SIo9I8q3.mjs';
|
|
12
|
-
import {
|
|
10
|
+
import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.DvIrK0wz.mjs';
|
|
11
|
+
import { configureApiFeature, changeScriptLanguageFeature } from './features.mjs';
|
|
13
12
|
import { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
|
|
13
|
+
import { executeCcusage } from './ccu.mjs';
|
|
14
14
|
import { spawn, exec } from 'node:child_process';
|
|
15
15
|
import { promisify } from 'node:util';
|
|
16
16
|
import { C as COMETIX_COMMAND_NAME, c as COMETIX_COMMANDS, d as installCometixLine, a as isCcrInstalled, b as installCcr, s as simplifiedInit } from './init.mjs';
|
|
@@ -18,14 +18,15 @@ import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
|
|
|
18
18
|
import { homedir } from 'node:os';
|
|
19
19
|
import { runCcrStop, runCcrStart, runCcrRestart, runCcrStatus, runCcrUi } from './commands.mjs';
|
|
20
20
|
import { readCcrConfig, configureCcrFeature } from './config2.mjs';
|
|
21
|
-
import {
|
|
22
|
-
import { doctor } from './doctor.mjs';
|
|
21
|
+
import { ClaudeCodeConfigManager } from './claude-code-config-manager.mjs';
|
|
23
22
|
import { configSwitchCommand } from './config-switch.mjs';
|
|
24
|
-
import { uninstall } from './uninstall.mjs';
|
|
25
|
-
import { checkUpdates } from './check-updates.mjs';
|
|
26
|
-
import { ccjkSkills } from './ccjk-skills.mjs';
|
|
27
|
-
import { ccjkMcp } from './ccjk-mcp.mjs';
|
|
28
23
|
import { ccjkAgents } from './ccjk-agents.mjs';
|
|
24
|
+
import { ccjkMcp } from './ccjk-mcp.mjs';
|
|
25
|
+
import { ccjkSkills } from './ccjk-skills.mjs';
|
|
26
|
+
import { checkUpdates } from './check-updates.mjs';
|
|
27
|
+
import { doctor } from './doctor.mjs';
|
|
28
|
+
import { uninstall } from './uninstall.mjs';
|
|
29
|
+
import { update } from './update.mjs';
|
|
29
30
|
|
|
30
31
|
const execAsync = promisify(exec);
|
|
31
32
|
async function runCometixPrintConfig() {
|
|
@@ -320,6 +321,119 @@ async function runCometixMenuFeature() {
|
|
|
320
321
|
await showCometixMenu();
|
|
321
322
|
}
|
|
322
323
|
|
|
324
|
+
function getCurrentCodeTool$1() {
|
|
325
|
+
const config = readZcfConfig();
|
|
326
|
+
if (config?.codeToolType && isCodeToolType(config.codeToolType)) {
|
|
327
|
+
return config.codeToolType;
|
|
328
|
+
}
|
|
329
|
+
return DEFAULT_CODE_TOOL_TYPE;
|
|
330
|
+
}
|
|
331
|
+
async function showApiConfigMenu(title) {
|
|
332
|
+
const lang = i18n.language;
|
|
333
|
+
const isZh = lang === "zh-CN";
|
|
334
|
+
console.log("");
|
|
335
|
+
console.log(ansis.bold.cyan((isZh ? "\u{1F511} API \u914D\u7F6E\u7BA1\u7406" : "\u{1F511} API Configuration")));
|
|
336
|
+
console.log("");
|
|
337
|
+
const choices = [
|
|
338
|
+
{ name: isZh ? "1. \u4F7F\u7528\u5B98\u65B9\u767B\u5F55\uFF08\u4E0D\u914D\u7F6E API\uFF09" : "1. Use Official Login (No API Config)", value: "official" },
|
|
339
|
+
{ name: isZh ? "2. \u81EA\u5B9A\u4E49 API \u914D\u7F6E" : "2. Custom API Configuration", value: "custom" },
|
|
340
|
+
{ name: isZh ? "3. \u4F7F\u7528 CCR \u4EE3\u7406" : "3. Use CCR Proxy", value: "ccr" },
|
|
341
|
+
{ name: isZh ? "4. \u5207\u6362 API \u914D\u7F6E" : "4. Switch API Configuration", value: "switch" },
|
|
342
|
+
{ name: isZh ? "5. \u67E5\u770B\u5F53\u524D\u914D\u7F6E" : "5. View Current Configuration", value: "view" },
|
|
343
|
+
{ name: isZh ? "6. \u8DF3\u8FC7 API \u914D\u7F6E" : "6. Skip API Configuration", value: "skip" }
|
|
344
|
+
];
|
|
345
|
+
const { choice } = await inquirer.prompt({
|
|
346
|
+
type: "list",
|
|
347
|
+
name: "choice",
|
|
348
|
+
message: isZh ? "\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:" : "Select API configuration mode:",
|
|
349
|
+
choices,
|
|
350
|
+
pageSize: 10
|
|
351
|
+
});
|
|
352
|
+
const codeTool = getCurrentCodeTool$1();
|
|
353
|
+
switch (choice) {
|
|
354
|
+
case "official":
|
|
355
|
+
return await handleOfficialLogin(codeTool, isZh);
|
|
356
|
+
case "custom":
|
|
357
|
+
return await handleCustomConfig();
|
|
358
|
+
case "ccr":
|
|
359
|
+
return await handleCcrProxy(codeTool, isZh);
|
|
360
|
+
case "switch":
|
|
361
|
+
return await handleConfigSwitch(codeTool);
|
|
362
|
+
case "view":
|
|
363
|
+
return await handleViewConfig(codeTool);
|
|
364
|
+
case "skip":
|
|
365
|
+
return { mode: "skip", success: true, cancelled: false };
|
|
366
|
+
default:
|
|
367
|
+
return { mode: "skip", success: true, cancelled: false };
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
async function handleOfficialLogin(codeTool, isZh) {
|
|
371
|
+
if (codeTool === "claude-code") {
|
|
372
|
+
const result = await ClaudeCodeConfigManager.switchToOfficial();
|
|
373
|
+
if (result.success) {
|
|
374
|
+
console.log("");
|
|
375
|
+
console.log(ansis.green(isZh ? "\u2705 \u5DF2\u5207\u6362\u5230\u5B98\u65B9\u767B\u5F55" : "\u2705 Switched to official login"));
|
|
376
|
+
console.log("");
|
|
377
|
+
return { mode: "official", success: true, cancelled: false };
|
|
378
|
+
} else {
|
|
379
|
+
console.log("");
|
|
380
|
+
console.log(ansis.red(isZh ? `\u274C \u5207\u6362\u5931\u8D25: ${result.error}` : `\u274C Failed to switch: ${result.error}`));
|
|
381
|
+
console.log("");
|
|
382
|
+
return { mode: "official", success: false, cancelled: false };
|
|
383
|
+
}
|
|
384
|
+
} else {
|
|
385
|
+
console.log("");
|
|
386
|
+
console.log(ansis.yellow(isZh ? "\u26A0\uFE0F \u5F53\u524D\u4EE3\u7801\u5DE5\u5177\u4E0D\u652F\u6301\u6B64\u529F\u80FD" : "\u26A0\uFE0F Current code tool does not support this feature"));
|
|
387
|
+
console.log("");
|
|
388
|
+
return { mode: "official", success: false, cancelled: false };
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
async function handleCustomConfig(isZh) {
|
|
392
|
+
try {
|
|
393
|
+
await configureApiFeature();
|
|
394
|
+
return { mode: "custom", success: true, cancelled: false };
|
|
395
|
+
} catch {
|
|
396
|
+
return { mode: "custom", success: false, cancelled: false };
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
async function handleCcrProxy(codeTool, isZh) {
|
|
400
|
+
if (codeTool === "claude-code") {
|
|
401
|
+
const result = await ClaudeCodeConfigManager.switchToCcr();
|
|
402
|
+
if (result.success) {
|
|
403
|
+
console.log("");
|
|
404
|
+
console.log(ansis.green(isZh ? "\u2705 \u5DF2\u5207\u6362\u5230 CCR \u4EE3\u7406" : "\u2705 Switched to CCR proxy"));
|
|
405
|
+
console.log("");
|
|
406
|
+
return { mode: "ccr", success: true, cancelled: false };
|
|
407
|
+
} else {
|
|
408
|
+
console.log("");
|
|
409
|
+
console.log(ansis.red(isZh ? `\u274C \u5207\u6362\u5931\u8D25: ${result.error}` : `\u274C Failed to switch: ${result.error}`));
|
|
410
|
+
console.log("");
|
|
411
|
+
return { mode: "ccr", success: false, cancelled: false };
|
|
412
|
+
}
|
|
413
|
+
} else {
|
|
414
|
+
console.log("");
|
|
415
|
+
console.log(ansis.yellow(isZh ? "\u26A0\uFE0F \u5F53\u524D\u4EE3\u7801\u5DE5\u5177\u4E0D\u652F\u6301\u6B64\u529F\u80FD" : "\u26A0\uFE0F Current code tool does not support this feature"));
|
|
416
|
+
console.log("");
|
|
417
|
+
return { mode: "ccr", success: false, cancelled: false };
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
async function handleConfigSwitch(codeTool) {
|
|
421
|
+
try {
|
|
422
|
+
await configSwitchCommand({ codeType: codeTool });
|
|
423
|
+
return { mode: "switch", success: true, cancelled: false };
|
|
424
|
+
} catch {
|
|
425
|
+
return { mode: "switch", success: false, cancelled: false };
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
async function handleViewConfig(codeTool) {
|
|
429
|
+
try {
|
|
430
|
+
await configSwitchCommand({ codeType: codeTool, list: true });
|
|
431
|
+
return { mode: "view", success: true, cancelled: false };
|
|
432
|
+
} catch {
|
|
433
|
+
return { mode: "view", success: false, cancelled: false };
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
323
437
|
const CODE_TOOL_LABELS = {
|
|
324
438
|
"claude-code": "Claude Code",
|
|
325
439
|
"codex": "Codex",
|
|
@@ -344,18 +458,19 @@ ${ansis.dim("\u2500".repeat(50))}
|
|
|
344
458
|
`);
|
|
345
459
|
}
|
|
346
460
|
async function handleCodeToolSwitch(current) {
|
|
461
|
+
const isZh = i18n.language === "zh-CN";
|
|
347
462
|
const choices = [
|
|
348
463
|
{ name: CODE_TOOL_LABELS["claude-code"], value: "claude-code" },
|
|
349
|
-
{ name: CODE_TOOL_LABELS
|
|
350
|
-
{ name: CODE_TOOL_LABELS
|
|
351
|
-
{ name: CODE_TOOL_LABELS
|
|
352
|
-
{ name: CODE_TOOL_LABELS
|
|
353
|
-
{ name: CODE_TOOL_LABELS
|
|
464
|
+
{ name: CODE_TOOL_LABELS.codex, value: "codex" },
|
|
465
|
+
{ name: CODE_TOOL_LABELS.aider, value: "aider" },
|
|
466
|
+
{ name: CODE_TOOL_LABELS.continue, value: "continue" },
|
|
467
|
+
{ name: CODE_TOOL_LABELS.cline, value: "cline" },
|
|
468
|
+
{ name: CODE_TOOL_LABELS.cursor, value: "cursor" }
|
|
354
469
|
];
|
|
355
470
|
const { tool } = await inquirer.prompt({
|
|
356
471
|
type: "list",
|
|
357
472
|
name: "tool",
|
|
358
|
-
message:
|
|
473
|
+
message: isZh ? "\u9009\u62E9\u4EE3\u7801\u5DE5\u5177:" : "Select code tool:",
|
|
359
474
|
default: current,
|
|
360
475
|
choices
|
|
361
476
|
});
|
|
@@ -364,9 +479,37 @@ async function handleCodeToolSwitch(current) {
|
|
|
364
479
|
return false;
|
|
365
480
|
}
|
|
366
481
|
updateZcfConfig({ codeToolType: tool });
|
|
367
|
-
console.log(ansis.green(`\u2714 ${
|
|
482
|
+
console.log(ansis.green(`\u2714 ${isZh ? "\u5DF2\u5207\u6362\u5230" : "Switched to"} ${getCodeToolLabel(tool)}`));
|
|
368
483
|
return true;
|
|
369
484
|
}
|
|
485
|
+
function showHelpDocumentation(isZh) {
|
|
486
|
+
console.log("");
|
|
487
|
+
console.log(ansis.bold.cyan(isZh ? "\u{1F4D6} CCJK \u4F7F\u7528\u6307\u5357" : "\u{1F4D6} CCJK User Guide"));
|
|
488
|
+
console.log(ansis.dim("\u2500".repeat(50)));
|
|
489
|
+
console.log("");
|
|
490
|
+
console.log(ansis.bold(isZh ? "\u{1F517} \u76F8\u5173\u94FE\u63A5" : "\u{1F517} Links"));
|
|
491
|
+
console.log(` ${ansis.green("GitHub:")} ${ansis.dim("https://github.com/anthropics/claude-code")}`);
|
|
492
|
+
console.log(` ${ansis.green("NPM:")} ${ansis.dim("https://www.npmjs.com/package/ccjk")}`);
|
|
493
|
+
console.log("");
|
|
494
|
+
console.log(ansis.bold(isZh ? "\u{1F4AC} \u5E38\u7528\u547D\u4EE4" : "\u{1F4AC} Common Commands"));
|
|
495
|
+
console.log(` ${ansis.green("npx ccjk")} ${ansis.dim(isZh ? "- \u6253\u5F00\u4E3B\u83DC\u5355" : "- Open main menu")}`);
|
|
496
|
+
console.log(` ${ansis.green("npx ccjk init")} ${ansis.dim(isZh ? "- \u521D\u59CB\u5316\u914D\u7F6E" : "- Initialize config")}`);
|
|
497
|
+
console.log(` ${ansis.green("npx ccjk update")} ${ansis.dim(isZh ? "- \u66F4\u65B0\u5DE5\u4F5C\u6D41" : "- Update workflows")}`);
|
|
498
|
+
console.log(` ${ansis.green("npx ccjk doctor")} ${ansis.dim(isZh ? "- \u8BCA\u65AD\u95EE\u9898" : "- Diagnose issues")}`);
|
|
499
|
+
console.log(` ${ansis.green("npx ccjk skills")} ${ansis.dim(isZh ? "- \u7BA1\u7406\u6280\u80FD" : "- Manage skills")}`);
|
|
500
|
+
console.log(` ${ansis.green("npx ccjk mcp")} ${ansis.dim(isZh ? "- \u7BA1\u7406 MCP" : "- Manage MCP")}`);
|
|
501
|
+
console.log(` ${ansis.green("npx ccjk agents")} ${ansis.dim(isZh ? "- \u7BA1\u7406\u667A\u80FD\u4F53" : "- Manage agents")}`);
|
|
502
|
+
console.log("");
|
|
503
|
+
console.log(ansis.bold(isZh ? "\u26A1 \u5FEB\u6377\u65B9\u5F0F" : "\u26A1 Shortcuts"));
|
|
504
|
+
console.log(` ${ansis.green("npx ccjk qs")} ${ansis.dim(isZh ? "- \u5FEB\u901F\u914D\u7F6E (quick-setup)" : "- Quick setup")}`);
|
|
505
|
+
console.log(` ${ansis.green("npx ccjk <code>")} ${ansis.dim(isZh ? "- \u5FEB\u901F\u542F\u52A8\u63D0\u4F9B\u5546 (\u5982: glm, kimi)" : "- Quick launch provider (e.g., glm, kimi)")}`);
|
|
506
|
+
console.log("");
|
|
507
|
+
console.log(ansis.bold(isZh ? "\u{1F4A1} \u63D0\u793A" : "\u{1F4A1} Tips"));
|
|
508
|
+
console.log(ansis.dim(isZh ? ' \u2022 \u9996\u6B21\u4F7F\u7528\u5EFA\u8BAE\u8FD0\u884C "npx ccjk" \u8FDB\u884C\u4E00\u952E\u914D\u7F6E' : ' \u2022 First time? Run "npx ccjk" for quick setup'));
|
|
509
|
+
console.log(ansis.dim(isZh ? ' \u2022 \u9047\u5230\u95EE\u9898\u53EF\u8FD0\u884C "npx ccjk doctor" \u81EA\u52A8\u8BCA\u65AD' : ' \u2022 Having issues? Run "npx ccjk doctor" to diagnose'));
|
|
510
|
+
console.log(ansis.dim(isZh ? ' \u2022 \u4F7F\u7528 "npx ccjk --help" \u67E5\u770B\u6240\u6709\u547D\u4EE4' : ' \u2022 Use "npx ccjk --help" to see all commands'));
|
|
511
|
+
console.log("");
|
|
512
|
+
}
|
|
370
513
|
async function showSimplifiedMenu() {
|
|
371
514
|
const lang = i18n.language;
|
|
372
515
|
const isZh = lang === "zh-CN";
|
|
@@ -378,32 +521,38 @@ async function showSimplifiedMenu() {
|
|
|
378
521
|
const doctorName = isZh ? "2. \u{1F527} \u4E00\u952E\u4F53\u68C0" : "2. \u{1F527} Diagnostics";
|
|
379
522
|
const doctorDesc = isZh ? "\u8BCA\u65AD\u95EE\u9898\u5E76\u81EA\u52A8\u4FEE\u590D" : "Diagnose issues and auto-fix";
|
|
380
523
|
const updateName = isZh ? "3. \u{1F504} \u4E00\u952E\u66F4\u65B0" : "3. \u{1F504} Update All";
|
|
381
|
-
const updateDesc = isZh ? "\u66F4\u65B0\u6240\u6709\u7EC4\u4EF6\u5230\u6700\u65B0\u7248\u672C" : "Update all components to latest
|
|
382
|
-
const
|
|
524
|
+
const updateDesc = isZh ? "\u66F4\u65B0\u6240\u6709\u7EC4\u4EF6\u5230\u6700\u65B0\u7248\u672C" : "Update all components to latest";
|
|
525
|
+
const apiName = isZh ? "4. \u{1F511} API \u7BA1\u7406" : "4. \u{1F511} API Manager";
|
|
526
|
+
const apiDesc = isZh ? "\u914D\u7F6E API URL\u3001\u8BA4\u8BC1\u4FE1\u606F\u6216 CCR \u4EE3\u7406" : "Configure API URL, auth or CCR proxy";
|
|
527
|
+
const skillsName = isZh ? "5. \u{1F4DA} Skills \u7BA1\u7406" : "5. \u{1F4DA} Skills Manager";
|
|
383
528
|
const skillsDesc = isZh ? "\u5B89\u88C5/\u66F4\u65B0/\u5220\u9664\u5DE5\u4F5C\u6D41\u6280\u80FD" : "Install/update/remove workflow skills";
|
|
384
|
-
const mcpName = isZh ? "
|
|
385
|
-
const mcpDesc = isZh ? "\u914D\u7F6E Model Context Protocol \u670D\u52A1" : "Configure
|
|
386
|
-
const agentsName = isZh ? "
|
|
529
|
+
const mcpName = isZh ? "6. \u{1F50C} MCP \u7BA1\u7406" : "6. \u{1F50C} MCP Manager";
|
|
530
|
+
const mcpDesc = isZh ? "\u914D\u7F6E Model Context Protocol \u670D\u52A1" : "Configure MCP services";
|
|
531
|
+
const agentsName = isZh ? "7. \u{1F916} Agents \u7BA1\u7406" : "7. \u{1F916} Agents Manager";
|
|
387
532
|
const agentsDesc = isZh ? "\u521B\u5EFA/\u7BA1\u7406 AI \u667A\u80FD\u4F53" : "Create/manage AI agents";
|
|
388
|
-
const
|
|
533
|
+
const moreName = isZh ? "8. \u{1F4CB} \u66F4\u591A\u529F\u80FD" : "8. \u{1F4CB} More Features";
|
|
534
|
+
const moreDesc = isZh ? "CCR/CCUsage/\u914D\u7F6E\u5207\u6362/\u4EE3\u7801\u5DE5\u5177\u7B49" : "CCR/CCUsage/Config Switch/Code Tools";
|
|
535
|
+
const languageName = isZh ? "9. \u{1F30D} \u8BED\u8A00\u8BBE\u7F6E" : "9. \u{1F30D} Language";
|
|
389
536
|
const languageDesc = isZh ? "\u5207\u6362\u754C\u9762\u8BED\u8A00" : "Switch interface language";
|
|
390
|
-
const helpName = isZh ? "
|
|
537
|
+
const helpName = isZh ? "H. \u2753 \u5E2E\u52A9\u6587\u6863" : "H. \u2753 Help";
|
|
391
538
|
const helpDesc = isZh ? "\u67E5\u770B\u4F7F\u7528\u6307\u5357" : "View user guide";
|
|
392
539
|
const exitText = isZh ? "0. \u{1F6AA} \u9000\u51FA" : "0. \u{1F6AA} Exit";
|
|
393
540
|
console.log("");
|
|
394
|
-
console.log(ansis.bold.green(
|
|
541
|
+
console.log(ansis.bold.green(quickStartTitle));
|
|
395
542
|
console.log(ansis.dim("\u2500".repeat(50)));
|
|
396
543
|
console.log(` ${ansis.green(quickSetupName)} ${ansis.dim(`- ${quickSetupDesc}`)}`);
|
|
397
544
|
console.log(` ${ansis.green(doctorName)} ${ansis.dim(`- ${doctorDesc}`)}`);
|
|
398
545
|
console.log(` ${ansis.green(updateName)} ${ansis.dim(`- ${updateDesc}`)}`);
|
|
399
546
|
console.log("");
|
|
400
|
-
console.log(ansis.bold.green(
|
|
547
|
+
console.log(ansis.bold.green(advancedTitle));
|
|
401
548
|
console.log(ansis.dim("\u2500".repeat(50)));
|
|
549
|
+
console.log(` ${ansis.green(apiName)} ${ansis.dim(`- ${apiDesc}`)}`);
|
|
402
550
|
console.log(` ${ansis.green(skillsName)} ${ansis.dim(`- ${skillsDesc}`)}`);
|
|
403
551
|
console.log(` ${ansis.green(mcpName)} ${ansis.dim(`- ${mcpDesc}`)}`);
|
|
404
552
|
console.log(` ${ansis.green(agentsName)} ${ansis.dim(`- ${agentsDesc}`)}`);
|
|
553
|
+
console.log(` ${ansis.green(moreName)} ${ansis.dim(`- ${moreDesc}`)}`);
|
|
405
554
|
console.log("");
|
|
406
|
-
console.log(ansis.bold.green(
|
|
555
|
+
console.log(ansis.bold.green(systemTitle));
|
|
407
556
|
console.log(ansis.dim("\u2500".repeat(50)));
|
|
408
557
|
console.log(` ${ansis.green(languageName)} ${ansis.dim(`- ${languageDesc}`)}`);
|
|
409
558
|
console.log(` ${ansis.green(helpName)} ${ansis.dim(`- ${helpDesc}`)}`);
|
|
@@ -413,9 +562,9 @@ async function showSimplifiedMenu() {
|
|
|
413
562
|
const { choice } = await inquirer.prompt({
|
|
414
563
|
type: "input",
|
|
415
564
|
name: "choice",
|
|
416
|
-
message: isZh ? "\u8BF7\u8F93\u5165\u9009\u9879 (0-
|
|
565
|
+
message: isZh ? "\u8BF7\u8F93\u5165\u9009\u9879 (0-9, H):" : "Enter option (0-9, H):",
|
|
417
566
|
validate: (value) => {
|
|
418
|
-
const valid = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "q", "Q"];
|
|
567
|
+
const valid = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "h", "H", "q", "Q"];
|
|
419
568
|
return valid.includes(value) || (isZh ? "\u8BF7\u8F93\u5165\u6709\u6548\u9009\u9879" : "Please enter a valid option");
|
|
420
569
|
}
|
|
421
570
|
});
|
|
@@ -425,77 +574,84 @@ async function showSimplifiedMenu() {
|
|
|
425
574
|
}
|
|
426
575
|
const normalized = choice.toLowerCase();
|
|
427
576
|
switch (normalized) {
|
|
428
|
-
//
|
|
429
|
-
|
|
577
|
+
// ═══════════════════════════════════════════════════
|
|
578
|
+
// 🚀 Quick Start (1-3)
|
|
579
|
+
// ═══════════════════════════════════════════════════
|
|
580
|
+
case "1": {
|
|
430
581
|
console.log("");
|
|
431
582
|
console.log(ansis.green(isZh ? "\u26A1 \u4E00\u952E\u914D\u7F6E..." : "\u26A1 Quick Setup..."));
|
|
432
583
|
console.log("");
|
|
433
584
|
const { quickSetup } = await import('./quick-setup.mjs');
|
|
434
585
|
await quickSetup();
|
|
435
586
|
break;
|
|
436
|
-
|
|
587
|
+
}
|
|
588
|
+
case "2": {
|
|
437
589
|
console.log("");
|
|
438
590
|
console.log(ansis.green(isZh ? "\u{1F527} \u4E00\u952E\u4F53\u68C0..." : "\u{1F527} Running Diagnostics..."));
|
|
439
591
|
console.log("");
|
|
440
592
|
await doctor();
|
|
441
593
|
break;
|
|
442
|
-
|
|
594
|
+
}
|
|
595
|
+
case "3": {
|
|
443
596
|
console.log("");
|
|
444
597
|
console.log(ansis.green(isZh ? "\u{1F504} \u4E00\u952E\u66F4\u65B0..." : "\u{1F504} Updating All..."));
|
|
445
598
|
console.log("");
|
|
446
599
|
await update({ skipBanner: true });
|
|
447
600
|
break;
|
|
448
|
-
|
|
449
|
-
|
|
601
|
+
}
|
|
602
|
+
// ═══════════════════════════════════════════════════
|
|
603
|
+
// 📦 Advanced (4-8)
|
|
604
|
+
// ═══════════════════════════════════════════════════
|
|
605
|
+
case "4": {
|
|
606
|
+
console.log("");
|
|
607
|
+
console.log(ansis.green(isZh ? "\u{1F511} API \u7BA1\u7406..." : "\u{1F511} API Manager..."));
|
|
608
|
+
console.log("");
|
|
609
|
+
await showApiConfigMenu();
|
|
610
|
+
break;
|
|
611
|
+
}
|
|
612
|
+
case "5": {
|
|
450
613
|
console.log("");
|
|
451
614
|
console.log(ansis.green(isZh ? "\u{1F4DA} Skills \u7BA1\u7406..." : "\u{1F4DA} Skills Manager..."));
|
|
452
615
|
console.log("");
|
|
453
616
|
await ccjkSkills({});
|
|
454
617
|
break;
|
|
455
|
-
|
|
618
|
+
}
|
|
619
|
+
case "6": {
|
|
456
620
|
console.log("");
|
|
457
621
|
console.log(ansis.green(isZh ? "\u{1F50C} MCP \u7BA1\u7406..." : "\u{1F50C} MCP Manager..."));
|
|
458
622
|
console.log("");
|
|
459
623
|
await ccjkMcp({});
|
|
460
624
|
break;
|
|
461
|
-
|
|
625
|
+
}
|
|
626
|
+
case "7": {
|
|
462
627
|
console.log("");
|
|
463
628
|
console.log(ansis.green(isZh ? "\u{1F916} Agents \u7BA1\u7406..." : "\u{1F916} Agents Manager..."));
|
|
464
629
|
console.log("");
|
|
465
630
|
await ccjkAgents({});
|
|
466
631
|
break;
|
|
467
|
-
|
|
468
|
-
case "
|
|
469
|
-
{
|
|
470
|
-
const currentLang = i18n.language;
|
|
471
|
-
await changeScriptLanguageFeature(currentLang);
|
|
472
|
-
}
|
|
473
|
-
break;
|
|
474
|
-
case "8":
|
|
475
|
-
console.log("");
|
|
476
|
-
console.log(ansis.bold.cyan(isZh ? "\u{1F4D6} CCJK \u4F7F\u7528\u6307\u5357" : "\u{1F4D6} CCJK User Guide"));
|
|
477
|
-
console.log("");
|
|
478
|
-
console.log(ansis.green(isZh ? "\u{1F517} GitHub:" : "\u{1F517} GitHub:"));
|
|
479
|
-
console.log(ansis.dim(" https://github.com/lu-k/ccjk"));
|
|
480
|
-
console.log("");
|
|
481
|
-
console.log(ansis.green(isZh ? "\u{1F4E6} NPM:" : "\u{1F4E6} NPM:"));
|
|
482
|
-
console.log(ansis.dim(" https://www.npmjs.com/package/ccjk"));
|
|
483
|
-
console.log("");
|
|
484
|
-
console.log(ansis.green(isZh ? "\u{1F4DD} \u6587\u6863:" : "\u{1F4DD} Documentation:"));
|
|
485
|
-
console.log(ansis.dim(" https://github.com/lu-k/ccjk/blob/main/README.md"));
|
|
486
|
-
console.log("");
|
|
487
|
-
console.log(ansis.green(isZh ? "\u{1F4AC} \u5E38\u7528\u547D\u4EE4:" : "\u{1F4AC} Common Commands:"));
|
|
488
|
-
console.log(ansis.dim(` npx ccjk init ${isZh ? "- \u521D\u59CB\u5316\u914D\u7F6E" : "- Initialize"}`));
|
|
489
|
-
console.log(ansis.dim(` npx ccjk update ${isZh ? "- \u66F4\u65B0\u5DE5\u4F5C\u6D41" : "- Update workflows"}`));
|
|
490
|
-
console.log(ansis.dim(` npx ccjk doctor ${isZh ? "- \u8BCA\u65AD\u95EE\u9898" : "- Diagnose issues"}`));
|
|
632
|
+
}
|
|
633
|
+
case "8": {
|
|
491
634
|
console.log("");
|
|
635
|
+
await showAdvancedMenu();
|
|
492
636
|
break;
|
|
637
|
+
}
|
|
638
|
+
// ═══════════════════════════════════════════════════
|
|
639
|
+
// ⚙️ System (9, H, 0)
|
|
640
|
+
// ═══════════════════════════════════════════════════
|
|
641
|
+
case "9": {
|
|
642
|
+
const currentLang = i18n.language;
|
|
643
|
+
await changeScriptLanguageFeature(currentLang);
|
|
644
|
+
break;
|
|
645
|
+
}
|
|
646
|
+
case "h": {
|
|
647
|
+
showHelpDocumentation(isZh);
|
|
648
|
+
break;
|
|
649
|
+
}
|
|
493
650
|
case "0":
|
|
651
|
+
case "q": {
|
|
494
652
|
console.log(ansis.green(isZh ? "\u{1F44B} \u518D\u89C1\uFF01" : "\u{1F44B} Goodbye!"));
|
|
495
653
|
return "exit";
|
|
496
|
-
|
|
497
|
-
console.log(ansis.green(isZh ? "\u{1F44B} \u518D\u89C1\uFF01" : "\u{1F44B} Goodbye!"));
|
|
498
|
-
return "exit";
|
|
654
|
+
}
|
|
499
655
|
default:
|
|
500
656
|
return void 0;
|
|
501
657
|
}
|
|
@@ -511,63 +667,108 @@ async function showSimplifiedMenu() {
|
|
|
511
667
|
return void 0;
|
|
512
668
|
}
|
|
513
669
|
async function showAdvancedMenu() {
|
|
514
|
-
const
|
|
515
|
-
|
|
516
|
-
console.log("");
|
|
517
|
-
console.log(ansis.bold.cyan(isZh ? "\u{1F527} \u9AD8\u7EA7\u8BBE\u7F6E" : "\u{1F527} Advanced Settings"));
|
|
670
|
+
const isZh = i18n.language === "zh-CN";
|
|
671
|
+
console.log(ansis.bold.cyan(isZh ? "\u{1F4CB} \u66F4\u591A\u529F\u80FD" : "\u{1F4CB} More Features"));
|
|
672
|
+
console.log(ansis.dim("\u2500".repeat(50)));
|
|
518
673
|
console.log("");
|
|
519
674
|
const choices = [
|
|
520
|
-
{
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
{
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
675
|
+
{
|
|
676
|
+
name: isZh ? "1. \u{1F504} CCR \u4EE3\u7406\u7BA1\u7406" : "1. \u{1F504} CCR Proxy Manager",
|
|
677
|
+
value: "ccr",
|
|
678
|
+
short: "CCR"
|
|
679
|
+
},
|
|
680
|
+
{
|
|
681
|
+
name: isZh ? "2. \u{1F4CA} CCUsage \u7528\u91CF\u7EDF\u8BA1" : "2. \u{1F4CA} CCUsage Statistics",
|
|
682
|
+
value: "ccusage",
|
|
683
|
+
short: "CCUsage"
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
name: isZh ? "3. \u{1F31F} Cometix \u589E\u5F3A" : "3. \u{1F31F} Cometix Enhancement",
|
|
687
|
+
value: "cometix",
|
|
688
|
+
short: "Cometix"
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
name: isZh ? "4. \u{1F500} \u914D\u7F6E\u6587\u4EF6\u5207\u6362" : "4. \u{1F500} Config Profile Switch",
|
|
692
|
+
value: "switch",
|
|
693
|
+
short: "Config Switch"
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
name: isZh ? "5. \u{1F6E0}\uFE0F \u4EE3\u7801\u5DE5\u5177\u5207\u6362" : "5. \u{1F6E0}\uFE0F Code Tool Switch",
|
|
697
|
+
value: "codetool",
|
|
698
|
+
short: "Code Tool"
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
name: isZh ? "6. \u{1F4E6} \u68C0\u67E5\u66F4\u65B0" : "6. \u{1F4E6} Check Updates",
|
|
702
|
+
value: "updates",
|
|
703
|
+
short: "Updates"
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
name: isZh ? "7. \u{1F5D1}\uFE0F \u5378\u8F7D CCJK" : "7. \u{1F5D1}\uFE0F Uninstall CCJK",
|
|
707
|
+
value: "uninstall",
|
|
708
|
+
short: "Uninstall"
|
|
709
|
+
},
|
|
710
|
+
new inquirer.Separator(ansis.dim("\u2500".repeat(40))),
|
|
711
|
+
{
|
|
712
|
+
name: isZh ? "0. \u21A9\uFE0F \u8FD4\u56DE\u4E3B\u83DC\u5355" : "0. \u21A9\uFE0F Back to Main Menu",
|
|
713
|
+
value: "back",
|
|
714
|
+
short: "Back"
|
|
715
|
+
}
|
|
530
716
|
];
|
|
531
717
|
const { choice } = await inquirer.prompt({
|
|
532
718
|
type: "list",
|
|
533
719
|
name: "choice",
|
|
534
|
-
message: isZh ? "\u9009\u62E9\
|
|
720
|
+
message: isZh ? "\u9009\u62E9\u529F\u80FD:" : "Select feature:",
|
|
535
721
|
choices,
|
|
536
722
|
pageSize: 12
|
|
537
723
|
});
|
|
538
724
|
if (!choice || choice === "back") {
|
|
539
725
|
return void 0;
|
|
540
726
|
}
|
|
727
|
+
console.log("");
|
|
541
728
|
switch (choice) {
|
|
542
|
-
case "
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
case "mcp":
|
|
546
|
-
await configureMcpFeature();
|
|
547
|
-
break;
|
|
548
|
-
case "switch":
|
|
549
|
-
await configSwitchCommand({ codeType: "claude-code" });
|
|
550
|
-
break;
|
|
551
|
-
case "ccr":
|
|
729
|
+
case "ccr": {
|
|
730
|
+
console.log(ansis.green(isZh ? "\u{1F504} CCR \u4EE3\u7406\u7BA1\u7406..." : "\u{1F504} CCR Proxy Manager..."));
|
|
731
|
+
console.log("");
|
|
552
732
|
await runCcrMenuFeature();
|
|
553
733
|
break;
|
|
554
|
-
|
|
734
|
+
}
|
|
735
|
+
case "ccusage": {
|
|
736
|
+
console.log(ansis.green(isZh ? "\u{1F4CA} CCUsage \u7528\u91CF\u7EDF\u8BA1..." : "\u{1F4CA} CCUsage Statistics..."));
|
|
737
|
+
console.log("");
|
|
555
738
|
await runCcusageFeature();
|
|
556
739
|
break;
|
|
557
|
-
|
|
740
|
+
}
|
|
741
|
+
case "cometix": {
|
|
742
|
+
console.log(ansis.green(isZh ? "\u{1F31F} Cometix \u589E\u5F3A..." : "\u{1F31F} Cometix Enhancement..."));
|
|
743
|
+
console.log("");
|
|
558
744
|
await runCometixMenuFeature();
|
|
559
745
|
break;
|
|
560
|
-
|
|
561
|
-
|
|
746
|
+
}
|
|
747
|
+
case "switch": {
|
|
748
|
+
console.log(ansis.green(isZh ? "\u{1F500} \u914D\u7F6E\u6587\u4EF6\u5207\u6362..." : "\u{1F500} Config Profile Switch..."));
|
|
749
|
+
console.log("");
|
|
750
|
+
await configSwitchCommand({ codeType: "claude-code" });
|
|
562
751
|
break;
|
|
563
|
-
|
|
752
|
+
}
|
|
753
|
+
case "codetool": {
|
|
754
|
+
console.log(ansis.green(isZh ? "\u{1F6E0}\uFE0F \u4EE3\u7801\u5DE5\u5177\u5207\u6362..." : "\u{1F6E0}\uFE0F Code Tool Switch..."));
|
|
755
|
+
console.log("");
|
|
564
756
|
await handleCodeToolSwitch(getCurrentCodeTool());
|
|
565
757
|
break;
|
|
566
|
-
|
|
758
|
+
}
|
|
759
|
+
case "updates": {
|
|
760
|
+
console.log(ansis.green(isZh ? "\u{1F4E6} \u68C0\u67E5\u66F4\u65B0..." : "\u{1F4E6} Checking Updates..."));
|
|
761
|
+
console.log("");
|
|
762
|
+
await checkUpdates();
|
|
763
|
+
break;
|
|
764
|
+
}
|
|
765
|
+
case "uninstall": {
|
|
766
|
+
console.log(ansis.green(isZh ? "\u{1F5D1}\uFE0F \u5378\u8F7D CCJK..." : "\u{1F5D1}\uFE0F Uninstalling CCJK..."));
|
|
767
|
+
console.log("");
|
|
567
768
|
await uninstall();
|
|
568
769
|
break;
|
|
770
|
+
}
|
|
569
771
|
}
|
|
570
|
-
printSeparator();
|
|
571
772
|
return void 0;
|
|
572
773
|
}
|
|
573
774
|
async function isFirstTimeUser() {
|
|
@@ -592,14 +793,14 @@ async function showNewUserWelcome() {
|
|
|
592
793
|
console.log(ansis.bold.green("\u2551") + ansis.white.bold(" \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u255A\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2557 ") + ansis.bold.green("\u2551"));
|
|
593
794
|
console.log(ansis.bold.green("\u2551") + ansis.white.bold(" \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D ") + ansis.bold.green("\u2551"));
|
|
594
795
|
console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
|
|
595
|
-
console.log(ansis.bold.green("\u2551") + ansis.gray(
|
|
796
|
+
console.log(ansis.bold.green("\u2551") + ansis.gray(" Claude Code JinKu ") + ansis.bold.green("\u2551"));
|
|
596
797
|
console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
|
|
597
798
|
console.log(ansis.bold.green("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563"));
|
|
598
799
|
console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
|
|
599
|
-
console.log(ansis.bold.green("\u2551") + ansis.yellow.bold(isZh ? "
|
|
800
|
+
console.log(ansis.bold.green("\u2551") + ansis.yellow.bold(` ${isZh ? "\u6B22\u8FCE\u4F7F\u7528 CCJK!" : "Welcome to CCJK!"}`.padEnd(72)) + ansis.bold.green("\u2551"));
|
|
600
801
|
console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
|
|
601
|
-
console.log(ansis.bold.green("\u2551") + ansis.white(isZh ? "
|
|
602
|
-
console.log(ansis.bold.green("\u2551") + ansis.white(isZh ? "
|
|
802
|
+
console.log(ansis.bold.green("\u2551") + ansis.white(` ${isZh ? "CCJK \u662F Claude Code \u7684\u667A\u80FD\u914D\u7F6E\u5DE5\u5177" : "CCJK is the smart configuration tool for Claude Code"}`.padEnd(72)) + ansis.bold.green("\u2551"));
|
|
803
|
+
console.log(ansis.bold.green("\u2551") + ansis.white(` ${isZh ? "\u8BA9\u4F60\u7684 AI \u7F16\u7A0B\u4F53\u9A8C\u66F4\u52A0\u7B80\u5355\u9AD8\u6548" : "Making your AI coding experience simple and efficient"}`.padEnd(72)) + ansis.bold.green("\u2551"));
|
|
603
804
|
console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
|
|
604
805
|
console.log(ansis.bold.green("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"));
|
|
605
806
|
console.log("");
|
|
@@ -609,16 +810,15 @@ async function showNewUserWelcome() {
|
|
|
609
810
|
message: isZh ? "\u9009\u62E9\u5F00\u59CB\u65B9\u5F0F:" : "Choose how to start:",
|
|
610
811
|
choices: [
|
|
611
812
|
{
|
|
612
|
-
name: ansis.green.bold(isZh ? "\u26A1 \u5FEB\u901F\u914D\u7F6E" : "\u26A1 Quick Setup") + ansis.dim(isZh ? " - \u81EA\u52A8\u5B8C\u6210\u6240\u6709\u914D\u7F6E" : " - Auto-configure everything"),
|
|
813
|
+
name: ansis.green.bold(isZh ? "\u26A1 \u5FEB\u901F\u914D\u7F6E" : "\u26A1 Quick Setup") + ansis.dim(isZh ? " - \u81EA\u52A8\u5B8C\u6210\u6240\u6709\u914D\u7F6E (\u63A8\u8350)" : " - Auto-configure everything (recommended)"),
|
|
613
814
|
value: "quick"
|
|
614
815
|
},
|
|
615
816
|
{
|
|
616
|
-
name: ansis.green(isZh ? "\u{1F527} \u5B8C\u6574\
|
|
817
|
+
name: ansis.green(isZh ? "\u{1F527} \u5B8C\u6574\u83DC\u5355" : "\u{1F527} Full Menu") + ansis.dim(isZh ? " - \u67E5\u770B\u6240\u6709\u529F\u80FD\u9009\u9879" : " - View all feature options"),
|
|
617
818
|
value: "full"
|
|
618
819
|
}
|
|
619
820
|
],
|
|
620
|
-
loop: false
|
|
621
|
-
pageSize: 10
|
|
821
|
+
loop: false
|
|
622
822
|
});
|
|
623
823
|
return mode;
|
|
624
824
|
}
|
|
@@ -637,7 +837,8 @@ async function showMainMenu(options = {}) {
|
|
|
637
837
|
const currentType = getCurrentCodeTool();
|
|
638
838
|
if (resolvedType !== currentType) {
|
|
639
839
|
updateZcfConfig({ codeToolType: resolvedType });
|
|
640
|
-
|
|
840
|
+
const isZh = i18n.language === "zh-CN";
|
|
841
|
+
console.log(ansis.green(`\u2714 ${isZh ? "\u5DF2\u5207\u6362\u5230" : "Switched to"} ${getCodeToolLabel(resolvedType)}`));
|
|
641
842
|
}
|
|
642
843
|
} catch (err) {
|
|
643
844
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
@@ -648,15 +849,7 @@ async function showMainMenu(options = {}) {
|
|
|
648
849
|
while (!exitMenu) {
|
|
649
850
|
const codeTool = getCurrentCodeTool();
|
|
650
851
|
displayBannerWithInfo(CODE_TOOL_BANNERS[codeTool] || "CCJK");
|
|
651
|
-
|
|
652
|
-
if (options.advanced) {
|
|
653
|
-
result = await showAdvancedMenu();
|
|
654
|
-
if (result === void 0) {
|
|
655
|
-
continue;
|
|
656
|
-
}
|
|
657
|
-
} else {
|
|
658
|
-
result = await showSimplifiedMenu();
|
|
659
|
-
}
|
|
852
|
+
const result = await showSimplifiedMenu();
|
|
660
853
|
if (result === "exit") {
|
|
661
854
|
exitMenu = true;
|
|
662
855
|
}
|
package/dist/chunks/package.mjs
CHANGED
package/dist/chunks/platform.mjs
CHANGED
|
@@ -388,4 +388,4 @@ const platform = {
|
|
|
388
388
|
wrapCommandWithSudo: wrapCommandWithSudo
|
|
389
389
|
};
|
|
390
390
|
|
|
391
|
-
export { getHomebrewCommandPaths as a,
|
|
391
|
+
export { getHomebrewCommandPaths as a, getTermuxPrefix as b, isWSL as c, getWSLInfo as d, commandExists as e, findCommandPath as f, getPlatform as g, getRecommendedInstallMethods as h, isTermux as i, findRealCommandPath as j, isWindows as k, getMcpCommand as l, getSystemRoot as m, normalizeTomlPath as n, platform as p, shouldUseSudoForGlobalInstall as s, wrapCommandWithSudo as w };
|
|
@@ -90,25 +90,6 @@ function displayError(result) {
|
|
|
90
90
|
console.log(ansis.gray("\u{1F4A1} Run with verbose mode for details: npx ccjk quick-setup --verbose"));
|
|
91
91
|
console.log("");
|
|
92
92
|
}
|
|
93
|
-
async function promptApiKey(provider = "anthropic") {
|
|
94
|
-
const isZh = i18n.language === "zh-CN";
|
|
95
|
-
const validateKey = (input) => {
|
|
96
|
-
if (!input || input.trim() === "") {
|
|
97
|
-
return isZh ? "API \u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A" : "API key is required";
|
|
98
|
-
}
|
|
99
|
-
if (provider === "anthropic" && !input.startsWith("sk-ant-")) {
|
|
100
|
-
return isZh ? "Anthropic API \u5BC6\u94A5\u5E94\u4EE5 sk-ant- \u5F00\u5934" : "Anthropic API key should start with sk-ant-";
|
|
101
|
-
}
|
|
102
|
-
return true;
|
|
103
|
-
};
|
|
104
|
-
const { apiKey } = await inquirer.prompt({
|
|
105
|
-
type: "password",
|
|
106
|
-
name: "apiKey",
|
|
107
|
-
message: isZh ? `\u8BF7\u8F93\u5165\u60A8\u7684 ${provider === "anthropic" ? "Anthropic" : provider.toUpperCase()} API \u5BC6\u94A5:` : `Enter your ${provider === "anthropic" ? "Anthropic" : provider.toUpperCase()} API key:`,
|
|
108
|
-
validate: validateKey
|
|
109
|
-
});
|
|
110
|
-
return apiKey;
|
|
111
|
-
}
|
|
112
93
|
async function promptProvider() {
|
|
113
94
|
const isZh = i18n.language === "zh-CN";
|
|
114
95
|
const { provider } = await inquirer.prompt({
|
|
@@ -116,16 +97,39 @@ async function promptProvider() {
|
|
|
116
97
|
name: "provider",
|
|
117
98
|
message: isZh ? "\u9009\u62E9 API \u63D0\u4F9B\u5546:" : "Select API provider:",
|
|
118
99
|
choices: [
|
|
119
|
-
{ name: "Anthropic (
|
|
120
|
-
{ name: "
|
|
121
|
-
{ name: "
|
|
122
|
-
{ name: "
|
|
123
|
-
{ name: isZh ? "\u5176\u4ED6
|
|
100
|
+
{ name: "Anthropic (\u5B98\u65B9)", value: "anthropic" },
|
|
101
|
+
{ name: "OpenRouter", value: "openrouter" },
|
|
102
|
+
{ name: "Amazon Bedrock", value: "bedrock" },
|
|
103
|
+
{ name: "Google Vertex AI", value: "vertex" },
|
|
104
|
+
{ name: isZh ? "\u5176\u4ED6" : "Other", value: "other" }
|
|
124
105
|
],
|
|
125
106
|
default: "anthropic"
|
|
126
107
|
});
|
|
127
108
|
return provider;
|
|
128
109
|
}
|
|
110
|
+
async function promptApiKey(provider) {
|
|
111
|
+
const isZh = i18n.language === "zh-CN";
|
|
112
|
+
const providerNames = {
|
|
113
|
+
anthropic: "Anthropic",
|
|
114
|
+
openrouter: "OpenRouter",
|
|
115
|
+
bedrock: "Amazon Bedrock",
|
|
116
|
+
vertex: "Google Vertex AI",
|
|
117
|
+
other: isZh ? "\u81EA\u5B9A\u4E49" : "Custom"
|
|
118
|
+
};
|
|
119
|
+
const { apiKey } = await inquirer.prompt({
|
|
120
|
+
type: "password",
|
|
121
|
+
name: "apiKey",
|
|
122
|
+
message: isZh ? `\u8F93\u5165 ${providerNames[provider] || provider} API \u5BC6\u94A5:` : `Enter ${providerNames[provider] || provider} API key:`,
|
|
123
|
+
mask: "*",
|
|
124
|
+
validate: (input) => {
|
|
125
|
+
if (!input || input.trim().length === 0) {
|
|
126
|
+
return isZh ? "API \u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A" : "API key cannot be empty";
|
|
127
|
+
}
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return apiKey.trim();
|
|
132
|
+
}
|
|
129
133
|
async function promptCustomConfig() {
|
|
130
134
|
const isZh = i18n.language === "zh-CN";
|
|
131
135
|
const result = await inquirer.prompt([
|
|
@@ -214,15 +218,15 @@ async function promptAgents() {
|
|
|
214
218
|
}
|
|
215
219
|
return agents;
|
|
216
220
|
}
|
|
217
|
-
function applyDefaultsToInitOptions(defaults, apiKey, provider, lang) {
|
|
221
|
+
function applyDefaultsToInitOptions(defaults, apiKey, provider, lang, skipApiConfig = false) {
|
|
218
222
|
return {
|
|
219
223
|
skipPrompt: true,
|
|
220
224
|
skipBanner: true,
|
|
221
225
|
configLang: lang,
|
|
222
226
|
allLang: lang,
|
|
223
|
-
apiType: "api_key",
|
|
224
|
-
apiKey,
|
|
225
|
-
provider,
|
|
227
|
+
apiType: skipApiConfig ? "skip" : "api_key",
|
|
228
|
+
apiKey: skipApiConfig ? void 0 : apiKey,
|
|
229
|
+
provider: skipApiConfig ? void 0 : provider,
|
|
226
230
|
// Core MCP services only (filesystem, git, fetch)
|
|
227
231
|
mcpServices: defaults.mcpServices,
|
|
228
232
|
// Essential skills (git-commit, feat, workflow, init-project)
|
|
@@ -323,11 +327,13 @@ async function quickSetup(options = {}) {
|
|
|
323
327
|
const finalMcpServices = customMcpServices || defaults.mcpServices;
|
|
324
328
|
const finalSkills = customSkills || defaults.skills;
|
|
325
329
|
const finalAgents = customAgents || defaults.agents;
|
|
330
|
+
const hasApiKey = !!apiKey && apiKey.length > 0;
|
|
326
331
|
const initOptions = applyDefaultsToInitOptions(
|
|
327
332
|
{ ...defaults, mcpServices: finalMcpServices, skills: finalSkills, agents: finalAgents },
|
|
328
|
-
apiKey,
|
|
329
|
-
provider,
|
|
330
|
-
lang
|
|
333
|
+
hasApiKey ? apiKey : "",
|
|
334
|
+
hasApiKey ? provider : "anthropic",
|
|
335
|
+
lang,
|
|
336
|
+
!hasApiKey
|
|
331
337
|
);
|
|
332
338
|
updateZcfConfig({
|
|
333
339
|
version,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccjk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "9.3.
|
|
4
|
+
"version": "9.3.4",
|
|
5
5
|
"packageManager": "pnpm@10.17.1",
|
|
6
6
|
"description": "CCJK v9.0.0 - Revolutionary AI Development Platform with Enterprise Security, Streaming Cloud Sync, CRDT Conflict Resolution, and Unified V3 Architecture",
|
|
7
7
|
"author": {
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"build": "unbuild",
|
|
80
80
|
"start": "node bin/ccjk.mjs",
|
|
81
81
|
"typecheck": "tsc --noEmit",
|
|
82
|
-
"prepublishOnly": "node scripts/validate-prepublish.mjs && pnpm build
|
|
82
|
+
"prepublishOnly": "node scripts/validate-prepublish.mjs && pnpm build",
|
|
83
83
|
"lint": "eslint",
|
|
84
84
|
"lint:fix": "eslint --fix",
|
|
85
85
|
"test": "vitest",
|