feat: Implement CLAUDE.md Manager View with file tree, viewer, and metadata actions

- Added main JavaScript functionality for CLAUDE.md management including file loading, rendering, and editing capabilities.
- Created a test HTML file to validate the functionality of the CLAUDE.md manager.
- Introduced CLI generation examples and documentation for rules creation via CLI.
- Enhanced error handling and notifications for file operations.
This commit is contained in:
catlog22
2025-12-14 23:08:36 +08:00
parent 0529b57694
commit d91477ad80
30 changed files with 7961 additions and 298 deletions

View File

@@ -107,6 +107,8 @@ const i18n = {
'empty.noLiteSessionsText': 'No sessions found in .workflow/.{type}/',
'empty.noMcpServers': 'No MCP servers configured for this project',
'empty.addMcpServersHint': 'Add servers from the available list below',
'empty.noGlobalMcpServers': 'No global MCP servers configured',
'empty.globalServersHint': 'Global servers are available to all projects from ~/.claude.json',
'empty.noAdditionalMcp': 'No additional MCP servers found in other projects',
'empty.noHooks': 'No hooks configured for this project',
'empty.createHookHint': 'Create a hook to automate actions on tool usage',
@@ -197,6 +199,7 @@ const i18n = {
'cli.setDefault': 'Set Default',
'cli.default': 'Default',
'cli.install': 'Install',
'cli.uninstall': 'Uninstall',
'cli.initIndex': 'Init Index',
'cli.geminiDesc': 'Google AI for code analysis',
'cli.qwenDesc': 'Alibaba AI assistant',
@@ -205,6 +208,80 @@ const i18n = {
'cli.codexLensDescFull': 'Full-text code search engine',
'cli.semanticDesc': 'AI-powered code understanding',
'cli.semanticDescFull': 'Natural language code search',
// CodexLens Configuration
'codexlens.config': 'CodexLens Configuration',
'codexlens.status': 'Status',
'codexlens.installed': 'Installed',
'codexlens.notInstalled': 'Not Installed',
'codexlens.indexes': 'Indexes',
'codexlens.currentWorkspace': 'Current Workspace',
'codexlens.indexStoragePath': 'Index Storage Path',
'codexlens.whereIndexesStored': 'where indexes are stored',
'codexlens.currentPath': 'Current Path',
'codexlens.newStoragePath': 'New Storage Path',
'codexlens.pathPlaceholder': 'e.g., /path/to/indexes or ~/.codexlens/indexes',
'codexlens.pathInfo': 'Supports ~ for home directory. Changes take effect immediately.',
'codexlens.migrationRequired': 'Migration Required',
'codexlens.migrationWarning': 'After changing the path, existing indexes will need to be re-initialized for each workspace.',
'codexlens.actions': 'Actions',
'codexlens.initializeIndex': 'Initialize Index',
'codexlens.cleanAllIndexes': 'Clean All Indexes',
'codexlens.installCodexLens': 'Install CodexLens',
'codexlens.testSearch': 'Test Search',
'codexlens.testFunctionality': 'test CodexLens functionality',
'codexlens.textSearch': 'Text Search',
'codexlens.fileSearch': 'File Search',
'codexlens.symbolSearch': 'Symbol Search',
'codexlens.searchPlaceholder': 'Enter search query (e.g., function name, file path, code snippet)',
'codexlens.runSearch': 'Run Search',
'codexlens.results': 'Results',
'codexlens.resultsCount': 'results',
'codexlens.saveConfig': 'Save Configuration',
'codexlens.searching': 'Searching...',
'codexlens.searchCompleted': 'Search completed',
'codexlens.searchFailed': 'Search failed',
'codexlens.enterQuery': 'Please enter a search query',
'codexlens.configSaved': 'Configuration saved successfully',
'codexlens.pathEmpty': 'Index directory path cannot be empty',
'codexlens.cleanConfirm': 'Are you sure you want to clean all CodexLens indexes? This cannot be undone.',
'codexlens.cleaning': 'Cleaning indexes...',
'codexlens.cleanSuccess': 'All indexes cleaned successfully',
'codexlens.cleanFailed': 'Failed to clean indexes',
'codexlens.loadingConfig': 'Loading configuration...',
// Semantic Search Configuration
'semantic.settings': 'Semantic Search Settings',
'semantic.configDesc': 'Configure LLM enhancement for semantic indexing',
'semantic.llmEnhancement': 'LLM Enhancement',
'semantic.llmDesc': 'Use LLM to generate code summaries for better semantic search',
'semantic.primaryTool': 'Primary LLM Tool',
'semantic.fallbackTool': 'Fallback Tool',
'semantic.batchSize': 'Batch Size',
'semantic.timeout': 'Timeout',
'semantic.file': 'file',
'semantic.files': 'files',
'semantic.enhanceInfo': 'LLM enhancement generates code summaries and keywords for each file, improving semantic search accuracy.',
'semantic.enhanceCommand': 'Run',
'semantic.enhanceAfterEnable': 'after enabling to process existing files.',
'semantic.runEnhanceNow': 'Run Enhance Now',
'semantic.viewStatus': 'View Status',
'semantic.testSearch': 'Test Semantic Search',
'semantic.searchPlaceholder': 'Enter semantic query (e.g., authentication logic, error handling)',
'semantic.runSearch': 'Run Semantic Search',
'semantic.close': 'Close',
'semantic.enabled': 'enabled',
'semantic.disabled': 'disabled',
'semantic.toolSetTo': 'Primary LLM tool set to',
'semantic.fallbackSetTo': 'Fallback tool set to',
'semantic.none': 'none',
'semantic.llmEnhancement': 'LLM Enhancement',
'semantic.batchSetTo': 'Batch size set to',
'semantic.timeoutSetTo': 'Timeout set to',
'semantic.minute': 'minute',
'semantic.minutes': 'minutes',
'semantic.enableFirst': 'Please enable LLM Enhancement first',
'cli.settings': 'CLI Execution Settings',
'cli.promptFormat': 'Prompt Format',
'cli.promptFormatDesc': 'Format for multi-turn conversation concatenation',
@@ -296,9 +373,18 @@ const i18n = {
'updateClaudeMd.cancel': 'Cancel',
// MCP Manager
'mcp.currentProject': 'Current Project MCP Servers',
'mcp.currentAvailable': 'Current Available MCP',
'mcp.projectAvailable': 'Current Available MCP',
'mcp.newProjectServer': 'New Project Server',
'mcp.newServer': 'New Server',
'mcp.newGlobalServer': 'New Global Server',
'mcp.copyInstallCmd': 'Copy Install Command',
'mcp.installCmdCopied': 'Install command copied to clipboard',
'mcp.installCmdFailed': 'Failed to copy install command',
'mcp.serversConfigured': 'servers configured',
'mcp.serversAvailable': 'servers available',
'mcp.globalAvailable': '全局可用 MCP',
'mcp.globalServersFrom': '个服务器来自 ~/.claude.json',
'mcp.enterprise': 'Enterprise MCP Servers',
'mcp.enterpriseManaged': 'Managed',
'mcp.enterpriseReadOnly': 'servers (read-only)',
@@ -315,21 +401,28 @@ const i18n = {
'mcp.noMcpServers': 'No MCP servers',
'mcp.add': 'Add',
'mcp.addToProject': 'Add to Project',
'mcp.installToProject': 'Install to project',
'mcp.installToGlobal': 'Install to global',
'mcp.removeFromProject': 'Remove from project',
'mcp.removeConfirm': 'Remove MCP server "{name}" from this project?',
'mcp.removeGlobal': 'Remove from global scope',
'mcp.removeGlobalConfirm': 'Remove global MCP server "{name}"? This will affect all projects.',
'mcp.readOnly': 'Read-only',
'mcp.usedIn': 'Used in {count} project',
'mcp.usedInPlural': 'Used in {count} projects',
'mcp.availableToAll': 'Available to all projects from ~/.claude.json',
'mcp.managedByOrg': 'Managed by organization (highest priority)',
'mcp.variables': 'variables',
// MCP Create Modal
'mcp.createTitle': 'Create MCP Server',
'mcp.form': 'Form',
'mcp.json': 'JSON',
'mcp.serverName': 'Server Name',
'mcp.serverNamePlaceholder': 'e.g., my-mcp-server',
'mcp.scope': 'Scope',
'mcp.scopeProject': 'Project - Only this project',
'mcp.scopeGlobal': 'Global - All projects (~/.claude.json)',
'mcp.command': 'Command',
'mcp.commandPlaceholder': 'e.g., npx, uvx, node, python',
'mcp.arguments': 'Arguments (one per line)',
@@ -653,6 +746,30 @@ const i18n = {
'skills.deleteError': 'Failed to delete skill',
'skills.editNotImplemented': 'Edit feature coming soon',
'skills.createNotImplemented': 'Create feature coming soon',
'skills.createSkill': 'Create Skill', 'skills.sourceFolder': 'Source Folder', 'skills.sourceFolderPlaceholder': 'Path to skill folder', 'skills.sourceFolderHint': 'Select a folder containing a valid SKILL.md file', 'skills.sourceFolderRequired': 'Source folder path is required', 'skills.customName': 'Custom Name', 'skills.customNamePlaceholder': 'Leave empty to use skill name from SKILL.md', 'skills.customNameHint': 'Optional: Override the skill name', 'skills.validate': 'Validate', 'skills.import': 'Import', 'skills.validating': 'Validating...', 'skills.validSkill': 'Valid Skill', 'skills.invalidSkill': 'Invalid Skill', 'skills.validateFirst': 'Please validate the skill folder first', 'skills.created': 'Skill "{name}" created successfully', 'skills.createError': 'Failed to create skill', 'skills.validationError': 'Validation failed', 'skills.enterFolderPath': 'Enter skill folder path', 'skills.name': 'Name',
'skills.createMode': 'Creation Mode',
'skills.importFolder': 'Import Folder',
'skills.importFolderHint': 'Import existing skill folder',
'skills.cliGenerate': 'CLI Generate',
'skills.cliGenerateHint': 'Generate using AI',
'skills.generationType': 'Generation Type',
'skills.fromDescription': 'From Description',
'skills.fromDescriptionHint': 'Describe what you need',
'skills.fromTemplate': 'From Template',
'skills.comingSoon': 'Coming soon',
'skills.skillName': 'Skill Name',
'skills.skillNamePlaceholder': 'e.g., code-review, testing-helper',
'skills.skillNameHint': 'Choose a descriptive name for the skill',
'skills.skillNameRequired': 'Skill name is required',
'skills.descriptionPlaceholder': 'Describe what this skill should help with...\nExample: Help review code for security vulnerabilities and best practices',
'skills.descriptionRequired': 'Description is required',
'skills.descriptionGenerateHint': 'Be specific about what the skill should do',
'skills.generating': 'Generating skill via CLI... This may take a few minutes.',
'skills.generated': 'Skill "{name}" generated successfully',
'skills.generateError': 'Failed to generate skill',
'skills.generate': 'Generate',
'skills.cliGenerateInfo': 'AI will generate a complete skill based on your description',
'skills.cliGenerateTimeHint': 'Generation may take a few minutes depending on complexity',
// Rules
'nav.rules': 'Rules',
@@ -679,9 +796,116 @@ const i18n = {
'rules.deleteError': 'Failed to delete rule',
'rules.editNotImplemented': 'Edit feature coming soon',
'rules.createNotImplemented': 'Create feature coming soon',
'rules.createRule': 'Create Rule',
'rules.location': 'Location',
'rules.fileName': 'File Name',
'rules.fileNameHint': 'Must end with .md',
'rules.fileNameRequired': 'File name is required',
'rules.fileNameMustEndMd': 'File name must end with .md',
'rules.subdirectory': 'Subdirectory',
'rules.subdirectoryHint': 'Optional: Organize rules into subdirectories',
'rules.conditionalRule': 'Conditional Rule',
'rules.conditionalHint': 'Apply this rule only to specific file paths',
'rules.addPath': 'Add Path',
'rules.contentPlaceholder': 'Enter rule content in Markdown format...',
'rules.contentHint': 'Use Markdown to write rule instructions for Claude',
'rules.contentRequired': 'Content is required',
'rules.created': 'Rule "{name}" created successfully',
'rules.createError': 'Failed to create rule',
'rules.createMode': 'Creation Mode',
'rules.manualInput': 'Manual Input',
'rules.manualInputHint': 'Write content directly',
'rules.cliGenerate': 'CLI Generate',
'rules.cliGenerateHint': 'Auto-generate via AI',
'rules.generationType': 'Generation Type',
'rules.fromDescription': 'From Description',
'rules.fromTemplate': 'From Template',
'rules.fromCodeExtract': 'Extract from Code',
'rules.description': 'Description',
'rules.descriptionPlaceholder': 'Describe the rule purpose and instructions...',
'rules.descriptionHint': 'AI will generate rule content based on your description',
'rules.descriptionRequired': 'Description is required',
'rules.extractScope': 'Analysis Scope',
'rules.extractScopeHint': 'File patterns to analyze (e.g., src/**/*.ts)',
'rules.extractScopeRequired': 'Analysis scope is required',
'rules.extractFocus': 'Focus Areas',
'rules.extractFocusHint': 'Comma-separated aspects to focus on (e.g., naming, error-handling)',
'rules.cliGenerating': 'Generating rule via CLI (this may take a few minutes)...',
// CLAUDE.md Manager
'nav.claudeManager': 'CLAUDE.md',
'title.claudeManager': 'CLAUDE.md Manager',
'claudeManager.title': 'CLAUDE.md Files',
'claudeManager.files': 'files',
'claudeManager.userLevel': 'User Level',
'claudeManager.projectLevel': 'Project Level',
'claudeManager.moduleLevel': 'Module Level',
'claudeManager.noFile': 'No CLAUDE.md file',
'claudeManager.noModules': 'No module CLAUDE.md files',
'claudeManager.selectFile': 'Select a file to view',
'claudeManager.noMetadata': 'Select a file to see metadata',
'claudeManager.fileInfo': 'File Information',
'claudeManager.level': 'Level',
'claudeManager.level_user': 'User (~/.claude/)',
'claudeManager.level_project': 'Project (.claude/)',
'claudeManager.level_module': 'Module',
'claudeManager.path': 'Path',
'claudeManager.size': 'Size',
'claudeManager.modified': 'Modified',
'claudeManager.statistics': 'Statistics',
'claudeManager.lines': 'Lines',
'claudeManager.words': 'Words',
'claudeManager.characters': 'Characters',
'claudeManager.actions': 'Actions',
'claudeManager.loadError': 'Failed to load CLAUDE.md files',
'claudeManager.refreshed': 'Files refreshed successfully',
'claudeManager.unsavedChanges': 'You have unsaved changes. Discard them?',
'claudeManager.saved': 'File saved successfully',
'claudeManager.saveError': 'Failed to save file',
// CLI Sync (used in claude-manager.js)
'claude.cliSync': 'CLI Auto-Sync',
'claude.tool': 'Tool',
'claude.mode': 'Mode',
'claude.syncButton': 'Sync with CLI',
'claude.syncing': 'Analyzing with {tool}...',
'claude.syncSuccess': '{file} synced successfully',
'claude.syncError': 'Sync failed: {error}',
'claude.modeUpdate': 'Update (Smart Merge)',
'claude.modeGenerate': 'Generate (Full Replace)',
'claude.modeAppend': 'Append',
'claude.searchPlaceholder': 'Search files...',
'claude.viewModeClaude': 'CLAUDE.md Only',
'claude.viewModeAll': 'All Files',
'claude.createFile': 'Create File',
'claude.createDialogTitle': 'Create CLAUDE.md File',
'claude.selectLevel': 'Level',
'claude.levelUser': 'User (~/.claude/)',
'claude.levelProject': 'Project (.claude/)',
'claude.levelModule': 'Module (custom path)',
'claude.modulePath': 'Module Path',
'claude.selectTemplate': 'Template',
'claude.templateDefault': 'Default',
'claude.templateMinimal': 'Minimal',
'claude.templateComprehensive': 'Comprehensive',
'claude.deleteFile': 'Delete File',
'claude.deleteConfirm': 'Are you sure you want to delete {file}?',
'claude.deleteWarning': 'This action cannot be undone.',
'claude.copyContent': 'Copy Content',
'claude.contentCopied': 'Content copied to clipboard',
'claude.copyError': 'Failed to copy content',
'claude.modulePathRequired': 'Module path is required',
'claude.fileCreated': 'File created successfully',
'claude.createFileError': 'Failed to create file',
'claude.fileDeleted': 'File deleted successfully',
'claude.deleteFileError': 'Failed to delete file',
'claude.loadAllFilesError': 'Failed to load all files',
'claude.unsupportedFileType': 'Unsupported file type',
'claude.loadFileError': 'Failed to load file',
// Common
'common.cancel': 'Cancel',
'common.optional': '(Optional)',
'common.create': 'Create',
'common.save': 'Save',
'common.delete': 'Delete',
@@ -696,6 +920,10 @@ const i18n = {
'common.remove': 'Remove',
'common.removeFromRecent': 'Remove from recent',
'common.noDescription': 'No description',
'common.saving': 'Saving...',
'common.saveFailed': 'Failed to save',
'common.unknownError': 'Unknown error',
'common.exception': 'Exception',
},
zh: {
@@ -797,6 +1025,8 @@ const i18n = {
'empty.noLiteSessionsText': '在 .workflow/.{type}/ 目录中未找到会话',
'empty.noMcpServers': '该项目未配置 MCP 服务器',
'empty.addMcpServersHint': '从下方可用列表中添加服务器',
'empty.noGlobalMcpServers': '未配置全局 MCP 服务器',
'empty.globalServersHint': '全局服务器对所有项目可用,来自 ~/.claude.json',
'empty.noAdditionalMcp': '其他项目中未找到其他 MCP 服务器',
'empty.noHooks': '该项目未配置钩子',
'empty.createHookHint': '创建钩子以自动化工具使用时的操作',
@@ -887,6 +1117,7 @@ const i18n = {
'cli.setDefault': '设为默认',
'cli.default': '默认',
'cli.install': '安装',
'cli.uninstall': '卸载',
'cli.initIndex': '初始化索引',
'cli.geminiDesc': 'Google AI 代码分析',
'cli.qwenDesc': '阿里通义 AI 助手',
@@ -895,6 +1126,80 @@ const i18n = {
'cli.codexLensDescFull': '全文代码搜索引擎',
'cli.semanticDesc': 'AI 驱动的代码理解',
'cli.semanticDescFull': '自然语言代码搜索',
// CodexLens 配置
'codexlens.config': 'CodexLens 配置',
'codexlens.status': '状态',
'codexlens.installed': '已安装',
'codexlens.notInstalled': '未安装',
'codexlens.indexes': '索引',
'codexlens.currentWorkspace': '当前工作区',
'codexlens.indexStoragePath': '索引存储路径',
'codexlens.whereIndexesStored': '索引存储位置',
'codexlens.currentPath': '当前路径',
'codexlens.newStoragePath': '新存储路径',
'codexlens.pathPlaceholder': '例如:/path/to/indexes 或 ~/.codexlens/indexes',
'codexlens.pathInfo': '支持 ~ 表示用户目录。更改立即生效。',
'codexlens.migrationRequired': '需要迁移',
'codexlens.migrationWarning': '更改路径后,需要为每个工作区重新初始化索引。',
'codexlens.actions': '操作',
'codexlens.initializeIndex': '初始化索引',
'codexlens.cleanAllIndexes': '清理所有索引',
'codexlens.installCodexLens': '安装 CodexLens',
'codexlens.testSearch': '测试搜索',
'codexlens.testFunctionality': '测试 CodexLens 功能',
'codexlens.textSearch': '文本搜索',
'codexlens.fileSearch': '文件搜索',
'codexlens.symbolSearch': '符号搜索',
'codexlens.searchPlaceholder': '输入搜索查询(例如:函数名、文件路径、代码片段)',
'codexlens.runSearch': '运行搜索',
'codexlens.results': '结果',
'codexlens.resultsCount': '个结果',
'codexlens.saveConfig': '保存配置',
'codexlens.searching': '搜索中...',
'codexlens.searchCompleted': '搜索完成',
'codexlens.searchFailed': '搜索失败',
'codexlens.enterQuery': '请输入搜索查询',
'codexlens.configSaved': '配置保存成功',
'codexlens.pathEmpty': '索引目录路径不能为空',
'codexlens.cleanConfirm': '确定要清理所有 CodexLens 索引吗?此操作无法撤销。',
'codexlens.cleaning': '清理索引中...',
'codexlens.cleanSuccess': '所有索引已成功清理',
'codexlens.cleanFailed': '清理索引失败',
'codexlens.loadingConfig': '加载配置中...',
// Semantic Search 配置
'semantic.settings': '语义搜索设置',
'semantic.configDesc': '配置语义索引的 LLM 增强功能',
'semantic.llmEnhancement': 'LLM 增强',
'semantic.llmDesc': '使用 LLM 生成代码摘要以改进语义搜索',
'semantic.primaryTool': '主 LLM 工具',
'semantic.fallbackTool': '备用工具',
'semantic.batchSize': '批处理大小',
'semantic.timeout': '超时时间',
'semantic.file': '个文件',
'semantic.files': '个文件',
'semantic.enhanceInfo': 'LLM 增强为每个文件生成代码摘要和关键词,提高语义搜索准确度。',
'semantic.enhanceCommand': '运行',
'semantic.enhanceAfterEnable': '启用后处理现有文件。',
'semantic.runEnhanceNow': '立即运行增强',
'semantic.viewStatus': '查看状态',
'semantic.testSearch': '测试语义搜索',
'semantic.searchPlaceholder': '输入语义查询(例如:身份验证逻辑、错误处理)',
'semantic.runSearch': '运行语义搜索',
'semantic.close': '关闭',
'semantic.enabled': '已启用',
'semantic.disabled': '已禁用',
'semantic.toolSetTo': '主 LLM 工具已设置为',
'semantic.fallbackSetTo': '备用工具已设置为',
'semantic.none': '无',
'semantic.llmEnhancement': 'LLM 增强',
'semantic.batchSetTo': '批量大小已设置为',
'semantic.timeoutSetTo': '超时已设置为',
'semantic.minute': '分钟',
'semantic.minutes': '分钟',
'semantic.enableFirst': '请先启用 LLM 增强',
'cli.settings': 'CLI 调用设置',
'cli.promptFormat': '提示词格式',
'cli.promptFormatDesc': '多轮对话拼接格式',
@@ -986,9 +1291,18 @@ const i18n = {
'updateClaudeMd.cancel': '取消',
// MCP Manager
'mcp.currentProject': '当前项目 MCP 服务器',
'mcp.currentAvailable': '当前可用 MCP',
'mcp.copyInstallCmd': '复制安装命令',
'mcp.installCmdCopied': '安装命令已复制到剪贴板',
'mcp.installCmdFailed': '复制安装命令失败',
'mcp.projectAvailable': '当前可用 MCP',
'mcp.newServer': '新建服务器',
'mcp.newGlobalServer': '新建全局服务器',
'mcp.newProjectServer': '新建项目服务器',
'mcp.serversConfigured': '个服务器已配置',
'mcp.serversAvailable': 'servers available',
'mcp.globalAvailable': '全局可用 MCP',
'mcp.globalServersFrom': '个服务器来自 ~/.claude.json',
'mcp.enterprise': '企业 MCP 服务器',
'mcp.enterpriseManaged': '托管',
'mcp.enterpriseReadOnly': '个服务器(只读)',
@@ -1005,6 +1319,10 @@ const i18n = {
'mcp.noMcpServers': '无 MCP 服务器',
'mcp.add': '添加',
'mcp.addToProject': '添加到项目',
'mcp.installToProject': '安装到项目',
'mcp.installToGlobal': '安装到全局',
'mcp.installToProject': 'Install to project',
'mcp.installToGlobal': 'Install to global',
'mcp.removeFromProject': '从项目移除',
'mcp.removeConfirm': '从此项目移除 MCP 服务器 "{name}"',
'mcp.readOnly': '只读',
@@ -1343,6 +1661,30 @@ const i18n = {
'skills.deleteError': '删除技能失败',
'skills.editNotImplemented': '编辑功能即将推出',
'skills.createNotImplemented': '创建功能即将推出',
'skills.createSkill': '创建技能', 'skills.sourceFolder': '源文件夹', 'skills.sourceFolderPlaceholder': '技能文件夹路径', 'skills.sourceFolderHint': '选择包含有效 SKILL.md 文件的文件夹', 'skills.sourceFolderRequired': '源文件夹路径是必需的', 'skills.customName': '自定义名称', 'skills.customNamePlaceholder': '留空则使用 SKILL.md 中的技能名称', 'skills.customNameHint': '可选:覆盖技能名称', 'skills.validate': '验证', 'skills.import': '导入', 'skills.validating': '验证中...', 'skills.validSkill': '有效技能', 'skills.invalidSkill': '无效技能', 'skills.validateFirst': '请先验证技能文件夹', 'skills.created': '技能 "{name}" 创建成功', 'skills.createError': '创建技能失败', 'skills.validationError': '验证失败', 'skills.enterFolderPath': '输入技能文件夹路径', 'skills.name': '名称',
'skills.createMode': '创建模式',
'skills.importFolder': '导入文件夹',
'skills.importFolderHint': '导入现有技能文件夹',
'skills.cliGenerate': 'CLI生成',
'skills.cliGenerateHint': '使用AI生成',
'skills.generationType': '生成类型',
'skills.fromDescription': '从描述生成',
'skills.fromDescriptionHint': '描述你需要的功能',
'skills.fromTemplate': '从模板生成',
'skills.comingSoon': '即将推出',
'skills.skillName': '技能名称',
'skills.skillNamePlaceholder': '例如:代码审查、测试助手',
'skills.skillNameHint': '为技能选择一个描述性的名称',
'skills.skillNameRequired': '技能名称是必需的',
'skills.descriptionPlaceholder': '描述这个技能应该帮助什么...\n例如帮助审查代码的安全漏洞和最佳实践',
'skills.descriptionRequired': '描述是必需的',
'skills.descriptionGenerateHint': '具体说明技能应该做什么',
'skills.generating': '正在通过 CLI 生成技能...这可能需要几分钟。',
'skills.generated': '技能 "{name}" 生成成功',
'skills.generateError': '生成技能失败',
'skills.generate': '生成',
'skills.cliGenerateInfo': 'AI 将根据你的描述生成完整的技能',
'skills.cliGenerateTimeHint': '生成时间取决于复杂度,可能需要几分钟',
// Rules
'nav.rules': '规则',
@@ -1369,9 +1711,147 @@ const i18n = {
'rules.deleteError': '删除规则失败',
'rules.editNotImplemented': '编辑功能即将推出',
'rules.createNotImplemented': '创建功能即将推出',
'rules.createRule': '创建规则',
'rules.location': '位置',
'rules.fileName': '文件名',
'rules.fileNameHint': '必须以 .md 结尾',
'rules.fileNameRequired': '文件名是必需的',
'rules.fileNameMustEndMd': '文件名必须以 .md 结尾',
'rules.subdirectory': '子目录',
'rules.subdirectoryHint': '可选:将规则组织到子目录中',
'rules.conditionalRule': '条件规则',
'rules.conditionalHint': '仅对特定文件路径应用此规则',
'rules.addPath': '添加路径',
'rules.contentPlaceholder': '以 Markdown 格式输入规则内容...',
'rules.contentHint': '使用 Markdown 为 Claude 编写规则说明',
'rules.contentRequired': '内容是必需的',
'rules.created': '规则 "{name}" 创建成功',
'rules.createError': '创建规则失败',
'rules.createMode': '创建模式',
'rules.manualInput': '手动输入',
'rules.manualInputHint': '直接编写内容',
'rules.cliGenerate': 'CLI生成',
'rules.cliGenerateHint': '通过AI自动生成',
'rules.generationType': '生成类型',
'rules.fromDescription': '从描述生成',
'rules.fromTemplate': '从模板生成',
'rules.fromCodeExtract': '从代码提取',
'rules.description': '描述',
'rules.descriptionPlaceholder': '描述规则目的和说明...',
'rules.descriptionHint': 'AI将根据您的描述生成规则内容',
'rules.descriptionRequired': '描述是必需的',
'rules.extractScope': '分析范围',
'rules.extractScopeHint': '要分析的文件模式例如src/**/*.ts',
'rules.extractScopeRequired': '分析范围是必需的',
'rules.extractFocus': '关注领域',
'rules.extractFocusHint': '以逗号分隔的关注方面(例如:命名规范, 错误处理)',
'rules.cliGenerating': '正在通过 CLI 生成规则(可能需要几分钟)...',
// CLAUDE.md Manager
'nav.claudeManager': 'CLAUDE.md',
'title.claudeManager': 'CLAUDE.md 管理器',
'claudeManager.title': 'CLAUDE.md 文件',
'claudeManager.files': '个文件',
'claudeManager.userLevel': '用户级',
'claudeManager.projectLevel': '项目级',
'claudeManager.moduleLevel': '模块级',
'claudeManager.noFile': '无 CLAUDE.md 文件',
'claudeManager.noModules': '无模块 CLAUDE.md 文件',
'claudeManager.selectFile': '选择文件以查看',
'claudeManager.noMetadata': '选择文件以查看元数据',
'claudeManager.fileInfo': '文件信息',
'claudeManager.level': '级别',
'claudeManager.level_user': '用户级 (~/.claude/)',
'claudeManager.level_project': '项目级 (.claude/)',
'claudeManager.level_module': '模块级',
'claudeManager.path': '路径',
'claudeManager.size': '大小',
'claudeManager.modified': '修改时间',
'claudeManager.statistics': '统计信息',
'claudeManager.lines': '行数',
'claudeManager.words': '字数',
'claudeManager.characters': '字符数',
'claudeManager.actions': '操作',
'claudeManager.loadError': '加载 CLAUDE.md 文件失败',
'claudeManager.refreshed': '文件刷新成功',
'claudeManager.unsavedChanges': '您有未保存的更改。是否放弃?',
'claudeManager.saved': '文件保存成功',
'claudeManager.saveError': '文件保存失败',
// CLI Sync (used in claude-manager.js)
'claude.cliSync': 'CLI 自动同步',
'claude.tool': '工具',
'claude.mode': '模式',
'claude.syncButton': '使用 CLI 同步',
'claude.syncing': '正在使用 {tool} 分析...',
'claude.syncSuccess': '{file} 同步成功',
'claude.syncError': '同步失败:{error}',
'claude.modeUpdate': '更新(智能合并)',
'claude.modeGenerate': '生成(完全替换)',
'claude.modeAppend': '追加',
'claude.searchPlaceholder': '搜索文件...',
'claude.viewModeClaude': '仅 CLAUDE.md',
'claude.viewModeAll': '所有文件',
'claude.createFile': '创建文件',
'claude.createDialogTitle': '创建 CLAUDE.md 文件',
'claude.selectLevel': '层级',
'claude.levelUser': '用户级 (~/.claude/)',
'claude.levelProject': '项目级 (.claude/)',
'claude.levelModule': '模块级(自定义路径)',
'claude.modulePath': '模块路径',
'claude.selectTemplate': '模板',
'claude.templateDefault': '默认',
'claude.templateMinimal': '最小化',
'claude.templateComprehensive': '完整',
'claude.deleteFile': '删除文件',
'claude.deleteConfirm': '确定要删除 {file} 吗?',
'claude.deleteWarning': '此操作无法撤销。',
'claude.copyContent': '复制内容',
'claude.contentCopied': '内容已复制到剪贴板',
'claude.copyError': '复制内容失败',
'claude.modulePathRequired': '模块路径为必填项',
'claude.fileCreated': '文件创建成功',
'claude.createFileError': '文件创建失败',
'claude.fileDeleted': '文件删除成功',
'claude.deleteFileError': '文件删除失败',
'claude.loadAllFilesError': '加载所有文件失败',
'claude.unsupportedFileType': '不支持的文件类型',
'claude.loadFileError': '加载文件失败',
// Duplicate keys for compatibility
'nav.claudeManager': 'CLAUDE.md',
'title.claudeManager': 'CLAUDE.md Manager',
'claudeManager.title': 'CLAUDE.md Files',
'claudeManager.files': 'files',
'claudeManager.userLevel': 'User Level',
'claudeManager.projectLevel': 'Project Level',
'claudeManager.moduleLevel': 'Module Level',
'claudeManager.noFile': 'No CLAUDE.md file',
'claudeManager.noModules': 'No module CLAUDE.md files',
'claudeManager.selectFile': 'Select a file to view',
'claudeManager.noMetadata': 'Select a file to see metadata',
'claudeManager.fileInfo': 'File Information',
'claudeManager.level': 'Level',
'claudeManager.level_user': 'User (~/.claude/)',
'claudeManager.level_project': 'Project (.claude/)',
'claudeManager.level_module': 'Module',
'claudeManager.path': 'Path',
'claudeManager.size': 'Size',
'claudeManager.modified': 'Modified',
'claudeManager.statistics': 'Statistics',
'claudeManager.lines': 'Lines',
'claudeManager.words': 'Words',
'claudeManager.characters': 'Characters',
'claudeManager.actions': 'Actions',
'claudeManager.loadError': 'Failed to load CLAUDE.md files',
'claudeManager.refreshed': 'Files refreshed successfully',
'claudeManager.unsavedChanges': 'You have unsaved changes. Discard them?',
'claudeManager.saved': 'File saved successfully',
'claudeManager.saveError': 'Failed to save file',
// Common
'common.cancel': '取消',
'common.optional': '(可选)',
'common.create': '创建',
'common.save': '保存',
'common.delete': '删除',
@@ -1386,6 +1866,10 @@ const i18n = {
'common.remove': '移除',
'common.removeFromRecent': '从最近中移除',
'common.noDescription': '无描述',
'common.saving': '保存中...',
'common.saveFailed': '保存失败',
'common.unknownError': '未知错误',
'common.exception': '异常',
}
};