zcf 3.0.0 → 3.0.2

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/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  **✨ Quick Links**: [Codex Support](#-codex-support-v300-new) | [BMad Workflow](#-bmad-workflow-v27-new-feature) | [Spec Workflow](#-spec-workflow-v2124-new-feature) | [Open Web Search](#-open-web-search-v2129-new-feature) | [CCR Router](#-ccr-claude-code-router-support-v28-enhanced) | [CCometixLine](#-ccometixline-support-status-bar-tool-v299-new) | [Output Styles](#-ai-output-styles-v212-new-feature)
14
14
 
15
- > Zero-config, one-click setup for Claude Code with bilingual support, intelligent agent system and personalized AI assistant
15
+ > Zero-config, one-click setup for Claude Code & Codex with bilingual support, intelligent agent system and personalized AI assistant
16
16
 
17
17
  ![Rendering](./src/assets/screenshot-en.webp)
18
18
 
@@ -174,6 +174,7 @@ npx zcf → Select 4 # Configure Codex MCP services
174
174
  3. **Workflow Integration**:
175
175
  - **Six-Step Workflow**: Structured development process from research to optimization
176
176
  - **Custom Workflows**: Import and configure task-specific development templates
177
+ - **⚠️ Important**: Due to Codex prompt limitations, `/workflow` commands cannot pass parameters directly. Use `/workflow` first, then provide task description in follow-up message
177
178
 
178
179
  4. **MCP Services**: Full compatibility with existing MCP services including:
179
180
  - Context7, Open WebSearch, Spec Workflow
@@ -349,6 +350,8 @@ After configuration:
349
350
  - `/feat <task description>` - Start new feature development, divided into plan and UI phases
350
351
  - `/workflow <task description>` - Execute complete development workflow, not automated, starts with multiple solution options, asks for user feedback at each step, allows plan modifications, maximum control
351
352
 
353
+ > **⚠️ Important Note for Codex Users**: Due to Codex functionality limitations, prompts cannot pass parameters directly. When using `/workflow`, you need to send the workflow command first, wait for AI response, then send your task description in a separate message.
354
+
352
355
  > **PS**:
353
356
  >
354
357
  > - Both feat and workflow have their advantages, try both to compare
@@ -799,6 +802,7 @@ A huge thank you to all our sponsors for their generous support!
799
802
  - Argolinhas (first ko-fi sponsor ٩(•̤̀ᵕ•̤́๑))
800
803
  - r\*r (first anonymous sponsor🤣)
801
804
  - \*\*康 (first KFC sponsor🍗)
805
+ - \*东 (first coffee sponsor☕️)
802
806
  - 16°C coffee (My best friend🤪, offered Claude Code max $200 package)
803
807
 
804
808
  ## 📄 License
@@ -1,6 +1,6 @@
1
1
  import ansis from 'ansis';
2
2
  import inquirer from 'inquirer';
3
- import { X as readCodexConfig, Y as backupCodexComplete, _ as writeCodexConfig, $ as writeAuthFile, a0 as ensureI18nInitialized, a1 as detectConfigManagementMode, W as i18n, a2 as addNumbersToChoices } from './simple-config.mjs';
3
+ import { Y as readCodexConfig, _ as backupCodexComplete, $ as writeCodexConfig, a0 as writeAuthFile, a1 as ensureI18nInitialized, a2 as detectConfigManagementMode, X as i18n, a3 as addNumbersToChoices } from './simple-config.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:process';
6
6
  import 'node:child_process';
@@ -206,7 +206,7 @@ async function configureIncrementalManagement() {
206
206
  { name: i18n.t("codex:addProvider"), value: "add" },
207
207
  { name: i18n.t("codex:editProvider"), value: "edit" },
208
208
  { name: i18n.t("codex:deleteProvider"), value: "delete" },
209
- { name: i18n.t("common:back"), value: "back" }
209
+ { name: i18n.t("common:skip"), value: "skip" }
210
210
  ];
211
211
  const { action } = await inquirer.prompt([{
212
212
  type: "list",
@@ -214,8 +214,8 @@ async function configureIncrementalManagement() {
214
214
  message: i18n.t("codex:selectAction"),
215
215
  choices: addNumbersToChoices(choices)
216
216
  }]);
217
- if (!action || action === "back") {
218
- console.log(ansis.yellow(i18n.t("common:cancelled")));
217
+ if (!action || action === "skip") {
218
+ console.log(ansis.yellow(i18n.t("common:skip")));
219
219
  return;
220
220
  }
221
221
  switch (action) {
@@ -2,7 +2,7 @@ import { homedir } from 'node:os';
2
2
  import { pathExists } from 'fs-extra';
3
3
  import { join } from 'pathe';
4
4
  import { exec } from 'tinyexec';
5
- import { W as i18n } from './simple-config.mjs';
5
+ import { X as i18n } from './simple-config.mjs';
6
6
  import { m as moveToTrash } from '../shared/zcf.DGjQxTq_.mjs';
7
7
  import 'node:fs';
8
8
  import 'node:process';
@@ -16,7 +16,7 @@ import { rm, mkdir, copyFile as copyFile$1 } from 'node:fs/promises';
16
16
  import i18next from 'i18next';
17
17
  import Backend from 'i18next-fs-backend';
18
18
 
19
- const version = "3.0.0";
19
+ const version = "3.0.2";
20
20
  const homepage = "https://github.com/UfoMiao/zcf";
21
21
 
22
22
  const i18n = i18next.createInstance();
@@ -363,6 +363,10 @@ const LEGACY_ZCF_CONFIG_FILES = [
363
363
  ];
364
364
  const CODE_TOOL_TYPES = ["claude-code", "codex"];
365
365
  const DEFAULT_CODE_TOOL_TYPE = "claude-code";
366
+ const CODE_TOOL_BANNERS = {
367
+ "claude-code": "for Claude Code",
368
+ "codex": "for Codex"
369
+ };
366
370
  function isCodeToolType(value) {
367
371
  return CODE_TOOL_TYPES.includes(value);
368
372
  }
@@ -394,6 +398,7 @@ const constants = {
394
398
  AI_OUTPUT_LANGUAGES: AI_OUTPUT_LANGUAGES,
395
399
  CLAUDE_DIR: CLAUDE_DIR,
396
400
  CLAUDE_MD_FILE: CLAUDE_MD_FILE,
401
+ CODE_TOOL_BANNERS: CODE_TOOL_BANNERS,
397
402
  CODE_TOOL_TYPES: CODE_TOOL_TYPES,
398
403
  ClAUDE_CONFIG_FILE: ClAUDE_CONFIG_FILE,
399
404
  DEFAULT_CODE_TOOL_TYPE: DEFAULT_CODE_TOOL_TYPE,
@@ -2209,7 +2214,15 @@ function migrateZcfConfigIfNeeded() {
2209
2214
  if (!existsSync(ZCF_CONFIG_DIR)) {
2210
2215
  mkdirSync(ZCF_CONFIG_DIR, { recursive: true });
2211
2216
  }
2212
- renameSync(source, target);
2217
+ try {
2218
+ renameSync(source, target);
2219
+ } catch (error) {
2220
+ if (error?.code !== "EXDEV") {
2221
+ throw error;
2222
+ }
2223
+ copyFileSync(source, target);
2224
+ rmSync(source, { force: true });
2225
+ }
2213
2226
  for (const leftover of legacySources.slice(1)) {
2214
2227
  try {
2215
2228
  rmSync(leftover, { force: true });
@@ -2262,7 +2275,12 @@ function writeZcfConfig(config) {
2262
2275
  ...config,
2263
2276
  codeToolType: sanitizeCodeToolType(config.codeToolType)
2264
2277
  };
2278
+ const existingTomlConfig = readTomlConfig(ZCF_CONFIG_FILE);
2265
2279
  const tomlConfig = convertLegacyToTomlConfig(sanitizedConfig);
2280
+ const nextSystemPromptStyle = sanitizedConfig.systemPromptStyle || existingTomlConfig?.codex?.systemPromptStyle;
2281
+ if (nextSystemPromptStyle) {
2282
+ tomlConfig.codex.systemPromptStyle = nextSystemPromptStyle;
2283
+ }
2266
2284
  writeTomlConfig(ZCF_CONFIG_FILE, tomlConfig);
2267
2285
  } catch {
2268
2286
  }
@@ -2951,6 +2969,23 @@ async function runCodexWorkflowImport() {
2951
2969
  await runCodexWorkflowSelection();
2952
2970
  console.log(ansis.green(i18n.t("codex:workflowInstall")));
2953
2971
  }
2972
+ async function runCodexWorkflowImportWithLanguageSelection(options) {
2973
+ ensureI18nInitialized();
2974
+ const zcfConfig = readZcfConfig();
2975
+ const { aiOutputLang: commandLineOption, skipPrompt } = options ?? {};
2976
+ const aiOutputLang = skipPrompt ? commandLineOption || zcfConfig?.aiOutputLang || "en" : await resolveAiOutputLanguage(
2977
+ i18n.language,
2978
+ commandLineOption,
2979
+ zcfConfig
2980
+ );
2981
+ updateZcfConfig({ aiOutputLang });
2982
+ applyAiLanguageDirective(aiOutputLang);
2983
+ await runCodexSystemPromptSelection();
2984
+ ensureCodexAgentsLanguageDirective(aiOutputLang);
2985
+ await runCodexWorkflowSelection();
2986
+ console.log(ansis.green(i18n.t("codex:workflowInstall")));
2987
+ return aiOutputLang;
2988
+ }
2954
2989
  async function runCodexSystemPromptSelection() {
2955
2990
  ensureI18nInitialized();
2956
2991
  const rootDir = getRootDir$1();
@@ -2964,6 +2999,7 @@ async function runCodexSystemPromptSelection() {
2964
2999
  // No command line option for this function
2965
3000
  zcfConfig$1
2966
3001
  );
3002
+ updateZcfConfig({ templateLang: preferredLang });
2967
3003
  let langDir = join(templateRoot, preferredLang);
2968
3004
  if (!exists(langDir))
2969
3005
  langDir = join(templateRoot, "zh-CN");
@@ -3095,6 +3131,7 @@ function createApiConfigChoices(providers, currentProvider, isCommented) {
3095
3131
  async function configureCodexApi() {
3096
3132
  ensureI18nInitialized();
3097
3133
  const existingConfig = readCodexConfig();
3134
+ const existingAuth = readJsonConfig(CODEX_AUTH_FILE, { defaultValue: {} }) || {};
3098
3135
  const hasProviders = existingConfig?.providers && existingConfig.providers.length > 0;
3099
3136
  const modeChoices = [
3100
3137
  { name: i18n.t("codex:apiModeOfficial"), value: "official" },
@@ -3265,6 +3302,13 @@ async function configureCodexApi() {
3265
3302
  choices: addNumbersToChoices(toProvidersList(providers)),
3266
3303
  default: existingConfig?.modelProvider || providers[0].id
3267
3304
  }]);
3305
+ const selectedProvider = providers.find((provider) => provider.id === defaultProvider);
3306
+ if (selectedProvider) {
3307
+ const envKey = selectedProvider.envKey;
3308
+ const defaultApiKey = authEntries[envKey] ?? existingAuth[envKey] ?? null;
3309
+ if (defaultApiKey)
3310
+ authEntries.OPENAI_API_KEY = defaultApiKey;
3311
+ }
3268
3312
  writeCodexConfig({
3269
3313
  model: existingConfig?.model || null,
3270
3314
  modelProvider: defaultProvider,
@@ -3347,12 +3391,48 @@ async function configureCodexMcp() {
3347
3391
  updateZcfConfig({ codeToolType: "codex" });
3348
3392
  console.log(ansis.green(i18n.t("codex:mcpConfigured")));
3349
3393
  }
3350
- async function runCodexFullInit() {
3394
+ async function runCodexFullInit(options) {
3351
3395
  ensureI18nInitialized();
3352
3396
  await installCodexCli();
3353
- await runCodexWorkflowImport();
3397
+ const aiOutputLang = await runCodexWorkflowImportWithLanguageSelection(options);
3354
3398
  await configureCodexApi();
3355
3399
  await configureCodexMcp();
3400
+ return aiOutputLang;
3401
+ }
3402
+ function ensureCodexAgentsLanguageDirective(aiOutputLang) {
3403
+ if (!exists(CODEX_AGENTS_FILE))
3404
+ return;
3405
+ const content = readFile(CODEX_AGENTS_FILE);
3406
+ const targetLabel = resolveCodexLanguageLabel(aiOutputLang);
3407
+ const directiveRegex = /\*\*Most Important:\s*Always respond in ([^*]+)\*\*/i;
3408
+ const existingMatch = directiveRegex.exec(content);
3409
+ if (existingMatch && normalizeLanguageLabel(existingMatch[1]) === normalizeLanguageLabel(targetLabel))
3410
+ return;
3411
+ let updatedContent = content.replace(/\*\*Most Important:\s*Always respond in [^*]+\*\*\s*/gi, "").trimEnd();
3412
+ if (updatedContent.length > 0 && !updatedContent.endsWith("\n"))
3413
+ updatedContent += "\n";
3414
+ updatedContent += `
3415
+ **Most Important:Always respond in ${targetLabel}**
3416
+ `;
3417
+ const backupPath = backupCodexAgents();
3418
+ if (backupPath)
3419
+ console.log(ansis.gray(getBackupMessage(backupPath)));
3420
+ writeFile(CODEX_AGENTS_FILE, updatedContent);
3421
+ console.log(ansis.gray(` ${i18n.t("configuration:addedLanguageDirective")}: ${targetLabel}`));
3422
+ }
3423
+ function resolveCodexLanguageLabel(aiOutputLang) {
3424
+ const directive = AI_OUTPUT_LANGUAGES[aiOutputLang]?.directive;
3425
+ if (directive) {
3426
+ const match = directive.match(/Always respond in\s+(.+)/i);
3427
+ if (match)
3428
+ return match[1].trim();
3429
+ }
3430
+ if (typeof aiOutputLang === "string")
3431
+ return aiOutputLang;
3432
+ return "English";
3433
+ }
3434
+ function normalizeLanguageLabel(label) {
3435
+ return label.trim().toLowerCase();
3356
3436
  }
3357
3437
  async function runCodexUpdate(force = false, skipPrompt = false) {
3358
3438
  ensureI18nInitialized();
@@ -3521,12 +3601,21 @@ async function switchToOfficialLogin() {
3521
3601
  console.log(ansis.gray(getBackupMessage(backupPath)));
3522
3602
  }
3523
3603
  try {
3604
+ let preservedModelProvider = existingConfig.modelProvider;
3605
+ if (!preservedModelProvider) {
3606
+ try {
3607
+ const rawContent = readFile(CODEX_CONFIG_FILE);
3608
+ const parsedToml = parse(rawContent);
3609
+ if (typeof parsedToml.model_provider === "string" && parsedToml.model_provider.trim().length > 0)
3610
+ preservedModelProvider = parsedToml.model_provider.trim();
3611
+ } catch {
3612
+ }
3613
+ }
3614
+ const shouldCommentModelProvider = typeof preservedModelProvider === "string" && preservedModelProvider.length > 0;
3524
3615
  const updatedConfig = {
3525
3616
  ...existingConfig,
3526
- modelProvider: existingConfig.modelProvider,
3527
- // Keep the current provider value
3528
- modelProviderCommented: true
3529
- // Mark as commented
3617
+ modelProvider: shouldCommentModelProvider ? preservedModelProvider : existingConfig.modelProvider,
3618
+ modelProviderCommented: shouldCommentModelProvider ? true : existingConfig.modelProviderCommented
3530
3619
  };
3531
3620
  writeCodexConfig(updatedConfig);
3532
3621
  const auth = readJsonConfig(CODEX_AUTH_FILE, { defaultValue: {} }) || {};
@@ -3601,6 +3690,7 @@ const codex = {
3601
3690
  runCodexUninstall: runCodexUninstall,
3602
3691
  runCodexUpdate: runCodexUpdate,
3603
3692
  runCodexWorkflowImport: runCodexWorkflowImport,
3693
+ runCodexWorkflowImportWithLanguageSelection: runCodexWorkflowImportWithLanguageSelection,
3604
3694
  runCodexWorkflowSelection: runCodexWorkflowSelection,
3605
3695
  switchCodexProvider: switchCodexProvider,
3606
3696
  switchToOfficialLogin: switchToOfficialLogin,
@@ -4595,37 +4685,52 @@ async function init(options = {}) {
4595
4685
  validateSkipPromptOptions(options);
4596
4686
  }
4597
4687
  try {
4688
+ const zcfConfig = readZcfConfig();
4689
+ const codeToolType = resolveCodeToolType(options.codeType, zcfConfig?.codeToolType);
4690
+ options.codeType = codeToolType;
4598
4691
  if (!options.skipBanner) {
4599
- displayBannerWithInfo();
4692
+ displayBannerWithInfo(CODE_TOOL_BANNERS[codeToolType] || "ZCF");
4600
4693
  }
4601
4694
  if (isTermux()) {
4602
4695
  console.log(ansis.yellow(`
4603
4696
  \u2139 ${i18n.t("installation:termuxDetected")}`));
4604
4697
  console.log(ansis.gray(i18n.t("installation:termuxEnvironmentInfo")));
4605
4698
  }
4606
- const zcfConfig = readZcfConfig();
4607
4699
  let configLang = options.configLang;
4608
- if (!configLang && !options.skipPrompt) {
4609
- const { resolveTemplateLanguage } = await Promise.resolve().then(function () { return prompts; });
4610
- configLang = await resolveTemplateLanguage(
4611
- options.configLang,
4612
- // Command line option
4613
- zcfConfig
4614
- );
4615
- } else if (!configLang && options.skipPrompt) {
4700
+ if (codeToolType === "codex") {
4701
+ if (!configLang) {
4702
+ if (options.skipPrompt) {
4703
+ configLang = zcfConfig?.templateLang || "en";
4704
+ } else {
4705
+ configLang = zcfConfig?.templateLang || i18n.language || "en";
4706
+ }
4707
+ }
4708
+ } else {
4709
+ if (!configLang && !options.skipPrompt) {
4710
+ const { resolveTemplateLanguage } = await Promise.resolve().then(function () { return prompts; });
4711
+ configLang = await resolveTemplateLanguage(
4712
+ options.configLang,
4713
+ zcfConfig
4714
+ );
4715
+ } else if (!configLang && options.skipPrompt) {
4716
+ configLang = "en";
4717
+ }
4718
+ }
4719
+ if (!configLang) {
4616
4720
  configLang = "en";
4617
4721
  }
4618
- const codeToolType = resolveCodeToolType(options.codeType, zcfConfig?.codeToolType);
4619
- options.codeType = codeToolType;
4620
4722
  if (codeToolType === "codex") {
4621
- await runCodexFullInit();
4723
+ const resolvedAiOutputLang = await runCodexFullInit({
4724
+ aiOutputLang: options.aiOutputLang,
4725
+ skipPrompt: options.skipPrompt
4726
+ });
4622
4727
  updateZcfConfig({
4623
4728
  version,
4624
4729
  preferredLang: i18n.language,
4625
4730
  // ZCF界面语言
4626
4731
  templateLang: configLang,
4627
4732
  // 模板语言
4628
- aiOutputLang: options.aiOutputLang || "en",
4733
+ aiOutputLang: resolvedAiOutputLang ?? options.aiOutputLang ?? zcfConfig?.aiOutputLang ?? "en",
4629
4734
  codeToolType
4630
4735
  });
4631
4736
  console.log(ansis.green(i18n.t("codex:setupComplete")));
@@ -5100,4 +5205,4 @@ async function openSettingsJson() {
5100
5205
  }
5101
5206
  }
5102
5207
 
5103
- export { writeAuthFile as $, AI_OUTPUT_LANGUAGES as A, manageApiKeyApproval as B, CLAUDE_DIR as C, DEFAULT_CODE_TOOL_TYPE as D, ensureClaudeDir as E, backupExistingConfig as F, copyConfigFiles as G, configureApi as H, mergeConfigs as I, updateCustomModel as J, updateDefaultModel as K, LEGACY_ZCF_CONFIG_FILES as L, mergeSettingsFile as M, getExistingModelConfig as N, getExistingApiConfig as O, applyAiLanguageDirective as P, isClaudeCodeInstalled as Q, installClaudeCode as R, SETTINGS_FILE as S, isLocalClaudeCodeInstalled as T, getInstallationStatus as U, removeLocalClaudeCode as V, i18n as W, readCodexConfig as X, backupCodexComplete as Y, ZCF_CONFIG_DIR as Z, writeCodexConfig as _, commandExists as a, ensureI18nInitialized as a0, detectConfigManagementMode as a1, addNumbersToChoices as a2, readCcrConfig as a3, isCcrInstalled as a4, installCcr as a5, configureCcrFeature as a6, handleExitPromptError as a7, handleGeneralError as a8, updateZcfConfig as a9, configureCodexApi as aA, runCodexWorkflowImport as aB, runCodexFullInit as aC, listCodexProviders as aD, getCurrentCodexProvider as aE, switchCodexProvider as aF, switchToOfficialLogin as aG, switchToProvider as aH, readZcfConfigAsync as aI, initI18n as aJ, selectScriptLanguage as aK, fsOperations as aL, prompts as aM, codex as aN, changeLanguage as aa, readZcfConfig as ab, configureOutputStyle as ac, isWindows as ad, selectMcpServices as ae, getMcpServices as af, formatApiKeyDisplay as ag, modifyApiConfigPartially as ah, setupCcrConfiguration as ai, validateApiKey as aj, COMETIX_COMMAND_NAME as ak, COMETIX_COMMANDS as al, installCometixLine as am, checkAndUpdateTools as an, readJsonConfig as ao, writeJsonConfig as ap, displayBanner as aq, runCodexUpdate as ar, version as as, resolveAiOutputLanguage as at, updatePromptOnly as au, selectAndInstallWorkflows as av, checkClaudeCodeVersionAndPrompt as aw, displayBannerWithInfo as ax, runCodexUninstall as ay, configureCodexMcp as az, importRecommendedEnv as b, cleanupPermissions as c, importRecommendedPermissions as d, CLAUDE_MD_FILE as e, ClAUDE_CONFIG_FILE as f, getPlatform as g, ZCF_CONFIG_FILE as h, init as i, CODE_TOOL_TYPES as j, isCodeToolType as k, SUPPORTED_LANGS as l, mergeAndCleanPermissions as m, LANG_LABELS as n, openSettingsJson as o, getAiOutputLanguageLabel as p, getMcpConfigPath as q, readMcpConfig as r, backupMcpConfig as s, mergeMcpServers as t, buildMcpServerConfig as u, fixWindowsMcpConfig as v, writeMcpConfig as w, addCompletedOnboarding as x, ensureApiKeyApproved as y, removeApiKeyFromRejected as z };
5208
+ export { writeCodexConfig as $, AI_OUTPUT_LANGUAGES as A, removeApiKeyFromRejected as B, CLAUDE_DIR as C, DEFAULT_CODE_TOOL_TYPE as D, manageApiKeyApproval as E, ensureClaudeDir as F, backupExistingConfig as G, copyConfigFiles as H, configureApi as I, mergeConfigs as J, updateCustomModel as K, LEGACY_ZCF_CONFIG_FILES as L, updateDefaultModel as M, mergeSettingsFile as N, getExistingModelConfig as O, getExistingApiConfig as P, applyAiLanguageDirective as Q, isClaudeCodeInstalled as R, SETTINGS_FILE as S, installClaudeCode as T, isLocalClaudeCodeInstalled as U, getInstallationStatus as V, removeLocalClaudeCode as W, i18n as X, readCodexConfig as Y, ZCF_CONFIG_DIR as Z, backupCodexComplete as _, commandExists as a, writeAuthFile as a0, ensureI18nInitialized as a1, detectConfigManagementMode as a2, addNumbersToChoices as a3, readCcrConfig as a4, isCcrInstalled as a5, installCcr as a6, configureCcrFeature as a7, handleExitPromptError as a8, handleGeneralError as a9, configureCodexMcp as aA, configureCodexApi as aB, runCodexWorkflowImport as aC, runCodexFullInit as aD, listCodexProviders as aE, getCurrentCodexProvider as aF, switchCodexProvider as aG, switchToOfficialLogin as aH, switchToProvider as aI, readZcfConfigAsync as aJ, initI18n as aK, selectScriptLanguage as aL, fsOperations as aM, prompts as aN, codex as aO, updateZcfConfig as aa, changeLanguage as ab, readZcfConfig as ac, configureOutputStyle as ad, isWindows as ae, selectMcpServices as af, getMcpServices as ag, formatApiKeyDisplay as ah, modifyApiConfigPartially as ai, setupCcrConfiguration as aj, validateApiKey as ak, COMETIX_COMMAND_NAME as al, COMETIX_COMMANDS as am, installCometixLine as an, checkAndUpdateTools as ao, readJsonConfig as ap, writeJsonConfig as aq, displayBanner as ar, runCodexUpdate as as, version as at, resolveAiOutputLanguage as au, updatePromptOnly as av, selectAndInstallWorkflows as aw, checkClaudeCodeVersionAndPrompt as ax, displayBannerWithInfo as ay, runCodexUninstall as az, importRecommendedEnv as b, cleanupPermissions as c, importRecommendedPermissions as d, CLAUDE_MD_FILE as e, ClAUDE_CONFIG_FILE as f, getPlatform as g, ZCF_CONFIG_FILE as h, init as i, CODE_TOOL_TYPES as j, CODE_TOOL_BANNERS as k, isCodeToolType as l, mergeAndCleanPermissions as m, SUPPORTED_LANGS as n, openSettingsJson as o, LANG_LABELS as p, getAiOutputLanguageLabel as q, getMcpConfigPath as r, readMcpConfig as s, backupMcpConfig as t, mergeMcpServers as u, buildMcpServerConfig as v, writeMcpConfig as w, fixWindowsMcpConfig as x, addCompletedOnboarding as y, ensureApiKeyApproved as z };
package/dist/cli.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import cac from 'cac';
3
3
  import ansis from 'ansis';
4
- import { a0 as ensureI18nInitialized, W as i18n, a3 as readCcrConfig, a4 as isCcrInstalled, a5 as installCcr, a6 as configureCcrFeature, a7 as handleExitPromptError, a8 as handleGeneralError, l as SUPPORTED_LANGS, a2 as addNumbersToChoices, n as LANG_LABELS, a9 as updateZcfConfig, aa as changeLanguage, ab as readZcfConfig, o as openSettingsJson, d as importRecommendedPermissions, b as importRecommendedEnv, P as applyAiLanguageDirective, ac as configureOutputStyle, N as getExistingModelConfig, J as updateCustomModel, K as updateDefaultModel, ad as isWindows, r as readMcpConfig, v as fixWindowsMcpConfig, w as writeMcpConfig, ae as selectMcpServices, s as backupMcpConfig, af as getMcpServices, u as buildMcpServerConfig, t as mergeMcpServers, O as getExistingApiConfig, ag as formatApiKeyDisplay, x as addCompletedOnboarding, ah as modifyApiConfigPartially, ai as setupCcrConfiguration, aj as validateApiKey, H as configureApi, ak as COMETIX_COMMAND_NAME, al as COMETIX_COMMANDS, am as installCometixLine, an as checkAndUpdateTools, ao as readJsonConfig, ap as writeJsonConfig, h as ZCF_CONFIG_FILE, aq as displayBanner, ar as runCodexUpdate, as as version, at as resolveAiOutputLanguage, au as updatePromptOnly, av as selectAndInstallWorkflows, aw as checkClaudeCodeVersionAndPrompt, k as isCodeToolType, D as DEFAULT_CODE_TOOL_TYPE, ax as displayBannerWithInfo, ay as runCodexUninstall, az as configureCodexMcp, aA as configureCodexApi, aB as runCodexWorkflowImport, aC as runCodexFullInit, i as init, aD as listCodexProviders, aE as getCurrentCodexProvider, aF as switchCodexProvider, X as readCodexConfig, aG as switchToOfficialLogin, aH as switchToProvider, aI as readZcfConfigAsync, aJ as initI18n, aK as selectScriptLanguage } from './chunks/simple-config.mjs';
4
+ import { a1 as ensureI18nInitialized, X as i18n, a4 as readCcrConfig, a5 as isCcrInstalled, a6 as installCcr, a7 as configureCcrFeature, a8 as handleExitPromptError, a9 as handleGeneralError, n as SUPPORTED_LANGS, a3 as addNumbersToChoices, p as LANG_LABELS, aa as updateZcfConfig, ab as changeLanguage, ac as readZcfConfig, o as openSettingsJson, d as importRecommendedPermissions, b as importRecommendedEnv, Q as applyAiLanguageDirective, ad as configureOutputStyle, O as getExistingModelConfig, K as updateCustomModel, M as updateDefaultModel, ae as isWindows, s as readMcpConfig, x as fixWindowsMcpConfig, w as writeMcpConfig, af as selectMcpServices, t as backupMcpConfig, ag as getMcpServices, v as buildMcpServerConfig, u as mergeMcpServers, P as getExistingApiConfig, ah as formatApiKeyDisplay, y as addCompletedOnboarding, ai as modifyApiConfigPartially, aj as setupCcrConfiguration, ak as validateApiKey, I as configureApi, al as COMETIX_COMMAND_NAME, am as COMETIX_COMMANDS, an as installCometixLine, ao as checkAndUpdateTools, ap as readJsonConfig, aq as writeJsonConfig, h as ZCF_CONFIG_FILE, ar as displayBanner, as as runCodexUpdate, at as version, au as resolveAiOutputLanguage, av as updatePromptOnly, aw as selectAndInstallWorkflows, ax as checkClaudeCodeVersionAndPrompt, l as isCodeToolType, D as DEFAULT_CODE_TOOL_TYPE, ay as displayBannerWithInfo, k as CODE_TOOL_BANNERS, az as runCodexUninstall, aA as configureCodexMcp, aB as configureCodexApi, aC as runCodexWorkflowImport, aD as runCodexFullInit, i as init, aE as listCodexProviders, aF as getCurrentCodexProvider, aG as switchCodexProvider, Y as readCodexConfig, aH as switchToOfficialLogin, aI as switchToProvider, aJ as readZcfConfigAsync, aK as initI18n, aL as selectScriptLanguage } from './chunks/simple-config.mjs';
5
5
  import { existsSync } from 'node:fs';
6
6
  import { homedir } from 'node:os';
7
7
  import inquirer from 'inquirer';
@@ -559,7 +559,7 @@ ${ansis.blue(`\u2139 ${i18n.t("configuration:existingLanguageConfig") || "Existi
559
559
  return;
560
560
  }
561
561
  }
562
- const { selectAiOutputLanguage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aM; });
562
+ const { selectAiOutputLanguage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aN; });
563
563
  const aiOutputLang = await selectAiOutputLanguage();
564
564
  applyAiLanguageDirective(aiOutputLang);
565
565
  updateZcfConfig({ aiOutputLang });
@@ -592,7 +592,7 @@ async function changeScriptLanguageFeature(currentLang) {
592
592
  }
593
593
  async function configureCodexDefaultModelFeature() {
594
594
  ensureI18nInitialized();
595
- const { readCodexConfig } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aN; });
595
+ const { readCodexConfig } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aO; });
596
596
  const existingConfig = readCodexConfig();
597
597
  const currentModel = existingConfig?.model;
598
598
  if (currentModel) {
@@ -697,7 +697,7 @@ ${ansis.blue(`\u2139 ${i18n.t("configuration:existingLanguageConfig") || "Existi
697
697
  return;
698
698
  }
699
699
  }
700
- const { selectAiOutputLanguage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aM; });
700
+ const { selectAiOutputLanguage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aN; });
701
701
  const aiOutputLang = await selectAiOutputLanguage();
702
702
  await updateCodexLanguageDirective(aiOutputLang);
703
703
  updateZcfConfig({ aiOutputLang });
@@ -705,14 +705,14 @@ ${ansis.blue(`\u2139 ${i18n.t("configuration:existingLanguageConfig") || "Existi
705
705
  } else if (option === "systemPrompt") {
706
706
  const zcfConfig = readZcfConfig();
707
707
  const currentLang = zcfConfig?.aiOutputLang || "English";
708
- const { runCodexSystemPromptSelection } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aN; });
708
+ const { runCodexSystemPromptSelection } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aO; });
709
709
  await runCodexSystemPromptSelection();
710
710
  await ensureLanguageDirectiveInAgents(currentLang);
711
711
  console.log(ansis.green(`\u2714 ${i18n.t("configuration:systemPromptConfigured")}`));
712
712
  }
713
713
  }
714
714
  async function updateCodexModelProvider(modelProvider) {
715
- const { readCodexConfig, writeCodexConfig, backupCodexConfig, getBackupMessage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aN; });
715
+ const { readCodexConfig, writeCodexConfig, backupCodexConfig, getBackupMessage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aO; });
716
716
  const backupPath = backupCodexConfig();
717
717
  if (backupPath) {
718
718
  console.log(ansis.gray(getBackupMessage(backupPath)));
@@ -733,7 +733,7 @@ async function updateCodexModelProvider(modelProvider) {
733
733
  writeCodexConfig(updatedConfig);
734
734
  }
735
735
  async function ensureLanguageDirectiveInAgents(aiOutputLang) {
736
- const { readFile, writeFile, exists } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aL; });
736
+ const { readFile, writeFile, exists } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aM; });
737
737
  const { homedir } = await import('node:os');
738
738
  const { join } = await import('pathe');
739
739
  const CODEX_AGENTS_FILE = join(homedir(), ".codex", "AGENTS.md");
@@ -751,7 +751,7 @@ async function ensureLanguageDirectiveInAgents(aiOutputLang) {
751
751
  const langLabel = languageLabels[aiOutputLang] || aiOutputLang;
752
752
  const hasLanguageDirective = /\*\*Most Important:\s*Always respond in [^*]+\*\*/i.test(content);
753
753
  if (!hasLanguageDirective) {
754
- const { backupCodexAgents, getBackupMessage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aN; });
754
+ const { backupCodexAgents, getBackupMessage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aO; });
755
755
  const backupPath = backupCodexAgents();
756
756
  if (backupPath) {
757
757
  console.log(ansis.gray(getBackupMessage(backupPath)));
@@ -768,8 +768,8 @@ async function ensureLanguageDirectiveInAgents(aiOutputLang) {
768
768
  }
769
769
  }
770
770
  async function updateCodexLanguageDirective(aiOutputLang) {
771
- const { readFile, writeFile, exists } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aL; });
772
- const { backupCodexAgents, getBackupMessage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aN; });
771
+ const { readFile, writeFile, exists } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aM; });
772
+ const { backupCodexAgents, getBackupMessage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aO; });
773
773
  const { homedir } = await import('node:os');
774
774
  const { join } = await import('pathe');
775
775
  const CODEX_AGENTS_FILE = join(homedir(), ".codex", "AGENTS.md");
@@ -1830,7 +1830,7 @@ async function update(options = {}) {
1830
1830
  }
1831
1831
  return;
1832
1832
  }
1833
- const { resolveTemplateLanguage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aM; });
1833
+ const { resolveTemplateLanguage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.aN; });
1834
1834
  const configLang = await resolveTemplateLanguage(
1835
1835
  options.configLang,
1836
1836
  // Command line option
@@ -1861,10 +1861,6 @@ const CODE_TOOL_LABELS = {
1861
1861
  "claude-code": "Claude Code",
1862
1862
  "codex": "Codex"
1863
1863
  };
1864
- const CODE_TOOL_BANNERS = {
1865
- "claude-code": "for Claude Code",
1866
- "codex": "for Codex"
1867
- };
1868
1864
  function getCurrentCodeTool() {
1869
1865
  const config = readZcfConfig();
1870
1866
  if (config?.codeToolType && isCodeToolType(config.codeToolType)) {
@@ -2413,10 +2409,10 @@ async function setupCommands(cli) {
2413
2409
  await initI18n(defaultLang);
2414
2410
  } catch {
2415
2411
  }
2416
- cli.command("", "Show interactive menu (default)").option("--lang, -l <lang>", "ZCF display language (zh-CN, en)").option("--all-lang, -g <lang>", "Set all language parameters to this value").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").option("--force, -f", "Force overwrite existing configuration").option("--code-type, -T <codeType>", "Select code tool type (claude-code, codex)", { default: DEFAULT_CODE_TOOL_TYPE }).action(await withLanguageResolution(async () => {
2412
+ cli.command("", "Show interactive menu (default)").option("--lang, -l <lang>", "ZCF display language (zh-CN, en)").option("--all-lang, -g <lang>", "Set all language parameters to this value").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").option("--force, -f", "Force overwrite existing configuration").option("--code-type, -T <codeType>", "Select code tool type (claude-code, codex)").action(await withLanguageResolution(async () => {
2417
2413
  await showMainMenu();
2418
2414
  }));
2419
- cli.command("init", "Initialize Claude Code configuration").alias("i").option("--lang, -l <lang>", "ZCF display language (zh-CN, en)").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").option("--ai-output-lang, -a <lang>", "AI output language").option("--force, -f", "Force overwrite existing configuration").option("--skip-prompt, -s", "Skip all interactive prompts (non-interactive mode)").option("--config-action, -r <action>", `Config handling (new/backup/merge/docs-only/skip), ${i18n.t("cli:help.defaults.prefix")} backup`).option("--api-type, -t <type>", "API type (auth_token/api_key/ccr_proxy/skip)").option("--api-key, -k <key>", "API key (used for both API key and auth token types)").option("--api-url, -u <url>", "Custom API URL").option("--mcp-services, -m <services>", `Comma-separated MCP services to install (context7,mcp-deepwiki,Playwright,exa), "skip" to skip all, "all" for all non-key services, ${i18n.t("cli:help.defaults.prefix")} all`).option("--workflows, -w <workflows>", `Comma-separated workflows to install (sixStepsWorkflow,featPlanUx,gitWorkflow,bmadWorkflow), "skip" to skip all, "all" for all workflows, ${i18n.t("cli:help.defaults.prefix")} all`).option("--output-styles, -o <styles>", `Comma-separated output styles (engineer-professional,nekomata-engineer,laowang-engineer,default,explanatory,learning), "skip" to skip all, "all" for all custom styles, ${i18n.t("cli:help.defaults.prefix")} all`).option("--default-output-style, -d <style>", `Default output style, ${i18n.t("cli:help.defaults.prefix")} engineer-professional`).option("--all-lang, -g <lang>", "Set all language parameters to this value").option("--code-type, -T <codeType>", "Select code tool type (claude-code, codex)", { default: DEFAULT_CODE_TOOL_TYPE }).option("--install-cometix-line, -x <value>", `Install CCometixLine statusline tool (true/false), ${i18n.t("cli:help.defaults.prefix")} true`).action(await withLanguageResolution(async (options) => {
2415
+ cli.command("init", "Initialize Claude Code configuration").alias("i").option("--lang, -l <lang>", "ZCF display language (zh-CN, en)").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").option("--ai-output-lang, -a <lang>", "AI output language").option("--force, -f", "Force overwrite existing configuration").option("--skip-prompt, -s", "Skip all interactive prompts (non-interactive mode)").option("--config-action, -r <action>", `Config handling (new/backup/merge/docs-only/skip), ${i18n.t("cli:help.defaults.prefix")} backup`).option("--api-type, -t <type>", "API type (auth_token/api_key/ccr_proxy/skip)").option("--api-key, -k <key>", "API key (used for both API key and auth token types)").option("--api-url, -u <url>", "Custom API URL").option("--mcp-services, -m <services>", `Comma-separated MCP services to install (context7,mcp-deepwiki,Playwright,exa), "skip" to skip all, "all" for all non-key services, ${i18n.t("cli:help.defaults.prefix")} all`).option("--workflows, -w <workflows>", `Comma-separated workflows to install (sixStepsWorkflow,featPlanUx,gitWorkflow,bmadWorkflow), "skip" to skip all, "all" for all workflows, ${i18n.t("cli:help.defaults.prefix")} all`).option("--output-styles, -o <styles>", `Comma-separated output styles (engineer-professional,nekomata-engineer,laowang-engineer,default,explanatory,learning), "skip" to skip all, "all" for all custom styles, ${i18n.t("cli:help.defaults.prefix")} all`).option("--default-output-style, -d <style>", `Default output style, ${i18n.t("cli:help.defaults.prefix")} engineer-professional`).option("--all-lang, -g <lang>", "Set all language parameters to this value").option("--code-type, -T <codeType>", "Select code tool type (claude-code, codex)").option("--install-cometix-line, -x <value>", `Install CCometixLine statusline tool (true/false), ${i18n.t("cli:help.defaults.prefix")} true`).action(await withLanguageResolution(async (options) => {
2420
2416
  await init(options);
2421
2417
  }));
2422
2418
  cli.command("update", "Update Claude Code prompts only").alias("u").option("--lang, -l <lang>", "ZCF display language (zh-CN, en)").option("--all-lang, -g <lang>", "Set all language parameters to this value").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").action(await withLanguageResolution(async (options) => {
package/dist/index.d.mts CHANGED
@@ -8,6 +8,7 @@ declare const LEGACY_ZCF_CONFIG_FILES: string[];
8
8
  declare const CODE_TOOL_TYPES: readonly ["claude-code", "codex"];
9
9
  type CodeToolType = (typeof CODE_TOOL_TYPES)[number];
10
10
  declare const DEFAULT_CODE_TOOL_TYPE: CodeToolType;
11
+ declare const CODE_TOOL_BANNERS: Record<CodeToolType, string>;
11
12
  declare function isCodeToolType(value: any): value is CodeToolType;
12
13
  declare const SUPPORTED_LANGS: readonly ["zh-CN", "en"];
13
14
  type SupportedLang = (typeof SUPPORTED_LANGS)[number];
@@ -193,5 +194,5 @@ declare function importRecommendedEnv(): Promise<void>;
193
194
  declare function importRecommendedPermissions(): Promise<void>;
194
195
  declare function openSettingsJson(): Promise<void>;
195
196
 
196
- export { AI_OUTPUT_LANGUAGES, CLAUDE_DIR, CLAUDE_MD_FILE, CODE_TOOL_TYPES, ClAUDE_CONFIG_FILE, DEFAULT_CODE_TOOL_TYPE, LANG_LABELS, LEGACY_ZCF_CONFIG_FILES, SETTINGS_FILE, SUPPORTED_LANGS, ZCF_CONFIG_DIR, ZCF_CONFIG_FILE, addCompletedOnboarding, applyAiLanguageDirective, backupExistingConfig, backupMcpConfig, buildMcpServerConfig, cleanupPermissions, commandExists, configureApi, copyConfigFiles, ensureApiKeyApproved, ensureClaudeDir, fixWindowsMcpConfig, getAiOutputLanguageLabel, getExistingApiConfig, getExistingModelConfig, getInstallationStatus, getMcpConfigPath, getPlatform, importRecommendedEnv, importRecommendedPermissions, init, installClaudeCode, isClaudeCodeInstalled, isCodeToolType, isLocalClaudeCodeInstalled, manageApiKeyApproval, mergeAndCleanPermissions, mergeConfigs, mergeMcpServers, mergeSettingsFile, openSettingsJson, readMcpConfig, removeApiKeyFromRejected, removeLocalClaudeCode, updateCustomModel, updateDefaultModel, writeMcpConfig };
197
+ export { AI_OUTPUT_LANGUAGES, CLAUDE_DIR, CLAUDE_MD_FILE, CODE_TOOL_BANNERS, CODE_TOOL_TYPES, ClAUDE_CONFIG_FILE, DEFAULT_CODE_TOOL_TYPE, LANG_LABELS, LEGACY_ZCF_CONFIG_FILES, SETTINGS_FILE, SUPPORTED_LANGS, ZCF_CONFIG_DIR, ZCF_CONFIG_FILE, addCompletedOnboarding, applyAiLanguageDirective, backupExistingConfig, backupMcpConfig, buildMcpServerConfig, cleanupPermissions, commandExists, configureApi, copyConfigFiles, ensureApiKeyApproved, ensureClaudeDir, fixWindowsMcpConfig, getAiOutputLanguageLabel, getExistingApiConfig, getExistingModelConfig, getInstallationStatus, getMcpConfigPath, getPlatform, importRecommendedEnv, importRecommendedPermissions, init, installClaudeCode, isClaudeCodeInstalled, isCodeToolType, isLocalClaudeCodeInstalled, manageApiKeyApproval, mergeAndCleanPermissions, mergeConfigs, mergeMcpServers, mergeSettingsFile, openSettingsJson, readMcpConfig, removeApiKeyFromRejected, removeLocalClaudeCode, updateCustomModel, updateDefaultModel, writeMcpConfig };
197
198
  export type { AiOutputLanguage, ApiConfig, ClaudeConfiguration, CodeToolType, InstallationStatus, McpServerConfig, McpService, SupportedLang };
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ declare const LEGACY_ZCF_CONFIG_FILES: string[];
8
8
  declare const CODE_TOOL_TYPES: readonly ["claude-code", "codex"];
9
9
  type CodeToolType = (typeof CODE_TOOL_TYPES)[number];
10
10
  declare const DEFAULT_CODE_TOOL_TYPE: CodeToolType;
11
+ declare const CODE_TOOL_BANNERS: Record<CodeToolType, string>;
11
12
  declare function isCodeToolType(value: any): value is CodeToolType;
12
13
  declare const SUPPORTED_LANGS: readonly ["zh-CN", "en"];
13
14
  type SupportedLang = (typeof SUPPORTED_LANGS)[number];
@@ -193,5 +194,5 @@ declare function importRecommendedEnv(): Promise<void>;
193
194
  declare function importRecommendedPermissions(): Promise<void>;
194
195
  declare function openSettingsJson(): Promise<void>;
195
196
 
196
- export { AI_OUTPUT_LANGUAGES, CLAUDE_DIR, CLAUDE_MD_FILE, CODE_TOOL_TYPES, ClAUDE_CONFIG_FILE, DEFAULT_CODE_TOOL_TYPE, LANG_LABELS, LEGACY_ZCF_CONFIG_FILES, SETTINGS_FILE, SUPPORTED_LANGS, ZCF_CONFIG_DIR, ZCF_CONFIG_FILE, addCompletedOnboarding, applyAiLanguageDirective, backupExistingConfig, backupMcpConfig, buildMcpServerConfig, cleanupPermissions, commandExists, configureApi, copyConfigFiles, ensureApiKeyApproved, ensureClaudeDir, fixWindowsMcpConfig, getAiOutputLanguageLabel, getExistingApiConfig, getExistingModelConfig, getInstallationStatus, getMcpConfigPath, getPlatform, importRecommendedEnv, importRecommendedPermissions, init, installClaudeCode, isClaudeCodeInstalled, isCodeToolType, isLocalClaudeCodeInstalled, manageApiKeyApproval, mergeAndCleanPermissions, mergeConfigs, mergeMcpServers, mergeSettingsFile, openSettingsJson, readMcpConfig, removeApiKeyFromRejected, removeLocalClaudeCode, updateCustomModel, updateDefaultModel, writeMcpConfig };
197
+ export { AI_OUTPUT_LANGUAGES, CLAUDE_DIR, CLAUDE_MD_FILE, CODE_TOOL_BANNERS, CODE_TOOL_TYPES, ClAUDE_CONFIG_FILE, DEFAULT_CODE_TOOL_TYPE, LANG_LABELS, LEGACY_ZCF_CONFIG_FILES, SETTINGS_FILE, SUPPORTED_LANGS, ZCF_CONFIG_DIR, ZCF_CONFIG_FILE, addCompletedOnboarding, applyAiLanguageDirective, backupExistingConfig, backupMcpConfig, buildMcpServerConfig, cleanupPermissions, commandExists, configureApi, copyConfigFiles, ensureApiKeyApproved, ensureClaudeDir, fixWindowsMcpConfig, getAiOutputLanguageLabel, getExistingApiConfig, getExistingModelConfig, getInstallationStatus, getMcpConfigPath, getPlatform, importRecommendedEnv, importRecommendedPermissions, init, installClaudeCode, isClaudeCodeInstalled, isCodeToolType, isLocalClaudeCodeInstalled, manageApiKeyApproval, mergeAndCleanPermissions, mergeConfigs, mergeMcpServers, mergeSettingsFile, openSettingsJson, readMcpConfig, removeApiKeyFromRejected, removeLocalClaudeCode, updateCustomModel, updateDefaultModel, writeMcpConfig };
197
198
  export type { AiOutputLanguage, ApiConfig, ClaudeConfiguration, CodeToolType, InstallationStatus, McpServerConfig, McpService, SupportedLang };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { A as AI_OUTPUT_LANGUAGES, C as CLAUDE_DIR, e as CLAUDE_MD_FILE, j as CODE_TOOL_TYPES, f as ClAUDE_CONFIG_FILE, D as DEFAULT_CODE_TOOL_TYPE, n as LANG_LABELS, L as LEGACY_ZCF_CONFIG_FILES, S as SETTINGS_FILE, l as SUPPORTED_LANGS, Z as ZCF_CONFIG_DIR, h as ZCF_CONFIG_FILE, x as addCompletedOnboarding, P as applyAiLanguageDirective, F as backupExistingConfig, s as backupMcpConfig, u as buildMcpServerConfig, c as cleanupPermissions, a as commandExists, H as configureApi, G as copyConfigFiles, y as ensureApiKeyApproved, E as ensureClaudeDir, v as fixWindowsMcpConfig, p as getAiOutputLanguageLabel, O as getExistingApiConfig, N as getExistingModelConfig, U as getInstallationStatus, q as getMcpConfigPath, g as getPlatform, b as importRecommendedEnv, d as importRecommendedPermissions, i as init, R as installClaudeCode, Q as isClaudeCodeInstalled, k as isCodeToolType, T as isLocalClaudeCodeInstalled, B as manageApiKeyApproval, m as mergeAndCleanPermissions, I as mergeConfigs, t as mergeMcpServers, M as mergeSettingsFile, o as openSettingsJson, r as readMcpConfig, z as removeApiKeyFromRejected, V as removeLocalClaudeCode, J as updateCustomModel, K as updateDefaultModel, w as writeMcpConfig } from './chunks/simple-config.mjs';
1
+ export { A as AI_OUTPUT_LANGUAGES, C as CLAUDE_DIR, e as CLAUDE_MD_FILE, k as CODE_TOOL_BANNERS, j as CODE_TOOL_TYPES, f as ClAUDE_CONFIG_FILE, D as DEFAULT_CODE_TOOL_TYPE, p as LANG_LABELS, L as LEGACY_ZCF_CONFIG_FILES, S as SETTINGS_FILE, n as SUPPORTED_LANGS, Z as ZCF_CONFIG_DIR, h as ZCF_CONFIG_FILE, y as addCompletedOnboarding, Q as applyAiLanguageDirective, G as backupExistingConfig, t as backupMcpConfig, v as buildMcpServerConfig, c as cleanupPermissions, a as commandExists, I as configureApi, H as copyConfigFiles, z as ensureApiKeyApproved, F as ensureClaudeDir, x as fixWindowsMcpConfig, q as getAiOutputLanguageLabel, P as getExistingApiConfig, O as getExistingModelConfig, V as getInstallationStatus, r as getMcpConfigPath, g as getPlatform, b as importRecommendedEnv, d as importRecommendedPermissions, i as init, T as installClaudeCode, R as isClaudeCodeInstalled, l as isCodeToolType, U as isLocalClaudeCodeInstalled, E as manageApiKeyApproval, m as mergeAndCleanPermissions, J as mergeConfigs, u as mergeMcpServers, N as mergeSettingsFile, o as openSettingsJson, s as readMcpConfig, B as removeApiKeyFromRejected, W as removeLocalClaudeCode, K as updateCustomModel, M as updateDefaultModel, w as writeMcpConfig } from './chunks/simple-config.mjs';
2
2
  import 'node:fs';
3
3
  import 'node:process';
4
4
  import 'ansis';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zcf",
3
3
  "type": "module",
4
- "version": "3.0.0",
4
+ "version": "3.0.2",
5
5
  "description": "Zero-Config Code Flow - One-click configuration tool for Claude Code",
6
6
  "author": {
7
7
  "name": "Miao Da",