ccjk 2.0.0 → 2.0.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.
@@ -20,7 +20,7 @@ import trash from 'trash';
20
20
  import i18next from 'i18next';
21
21
  import Backend from 'i18next-fs-backend';
22
22
 
23
- const version = "2.0.0";
23
+ const version = "2.0.4";
24
24
  const homepage = "https://github.com/miounet11/ccjk";
25
25
 
26
26
  const i18n = i18next.createInstance();
@@ -7744,9 +7744,25 @@ async function init(options = {}) {
7744
7744
  aiOutputLang,
7745
7745
  codeToolType
7746
7746
  });
7747
- console.log(ansis.green(`\u2714 ${i18n.t("configuration:configSuccess")} ${CLAUDE_DIR$1}`));
7748
- console.log(`
7749
- ${ansis.cyan(i18n.t("common:complete"))}`);
7747
+ console.log("");
7748
+ console.log(ansis.bold.green("\u2554\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\u2557"));
7749
+ console.log(ansis.bold.green("\u2551") + ansis.bold.white(` ${i18n.t("configuration:setupCompleteTitle")}`.padEnd(62)) + ansis.bold.green("\u2551"));
7750
+ 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\u2563"));
7751
+ console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
7752
+ console.log(ansis.bold.green("\u2551") + ansis.cyan(` ${i18n.t("configuration:nextSteps")}`.padEnd(62)) + ansis.bold.green("\u2551"));
7753
+ console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
7754
+ console.log(ansis.bold.green("\u2551") + ` ${i18n.t("configuration:guidanceStep1")}`.padEnd(62) + ansis.bold.green("\u2551"));
7755
+ console.log(ansis.bold.green("\u2551") + ansis.dim(` ${i18n.t("configuration:guidanceStep1Detail")}`.padEnd(62)) + ansis.bold.green("\u2551"));
7756
+ console.log(ansis.bold.green("\u2551") + ansis.dim(` ${i18n.t("configuration:guidanceStep1Detail2")}`.padEnd(62)) + ansis.bold.green("\u2551"));
7757
+ console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
7758
+ console.log(ansis.bold.green("\u2551") + ` ${i18n.t("configuration:guidanceStep2")}`.padEnd(62) + ansis.bold.green("\u2551"));
7759
+ console.log(ansis.bold.green("\u2551") + ansis.cyan(` ${i18n.t("configuration:guidanceStep2Example")}`.padEnd(62)) + ansis.bold.green("\u2551"));
7760
+ console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
7761
+ console.log(ansis.bold.green("\u2551") + ` ${i18n.t("configuration:guidanceStep3")} `.padEnd(44) + ansis.yellow(i18n.t("configuration:guidanceStep3Command")).padEnd(18) + ansis.bold.green("\u2551"));
7762
+ console.log(ansis.bold.green("\u2551") + ` ${i18n.t("configuration:guidanceStep4")} `.padEnd(44) + ansis.yellow(i18n.t("configuration:guidanceStep4Command")).padEnd(18) + ansis.bold.green("\u2551"));
7763
+ console.log(`${ansis.bold.green("\u2551")} ${ansis.bold.green("\u2551")}`);
7764
+ 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\u255D"));
7765
+ console.log("");
7750
7766
  } catch (error) {
7751
7767
  if (!handleExitPromptError(error)) {
7752
7768
  handleGeneralError(error);
@@ -9936,365 +9952,6 @@ Upgraded ${pluginResults.filter((r) => r.success).length}/${pluginResults.length
9936
9952
  console.log("");
9937
9953
  }
9938
9954
 
9939
- async function checkClaudeCodeInstallation() {
9940
- try {
9941
- const versionInfo = await checkClaudeCodeVersion();
9942
- if (versionInfo.current === "unknown") {
9943
- return {
9944
- name: "Claude Code",
9945
- status: "fail",
9946
- message: "Not installed",
9947
- fixable: true,
9948
- fixCommand: "npm install -g @anthropic-ai/claude-code"
9949
- };
9950
- }
9951
- if (versionInfo.updateAvailable) {
9952
- return {
9953
- name: "Claude Code",
9954
- status: "warn",
9955
- message: `v${versionInfo.current} (update to v${versionInfo.latest} available)`,
9956
- fixable: true,
9957
- fixCommand: "ccjk upgrade claude-code"
9958
- };
9959
- }
9960
- return {
9961
- name: "Claude Code",
9962
- status: "pass",
9963
- message: `v${versionInfo.current} (latest)`
9964
- };
9965
- } catch (error) {
9966
- return {
9967
- name: "Claude Code",
9968
- status: "fail",
9969
- message: "Check failed",
9970
- details: error instanceof Error ? error.message : "Unknown error"
9971
- };
9972
- }
9973
- }
9974
- async function checkCcjkInstallation() {
9975
- try {
9976
- const versionInfo = await checkCcjkVersion();
9977
- if (versionInfo.updateAvailable) {
9978
- return {
9979
- name: "CCJK",
9980
- status: "warn",
9981
- message: `v${versionInfo.current} (update to v${versionInfo.latest} available)`,
9982
- fixable: true,
9983
- fixCommand: "ccjk upgrade ccjk"
9984
- };
9985
- }
9986
- return {
9987
- name: "CCJK",
9988
- status: "pass",
9989
- message: `v${versionInfo.current} (latest)`
9990
- };
9991
- } catch {
9992
- return {
9993
- name: "CCJK",
9994
- status: "pass",
9995
- message: `v${version}`
9996
- };
9997
- }
9998
- }
9999
- async function checkNodeVersion() {
10000
- try {
10001
- const result = await exec("node", ["--version"], { throwOnError: false });
10002
- const nodeVersion = result.stdout.trim().replace("v", "");
10003
- const major = Number.parseInt(nodeVersion.split(".")[0]);
10004
- if (major < 18) {
10005
- return {
10006
- name: "Node.js",
10007
- status: "fail",
10008
- message: `v${nodeVersion} (requires v18+)`,
10009
- fixable: false
10010
- };
10011
- }
10012
- if (major < 20) {
10013
- return {
10014
- name: "Node.js",
10015
- status: "warn",
10016
- message: `v${nodeVersion} (v20+ recommended)`
10017
- };
10018
- }
10019
- return {
10020
- name: "Node.js",
10021
- status: "pass",
10022
- message: `v${nodeVersion}`
10023
- };
10024
- } catch {
10025
- return {
10026
- name: "Node.js",
10027
- status: "fail",
10028
- message: "Not found"
10029
- };
10030
- }
10031
- }
10032
- async function checkNpmVersion() {
10033
- try {
10034
- const result = await exec("npm", ["--version"], { throwOnError: false });
10035
- const npmVersion = result.stdout.trim();
10036
- return {
10037
- name: "npm",
10038
- status: "pass",
10039
- message: `v${npmVersion}`
10040
- };
10041
- } catch {
10042
- return {
10043
- name: "npm",
10044
- status: "fail",
10045
- message: "Not found"
10046
- };
10047
- }
10048
- }
10049
- async function checkGitInstallation() {
10050
- try {
10051
- const result = await exec("git", ["--version"], { throwOnError: false });
10052
- const match = result.stdout.match(/(\d+\.\d+\.\d+)/);
10053
- const gitVersion = match ? match[1] : "unknown";
10054
- return {
10055
- name: "Git",
10056
- status: "pass",
10057
- message: `v${gitVersion}`
10058
- };
10059
- } catch {
10060
- return {
10061
- name: "Git",
10062
- status: "warn",
10063
- message: "Not found (optional)"
10064
- };
10065
- }
10066
- }
10067
- async function checkApiConnectivity() {
10068
- try {
10069
- const start = Date.now();
10070
- const result = await exec("curl", ["-s", "-o", "/dev/null", "-w", "%{http_code}", "https://api.anthropic.com/health"], {
10071
- throwOnError: false,
10072
- timeout: 1e4
10073
- });
10074
- const elapsed = Date.now() - start;
10075
- if (result.stdout.trim() === "200" || result.stdout.trim() === "404") {
10076
- return {
10077
- name: "API Connectivity",
10078
- status: "pass",
10079
- message: `OK (${elapsed}ms)`
10080
- };
10081
- }
10082
- return {
10083
- name: "API Connectivity",
10084
- status: "warn",
10085
- message: `Response: ${result.stdout.trim()}`
10086
- };
10087
- } catch {
10088
- return {
10089
- name: "API Connectivity",
10090
- status: "info",
10091
- message: "Could not test (curl not available)"
10092
- };
10093
- }
10094
- }
10095
- function checkConfigValidity() {
10096
- const configs = detectAllConfigs();
10097
- const existingConfigs = configs.filter((c) => c.exists);
10098
- if (existingConfigs.length === 0) {
10099
- return {
10100
- name: "Config Files",
10101
- status: "info",
10102
- message: "No config files (run ccjk init)",
10103
- fixable: true,
10104
- fixCommand: "ccjk init"
10105
- };
10106
- }
10107
- if (existingConfigs.length > 1) {
10108
- return {
10109
- name: "Config Files",
10110
- status: "warn",
10111
- message: `${existingConfigs.length} found (consolidation recommended)`,
10112
- fixable: true,
10113
- fixCommand: "ccjk config consolidate"
10114
- };
10115
- }
10116
- return {
10117
- name: "Config Files",
10118
- status: "pass",
10119
- message: "1 config file"
10120
- };
10121
- }
10122
- function checkPermissions() {
10123
- try {
10124
- const templateId = getCurrentTemplateId();
10125
- if (templateId) {
10126
- return {
10127
- name: "Permissions",
10128
- status: "pass",
10129
- message: `${templateId} template active`
10130
- };
10131
- }
10132
- return {
10133
- name: "Permissions",
10134
- status: "info",
10135
- message: "Custom permissions"
10136
- };
10137
- } catch {
10138
- return {
10139
- name: "Permissions",
10140
- status: "info",
10141
- message: "Not configured"
10142
- };
10143
- }
10144
- }
10145
- async function checkDiskSpace() {
10146
- try {
10147
- if (process.platform === "win32") {
10148
- return {
10149
- name: "Disk Space",
10150
- status: "info",
10151
- message: "Check skipped (Windows)"
10152
- };
10153
- }
10154
- const result = await exec("df", ["-h", homedir()], { throwOnError: false });
10155
- const lines = result.stdout.trim().split("\n");
10156
- if (lines.length >= 2) {
10157
- const parts = lines[1].split(/\s+/);
10158
- const available = parts[3];
10159
- const usePercent = Number.parseInt(parts[4]);
10160
- if (usePercent > 90) {
10161
- return {
10162
- name: "Disk Space",
10163
- status: "warn",
10164
- message: `${available} available (${usePercent}% used)`
10165
- };
10166
- }
10167
- return {
10168
- name: "Disk Space",
10169
- status: "pass",
10170
- message: `${available} available`
10171
- };
10172
- }
10173
- return {
10174
- name: "Disk Space",
10175
- status: "info",
10176
- message: "Could not determine"
10177
- };
10178
- } catch {
10179
- return {
10180
- name: "Disk Space",
10181
- status: "info",
10182
- message: "Check skipped"
10183
- };
10184
- }
10185
- }
10186
- function calculateScore(checks) {
10187
- let score = 100;
10188
- const weights = {
10189
- "Claude Code": 25,
10190
- "CCJK": 15,
10191
- "Node.js": 20,
10192
- "npm": 10,
10193
- "Git": 5,
10194
- "API Connectivity": 10,
10195
- "Config Files": 10,
10196
- "Permissions": 5
10197
- };
10198
- for (const check of checks) {
10199
- const checkWeight = weights[check.name] || 5;
10200
- if (check.status === "fail") {
10201
- score -= checkWeight;
10202
- } else if (check.status === "warn") {
10203
- score -= checkWeight * 0.5;
10204
- }
10205
- }
10206
- return Math.max(0, Math.min(100, Math.round(score)));
10207
- }
10208
- function generateRecommendations(checks) {
10209
- const recommendations = [];
10210
- for (const check of checks) {
10211
- if (check.fixable && check.fixCommand && (check.status === "fail" || check.status === "warn")) {
10212
- recommendations.push(`Run '${check.fixCommand}' to fix ${check.name.toLowerCase()}`);
10213
- }
10214
- }
10215
- return recommendations;
10216
- }
10217
- async function runHealthCheck() {
10218
- const spinner = ora("Running health check...").start();
10219
- const checks = [];
10220
- spinner.text = "Checking Claude Code...";
10221
- checks.push(await checkClaudeCodeInstallation());
10222
- spinner.text = "Checking CCJK...";
10223
- checks.push(await checkCcjkInstallation());
10224
- spinner.text = "Checking Node.js...";
10225
- checks.push(await checkNodeVersion());
10226
- spinner.text = "Checking npm...";
10227
- checks.push(await checkNpmVersion());
10228
- spinner.text = "Checking Git...";
10229
- checks.push(await checkGitInstallation());
10230
- spinner.text = "Checking API connectivity...";
10231
- checks.push(await checkApiConnectivity());
10232
- spinner.text = "Checking config files...";
10233
- checks.push(checkConfigValidity());
10234
- spinner.text = "Checking permissions...";
10235
- checks.push(checkPermissions());
10236
- spinner.text = "Checking disk space...";
10237
- checks.push(await checkDiskSpace());
10238
- spinner.stop();
10239
- const score = calculateScore(checks);
10240
- const recommendations = generateRecommendations(checks);
10241
- return {
10242
- timestamp: /* @__PURE__ */ new Date(),
10243
- score,
10244
- checks,
10245
- recommendations
10246
- };
10247
- }
10248
- function displayHealthReport(report) {
10249
- console.log(ansis.cyan("\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 CCJK Environment Health \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n"));
10250
- for (const check of report.checks) {
10251
- switch (check.status) {
10252
- case "pass":
10253
- console.log(STATUS.success(`${check.name.padEnd(20)} ${check.message}`));
10254
- break;
10255
- case "warn":
10256
- console.log(STATUS.warning(`${check.name.padEnd(20)} ${check.message}`));
10257
- break;
10258
- case "fail":
10259
- console.log(STATUS.error(`${check.name.padEnd(20)} ${check.message}`));
10260
- break;
10261
- case "info":
10262
- console.log(STATUS.info(`${check.name.padEnd(20)} ${check.message}`));
10263
- break;
10264
- }
10265
- }
10266
- console.log("");
10267
- console.log(`Score: ${ansis.cyan(report.score.toString())}/100`);
10268
- console.log(renderProgressBar(report.score, 40));
10269
- if (report.recommendations.length > 0) {
10270
- console.log(ansis.yellow("\nRecommendations:"));
10271
- for (const rec of report.recommendations) {
10272
- console.log(ansis.yellow(` \u2022 ${rec}`));
10273
- }
10274
- }
10275
- console.log("");
10276
- }
10277
- async function runDoctor(fix = false) {
10278
- const report = await runHealthCheck();
10279
- displayHealthReport(report);
10280
- if (fix && report.recommendations.length > 0) {
10281
- console.log(ansis.cyan("\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 Attempting Fixes \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n"));
10282
- for (const check of report.checks) {
10283
- if (check.fixable && check.fixCommand && (check.status === "fail" || check.status === "warn")) {
10284
- const spinner = ora(`Fixing ${check.name}...`).start();
10285
- try {
10286
- const parts = check.fixCommand.split(" ");
10287
- await exec(parts[0], parts.slice(1), { throwOnError: true });
10288
- spinner.succeed(`Fixed ${check.name}`);
10289
- } catch (_error) {
10290
- spinner.fail(`Failed to fix ${check.name}`);
10291
- }
10292
- }
10293
- }
10294
- console.log("");
10295
- }
10296
- }
10297
-
10298
9955
  const KNOWLEDGE_BASE_FILE = join(CCJK_CONFIG_DIR, "knowledge-base.json");
10299
9956
  function simpleHash(content) {
10300
9957
  let hash = 0;
@@ -10734,4 +10391,4 @@ async function openSettingsJson() {
10734
10391
  }
10735
10392
  }
10736
10393
 
10737
- export { AI_OUTPUT_LANGUAGES as $, AIDER_DIR as A, CODEX_AGENTS_FILE as B, CCJK_PLUGINS_DIR as C, CODEX_PROMPTS_DIR as D, CLINE_DIR as E, CLINE_CONFIG_FILE as F, CURSOR_DIR as G, CURSOR_CONFIG_FILE as H, CCJK_CONFIG_DIR as I, CCJK_CONFIG_FILE as J, LEGACY_ZCF_CONFIG_FILE as K, LEGACY_ZCF_CONFIG_DIR as L, LEGACY_ZCF_CONFIG_FILES as M, ZCF_CONFIG_FILE as N, CODE_TOOL_TYPES as O, DEFAULT_CODE_TOOL_TYPE as P, CODE_TOOL_BANNERS as Q, CODE_TOOL_ALIASES as R, STATUS as S, CODE_TOOL_INFO as T, isCodeToolType as U, API_DEFAULT_URL as V, API_ENV_KEY as W, resolveCodeToolType as X, SUPPORTED_LANGS as Y, ZCF_CONFIG_DIR as Z, LANG_LABELS as _, CCJK_SKILLS_DIR as a, getAvailableManagementActions as a$, getAiOutputLanguageLabel as a0, detectPackageManager as a1, detectFrameworks as a2, detectBuildTools as a3, detectTestFrameworks as a4, detectCICDSystems as a5, detectLanguages as a6, determineProjectType as a7, detectProject as a8, generateSuggestions as a9, createBackupDirectory as aA, ensureEnvKeyMigration as aB, getBackupMessage as aC, getCodexVersion as aD, getCurrentCodexProvider as aE, installCodexCli as aF, isCodexInstalled$1 as aG, listCodexProviders as aH, migrateEnvKeyInContent as aI, migrateEnvKeyToTempEnvKey as aJ, needsEnvKeyMigration as aK, parseCodexConfig as aL, readCodexConfig as aM, renderCodexConfig as aN, runCodexFullInit as aO, runCodexSystemPromptSelection as aP, runCodexUninstall as aQ, runCodexUpdate as aR, runCodexWorkflowImport as aS, runCodexWorkflowImportWithLanguageSelection as aT, runCodexWorkflowSelection as aU, switchCodexProvider as aV, switchToProvider as aW, writeAuthFile as aX, writeCodexConfig as aY, detectConfigManagementMode as aZ, shouldShowManagementMode as a_, getProjectSummary as aa, displayBanner as ab, displayBannerWithInfo as ac, renderProgressBar as ad, boxify as ae, menuItem as af, getMcpConfigPath as ag, readMcpConfig as ah, writeMcpConfig as ai, backupMcpConfig as aj, mergeMcpServers as ak, buildMcpServerConfig as al, fixWindowsMcpConfig as am, addCompletedOnboarding as an, ensureApiKeyApproved as ao, removeApiKeyFromRejected as ap, manageApiKeyApproval as aq, setPrimaryApiKey as ar, backupCodexAgents as as, backupCodexComplete as at, backupCodexConfig as au, backupCodexFiles as av, backupCodexPrompts as aw, checkCodexUpdate as ax, switchToOfficialLogin as ay, configureCodexApi as az, CCJK_GROUPS_DIR as b, trustDirectory as b$, configureCodexMcp as b0, applyCodexPlatformCommand as b1, getToolConfigPath as b2, getToolDir as b3, isToolInstalled as b4, getToolVersion as b5, getToolStatus as b6, getAllToolsStatus as b7, getInstalledTools as b8, installTool as b9, runDoctor as bA, isClaudeCodeInstalled as bB, installClaudeCode as bC, isCodexInstalled as bD, installCodex as bE, isLocalClaudeCodeInstalled as bF, getInstallationStatus as bG, removeLocalClaudeCode as bH, uninstallCodeTool as bI, setInstallMethod as bJ, detectInstalledVersion as bK, selectInstallMethod as bL, executeInstallMethod as bM, handleInstallFailure as bN, verifyInstallation as bO, createHomebrewSymlink as bP, displayVerificationResult as bQ, loadKnowledgeBase as bR, saveKnowledgeBase as bS, runOnboarding as bT, quickSync as bU, getProjectKnowledge as bV, exportProjectKnowledge as bW, PERMISSION_TEMPLATES as bX, readPermissions as bY, writePermissions as bZ, applyTemplate as b_, getToolInfo as ba, getAllToolsInfo as bb, getToolsByCategory as bc, formatToolStatus as bd, getRecommendedTools as be, ensureClaudeDir as bf, backupExistingConfig as bg, copyConfigFiles as bh, configureApi as bi, mergeConfigs as bj, updateCustomModel as bk, updateDefaultModel as bl, mergeSettingsFile as bm, getExistingModelConfig as bn, getExistingApiConfig as bo, applyAiLanguageDirective as bp, switchToOfficialLogin$1 as bq, promptApiConfigurationAction as br, detectAllConfigs as bs, compareConfigs as bt, consolidateConfigs as bu, writeConsolidatedConfig as bv, removeRedundantConfigs as bw, displayConfigScan as bx, runHealthCheck as by, displayHealthReport as bz, AIDER_CONFIG_FILE as c, writeTomlConfig as c$, untrustDirectory as c0, isPermissionAllowed as c1, isDirectoryTrusted as c2, addAutoApprovePattern as c3, removeAutoApprovePattern as c4, resetPermissions as c5, exportPermissions as c6, importPermissions as c7, getCurrentTemplateId as c8, displayPermissions as c9, checkAndUpdateTools as cA, resolveCodeType as cB, readZcfConfig as cC, readJsonConfig as cD, writeJsonConfig as cE, moveToTrash as cF, updateZcfConfig as cG, version as cH, resolveAiOutputLanguage as cI, updatePromptOnly as cJ, selectAndInstallWorkflows as cK, checkClaudeCodeVersionAndPrompt as cL, checkSuperpowersInstalled as cM, getSuperpowersSkills as cN, updateSuperpowers as cO, uninstallSuperpowers as cP, installSuperpowers as cQ, installSuperpowersViaGit as cR, readZcfConfigAsync as cS, initI18n as cT, selectScriptLanguage as cU, changeLanguage as cV, validateApiKey$1 as cW, ensureDir as cX, readDefaultTomlConfig as cY, createDefaultTomlConfig as cZ, exists as c_, checkClaudeCodeVersion as ca, checkCcjkVersion as cb, checkPluginVersions as cc, upgradeClaudeCode as cd, upgradeCcjk as ce, upgradePlugin as cf, upgradeAllPlugins as cg, checkAllVersions as ch, upgradeAll as ci, i18n as cj, testApiConnection as ck, quickSetup as cl, format as cm, getAllPresets as cn, ensureI18nInitialized as co, readCcrConfig as cp, isCcrInstalled as cq, installCcr as cr, configureCcrFeature as cs, promptBoolean as ct, handleExitPromptError as cu, handleGeneralError as cv, COMETIX_COMMAND_NAME as cw, COMETIX_COMMANDS as cx, installCometixLine as cy, addNumbersToChoices as cz, AIDER_ENV_FILE as d, clearModelEnv as d0, copyFile as d1, configureOutputStyle as d2, isWindows as d3, selectMcpServices as d4, getMcpServices as d5, setupCcrConfiguration as d6, modifyApiConfigPartially as d7, formatApiKeyDisplay as d8, index as d9, fsOperations as da, jsonConfig as db, claudeConfig as dc, config$1 as dd, config as de, prompts as df, codex as dg, installer as dh, CONTINUE_DIR as e, CONTINUE_CONFIG_FILE as f, COLORS as g, displayCurrentStatus as h, init as i, cleanupPermissions as j, commandExists as k, getPlatform as l, mergeAndCleanPermissions as m, importRecommendedEnv as n, importRecommendedPermissions as o, openSettingsJson as p, CLAUDE_DIR$1 as q, runConfigWizard as r, sectionDivider as s, SETTINGS_FILE$1 as t, CLAUDE_MD_FILE as u, ClAUDE_CONFIG_FILE as v, CLAUDE_VSC_CONFIG_FILE as w, CODEX_DIR as x, CODEX_CONFIG_FILE as y, CODEX_AUTH_FILE as z };
10394
+ export { isCodeToolType as $, AIDER_DIR as A, CLAUDE_MD_FILE as B, CCJK_PLUGINS_DIR as C, ClAUDE_CONFIG_FILE as D, CLAUDE_VSC_CONFIG_FILE as E, CODEX_DIR as F, CODEX_CONFIG_FILE as G, CODEX_AUTH_FILE as H, CODEX_AGENTS_FILE as I, CODEX_PROMPTS_DIR as J, CLINE_DIR as K, CLINE_CONFIG_FILE as L, CURSOR_DIR as M, CURSOR_CONFIG_FILE as N, CCJK_CONFIG_DIR as O, CCJK_CONFIG_FILE as P, LEGACY_ZCF_CONFIG_DIR as Q, LEGACY_ZCF_CONFIG_FILE as R, STATUS as S, LEGACY_ZCF_CONFIG_FILES as T, ZCF_CONFIG_FILE as U, CODE_TOOL_TYPES as V, DEFAULT_CODE_TOOL_TYPE as W, CODE_TOOL_BANNERS as X, CODE_TOOL_ALIASES as Y, ZCF_CONFIG_DIR as Z, CODE_TOOL_INFO as _, CCJK_SKILLS_DIR as a, switchToProvider as a$, API_DEFAULT_URL as a0, API_ENV_KEY as a1, resolveCodeToolType as a2, SUPPORTED_LANGS as a3, LANG_LABELS as a4, AI_OUTPUT_LANGUAGES as a5, getAiOutputLanguageLabel as a6, detectPackageManager as a7, detectFrameworks as a8, detectBuildTools as a9, backupCodexFiles as aA, backupCodexPrompts as aB, checkCodexUpdate as aC, switchToOfficialLogin as aD, configureCodexApi as aE, createBackupDirectory as aF, ensureEnvKeyMigration as aG, getBackupMessage as aH, getCodexVersion as aI, getCurrentCodexProvider as aJ, installCodexCli as aK, isCodexInstalled$1 as aL, listCodexProviders as aM, migrateEnvKeyInContent as aN, migrateEnvKeyToTempEnvKey as aO, needsEnvKeyMigration as aP, parseCodexConfig as aQ, readCodexConfig as aR, renderCodexConfig as aS, runCodexFullInit as aT, runCodexSystemPromptSelection as aU, runCodexUninstall as aV, runCodexUpdate as aW, runCodexWorkflowImport as aX, runCodexWorkflowImportWithLanguageSelection as aY, runCodexWorkflowSelection as aZ, switchCodexProvider as a_, detectTestFrameworks as aa, detectCICDSystems as ab, detectLanguages as ac, determineProjectType as ad, detectProject as ae, generateSuggestions as af, getProjectSummary as ag, displayBanner as ah, displayBannerWithInfo as ai, boxify as aj, menuItem as ak, getMcpConfigPath as al, readMcpConfig as am, writeMcpConfig as an, backupMcpConfig as ao, mergeMcpServers as ap, buildMcpServerConfig as aq, fixWindowsMcpConfig as ar, addCompletedOnboarding as as, ensureApiKeyApproved as at, removeApiKeyFromRejected as au, manageApiKeyApproval as av, setPrimaryApiKey as aw, backupCodexAgents as ax, backupCodexComplete as ay, backupCodexConfig as az, CCJK_GROUPS_DIR as b, applyTemplate as b$, writeAuthFile as b0, writeCodexConfig as b1, detectConfigManagementMode as b2, shouldShowManagementMode as b3, getAvailableManagementActions as b4, configureCodexMcp as b5, applyCodexPlatformCommand as b6, getToolConfigPath as b7, getToolDir as b8, isToolInstalled as b9, removeRedundantConfigs as bA, displayConfigScan as bB, isClaudeCodeInstalled as bC, installClaudeCode as bD, isCodexInstalled as bE, installCodex as bF, isLocalClaudeCodeInstalled as bG, getInstallationStatus as bH, removeLocalClaudeCode as bI, uninstallCodeTool as bJ, setInstallMethod as bK, detectInstalledVersion as bL, selectInstallMethod as bM, executeInstallMethod as bN, handleInstallFailure as bO, verifyInstallation as bP, createHomebrewSymlink as bQ, displayVerificationResult as bR, loadKnowledgeBase as bS, saveKnowledgeBase as bT, runOnboarding as bU, quickSync as bV, getProjectKnowledge as bW, exportProjectKnowledge as bX, PERMISSION_TEMPLATES as bY, readPermissions as bZ, writePermissions as b_, getToolVersion as ba, getToolStatus as bb, getAllToolsStatus as bc, getInstalledTools as bd, installTool as be, getToolInfo as bf, getAllToolsInfo as bg, getToolsByCategory as bh, formatToolStatus as bi, getRecommendedTools as bj, ensureClaudeDir as bk, backupExistingConfig as bl, copyConfigFiles as bm, configureApi as bn, mergeConfigs as bo, updateCustomModel as bp, updateDefaultModel as bq, mergeSettingsFile as br, getExistingModelConfig as bs, getExistingApiConfig as bt, applyAiLanguageDirective as bu, switchToOfficialLogin$1 as bv, promptApiConfigurationAction as bw, compareConfigs as bx, consolidateConfigs as by, writeConsolidatedConfig as bz, AIDER_CONFIG_FILE as c, configureOutputStyle as c$, trustDirectory as c0, untrustDirectory as c1, isPermissionAllowed as c2, isDirectoryTrusted as c3, addAutoApprovePattern as c4, removeAutoApprovePattern as c5, resetPermissions as c6, exportPermissions as c7, importPermissions as c8, displayPermissions as c9, readZcfConfig as cA, readJsonConfig as cB, writeJsonConfig as cC, moveToTrash as cD, updateZcfConfig as cE, resolveAiOutputLanguage as cF, updatePromptOnly as cG, selectAndInstallWorkflows as cH, checkClaudeCodeVersionAndPrompt as cI, checkSuperpowersInstalled as cJ, getSuperpowersSkills as cK, updateSuperpowers as cL, uninstallSuperpowers as cM, installSuperpowers as cN, installSuperpowersViaGit as cO, readZcfConfigAsync as cP, initI18n as cQ, selectScriptLanguage as cR, changeLanguage as cS, validateApiKey$1 as cT, ensureDir as cU, readDefaultTomlConfig as cV, createDefaultTomlConfig as cW, exists as cX, writeTomlConfig as cY, clearModelEnv as cZ, copyFile as c_, checkPluginVersions as ca, upgradeClaudeCode as cb, upgradeCcjk as cc, upgradePlugin as cd, upgradeAllPlugins as ce, checkAllVersions as cf, upgradeAll as cg, i18n as ch, testApiConnection as ci, quickSetup as cj, format as ck, getAllPresets as cl, ensureI18nInitialized as cm, readCcrConfig as cn, isCcrInstalled as co, installCcr as cp, configureCcrFeature as cq, promptBoolean as cr, handleExitPromptError as cs, handleGeneralError as ct, COMETIX_COMMAND_NAME as cu, COMETIX_COMMANDS as cv, installCometixLine as cw, addNumbersToChoices as cx, checkAndUpdateTools as cy, resolveCodeType as cz, AIDER_ENV_FILE as d, isWindows as d0, selectMcpServices as d1, getMcpServices as d2, setupCcrConfiguration as d3, modifyApiConfigPartially as d4, formatApiKeyDisplay as d5, index as d6, fsOperations as d7, jsonConfig as d8, claudeConfig as d9, config$1 as da, config as db, prompts as dc, codex as dd, installer as de, CONTINUE_DIR as e, CONTINUE_CONFIG_FILE as f, checkClaudeCodeVersion as g, checkCcjkVersion as h, detectAllConfigs as i, getCurrentTemplateId as j, COLORS as k, init as l, displayCurrentStatus as m, runConfigWizard as n, cleanupPermissions as o, mergeAndCleanPermissions as p, commandExists as q, renderProgressBar as r, sectionDivider as s, getPlatform as t, importRecommendedEnv as u, version as v, importRecommendedPermissions as w, openSettingsJson as x, CLAUDE_DIR$1 as y, SETTINGS_FILE$1 as z };