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.
@@ -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 { h as commandExists } from './platform.mjs';
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';
@@ -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 './codex.mjs';
25
- import 'ora';
26
- import 'semver';
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 '../shared/ccjk.BFQ7yr5S.mjs';
32
- import './prompts.mjs';
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 './uninstall.mjs';
56
- import 'fs-extra';
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 { i as isWindows, l as getMcpCommand } from './platform.mjs';
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 { buildMcpServerConfig as a, backupMcpConfig as b, addCompletedOnboarding as c, deepMerge as d, claudeConfig as e, fixWindowsMcpConfig as f, mergeMcpServers as m, readMcpConfig as r, setPrimaryApiKey as s, writeMcpConfig as w };
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 { k as findRealCommandPath } from './platform.mjs';
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 { h as detectConfigManagementMode } from './codex.mjs';
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, e as backupCodexComplete, w as writeCodexConfig, f as writeAuthFile } from './codex.mjs';
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';
@@ -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 { i as isWindows, l as getMcpCommand, m as getSystemRoot, w as wrapCommandWithSudo, n as normalizeTomlPath } from './platform.mjs';
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, selectMcpServices as d, backupCodexComplete as e, writeAuthFile as f, getMcpServices as g, detectConfigManagementMode as h, runCodexFullInit as i, getMcpService as j, applyCodexPlatformCommand as k, listCodexProviders as l, codex as m, runCodexUpdate as r, switchCodexProvider as s, writeCodexConfig as w };
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 };
@@ -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, c as addCompletedOnboarding } from './claude-config.mjs';
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
 
@@ -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, c as addCompletedOnboarding } from './claude-config.mjs';
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';
@@ -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 { h as commandExists } from './platform.mjs';
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';
@@ -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 { p as promptBoolean } from '../shared/ccjk.DHbrGcgg.mjs';
11
+ import 'node:os';
12
+ import 'pathe';
13
+ import 'node:fs';
15
14
  import 'node:process';
16
15
  import 'node:url';
17
- import 'dayjs';
18
- import 'ora';
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 './prompts.mjs';
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, configureMcpFeature, promptCustomModels };
252
+ export { changeScriptLanguageFeature, configureApiFeature, promptCustomModels };
@@ -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 { i as runCodexFullInit, d as selectMcpServices, g as getMcpServices, M as MCP_SERVICE_CONFIGS } from './codex.mjs';
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, i as isWindows, b as isTermux } from './platform.mjs';
17
- import { c as addCompletedOnboarding, s as setPrimaryApiKey, b as backupMcpConfig, a as buildMcpServerConfig, r as readMcpConfig, m as mergeMcpServers, f as fixWindowsMcpConfig, w as writeMcpConfig } from './claude-config.mjs';
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, b as isTermux, c as getTermuxPrefix, d as isWSL, e as getWSLInfo, w as wrapCommandWithSudo, h as commandExists, j as getRecommendedInstallMethods } from './platform.mjs';
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';
@@ -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, a as buildMcpServerConfig } from './claude-config.mjs';
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 { i as isWindows, m as getSystemRoot } from './platform.mjs';
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';
@@ -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 { CODE_TOOL_BANNERS, CLAUDE_DIR, isCodeToolType, DEFAULT_CODE_TOOL_TYPE } from './constants.mjs';
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 { updateZcfConfig, readZcfConfig } from './ccjk-config.mjs';
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 { executeCcusage } from './ccu.mjs';
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 { update } from './update.mjs';
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["codex"], value: "codex" },
350
- { name: CODE_TOOL_LABELS["aider"], value: "aider" },
351
- { name: CODE_TOOL_LABELS["continue"], value: "continue" },
352
- { name: CODE_TOOL_LABELS["cline"], value: "cline" },
353
- { name: CODE_TOOL_LABELS["cursor"], value: "cursor" }
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: i18n.t("menu:switchCodeToolPrompt"),
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 ${i18n.t("menu:codeToolSwitched", { tool: getCodeToolLabel(tool) })}`));
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 version";
382
- const skillsName = isZh ? "4. \u{1F4DA} Skills \u7BA1\u7406" : "4. \u{1F4DA} Skills Manager";
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 ? "5. \u{1F50C} MCP \u7BA1\u7406" : "5. \u{1F50C} MCP Manager";
385
- const mcpDesc = isZh ? "\u914D\u7F6E Model Context Protocol \u670D\u52A1" : "Configure Model Context Protocol services";
386
- const agentsName = isZh ? "6. \u{1F916} Agents \u7BA1\u7406" : "6. \u{1F916} Agents Manager";
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 languageName = isZh ? "7. \u{1F30D} \u8BED\u8A00\u8BBE\u7F6E" : "7. \u{1F30D} Language";
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 ? "8. \u2753 \u5E2E\u52A9\u6587\u6863" : "8. \u2753 Help";
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(`${quickStartTitle}`));
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(`${advancedTitle}`));
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(`${systemTitle}`));
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-8):" : "Enter option (0-8):",
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
- // Quick Start
429
- case "1":
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
- case "2":
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
- case "3":
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
- // Advanced
449
- case "4":
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
- case "5":
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
- case "6":
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
- // System
468
- case "7":
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
- case "q":
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 lang = i18n.language;
515
- const isZh = lang === "zh-CN";
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
- { name: isZh ? "API \u914D\u7F6E" : "API Configuration", value: "api" },
521
- { name: isZh ? "MCP \u914D\u7F6E" : "MCP Configuration", value: "mcp" },
522
- { name: isZh ? "\u914D\u7F6E\u5207\u6362" : "Config Switch", value: "switch" },
523
- { name: isZh ? "CCR \u7BA1\u7406" : "CCR Management", value: "ccr" },
524
- { name: isZh ? "CCUsage" : "CCUsage", value: "ccusage" },
525
- { name: isZh ? "Cometix" : "Cometix", value: "cometix" },
526
- { name: isZh ? "\u68C0\u67E5\u66F4\u65B0" : "Check Updates", value: "updates" },
527
- { name: isZh ? "\u4EE3\u7801\u5DE5\u5177\u5207\u6362" : "Switch Code Tool", value: "codetool" },
528
- { name: isZh ? "\u5378\u8F7D CCJK" : "Uninstall CCJK", value: "uninstall" },
529
- { name: isZh ? "\u8FD4\u56DE\u4E3B\u83DC\u5355" : "Back to Main Menu", value: "back" }
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\u9009\u9879:" : "Select option:",
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 "api":
543
- await configureApiFeature();
544
- break;
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
- case "ccusage":
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
- case "cometix":
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
- case "updates":
561
- await checkUpdates();
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
- case "codetool":
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
- case "uninstall":
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(` Claude Code JinKu`.padEnd(72)) + ansis.bold.green("\u2551"));
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 ? " \u6B22\u8FCE\u4F7F\u7528 CCJK!" : " Welcome to CCJK!".padEnd(72)) + ansis.bold.green("\u2551"));
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 ? " 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"));
602
- console.log(ansis.bold.green("\u2551") + ansis.white(isZh ? " \u8BA9\u4F60\u7684\u4E00\u952E\u914D\u7F6E\u53D8\u5F97\u7B80\u5355\u9AD8\u6548" : " Making one-click setup simple and efficient".padEnd(72)) + ansis.bold.green("\u2551"));
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\u914D\u7F6E" : "\u{1F527} Full Setup") + ansis.dim(isZh ? " - \u4EA4\u4E92\u5F0F\u5B8C\u6574\u914D\u7F6E" : " - Interactive full configuration"),
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
- console.log(ansis.green(`\u2714 ${i18n.t("menu:codeToolSwitched", { tool: getCodeToolLabel(resolvedType) })}`));
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
- let result;
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
  }
@@ -1,4 +1,4 @@
1
- const version = "9.3.2";
1
+ const version = "9.3.4";
2
2
  const homepage = "https://github.com/miounet11/ccjk";
3
3
 
4
4
  export { homepage, version };
@@ -388,4 +388,4 @@ const platform = {
388
388
  wrapCommandWithSudo: wrapCommandWithSudo
389
389
  };
390
390
 
391
- export { getHomebrewCommandPaths as a, isTermux as b, getTermuxPrefix as c, isWSL as d, getWSLInfo as e, findCommandPath as f, getPlatform as g, commandExists as h, isWindows as i, getRecommendedInstallMethods as j, findRealCommandPath as k, getMcpCommand as l, getSystemRoot as m, normalizeTomlPath as n, platform as p, shouldUseSudoForGlobalInstall as s, wrapCommandWithSudo as w };
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 (Official)", value: "anthropic" },
120
- { name: "GLM (Zhipu AI)", value: "glm" },
121
- { name: "MiniMax", value: "minimax" },
122
- { name: "Kimi (Moonshot)", value: "kimi" },
123
- { name: isZh ? "\u5176\u4ED6/\u81EA\u5B9A\u4E49..." : "Other/Custom...", value: "custom" }
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.2",
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 && pnpm test:run",
82
+ "prepublishOnly": "node scripts/validate-prepublish.mjs && pnpm build",
83
83
  "lint": "eslint",
84
84
  "lint:fix": "eslint --fix",
85
85
  "test": "vitest",