# 变更日志 (changelog.md) > 本文档记录所有版本变更,包含功能、修复和讨论链接。 ## 使用说明 - 版本号格式:`主版本.次版本.修订版本`(如 `0.0.1`) - 第三位为00-99,超过99时增加第二位 - 每个版本包含指向讨论记录的链接 ## 未来架构想法 - [ ] 支持流式翻译输出 - [x] 添加本地缓存减少API调用 ✅ 已完成 - [ ] 实现插件系统支持自定义厂商 - [ ] 支持批量翻译文件 - [ ] 添加Web界面(可选) ## 待实现 - [ ] 实现硅基流动厂商 - [ ] 实现火山引擎厂商 - [ ] 实现国家超算厂商 - [ ] 实现Qwen厂商 - [ ] 实现OpenAI兼容厂商 - [ ] 配置文件热重载 - [ ] 翻译历史记录 ## 当前正实现 - [ ] 项目基础架构搭建 - [ ] 核心类设计实现 ## 待修复BUG - 无 ## 版本历史 ### 0.5.0 (2026-03-29) - 本地缓存功能 **类型**: 功能版本 **状态**: 已发布 **变更内容**: - ✅ 添加本地缓存模块 (internal/cache/) - ✅ 实现SQLite缓存存储层,支持高效查询和存储 - ✅ 实现缓存键生成策略(基于原文+语言对的SHA256哈希) - ✅ 修改Translator类集成缓存功能,先查缓存再调用API - ✅ 添加缓存配置到Config结构,支持自定义缓存参数 - ✅ 实现缓存管理命令:cache clear, cache stats, cache cleanup - ✅ 添加组合缓存清理策略(数量限制+时间过期) - ✅ 更新配置文件模板,添加缓存配置示例 - ✅ 更新帮助文档,添加缓存相关命令说明 **技术实现**: - 使用 `github.com/mattn/go-sqlite3` 作为SQLite驱动 - 实现缓存接口 (Cache interface),支持多种存储后端 - 缓存表包含完整字段:原文、译文、语言对、模型、Prompt、用量统计 - 自动清理过期缓存和超出数量限制的缓存 - 异步保存缓存,不阻塞翻译结果返回 **使用示例**: ```bash # 基本翻译(自动使用缓存) yoyo "Hello world" yoyo "Hello world" # 第二次调用将从缓存返回 # 缓存管理命令 yoyo cache clear # 清空翻译缓存 yoyo cache stats # 查看缓存统计信息 yoyo cache cleanup # 清理过期缓存 ``` **配置示例**: ```yaml cache: enabled: true # 是否启用缓存 max_records: 10000 # 最大缓存记录数 expire_days: 30 # 缓存过期天数 db_path: "~/.config/yoyo/cache.db" # 缓存数据库文件路径 ``` **讨论记录**: - [本地缓存功能设计](taolun.md#2026-03-29-1500-版本-050-本地缓存功能设计) **下一步**: - 完善缓存功能测试 - 添加缓存命中率统计 - 实现按语言清理缓存功能 - 优化缓存性能 --- ### 0.5.1 (2026-03-29) - 缓存功能修复 **类型**: 修复版本 **状态**: 已发布 **变更内容**: - ✅ 修复缓存清空命令中的VACUUM事务错误 - ✅ 修复缓存统计中的NULL值处理错误 - ✅ 修复缓存过期清理策略,支持expire_days=0时清理所有记录 - ✅ 添加缓存模块单元测试 - ✅ 更新版本号到v0.5.1 **修复问题**: - 缓存清空命令执行时出现"cannot VACUUM from within a transaction"错误 - 缓存统计查询在空表时出现NULL值转换错误 - 缓存过期清理策略在expire_days=0时不工作 **测试结果**: - 所有缓存模块测试通过 - 缓存命令功能正常 - 缓存集成功能正常 **下一步**: - 完善缓存功能测试 - 添加缓存命中率统计 - 实现按语言清理缓存功能 - 优化缓存性能 --- ### 0.4.0 (2026-03-29) - 管道符功能 **类型**: 功能版本 **状态**: 已发布 **变更内容**: - ✅ 添加管道符支持,允许与其他命令行工具联合使用 - ✅ 实现管道输入检测 (isPipeInput函数) - ✅ 实现从标准输入读取 (readFromStdin函数) - ✅ 添加 --quiet 和 -q 参数控制统计信息输出 - ✅ 更新帮助文档,添加管道使用示例 - ✅ 修复 content/filter.go 中的正则表达式错误 - ✅ 更新版本号到 v0.3.0 **使用示例**: ```bash # 管道翻译文件 cat file.txt | yoyo cat file.txt | yoyo --lang=en # 管道翻译命令输出 echo "Hello world" | yoyo --lang=cn # 静默模式,只输出翻译结果 echo "Hello world" | yoyo -q # 与其他命令组合使用 cat file.txt | yoyo | grep "关键词" yoyo "Hello" | wc -l ``` **讨论记录**: - [管道符功能设计](taolun.md#管道符功能设计) **下一步**: - 实现更多厂商(火山引擎、国家超算、Qwen、OpenAI兼容) - 添加配置文件路径查找机制 - 实现配置文件迁移工具 - 完善错误处理和用户体验 ### 0.3.0 (2026-03-29) - 内容过滤与代码处理 **类型**: 功能版本 **状态**: 已发布 **变更内容**: - ✅ 添加内容过滤模块 (internal/content/) - ✅ 实现基础字符过滤(移除控制字符、规范化换行符、截断超长符号) - ✅ 实现代码块和行内代码识别 - ✅ 实现代码注释智能识别(支持 JS/TS/Java/Python/Go/HTML 等 30+ 语言) - ✅ 添加 go-enry 依赖实现编程语言智能检测 - ✅ 添加 SkipKeywords 配置项,默认保留 TODO/FIXME/HACK 等关键词不翻译 - ✅ 集成内容处理到 Translator 模块 **新增文件**: - `internal/content/content.go` - 模块入口 - `internal/content/filter.go` - 基础字符过滤 - `internal/content/parser.go` - 内容解析器和语言检测 **配置更新**: - `configs/config.yaml` 新增 `skip_keywords` 配置项 - 支持用户自定义不翻译的关键词列表 **使用示例**: ```bash # 翻译包含代码的文档,自动识别代码和注释 yoyo "这是一个文档 ```js // TODO: fix this ```" # 代码块保持不变,只翻译注释中的词汇 # TODO: 修复这个 ``` **讨论记录**: - [内容过滤与代码处理设计](taolun.md#内容过滤与代码处理设计) **下一步**: - 实现更多厂商(火山引擎、国家超算、Qwen、OpenAI兼容) - 添加配置文件路径查找机制 - 实现配置文件迁移工具 - 完善错误处理和用户体验 ### 0.2.0 (2026-03-29) - 语言支持和配置向导 **类型**: 功能版本 **状态**: 开发中 **变更内容**: - ✅ 添加语言代码智能解析模块 (internal/lang) - ✅ 支持 `--lang` 参数指定目标语言 - ✅ 支持多种语言代码格式(标准BCP47、别名、中文名称) - ✅ 实现 onboard 交互式配置向导 - ✅ 更新配置结构添加语言字段 - ✅ 添加 survey 库依赖用于交互式界面 - ✅ 改进CLI命令行接口 - ✅ 添加语言模块单元测试 **新增文件**: - `internal/lang/lang.go` - 语言代码解析模块 - `internal/lang/lang_test.go` - 语言模块测试 - `internal/onboard/onboard.go` - 配置向导实现 **支持的语言代码**: - 标准格式: zh-CN, zh-TW, en-US, en-GB, ja, ko, es, fr, de 等 - 简短别名: cn(中文), en(英文), jp(日文), kr(韩文) 等 - 中文名称: chinese(中文), english(英文), japanese(日文) 等 **使用示例**: ```bash # 基本翻译 yoyo "Hello world" yoyo --lang=cn "Hello world" yoyo --lang=en "你好世界" yoyo --lang=zh-TW "Hello world" # 配置向导 yoyo onboard yoyo onboard --force ``` **讨论记录**: - [语言代码解析设计](taolun.md#语言代码解析设计) - [onboard配置向导](taolun.md#onboard配置向导) **下一步**: - 实现更多厂商(火山引擎、国家超算、Qwen、OpenAI兼容) - 添加配置文件路径查找机制 - 实现配置文件迁移工具 - 完善错误处理和用户体验 ### 0.0.3 (2026-03-29) - 环境变量加载修复 **类型**: 修复版本 **状态**: 开发中 **变更内容**: - ✅ 修复环境变量加载问题 - ✅ 添加godotenv依赖 - ✅ 更新memory.md记录踩坑经验 - ✅ 测试CLI基本功能 **讨论记录**: - [环境变量加载修复](taolun.md#2026-03-29-0000-版本-003-环境变量加载修复) **下一步**: - 实现更多厂商 - 添加更多测试 - 完善错误处理 ### 0.0.2 (2026-03-28) - 核心架构实现 **类型**: 功能版本 **状态**: 开发中 **变更内容**: - ✅ 实现Config配置类(internal/config/config.go) - ✅ 实现Provider接口和工厂模式(internal/provider/) - ✅ 实现硅基流动厂商(internal/provider/siliconflow.go) - ✅ 实现Translator核心翻译类(internal/translator/) - ✅ 实现Prompt管理器(internal/translator/prompt.go) - ✅ 创建CLI入口点(cmd/yoyo/main.go) - ✅ 添加配置文件模板(configs/config.yaml) - ✅ 添加单元测试(internal/config/config_test.go) - ✅ 初始化Git仓库和版本标签 **讨论记录**: - [实现核心架构](taolun.md#2026-03-28-2350-版本-002-实现核心架构) **下一步**: - 实现其他厂商(火山引擎、国家超算、Qwen、OpenAI兼容) - 添加更多测试 - 实现批量翻译功能 - 添加翻译历史记录 - 实现配置文件热重载 ### 0.0.1 (2026-03-28) - 项目初始化 **类型**: 初始化版本 **状态**: 开发中 **变更内容**: - ✅ 确定技术栈为Go语言 - ✅ 设计OOP架构(Config、Provider、Translator) - ✅ 制定开发规范(taolun.md、changelog.md、memory.md、why.md) - ✅ 确定分支策略(main、dev) - ✅ 设计项目结构 - ✅ 创建项目初衷文档(why.md) **讨论记录**: - [确定技术栈](taolun.md#2026-03-28-2230-版本-001-确定技术栈) - [设计OOP架构](taolun.md#2026-03-28-2300-版本-001-设计oop架构) - [制定开发规范](taolun.md#2026-03-28-2330-版本-001-制定开发规范) - [创建项目初衷文档](taolun.md#2026-03-28-2345-版本-001-创建项目初衷文档) **下一步**: - 创建项目目录结构 - 初始化Go模块 - 实现Config类 - 实现Provider接口 - 用户填写why.md内容 --- ## 版本号管理规则 ### 版本号格式 `主版本.次版本.修订版本`(例如:`1.2.3`) ### 更新规则 1. **主版本**(第一位):重大架构变更、不兼容更新 2. **次版本**(第二位):新功能、重要特性 3. **修订版本**(第三位):小修复、优化(00-99) ### 更新流程 1. 完成开发并测试 2. 更新changelog.md 3. 更新taolun.md(如有讨论) 4. 更新memory.md(如有新知识) 5. 更新版本号 6. 提交到dev分支 7. 测试通过后合并到main 8. 创建版本标签:`git tag v0.0.1` ### 示例版本递增 - `0.0.1` → `0.0.2`:小修复 - `0.0.99` → `0.1.0`:新功能(修订版本溢出) - `1.2.3` → `2.0.0`:重大架构变更