zcf
Version:
Zero-Config Claude-Code Flow - One-click configuration tool for Claude Code
1,019 lines (989 loc) • 154 kB
JavaScript
import { existsSync, mkdirSync, copyFileSync, writeFileSync, readFileSync, readdirSync, statSync } from 'node:fs';
import process from 'node:process';
import ansis from 'ansis';
import inquirer from 'inquirer';
import { join, dirname } from 'pathe';
import dayjs from 'dayjs';
import { exec as exec$1 } from 'node:child_process';
import { homedir, platform } from 'node:os';
import { join as join$1 } from 'node:path';
import { promisify } from 'node:util';
import { fileURLToPath } from 'node:url';
import ora from 'ora';
import semver from 'semver';
import { exec } from 'tinyexec';
import { rm, mkdir, copyFile as copyFile$1 } from 'node:fs/promises';
const version = "2.11.0";
const homepage = "https://github.com/UfoMiao/zcf";
const WORKFLOW_CONFIGS = [
{
id: "commonTools",
nameKey: "workflowOption.commonTools",
descriptionKey: "workflowDescription.commonTools",
defaultSelected: true,
order: 1,
commands: ["init-project.md"],
agents: [
{ id: "init-architect", filename: "init-architect.md", required: true },
{ id: "get-current-datetime", filename: "get-current-datetime.md", required: true }
],
autoInstallAgents: true,
category: "common",
outputDir: "common"
},
{
id: "sixStepsWorkflow",
nameKey: "workflowOption.sixStepsWorkflow",
descriptionKey: "workflowDescription.sixStepsWorkflow",
defaultSelected: true,
order: 2,
commands: ["workflow.md"],
agents: [],
autoInstallAgents: false,
category: "sixStep",
outputDir: "workflow"
},
{
id: "featPlanUx",
nameKey: "workflowOption.featPlanUx",
descriptionKey: "workflowDescription.featPlanUx",
defaultSelected: true,
order: 3,
commands: ["feat.md"],
agents: [
{ id: "planner", filename: "planner.md", required: true },
{ id: "ui-ux-designer", filename: "ui-ux-designer.md", required: true }
],
autoInstallAgents: true,
category: "plan",
outputDir: "feat"
},
{
id: "gitWorkflow",
nameKey: "workflowOption.gitWorkflow",
descriptionKey: "workflowDescription.gitWorkflow",
defaultSelected: true,
order: 4,
commands: ["git-commit.md", "git-rollback.md", "git-cleanBranches.md", "git-worktree.md"],
agents: [],
autoInstallAgents: false,
category: "git",
outputDir: "git"
},
{
id: "bmadWorkflow",
nameKey: "workflowOption.bmadWorkflow",
descriptionKey: "workflowDescription.bmadWorkflow",
defaultSelected: true,
order: 5,
commands: ["bmad-init.md"],
agents: [],
autoInstallAgents: false,
category: "bmad",
outputDir: "bmad"
}
];
function getWorkflowConfig(workflowId) {
return WORKFLOW_CONFIGS.find((config) => config.id === workflowId);
}
function getOrderedWorkflows() {
return [...WORKFLOW_CONFIGS].sort((a, b) => a.order - b.order);
}
const api$1 = {
// Basic API configuration
configureApi: "Select API authentication method",
useAuthToken: "Use Auth Token (OAuth authentication)",
authTokenDesc: "For tokens obtained via OAuth or browser login",
useApiKey: "Use API Key (Key authentication)",
apiKeyDesc: "For API keys from Anthropic Console",
useCcrProxy: "Use CCR Proxy",
ccrProxyDesc: "Use multiple AI models via Claude Code Router",
skipApi: "Skip (configure manually later)",
enterApiUrl: "Enter API URL",
enterAuthToken: "Enter Auth Token",
enterApiKey: "Enter API Key",
apiConfigSuccess: "API configured",
// API modification
existingApiConfig: "Existing API configuration detected:",
apiConfigUrl: "URL",
apiConfigKey: "Key",
apiConfigAuthType: "Auth Type",
selectApiAction: "Select API processing operation",
keepExistingConfig: "Keep existing configuration",
modifyAllConfig: "Modify all configuration",
modifyPartialConfig: "Modify partial configuration",
selectModifyItems: "Select items to modify",
modifyApiUrl: "Modify API URL",
modifyApiKey: "Modify API Key",
modifyAuthType: "Modify auth type",
continueModification: "Continue modifying other configurations?",
modificationSaved: "Configuration saved",
enterNewApiUrl: "Enter new API URL (current: {url})",
enterNewApiKey: "Enter new API Key (current: {key})",
selectNewAuthType: "Select new auth type (current: {type})",
// API validation
apiKeyValidation: {
empty: "API Key cannot be empty",
example: "Example format: sk-abcdef123456_789xyz"
},
urlRequired: "URL is required",
invalidUrl: "Invalid URL",
keyRequired: "Key is required",
invalidKeyFormat: "Invalid key format"
};
const bmad$1 = {
// BMad CLI command
description: "Install BMad Method for AI-driven development",
directoryOption: "Target directory for installation",
forceOption: "Force reinstall even if already exists",
versionOption: "Specific BMad version to install",
// Installation messages
checkingExisting: "Checking for existing BMad installation...",
alreadyInstalled: "BMad is already installed (version: {version})",
existingAction: "Choose an action:",
actionUpdate: "Update to latest version",
actionReinstall: "Reinstall",
actionSkip: "Skip installation",
installationSkipped: "BMad installation skipped",
installing: "Installing BMad Method...",
installSuccess: "\u2705 BMad Method installed successfully!",
installFailed: "\u274C BMad Method installation failed",
installError: "\u274C BMad installation error",
nextSteps: "Next steps: Navigate to {directory} to start using BMad",
// BMad workflow messages
installingBmadWorkflow: "Installing BMAD workflow...",
bmadWorkflowInstalled: "BMAD workflow installed",
bmadWorkflowFailed: "Failed to install BMAD workflow",
// BMad agent messages
installingAgent: "Installing {agent} agent...",
agentInstalled: "{agent} agent installed",
agentFailed: "Failed to install {agent} agent",
// BMad user prompts
selectBmadOption: "Select BMAD option",
confirmInstallBmad: "Confirm install BMAD workflow?",
bmadInstallComplete: "BMAD installation complete",
// BMad log messages
checkingBmadDependencies: "Checking BMAD dependencies...",
bmadDependenciesMet: "BMAD dependencies met",
bmadDependenciesMissing: "Missing BMAD dependencies: {deps}",
// BMad commands
runningBmadCommand: "Running BMAD command: {command}",
bmadCommandSuccess: "BMAD command executed successfully",
bmadCommandFailed: "BMAD command failed: {error}",
// BMad configuration
configuringBmad: "Configuring BMAD settings...",
bmadConfigured: "BMAD configured",
bmadConfigFailed: "BMAD configuration failed"
};
const ccrMessages$1 = {
// Installation
installingCcr: "Installing Claude Code Router...",
ccrInstallSuccess: "Claude Code Router installed successfully",
ccrInstallFailed: "Failed to install Claude Code Router",
ccrAlreadyInstalled: "Claude Code Router is already installed",
detectedIncorrectPackage: "Detected incorrect package claude-code-router, uninstalling...",
uninstalledIncorrectPackage: "Successfully uninstalled incorrect package",
failedToUninstallIncorrectPackage: "Failed to uninstall incorrect package, continuing with installation",
// Configuration
configureCcr: "Configure Model Proxy (CCR)",
useCcrProxy: "Use CCR Proxy",
ccrProxyDesc: "Connect to multiple AI models via Claude Code Router",
fetchingPresets: "Fetching provider presets...",
noPresetsAvailable: "No presets available",
selectCcrPreset: "Select a provider preset:",
keyRequired: "API key is required",
// Existing config
existingCcrConfig: "Existing CCR configuration found",
overwriteCcrConfig: "Backup existing CCR configuration and reconfigure?",
keepingExistingConfig: "Keeping existing configuration",
backupCcrConfig: "Backing up existing CCR configuration...",
ccrBackupSuccess: "CCR configuration backed up to: {path}",
ccrBackupFailed: "Failed to backup CCR configuration",
// Model selection
selectDefaultModelForProvider: "Select default model for {provider}:",
enterApiKeyForProvider: "Enter API key for {provider}:",
// Skip option
skipOption: "Skip, configure in CCR manually",
skipConfiguring: "Skipping preset configuration, will create empty configuration framework",
// Success/Error messages
ccrConfigSuccess: "CCR configuration saved",
proxyConfigSuccess: "Proxy settings configured",
ccrConfigFailed: "Failed to configure CCR",
ccrSetupComplete: "CCR setup complete",
fetchPresetsError: "Failed to fetch provider presets",
failedToStartCcrService: "Failed to start CCR service",
errorStartingCcrService: "Error starting CCR service",
// CCR service status
ccrRestartSuccess: "CCR service restarted",
ccrRestartFailed: "Failed to restart CCR service",
// Configuration tips
configTips: "Configuration Tips",
useClaudeCommand: "Use the claude command to start Claude Code (not ccr code)",
advancedConfigTip: "You can use the ccr ui command for advanced configuration",
manualConfigTip: "After manually modifying the configuration file, run ccr restart to apply changes",
// CCR Menu
ccrMenuTitle: "CCR - Claude Code Router Management",
ccrMenuOptions: {
initCcr: "Initialize CCR",
startUi: "Start CCR UI",
checkStatus: "Check CCR Status",
restart: "Restart CCR",
start: "Start CCR",
stop: "Stop CCR",
back: "Back to Main Menu"
},
ccrMenuDescriptions: {
initCcr: "Install and configure CCR",
startUi: "Open web interface to manage CCR",
checkStatus: "View CCR service status",
restart: "Restart CCR service",
start: "Start CCR service",
stop: "Stop CCR service"
},
// Command execution messages
startingCcrUi: "Starting CCR UI...",
ccrUiStarted: "CCR UI started",
checkingCcrStatus: "Checking CCR status...",
ccrStatusTitle: "CCR Status:",
restartingCcr: "Restarting CCR...",
ccrRestarted: "CCR restarted",
startingCcr: "Starting CCR...",
ccrStarted: "CCR started",
stoppingCcr: "Stopping CCR...",
ccrStopped: "CCR stopped",
ccrCommandFailed: "Failed to execute CCR command",
// Configuration check messages
ccrNotConfigured: "CCR is not configured yet. Please initialize CCR first.",
pleaseInitFirst: "Please select option 1 to initialize CCR.",
// UI API Key messages
ccrUiApiKey: "CCR UI API Key",
ccrUiApiKeyHint: "Use this API key to login to CCR UI"
};
const cli$1 = {
runFullInit: "Run full initialization directly",
forceOverwrite: "Force overwrite existing configuration",
initClaudeConfig: "Initialize Claude Code configuration",
updatePromptsOnly: "Update Claude Code prompts only"
};
const cometixMessages$1 = {
// Installation
installingCometix: "Installing CCometixLine...",
cometixInstallSuccess: "CCometixLine installed successfully",
cometixInstallFailed: "Failed to install CCometixLine",
cometixAlreadyInstalled: "CCometixLine is already installed",
statusLineConfigured: "Claude Code statusLine configured",
statusLineConfigFailed: "Failed to configure statusLine",
statusLineManualConfig: "Please manually add statusLine configuration to Claude Code settings",
statusLineAlreadyConfigured: "Claude Code statusLine already configured",
// Installation prompt in init
installCometixPrompt: "Install CCometixLine - High-performance Claude Code statusline tool with Git integration and real-time usage tracking?",
cometixSkipped: "CCometixLine installation skipped",
// Commands
installingOrUpdating: "Installing/updating CCometixLine...",
installUpdateSuccess: "CCometixLine install/update completed",
installUpdateFailed: "Failed to install/update CCometixLine",
printingConfig: "Printing CCometixLine configuration...",
printConfigSuccess: "Configuration printed successfully",
printConfigFailed: "Failed to print configuration",
enteringTuiConfig: "Entering CCometixLine TUI configuration mode...",
tuiConfigSuccess: "TUI configuration completed successfully",
tuiConfigFailed: "Failed to run TUI configuration",
commandNotFound: "ccline command not found. Please install CCometixLine first.",
// CCometixLine Menu
cometixMenuTitle: "CCometixLine - High-performance Claude Code statusline tool with Git integration and real-time usage tracking",
cometixMenuOptions: {
installOrUpdate: "Install or Update",
printConfig: "Print Default Configuration",
customConfig: "Custom Config",
back: "Back to Main Menu"
},
cometixMenuDescriptions: {
installOrUpdate: "Install or update CCometixLine using npm",
printConfig: "Display current CCometixLine configuration",
customConfig: "Enter TUI configuration mode for CCometixLine"
}
};
const common$1 = {
// Basic
multiSelectHint: " (Space to select, a to select all, i to invert, Enter to confirm)",
yes: "Yes",
no: "No",
skip: "Skip",
cancelled: "Operation cancelled",
error: "Error",
complete: "\u{1F389} Setup complete! Use 'claude' command to start.",
none: "None",
notConfigured: "Not configured",
spaceToSelectReturn: "- Space to select. Return to submit",
enterChoice: "Enter your choice and press enter (case-insensitive)",
invalidChoice: "Invalid choice. Please enter a valid option.",
goodbye: "\u{1F44B} Thanks for using ZCF! Goodbye!",
returnToMenu: "Return to main menu?",
back: "Back"
};
const configuration$1 = {
existingConfig: "Existing config detected. How to proceed?",
backupAndOverwrite: "Backup and overwrite all",
updateDocsOnly: "Update workflow-related md files only with backup",
mergeConfig: "Merge config",
backupSuccess: "All config files backed up to",
copying: "Copying configuration files...",
configSuccess: "Config files copied to",
noExistingConfig: "No existing configuration found. Please run `zcf` first.",
updatingPrompts: "Updating Claude Code memory documents...",
// Model configuration
selectDefaultModel: "Select default model",
modelConfigSuccess: "Default model configured",
existingModelConfig: "Existing model configuration detected",
currentModel: "Current model",
modifyModel: "Modify model configuration?",
keepModel: "Keeping existing model configuration",
defaultModelOption: "Default - Let Claude Code choose",
opusModelOption: "Opus - Only use opus, high token consumption, use with caution",
opusPlanModelOption: "OpusPlan - Use Opus for planning, write code with sonnet, recommended",
modelConfigured: "Default model configured",
// AI memory configuration
selectMemoryOption: "Select configuration option",
configureAiLanguage: "Configure AI output language",
configureAiPersonality: "Configure AI personality",
aiLanguageConfigured: "AI output language configured",
existingLanguageConfig: "Existing AI output language configuration detected",
currentLanguage: "Current language",
modifyLanguage: "Modify AI output language?",
keepLanguage: "Keeping existing language configuration",
// AI personality
selectAiPersonality: "Select AI personality",
customPersonalityHint: "Define your own personality",
enterCustomPersonality: "Enter custom personality description",
personalityConfigured: "AI personality configured",
existingPersonality: "Existing AI personality configuration",
currentPersonality: "Current personality",
modifyPersonality: "Modify AI personality?",
keepPersonality: "Keeping existing personality",
directiveCannotBeEmpty: "Directive cannot be empty",
languageRequired: "Language is required",
// Cache
confirmClearCache: "Confirm clear all ZCF preference cache?",
cacheCleared: "ZCF cache cleared",
noCacheFound: "No cache file found",
// Environment and permissions
selectEnvPermissionOption: "Select configuration option",
importRecommendedEnv: "Import ZCF recommended environment variables",
importRecommendedEnvDesc: "Privacy protection variables, etc.",
importRecommendedPermissions: "Import ZCF recommended permissions",
importRecommendedPermissionsDesc: "Almost all permissions, reduce frequent permission requests, dangerous ops limited by rules",
openSettingsJson: "Open settings.json for manual configuration",
openSettingsJsonDesc: "Advanced user customization",
envImportSuccess: "Environment variables imported",
permissionsImportSuccess: "Permissions imported",
openingSettingsJson: "Opening settings.json...",
// JSON config related
invalidConfiguration: "Invalid configuration",
failedToParseJson: "Failed to parse JSON file:",
failedToBackupConfig: "Failed to backup config",
failedToReadTemplateSettings: "Failed to read template settings",
failedToMergeSettings: "Failed to merge settings",
preservingExistingSettings: "Preserving existing settings",
memoryDirNotFound: "Memory directory not found",
failedToSetOnboarding: "Failed to set onboarding flag",
fixWindowsMcp: "Fix Windows MCP configuration?"
};
const errors$1 = {
// General errors
failedToSetOnboarding: "Failed to set onboarding completion flag:",
failedToWriteMcpConfig: "Failed to write MCP config:",
templateDirNotFound: "Template directory not found:",
failedToReadTemplateSettings: "Failed to read template settings.json:",
failedToMergeSettings: "Failed to merge settings.json:",
preservingExistingSettings: "Preserving existing settings.json due to merge error",
// File system errors
failedToReadFile: "Failed to read file:",
failedToWriteFile: "Failed to write file:",
failedToCopyFile: "Failed to copy file:",
failedToRemoveFile: "Failed to remove file:",
failedToReadDirectory: "Failed to read directory:",
failedToGetStats: "Failed to get stats for:",
sourceDirNotExist: "Source directory does not exist:",
memoryDirNotFound: "Memory directory not found:",
// JSON config errors
invalidConfiguration: "Invalid configuration, using default value",
failedToParseJson: "Failed to parse JSON file:",
failedToBackupConfig: "Failed to backup config file:",
invalidEnvConfig: "Invalid env configuration: expected object",
invalidApiUrl: "Invalid ANTHROPIC_BASE_URL: expected string",
invalidApiKey: "Invalid ANTHROPIC_API_KEY: expected string",
invalidAuthToken: "Invalid ANTHROPIC_AUTH_TOKEN: expected string",
invalidPermissionsConfig: "Invalid permissions configuration: expected object",
invalidPermissionsAllow: "Invalid permissions.allow: expected array",
// MCP errors
failedToAddOnboardingFlag: "Failed to add hasCompletedOnboarding flag:",
// AI personality errors
failedToApplyPersonality: "Failed to apply personality directive:"
};
const installation$1 = {
installPrompt: "Claude Code not found. Install automatically?",
installing: "Installing Claude Code...",
installSuccess: "Claude Code installed successfully",
alreadyInstalled: "Claude Code is already installed",
installFailed: "Failed to install Claude Code",
npmNotFound: "npm is not installed. Please install Node.js and npm first.",
// Termux specific
termuxDetected: "Termux environment detected",
termuxInstallHint: "In Termux, please run first: pkg install nodejs or pkg install nodejs-lts",
termuxPathInfo: "Using Termux path: {path}",
termuxEnvironmentInfo: "Termux environment provides Node.js and npm through pkg manager",
// Windows specific
windowsDetected: "Windows detected, will configure compatible format"
};
const language$1 = {
selectScriptLang: "Select ZCF display language",
selectConfigLang: "Select Claude Code configuration language",
selectAiOutputLang: "Select AI output language",
aiOutputLangHint: "AI will respond to you in this language",
enterCustomLanguage: "Enter custom language (e.g., Japanese, French, etc.)",
languageChanged: "Language changed",
configLangHint: {
"zh-CN": "easier for Chinese users to customize",
"en": "recommended, lower token consumption"
},
updateConfigLangPrompt: "Select configuration language",
updateConfigLangChoice: {
"zh-CN": "Chinese configuration",
"en": "English configuration"
}
};
const mcp$1 = {
configureMcp: "Configure MCP services?",
selectMcpServices: "Select MCP services to install",
allServices: "Install all",
mcpServiceInstalled: "Selected MCP services",
enterExaApiKey: "Enter Exa API Key (get from https://dashboard.exa.ai/api-keys)",
skipMcp: "Skip MCP configuration",
mcpConfigSuccess: "MCP services configured",
mcpBackupSuccess: "Original MCP config backed up",
fixWindowsMcp: "Fix Windows MCP Configuration",
fixWindowsMcpDesc: "Fix Windows platform MCP command configuration issues",
windowsMcpFixed: "Windows MCP configuration fixed",
configureMcpServices: "Configure MCP Services",
selectMcpOption: "Select MCP configuration option"
};
const menu$1 = {
selectFunction: "Select function",
menuSections: {
otherTools: "Other Tools"
},
menuOptions: {
fullInit: "Full initialization",
importWorkflow: "Import workflow",
configureApiOrCcr: "Configure API / CCR proxy",
configureApi: "Configure API",
configureMcp: "Configure MCP",
configureModel: "Configure default model",
configureAiMemory: "Configure Claude global memory",
configureEnvPermission: "Import recommended environment variables and permissions",
configureCcr: "Configure Model Proxy (CCR)",
ccrManagement: "CCR",
ccusage: "ccusage",
cometixLine: "CCometixLine",
installBmad: "Install BMad Method",
clearCache: "Clear preference cache",
checkUpdates: "Check updates",
changeLanguage: "Select display language / \u66F4\u6539\u663E\u793A\u8BED\u8A00",
exit: "Exit"
},
menuDescriptions: {
fullInit: "Install Claude Code + Import workflow + Configure API or CCR proxy + Configure MCP services",
importWorkflow: "Import/update workflow-related files only",
configureApiOrCcr: "Configure API URL, authentication or CCR proxy",
configureApi: "Configure API URL and authentication",
configureMcp: "Configure MCP services (includes Windows fix)",
configureModel: "Set default model (opus/sonnet)",
configureAiMemory: "Configure AI output language and personality",
configureEnvPermission: "Import privacy protection environment variables and system permissions",
configureCcr: "Configure Claude Code Router to use multiple AI models",
ccrManagement: "Configure Claude Code Router to use multiple AI models",
ccusage: "Claude Code usage analysis",
cometixLine: "High-performance Claude Code statusline tool with Git integration and real-time usage tracking",
installBmad: "AI-driven development methodology framework",
clearCache: "Clear preference language and other caches",
checkUpdates: "Check and update Claude Code, CCR and CCometixLine versions",
changeLanguage: "Change ZCF interface language"
}
};
const tools$1 = {
// CCUsage
runningCcusage: "Running Claude Code usage analysis tool...",
ccusageDescription: "Analyze token usage and costs - https://github.com/ryoppippi/ccusage",
selectAnalysisMode: "Select analysis mode:",
ccusageModes: {
daily: "Daily usage",
monthly: "Monthly usage",
session: "Session statistics",
blocks: "Block statistics",
custom: "Custom parameters"
},
enterCustomArgs: "Enter custom arguments (e.g., daily --json):",
pressEnterToContinue: "Press Enter to continue...",
ccusageFailed: "Failed to run ccusage",
checkNetworkConnection: "Please check your network connection and try again",
errorDetails: "Error details:"
};
const updater$1 = {
checkingVersion: "Checking version...",
checkingTools: "Checking tool versions",
ccrNotInstalled: "CCR is not installed",
ccrUpToDate: "CCR is up to date (v{version})",
claudeCodeNotInstalled: "Claude Code is not installed",
claudeCodeUpToDate: "Claude Code is up to date (v{version})",
cometixLineNotInstalled: "CCometixLine is not installed",
cometixLineUpToDate: "CCometixLine is up to date (v{version})",
cannotCheckVersion: "Cannot check latest version",
currentVersion: "Current version: v{version}",
latestVersion: "Latest version: v{version}",
confirmUpdate: "Update {tool} to the latest version?",
updateSkipped: "Update skipped",
updating: "Updating {tool}...",
updateSuccess: "{tool} updated successfully!",
updateFailed: "{tool} update failed",
checkFailed: "Version check failed"
};
const workflow$1 = {
selectWorkflowType: "Select workflow type to install",
workflowOption: {
commonTools: "Common Tools (Hierarchical Directory Initialization + General-purpose agents)",
featPlanUx: "Feature Planning and UX Design (feat + planner + ui-ux-designer)",
sixStepsWorkflow: "Six Steps Workflow (workflow)",
bmadWorkflow: "BMAD-Method Extension Installer (Agile Development Workflow)",
gitWorkflow: "Git Commands (commit + rollback + cleanBranches + worktree)"
},
workflowDescription: {
commonTools: "Provides project initialization and architecture analysis tools, including hierarchical directory initialization commands and intelligent architecture analysis agents",
featPlanUx: "Feature planning and user experience design workflow with planning and UX design agents",
sixStepsWorkflow: "Professional development assistant structured six-step workflow",
bmadWorkflow: "BMAD-Method enterprise-grade agile development workflow extension",
gitWorkflow: "Git version control related commands collection"
},
// BMAD workflow
bmadInitPrompt: "\u2728 Please run /bmad-init command in your project to initialize or update BMAD-Method extension",
bmadInstallSuccess: "Successfully installed BMAD-Method installer",
// General workflow installation
installingWorkflow: "Installing workflow",
installedCommand: "Installed command",
installedAgent: "Installed agent",
failedToInstallCommand: "Failed to install command",
failedToInstallAgent: "Failed to install agent",
workflowInstallSuccess: "workflow installed successfully",
workflowInstallError: "workflow installation had errors",
cleaningOldFiles: "Cleaning up old version files",
removedOldFile: "Removed old file"
};
const en = {
common: common$1,
language: language$1,
installation: installation$1,
api: api$1,
configuration: configuration$1,
mcp: mcp$1,
menu: menu$1,
workflow: workflow$1,
cli: cli$1,
bmad: bmad$1,
errors: errors$1,
tools: tools$1,
ccr: ccrMessages$1,
cometix: cometixMessages$1,
updater: updater$1
};
const api = {
// Basic API configuration
configureApi: "\u9009\u62E9 API \u8BA4\u8BC1\u65B9\u5F0F",
useAuthToken: "\u4F7F\u7528 Auth Token (OAuth \u8BA4\u8BC1)",
authTokenDesc: "\u9002\u7528\u4E8E\u901A\u8FC7 OAuth \u6216\u6D4F\u89C8\u5668\u767B\u5F55\u83B7\u53D6\u7684\u4EE4\u724C",
useApiKey: "\u4F7F\u7528 API Key (\u5BC6\u94A5\u8BA4\u8BC1)",
apiKeyDesc: "\u9002\u7528\u4E8E\u4ECE Anthropic Console \u83B7\u53D6\u7684 API \u5BC6\u94A5",
useCcrProxy: "\u4F7F\u7528 CCR \u4EE3\u7406",
ccrProxyDesc: "\u901A\u8FC7 Claude Code Router \u4F7F\u7528\u591A\u4E2A AI \u6A21\u578B",
skipApi: "\u8DF3\u8FC7\uFF08\u7A0D\u540E\u624B\u52A8\u914D\u7F6E\uFF09",
enterApiUrl: "\u8BF7\u8F93\u5165 API URL",
enterAuthToken: "\u8BF7\u8F93\u5165 Auth Token",
enterApiKey: "\u8BF7\u8F93\u5165 API Key",
apiConfigSuccess: "API \u914D\u7F6E\u5B8C\u6210",
// API modification
existingApiConfig: "\u68C0\u6D4B\u5230\u5DF2\u6709 API \u914D\u7F6E\uFF1A",
apiConfigUrl: "URL",
apiConfigKey: "Key",
apiConfigAuthType: "\u8BA4\u8BC1\u7C7B\u578B",
selectApiAction: "\u8BF7\u9009\u62E9API\u5904\u7406\u64CD\u4F5C",
keepExistingConfig: "\u4FDD\u7559\u73B0\u6709\u914D\u7F6E",
modifyAllConfig: "\u4FEE\u6539\u5168\u90E8\u914D\u7F6E",
modifyPartialConfig: "\u4FEE\u6539\u90E8\u5206\u914D\u7F6E",
selectModifyItems: "\u8BF7\u9009\u62E9\u8981\u4FEE\u6539\u7684\u9879",
modifyApiUrl: "\u4FEE\u6539 API URL",
modifyApiKey: "\u4FEE\u6539 API Key",
modifyAuthType: "\u4FEE\u6539\u8BA4\u8BC1\u7C7B\u578B",
continueModification: "\u662F\u5426\u7EE7\u7EED\u4FEE\u6539\u5176\u4ED6\u914D\u7F6E\uFF1F",
modificationSaved: "\u914D\u7F6E\u5DF2\u4FDD\u5B58",
enterNewApiUrl: "\u8BF7\u8F93\u5165\u65B0\u7684 API URL\uFF08\u5F53\u524D\uFF1A{url}\uFF09",
enterNewApiKey: "\u8BF7\u8F93\u5165\u65B0\u7684 API Key\uFF08\u5F53\u524D\uFF1A{key}\uFF09",
selectNewAuthType: "\u9009\u62E9\u65B0\u7684\u8BA4\u8BC1\u7C7B\u578B\uFF08\u5F53\u524D\uFF1A{type}\uFF09",
// API validation
apiKeyValidation: {
empty: "API Key \u4E0D\u80FD\u4E3A\u7A7A",
example: "\u793A\u4F8B\u683C\u5F0F: sk-abcdef123456_789xyz"
},
urlRequired: "URL \u4E3A\u5FC5\u586B\u9879",
invalidUrl: "\u65E0\u6548\u7684 URL",
keyRequired: "\u5BC6\u94A5\u4E3A\u5FC5\u586B\u9879",
invalidKeyFormat: "\u65E0\u6548\u7684\u5BC6\u94A5\u683C\u5F0F"
};
const bmad = {
// BMad CLI command
description: "\u5B89\u88C5 BMad Method \u7528\u4E8E AI \u9A71\u52A8\u7684\u5F00\u53D1",
directoryOption: "\u5B89\u88C5\u7684\u76EE\u6807\u76EE\u5F55",
forceOption: "\u5F3A\u5236\u91CD\u65B0\u5B89\u88C5\uFF0C\u5373\u4F7F\u5DF2\u5B58\u5728",
versionOption: "\u8981\u5B89\u88C5\u7684\u7279\u5B9A BMad \u7248\u672C",
// Installation messages
checkingExisting: "\u6B63\u5728\u68C0\u67E5\u73B0\u6709 BMad \u5B89\u88C5...",
alreadyInstalled: "BMad \u5DF2\u5B89\u88C5\uFF08\u7248\u672C\uFF1A{version}\uFF09",
existingAction: "\u9009\u62E9\u64CD\u4F5C\uFF1A",
actionUpdate: "\u66F4\u65B0\u5230\u6700\u65B0\u7248\u672C",
actionReinstall: "\u91CD\u65B0\u5B89\u88C5",
actionSkip: "\u8DF3\u8FC7\u5B89\u88C5",
installationSkipped: "\u5DF2\u8DF3\u8FC7 BMad \u5B89\u88C5",
installing: "\u6B63\u5728\u5B89\u88C5 BMad Method...",
installSuccess: "\u2705 BMad Method \u5B89\u88C5\u6210\u529F\uFF01",
installFailed: "\u274C BMad Method \u5B89\u88C5\u5931\u8D25",
installError: "\u274C BMad \u5B89\u88C5\u9519\u8BEF",
nextSteps: "\u4E0B\u4E00\u6B65\uFF1A\u8FDB\u5165 {directory} \u76EE\u5F55\u5F00\u59CB\u4F7F\u7528 BMad",
// BMad workflow messages
installingBmadWorkflow: "\u6B63\u5728\u5B89\u88C5 BMAD \u5DE5\u4F5C\u6D41...",
bmadWorkflowInstalled: "BMAD \u5DE5\u4F5C\u6D41\u5DF2\u5B89\u88C5",
bmadWorkflowFailed: "\u5B89\u88C5 BMAD \u5DE5\u4F5C\u6D41\u5931\u8D25",
// BMad agent messages
installingAgent: "\u6B63\u5728\u5B89\u88C5 {agent} \u4EE3\u7406...",
agentInstalled: "{agent} \u4EE3\u7406\u5DF2\u5B89\u88C5",
agentFailed: "\u5B89\u88C5 {agent} \u4EE3\u7406\u5931\u8D25",
// BMad user prompts
selectBmadOption: "\u9009\u62E9 BMAD \u9009\u9879",
confirmInstallBmad: "\u786E\u8BA4\u5B89\u88C5 BMAD \u5DE5\u4F5C\u6D41\uFF1F",
bmadInstallComplete: "BMAD \u5B89\u88C5\u5B8C\u6210",
// BMad log messages
checkingBmadDependencies: "\u68C0\u67E5 BMAD \u4F9D\u8D56...",
bmadDependenciesMet: "BMAD \u4F9D\u8D56\u6EE1\u8DB3",
bmadDependenciesMissing: "\u7F3A\u5C11 BMAD \u4F9D\u8D56\uFF1A{deps}",
// BMad commands
runningBmadCommand: "\u6267\u884C BMAD \u547D\u4EE4\uFF1A{command}",
bmadCommandSuccess: "BMAD \u547D\u4EE4\u6267\u884C\u6210\u529F",
bmadCommandFailed: "BMAD \u547D\u4EE4\u6267\u884C\u5931\u8D25\uFF1A{error}",
// BMad configuration
configuringBmad: "\u914D\u7F6E BMAD \u8BBE\u7F6E...",
bmadConfigured: "BMAD \u5DF2\u914D\u7F6E",
bmadConfigFailed: "BMAD \u914D\u7F6E\u5931\u8D25"
};
const ccrMessages = {
// Installation
installingCcr: "\u6B63\u5728\u5B89\u88C5 Claude Code Router...",
ccrInstallSuccess: "Claude Code Router \u5B89\u88C5\u6210\u529F",
ccrInstallFailed: "\u5B89\u88C5 Claude Code Router \u5931\u8D25",
ccrAlreadyInstalled: "Claude Code Router \u5DF2\u5B89\u88C5",
detectedIncorrectPackage: "\u68C0\u6D4B\u5230\u9519\u8BEF\u7684\u5305 claude-code-router\uFF0C\u6B63\u5728\u5378\u8F7D...",
uninstalledIncorrectPackage: "\u6210\u529F\u5378\u8F7D\u9519\u8BEF\u7684\u5305",
failedToUninstallIncorrectPackage: "\u5378\u8F7D\u9519\u8BEF\u7684\u5305\u5931\u8D25\uFF0C\u7EE7\u7EED\u5B89\u88C5",
// Configuration
configureCcr: "\u914D\u7F6E\u6A21\u578B\u4EE3\u7406 (CCR)",
useCcrProxy: "\u4F7F\u7528 CCR \u4EE3\u7406",
ccrProxyDesc: "\u901A\u8FC7 Claude Code Router \u8FDE\u63A5\u591A\u4E2A AI \u6A21\u578B",
fetchingPresets: "\u6B63\u5728\u83B7\u53D6\u63D0\u4F9B\u5546\u9884\u8BBE...",
noPresetsAvailable: "\u6CA1\u6709\u53EF\u7528\u7684\u9884\u8BBE",
selectCcrPreset: "\u9009\u62E9\u4E00\u4E2A\u63D0\u4F9B\u5546\u9884\u8BBE\uFF1A",
keyRequired: "API \u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A",
// Existing config
existingCcrConfig: "\u53D1\u73B0\u73B0\u6709\u7684 CCR \u914D\u7F6E",
overwriteCcrConfig: "\u662F\u5426\u5907\u4EFD\u73B0\u6709\u7684 CCR \u914D\u7F6E\u5E76\u91CD\u65B0\u914D\u7F6E\uFF1F",
keepingExistingConfig: "\u4FDD\u7559\u73B0\u6709\u914D\u7F6E",
backupCcrConfig: "\u6B63\u5728\u5907\u4EFD\u73B0\u6709\u7684 CCR \u914D\u7F6E...",
ccrBackupSuccess: "CCR \u914D\u7F6E\u5DF2\u5907\u4EFD\u5230\uFF1A{path}",
ccrBackupFailed: "\u5907\u4EFD CCR \u914D\u7F6E\u5931\u8D25",
// Model selection
selectDefaultModelForProvider: "\u9009\u62E9 {provider} \u7684\u9ED8\u8BA4\u6A21\u578B\uFF1A",
enterApiKeyForProvider: "\u8BF7\u8F93\u5165 {provider} \u7684 API \u5BC6\u94A5\uFF1A",
// Skip option
skipOption: "\u8DF3\u8FC7\uFF0C\u5728 CCR \u4E2D\u81EA\u884C\u914D\u7F6E",
skipConfiguring: "\u8DF3\u8FC7\u9884\u8BBE\u914D\u7F6E\uFF0C\u5C06\u521B\u5EFA\u7A7A\u914D\u7F6E\u6846\u67B6",
// Success/Error messages
ccrConfigSuccess: "CCR \u914D\u7F6E\u5DF2\u4FDD\u5B58",
proxyConfigSuccess: "\u4EE3\u7406\u8BBE\u7F6E\u5DF2\u914D\u7F6E",
ccrConfigFailed: "\u914D\u7F6E CCR \u5931\u8D25",
ccrSetupComplete: "CCR \u8BBE\u7F6E\u5B8C\u6210",
fetchPresetsError: "\u83B7\u53D6\u63D0\u4F9B\u5546\u9884\u8BBE\u5931\u8D25",
failedToStartCcrService: "\u542F\u52A8 CCR \u670D\u52A1\u5931\u8D25",
errorStartingCcrService: "\u542F\u52A8 CCR \u670D\u52A1\u65F6\u51FA\u9519",
// CCR service status
ccrRestartSuccess: "CCR \u670D\u52A1\u5DF2\u91CD\u542F",
ccrRestartFailed: "CCR \u670D\u52A1\u91CD\u542F\u5931\u8D25",
// Configuration tips
configTips: "\u914D\u7F6E\u63D0\u793A",
useClaudeCommand: "\u8BF7\u4F7F\u7528 claude \u547D\u4EE4\u542F\u52A8 Claude Code\uFF08\u800C\u975E ccr code\uFF09",
advancedConfigTip: "\u60A8\u53EF\u4EE5\u4F7F\u7528 ccr ui \u547D\u4EE4\u8FDB\u884C\u66F4\u9AD8\u7EA7\u7684\u914D\u7F6E",
manualConfigTip: "\u624B\u52A8\u4FEE\u6539\u914D\u7F6E\u6587\u4EF6\u540E\uFF0C\u8BF7\u6267\u884C ccr restart \u4F7F\u914D\u7F6E\u751F\u6548",
// CCR Menu
ccrMenuTitle: "CCR - Claude Code Router \u7BA1\u7406",
ccrMenuOptions: {
initCcr: "\u521D\u59CB\u5316 CCR",
startUi: "\u542F\u52A8 CCR UI",
checkStatus: "\u67E5\u8BE2 CCR \u72B6\u6001",
restart: "\u91CD\u542F CCR",
start: "\u542F\u52A8 CCR",
stop: "\u505C\u6B62 CCR",
back: "\u8FD4\u56DE\u4E3B\u83DC\u5355"
},
ccrMenuDescriptions: {
initCcr: "\u5B89\u88C5\u5E76\u914D\u7F6E CCR",
startUi: "\u6253\u5F00 Web \u754C\u9762\u7BA1\u7406 CCR",
checkStatus: "\u67E5\u770B CCR \u670D\u52A1\u8FD0\u884C\u72B6\u6001",
restart: "\u91CD\u542F CCR \u670D\u52A1",
start: "\u542F\u52A8 CCR \u670D\u52A1",
stop: "\u505C\u6B62 CCR \u670D\u52A1"
},
// Command execution messages
startingCcrUi: "\u6B63\u5728\u542F\u52A8 CCR UI...",
ccrUiStarted: "CCR UI \u5DF2\u542F\u52A8",
checkingCcrStatus: "\u6B63\u5728\u67E5\u8BE2 CCR \u72B6\u6001...",
ccrStatusTitle: "CCR \u72B6\u6001\u4FE1\u606F\uFF1A",
restartingCcr: "\u6B63\u5728\u91CD\u542F CCR...",
ccrRestarted: "CCR \u5DF2\u91CD\u542F",
startingCcr: "\u6B63\u5728\u542F\u52A8 CCR...",
ccrStarted: "CCR \u5DF2\u542F\u52A8",
stoppingCcr: "\u6B63\u5728\u505C\u6B62 CCR...",
ccrStopped: "CCR \u5DF2\u505C\u6B62",
ccrCommandFailed: "\u6267\u884C CCR \u547D\u4EE4\u5931\u8D25",
// Configuration check messages
ccrNotConfigured: "CCR \u5C1A\u672A\u914D\u7F6E\u3002\u8BF7\u5148\u521D\u59CB\u5316 CCR\u3002",
pleaseInitFirst: "\u8BF7\u9009\u62E9\u9009\u9879 1 \u6765\u521D\u59CB\u5316 CCR\u3002",
// UI API Key messages
ccrUiApiKey: "CCR UI \u767B\u5F55\u5BC6\u94A5",
ccrUiApiKeyHint: "\u4F7F\u7528\u6B64\u5BC6\u94A5\u767B\u5F55 CCR UI \u754C\u9762"
};
const cli = {
runFullInit: "\u76F4\u63A5\u8FD0\u884C\u5B8C\u6574\u521D\u59CB\u5316",
forceOverwrite: "\u5F3A\u5236\u8986\u76D6\u73B0\u6709\u914D\u7F6E",
initClaudeConfig: "\u521D\u59CB\u5316 Claude Code \u914D\u7F6E",
updatePromptsOnly: "\u4EC5\u66F4\u65B0 Claude Code \u63D0\u793A"
};
const cometixMessages = {
// Installation
installingCometix: "\u6B63\u5728\u5B89\u88C5 CCometixLine...",
cometixInstallSuccess: "CCometixLine \u5B89\u88C5\u6210\u529F",
cometixInstallFailed: "\u5B89\u88C5 CCometixLine \u5931\u8D25",
cometixAlreadyInstalled: "CCometixLine \u5DF2\u5B89\u88C5",
statusLineConfigured: "Claude Code \u72B6\u6001\u680F\u914D\u7F6E\u5DF2\u8BBE\u7F6E",
statusLineConfigFailed: "\u72B6\u6001\u680F\u914D\u7F6E\u5931\u8D25",
statusLineManualConfig: "\u8BF7\u624B\u52A8\u6DFB\u52A0\u72B6\u6001\u680F\u914D\u7F6E\u5230 Claude Code \u8BBE\u7F6E\u4E2D",
statusLineAlreadyConfigured: "Claude Code \u72B6\u6001\u680F\u914D\u7F6E\u5DF2\u5B58\u5728",
// Installation prompt in init
installCometixPrompt: "\u662F\u5426\u5B89\u88C5 CCometixLine - \u57FA\u4E8E Rust \u7684\u9AD8\u6027\u80FD Claude Code \u72B6\u6001\u680F\u5DE5\u5177\uFF0C\u96C6\u6210 Git \u4FE1\u606F\u548C\u5B9E\u65F6\u4F7F\u7528\u91CF\u8DDF\u8E2A\uFF1F",
cometixSkipped: "CCometixLine \u5B89\u88C5\u5DF2\u8DF3\u8FC7",
// Commands
installingOrUpdating: "\u6B63\u5728\u5B89\u88C5/\u66F4\u65B0 CCometixLine...",
installUpdateSuccess: "CCometixLine \u5B89\u88C5/\u66F4\u65B0\u5B8C\u6210",
installUpdateFailed: "\u5B89\u88C5/\u66F4\u65B0 CCometixLine \u5931\u8D25",
printingConfig: "\u6B63\u5728\u6253\u5370 CCometixLine \u914D\u7F6E...",
printConfigSuccess: "\u914D\u7F6E\u6253\u5370\u6210\u529F",
printConfigFailed: "\u6253\u5370\u914D\u7F6E\u5931\u8D25",
enteringTuiConfig: "\u6B63\u5728\u8FDB\u5165 CCometixLine TUI \u914D\u7F6E\u6A21\u5F0F...",
tuiConfigSuccess: "TUI \u914D\u7F6E\u5B8C\u6210\u6210\u529F",
tuiConfigFailed: "\u8FD0\u884C TUI \u914D\u7F6E\u5931\u8D25",
commandNotFound: "ccline \u547D\u4EE4\u672A\u627E\u5230\u3002\u8BF7\u5148\u5B89\u88C5 CCometixLine\u3002",
// CCometixLine Menu
cometixMenuTitle: "CCometixLine - \u57FA\u4E8E Rust \u7684\u9AD8\u6027\u80FD Claude Code \u72B6\u6001\u680F\u5DE5\u5177\uFF0C\u96C6\u6210 Git \u4FE1\u606F\u548C\u5B9E\u65F6\u4F7F\u7528\u91CF\u8DDF\u8E2A",
cometixMenuOptions: {
installOrUpdate: "\u5B89\u88C5\u6216\u66F4\u65B0",
printConfig: "\u6253\u5370\u9ED8\u8BA4\u914D\u7F6E",
customConfig: "\u81EA\u5B9A\u4E49\u914D\u7F6E",
back: "\u8FD4\u56DE\u4E3B\u83DC\u5355"
},
cometixMenuDescriptions: {
installOrUpdate: "\u4F7F\u7528 npm \u5B89\u88C5\u6216\u66F4\u65B0 CCometixLine",
printConfig: "\u663E\u793A\u5F53\u524D CCometixLine \u914D\u7F6E",
customConfig: "\u8FDB\u5165 CCometixLine \u7684 TUI \u914D\u7F6E\u6A21\u5F0F"
}
};
const common = {
// Basic
multiSelectHint: "\uFF08\u7A7A\u683C\u9009\u62E9\uFF0Ca\u5168\u9009\uFF0Ci\u53CD\u9009\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09",
yes: "\u662F",
no: "\u5426",
skip: "\u8DF3\u8FC7",
cancelled: "\u64CD\u4F5C\u5DF2\u53D6\u6D88",
error: "\u9519\u8BEF",
complete: "\u{1F389} \u914D\u7F6E\u5B8C\u6210\uFF01\u4F7F\u7528 'claude' \u547D\u4EE4\u5F00\u59CB\u4F53\u9A8C\u3002",
none: "\u65E0",
notConfigured: "\u672A\u914D\u7F6E",
spaceToSelectReturn: "- \u7A7A\u683C\u9009\u62E9\uFF0C\u56DE\u8F66\u63D0\u4EA4",
enterChoice: "\u8BF7\u8F93\u5165\u9009\u9879\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF08\u4E0D\u533A\u5206\u5927\u5C0F\u5199\uFF09",
invalidChoice: "\u65E0\u6548\u9009\u62E9\u3002\u8BF7\u8F93\u5165\u6709\u6548\u9009\u9879\u3002",
goodbye: "\u{1F44B} \u611F\u8C22\u4F7F\u7528 ZCF\uFF01\u518D\u89C1\uFF01",
returnToMenu: "\u8FD4\u56DE\u4E3B\u83DC\u5355\uFF1F",
back: "\u8FD4\u56DE"
};
const configuration = {
existingConfig: "\u68C0\u6D4B\u5230\u5DF2\u6709\u914D\u7F6E\u6587\u4EF6\uFF0C\u5982\u4F55\u5904\u7406\uFF1F",
backupAndOverwrite: "\u5907\u4EFD\u5E76\u8986\u76D6\u5168\u90E8",
updateDocsOnly: "\u4EC5\u66F4\u65B0\u5DE5\u4F5C\u6D41\u76F8\u5173md\u5E76\u5907\u4EFD\u65E7\u914D\u7F6E",
mergeConfig: "\u5408\u5E76\u914D\u7F6E",
backupSuccess: "\u5DF2\u5907\u4EFD\u6240\u6709\u914D\u7F6E\u6587\u4EF6\u5230",
copying: "\u6B63\u5728\u590D\u5236\u914D\u7F6E\u6587\u4EF6...",
configSuccess: "\u914D\u7F6E\u6587\u4EF6\u5DF2\u590D\u5236\u5230",
noExistingConfig: "\u672A\u627E\u5230\u73B0\u6709\u914D\u7F6E\u3002\u8BF7\u5148\u8FD0\u884C `zcf`\u3002",
updatingPrompts: "\u6B63\u5728\u66F4\u65B0 Claude Code \u8BB0\u5FC6\u6587\u6863...",
// Model configuration
selectDefaultModel: "\u9009\u62E9\u9ED8\u8BA4\u6A21\u578B",
modelConfigSuccess: "\u9ED8\u8BA4\u6A21\u578B\u5DF2\u914D\u7F6E",
existingModelConfig: "\u68C0\u6D4B\u5230\u5DF2\u6709\u6A21\u578B\u914D\u7F6E",
currentModel: "\u5F53\u524D\u6A21\u578B",
modifyModel: "\u662F\u5426\u4FEE\u6539\u6A21\u578B\u914D\u7F6E\uFF1F",
keepModel: "\u4FDD\u6301\u5F53\u524D\u6A21\u578B\u914D\u7F6E",
defaultModelOption: "\u9ED8\u8BA4 - \u8BA9 Claude Code \u81EA\u52A8\u9009\u62E9",
opusModelOption: "Opus - \u53EA\u7528opus\uFF0Ctoken\u6D88\u8017\u9AD8\uFF0C\u614E\u7528",
opusPlanModelOption: "OpusPlan - Opus\u505A\u8BA1\u5212\uFF0Csonnet\u7F16\u5199\u4EE3\u7801\uFF0C\u63A8\u8350",
modelConfigured: "\u9ED8\u8BA4\u6A21\u578B\u5DF2\u914D\u7F6E",
// AI memory configuration
selectMemoryOption: "\u9009\u62E9\u914D\u7F6E\u9009\u9879",
configureAiLanguage: "\u914D\u7F6E AI \u8F93\u51FA\u8BED\u8A00",
configureAiPersonality: "\u914D\u7F6E AI \u4E2A\u6027\u98CE\u683C",
aiLanguageConfigured: "AI \u8F93\u51FA\u8BED\u8A00\u5DF2\u914D\u7F6E",
existingLanguageConfig: "\u68C0\u6D4B\u5230\u5DF2\u6709 AI \u8F93\u51FA\u8BED\u8A00\u914D\u7F6E",
currentLanguage: "\u5F53\u524D\u8BED\u8A00",
modifyLanguage: "\u662F\u5426\u4FEE\u6539 AI \u8F93\u51FA\u8BED\u8A00\uFF1F",
keepLanguage: "\u4FDD\u6301\u5F53\u524D\u8BED\u8A00\u914D\u7F6E",
// AI personality
selectAiPersonality: "\u9009\u62E9 AI \u4E2A\u6027\u98CE\u683C",
customPersonalityHint: "\u5B9A\u4E49\u4F60\u81EA\u5DF1\u7684\u4E2A\u6027",
enterCustomPersonality: "\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u4E2A\u6027\u63CF\u8FF0",
personalityConfigured: "AI \u4E2A\u6027\u5DF2\u914D\u7F6E",
existingPersonality: "\u68C0\u6D4B\u5230\u5DF2\u6709 AI \u4E2A\u6027\u914D\u7F6E",
currentPersonality: "\u5F53\u524D\u4E2A\u6027",
modifyPersonality: "\u662F\u5426\u4FEE\u6539 AI \u4E2A\u6027\u914D\u7F6E\uFF1F",
keepPersonality: "\u4FDD\u6301\u5F53\u524D\u4E2A\u6027\u914D\u7F6E",
directiveCannotBeEmpty: "\u6307\u4EE4\u4E0D\u80FD\u4E3A\u7A7A",
languageRequired: "\u8BED\u8A00\u4E3A\u5FC5\u586B\u9879",
// Cache
confirmClearCache: "\u786E\u8BA4\u6E05\u9664\u6240\u6709 ZCF \u504F\u597D\u7F13\u5B58\uFF1F",
cacheCleared: "ZCF \u7F13\u5B58\u5DF2\u6E05\u9664",
noCacheFound: "\u672A\u627E\u5230\u7F13\u5B58\u6587\u4EF6",
// Environment and permissions
selectEnvPermissionOption: "\u8BF7\u9009\u62E9\u914D\u7F6E\u9009\u9879",
importRecommendedEnv: "\u5BFC\u5165 ZCF \u63A8\u8350\u73AF\u5883\u53D8\u91CF",
importRecommendedEnvDesc: "\u9690\u79C1\u4FDD\u62A4\u53D8\u91CF\u7B49",
importRecommendedPermissions: "\u5BFC\u5165 ZCF \u63A8\u8350\u6743\u9650\u914D\u7F6E",
importRecommendedPermissionsDesc: "\u51E0\u4E4E\u5168\u90E8\u6743\u9650\uFF0C\u51CF\u5C11\u9891\u7E41\u8BF7\u6C42\u6743\u9650\uFF0C\u5371\u9669\u64CD\u4F5C\u7531\u89C4\u5219\u9650\u5236",
openSettingsJson: "\u6253\u5F00 settings.json \u624B\u52A8\u914D\u7F6E",
openSettingsJsonDesc: "\u9AD8\u7EA7\u7528\u6237\u81EA\u5B9A\u4E49",
envImportSuccess: "\u73AF\u5883\u53D8\u91CF\u5DF2\u5BFC\u5165",
permissionsImportSuccess: "\u6743\u9650\u914D\u7F6E\u5DF2\u5BFC\u5165",
openingSettingsJson: "\u6B63\u5728\u6253\u5F00 settings.json...",
// JSON config related
invalidConfiguration: "\u914D\u7F6E\u65E0\u6548",
failedToParseJson: "\u89E3\u6790 JSON \u6587\u4EF6\u5931\u8D25:",
failedToBackupConfig: "\u5907\u4EFD\u914D\u7F6E\u5931\u8D25",
failedToReadTemplateSettings: "\u8BFB\u53D6\u6A21\u677F\u8BBE\u7F6E\u5931\u8D25",
failedToMergeSettings: "\u5408\u5E76\u8BBE\u7F6E\u5931\u8D25",
preservingExistingSettings: "\u4FDD\u7559\u73B0\u6709\u8BBE\u7F6E",
memoryDirNotFound: "\u672A\u627E\u5230\u8BB0\u5FC6\u76EE\u5F55",
failedToSetOnboarding: "\u8BBE\u7F6E\u5F15\u5BFC\u6807\u5FD7\u5931\u8D25",
fixWindowsMcp: "\u4FEE\u590D Windows MCP \u914D\u7F6E\uFF1F"
};
const errors = {
// General errors
failedToSetOnboarding: "\u8BBE\u7F6E\u5165\u95E8\u5B8C\u6210\u6807\u5FD7\u5931\u8D25\uFF1A",
failedToWriteMcpConfig: "\u5199\u5165 MCP \u914D\u7F6E\u5931\u8D25\uFF1A",
templateDirNotFound: "\u6A21\u677F\u76EE\u5F55\u672A\u627E\u5230\uFF1A",
failedToReadTemplateSettings: "\u8BFB\u53D6\u6A21\u677F settings.json \u5931\u8D25\uFF1A",
failedToMergeSettings: "\u5408\u5E76 settings.json \u5931\u8D25\uFF1A",
preservingExistingSettings: "\u7531\u4E8E\u5408\u5E76\u9519\u8BEF\uFF0C\u4FDD\u7559\u73B0\u6709\u7684 settings.json",
// File system errors
failedToReadFile: "\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A",
failedToWriteFile: "\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A",
failedToCopyFile: "\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A",
failedToRemoveFile: "\u5220\u9664\u6587\u4EF6\u5931\u8D25\uFF1A",
failedToReadDirectory: "\u8BFB\u53D6\u76EE\u5F55\u5931\u8D25\uFF1A",
failedToGetStats: "\u83B7\u53D6\u6587\u4EF6\u72B6\u6001\u5931\u8D25\uFF1A",
sourceDirNotExist: "\u6E90\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A",
memoryDirNotFound: "\u8BB0\u5FC6\u76EE\u5F55\u672A\u627E\u5230\uFF1A",
// JSON config errors
invalidConfiguration: "\u914D\u7F6E\u65E0\u6548\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u503C",
failedToParseJson: "\u89E3\u6790 JSON \u6587\u4EF6\u5931\u8D25\uFF1A",
failedToBackupConfig: "\u5907\u4EFD\u914D\u7F6E\u6587\u4EF6\u5931\u8D25\uFF1A",
invalidEnvConfig: "\u65E0\u6548\u7684 env \u914D\u7F6E\uFF1A\u671F\u671B\u5BF9\u8C61",
invalidApiUrl: "\u65E0\u6548\u7684 ANTHROPIC_BASE_URL\uFF1A\u671F\u671B\u5B57\u7B26\u4E32",
invalidApiKey: "\u65E0\u6548\u7684 ANTHROPIC_API_KEY\uFF1A\u671F\u671B\u5B57\u7B26\u4E32",
invalidAuthToken: "\u65E0\u6548\u7684 ANTHROPIC_AUTH_TOKEN\uFF1A\u671F\u671B\u5B57\u7B26\u4E32",
invalidPermissionsConfig: "\u65E0\u6548\u7684\u6743\u9650\u914D\u7F6E\uFF1A\u671F\u671B\u5BF9\u8C61",
invalidPermissionsAllow: "\u65E0\u6548\u7684 permissions.allow\uFF1A\u671F\u671B\u6570\u7EC4",
// MCP errors
failedToAddOnboardingFlag: "\u6DFB\u52A0 hasCompletedOnboarding \u6807\u5FD7\u5931\u8D25\uFF1A",
// AI personality errors
failedToApplyPersonality: "\u5E94\u7528\u4E2A\u6027\u6307\u4EE4\u5931\u8D25\uFF1A"
};
const installation = {
installPrompt: "\u68C0\u6D4B\u5230 Claude Code \u672A\u5B89\u88C5\uFF0C\u662F\u5426\u81EA\u52A8\u5B89\u88C5\uFF1F",
installing: "\u6B63\u5728\u5B89\u88C5 Claude Code...",
installSuccess: "Claude Code \u5B89\u88C5\u6210\u529F",
alreadyInstalled: "Claude Code \u5DF2\u5B89\u88C5",
installFailed: "Claude Code \u5B89\u88C5\u5931\u8D25",
npmNotFound: "npm \u672A\u5B89\u88C5\u3002\u8BF7\u5148\u5B89\u88C5 Node.js \u548C npm\u3002",
// Termux specific
termuxDetected: "\u68C0\u6D4B\u5230 Termux \u73AF\u5883",
termuxInstallHint: "\u5728 Termux \u4E2D\uFF0C\u8BF7\u5148\u8FD0\u884C: pkg install nodejs \u6216 pkg install nodejs-lts",
termuxPathInfo: "\u4F7F\u7528 Termux \u8DEF\u5F84: {path}",
termuxEnvironmentInfo: "Termux \u73AF\u5883\u901A\u8FC7 pkg \u7BA1\u7406\u5668\u63D0\u4F9B Node.js \u548C npm",
// Windows specific
windowsDetected: "\u68C0\u6D4B\u5230 Windows \u7CFB\u7EDF\uFF0C\u5C06\u81EA\u52A8\u914D\u7F6E\u517C\u5BB9\u683C\u5F0F"
};
const language = {
selectScriptLang: "\u9009\u62E9ZCF\u663E\u793A\u8BED\u8A00",
selectConfigLang: "\u9009\u62E9 Claude Code \u914D\u7F6E\u8BED\u8A00",
selectAiOutputLang: "\u9009\u62E9 AI \u8F93\u51FA\u8BED\u8A00",
aiOutputLangHint: "AI \u5C06\u4F7F\u7528\u6B64\u8BED\u8A00\u56DE\u590D\u4F60\u7684\u95EE\u9898",
enterCustomLanguage: "\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u8BED\u8A00\uFF08\u4F8B\u5982\uFF1AJapanese, French \u7B49\uFF09",
languageChanged: "\u8BED\u8A00\u5DF2\u66F4\u6539",
configLangHint: {
"zh-CN": "\u4FBF\u4E8E\u4E2D\u6587\u7528\u6237\u81EA\u5B9A\u4E49",
"en": "\u63A8\u8350\uFF0Ctoken \u6D88\u8017\u66F4\u4F4E"
},
updateConfigLangPrompt: "\u9009\u62E9\u914D\u7F6E\u8BED\u8A00",
updateConfigLangChoice: {
"zh-CN": "\u4E2D\u6587\u7248\u914D\u7F6E",
"en": "\u82F1\u6587\u7248\u914D\u7F6E"
}
};
const mcp = {
configureMcp: "\u662F\u5426\u914D\u7F6E MCP \u670D\u52A1\uFF1F",
selectMcpServices: "\u9009\u62E9\u8981\u5B89\u88C5\u7684 MCP \u670D\u52A1",
allServices: "\u5168\u90E8\u5B89\u88C5",
mcpServiceInstalled: "\u5DF2\u9009\u62E9\u7684 MCP \u670D\u52A1",
enterExaApiKey: "\u8BF7\u8F93\u5165 Exa API Key\uFF08\u53EF\u4ECE https://dashboard.exa.ai/api-keys \u83B7\u53D6\uFF09",
skipMcp: "\u8DF3\u8FC7 MCP \u914D\u7F6E",
mcpConfigSuccess: "MCP \u670D\u52A1\u5DF2\u914D\u7F6E",
mcpBackupSuccess: "\u5DF2\u5907\u4EFD\u539F\u6709 MCP \u914D\u7F6E",
fixWindowsMcp: "\u4FEE\u590D Windows MCP \u914D\u7F6E",
fixWindowsMcpDesc: "\u4FEE\u590D Windows \u5E73\u53F0 MCP \u547D\u4EE4\u914D\u7F6E\u95EE\u9898",
windowsMcpFixed: "Windows MCP \u914D\u7F6E\u5DF2\u4FEE\u590D",
configureMcpServices: "\u914D\u7F6E MCP \u670D\u52A1",
selectMcpOption: "\u9009\u62E9 MCP \u914D\u7F6E\u9009\u9879"
};
const menu = {
selectFunction: "\u8BF7\u9009\u62E9\u529F\u80FD",
menuSections: {
otherTools: "\u5176\u4ED6\u5DE5\u5177"
},
menuOptions: {
fullInit: "\u5B8C\u6574\u521D\u59CB\u5316",
importWorkflow: "\u5BFC\u5165\u5DE5\u4F5C\u6D41",
configureApiOrCcr: "\u914D\u7F6E API \u6216 CCR \u4EE3\u7406",
configureApi: "\u914D\u7F6E API",
configureMcp: "\u914D\u7F6E MCP",
configureModel: "\u914D\u7F6E\u9ED8\u8BA4\u6A21\u578B",
configureAiMemory: "\u914D\u7F6E Claude \u5168\u5C40\u8BB0\u5FC6",
configureEnvPermission: "\u5BFC\u5165\u63A8\u8350\u73AF\u5883\u53D8\u91CF\u548C\u6743\u9650\u914D\u7F6E",
configureCcr: "\u914D\u7F6E