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