diff --git a/docs/version-sync.md b/docs/version-sync.md new file mode 100644 index 00000000..44b4ecaa --- /dev/null +++ b/docs/version-sync.md @@ -0,0 +1,86 @@ +# 版本同步机制 + +## 概述 + +为了确保项目中所有组件的版本号保持一致,我们建立了自动版本同步机制。该机制会自动将根目录 `package.json` 中的版本号同步到其他需要版本号的文件中。 + +## 自动同步的文件 + +目前自动同步版本号的文件包括: + +- `packages/extension/public/manifest.json` - 浏览器扩展清单文件 + +## 使用方法 + +### 方法1: 使用 pnpm version 命令(推荐) + +使用标准的 pnpm 版本管理命令,版本号会自动同步: + +```bash +# 升级补丁版本 (1.0.7 -> 1.0.8) +pnpm version patch + +# 升级次版本 (1.0.7 -> 1.1.0) +pnpm version minor + +# 升级主版本 (1.0.7 -> 2.0.0) +pnpm version major +``` + +### 方法2: 手动同步 + +如果直接修改了 `package.json` 中的版本号,可以手动运行同步命令: + +```bash +pnpm run version:sync +``` + +## 工作原理 + +1. **pnpm version 命令**: 更新 `package.json` 中的版本号 +2. **version 钩子**: 在创建 commit 前运行同步脚本并暂存变更 + - 执行 `pnpm run version:sync` 同步其他文件的版本号 + - 执行 `git add -A` 将所有变更添加到暂存区 +3. **同步脚本**: `scripts/sync-versions.js` 读取新的版本号并更新其他文件 +4. **git commit**: pnpm 创建包含所有版本号变更的提交和标签 + +## 添加新的同步文件 + +如需添加更多文件的版本同步,编辑 `scripts/sync-versions.js` 文件中的 `versionFiles` 数组: + +```javascript +const versionFiles = [ + { + path: 'packages/extension/public/manifest.json', + field: 'version', + description: '浏览器扩展清单文件' + }, + { + path: 'path/to/your/file.json', + field: 'version', + description: '你的文件描述' + } +]; +``` + +## 注意事项 + +- 确保目标文件是有效的 JSON 格式 +- 版本字段必须存在于目标文件中 +- 脚本会在出现错误时退出并显示错误信息 +- 所有版本号变更都会被记录到控制台 + +## 故障排除 + +如果同步失败,请检查: + +1. 目标文件是否存在且格式正确 +2. 版本字段是否存在于目标文件中 +3. 是否有文件权限问题 +4. Node.js 版本是否兼容 + +如有问题,可以直接运行同步脚本进行调试: + +```bash +node scripts/sync-versions.js +``` \ No newline at end of file diff --git a/package.json b/package.json index 028dceb1..1f9c7eec 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,9 @@ "clean:dist": "npm-run-all clean:core clean:ui clean:web clean:ext", "clean": "npm-run-all clean:dist clean:vite", "setup:install": "pnpm install", - "dev:fresh": "npm-run-all clean setup:install dev" + "dev:fresh": "npm-run-all clean setup:install dev", + "version:sync": "node scripts/sync-versions.js", + "version": "pnpm run version:sync && git add -A" }, "devDependencies": { "concurrently": "^8.2.2", diff --git a/packages/extension/src/App.vue b/packages/extension/src/App.vue index 62fd81b0..7d9bbffe 100644 --- a/packages/extension/src/App.vue +++ b/packages/extension/src/App.vue @@ -28,6 +28,16 @@ :text="$t('nav.dataManager')" @click="showDataManager = true" /> + + @@ -309,4 +319,9 @@ const handleDataImported = () => { window.location.reload() }, 1000) } + +// GitHub 链接处理 +const openGithubRepo = () => { + window.open('https://github.com/linshenkx/prompt-optimizer', '_blank') +} \ No newline at end of file diff --git a/packages/ui/src/i18n/locales/en-US.ts b/packages/ui/src/i18n/locales/en-US.ts index c08a0da0..d5962c62 100644 --- a/packages/ui/src/i18n/locales/en-US.ts +++ b/packages/ui/src/i18n/locales/en-US.ts @@ -187,8 +187,8 @@ export default { templateFormat: 'Template Format', simpleTemplate: 'Simple Template', advancedTemplate: 'Advanced Template', - simpleTemplateHint: 'Use double brace syntax for variable substitution, e.g. originalPrompt', - advancedTemplateHint: 'Supports multi-message structure and advanced template syntax', + simpleTemplateHint: 'No template technology used, template content directly serves as system prompt, user input as user message', + advancedTemplateHint: 'Supports multi-message structure and advanced template syntax, available variables: {{originalPrompt}}, {{lastOptimizedPrompt}}, {{iterateInput}}', // Message Templates messageTemplates: 'Message Templates', @@ -196,7 +196,7 @@ export default { removeMessage: 'Remove Message', moveUp: 'Move Up', moveDown: 'Move Down', - messageContentPlaceholder: 'Enter message content, supports variables like {originalPrompt}', + messageContentPlaceholder: 'Enter message content, supports variables like {{originalPrompt}}', // Roles roleSystem: 'System', diff --git a/packages/ui/src/i18n/locales/zh-CN.ts b/packages/ui/src/i18n/locales/zh-CN.ts index a0b4ae22..6f069237 100644 --- a/packages/ui/src/i18n/locales/zh-CN.ts +++ b/packages/ui/src/i18n/locales/zh-CN.ts @@ -187,8 +187,8 @@ export default { templateFormat: '模板格式', simpleTemplate: '简单模板', advancedTemplate: '高级模板', - simpleTemplateHint: '使用双花括号语法进行变量替换,如 originalPrompt', - advancedTemplateHint: '支持多消息结构和高级模板语法', + simpleTemplateHint: '不使用模板技术,直接将模板内容作为系统提示词,用户输入作为用户消息', + advancedTemplateHint: '支持多消息结构和高级模板语法,可使用变量:{{originalPrompt}}、{{lastOptimizedPrompt}}、{{iterateInput}}', // 消息模板 messageTemplates: '消息模板', @@ -196,7 +196,7 @@ export default { removeMessage: '删除消息', moveUp: '上移', moveDown: '下移', - messageContentPlaceholder: '输入消息内容,支持变量如 {originalPrompt}', + messageContentPlaceholder: '输入消息内容,支持变量如 {{originalPrompt}}', // 角色 roleSystem: '系统', diff --git a/packages/web/src/App.vue b/packages/web/src/App.vue index 54cd9557..9d821e42 100644 --- a/packages/web/src/App.vue +++ b/packages/web/src/App.vue @@ -28,6 +28,16 @@ :text="$t('nav.dataManager')" @click="showDataManager = true" /> + + @@ -309,4 +319,9 @@ const handleDataImported = () => { window.location.reload() }, 1000) } + +// GitHub 链接处理 +const openGithubRepo = () => { + window.open('https://github.com/linshenkx/prompt-optimizer', '_blank') +} \ No newline at end of file diff --git a/scripts/sync-versions.js b/scripts/sync-versions.js new file mode 100644 index 00000000..b826280b --- /dev/null +++ b/scripts/sync-versions.js @@ -0,0 +1,55 @@ +const fs = require('fs'); +const path = require('path'); + +const rootPackage = require('../package.json'); +const targetVersion = rootPackage.version; + +console.log(`🔄 开始同步版本号至 ${targetVersion}`); + +// 需要同步版本的文件列表 +const versionFiles = [ + { + path: 'packages/extension/public/manifest.json', + field: 'version', + description: '浏览器扩展清单文件' + } + // 未来可以添加更多需要同步的文件 +]; + +let syncCount = 0; +let errorCount = 0; + +versionFiles.forEach(file => { + try { + const filePath = path.resolve(__dirname, '..', file.path); + + // 检查文件是否存在 + if (!fs.existsSync(filePath)) { + console.log(`⚠️ 文件不存在: ${file.path}`); + errorCount++; + return; + } + + // 读取并更新文件 + const content = JSON.parse(fs.readFileSync(filePath, 'utf8')); + const oldVersion = content[file.field]; + + if (oldVersion === targetVersion) { + console.log(`✅ ${file.description}: ${file.path} 版本已是最新 (${targetVersion})`); + } else { + content[file.field] = targetVersion; + fs.writeFileSync(filePath, JSON.stringify(content, null, 2) + '\n'); + console.log(`✅ ${file.description}: ${file.path} 版本已更新 ${oldVersion} → ${targetVersion}`); + syncCount++; + } + } catch (error) { + console.error(`❌ 更新 ${file.path} 时出错:`, error.message); + errorCount++; + } +}); + +console.log(`\n📊 同步完成: ${syncCount} 个文件已更新, ${errorCount} 个错误`); + +if (errorCount > 0) { + process.exit(1); +} \ No newline at end of file