|
| 1 | +# Release v1.1.1 - oho add 命令稳定性修复 |
| 2 | + |
| 3 | +**发布日期**: 2026-03-21 |
| 4 | +**版本类型**: Bug Fix Release |
| 5 | +**上一版本**: v1.1.0 |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## 🎯 发布重点 |
| 10 | + |
| 11 | +本次发布专注于提升 `oho add` 命令的稳定性和可靠性,修复了文件附件处理的边界条件 bug,并添加了完整的单元测试覆盖。 |
| 12 | + |
| 13 | +--- |
| 14 | + |
| 15 | +## 🐛 Bug 修复 |
| 16 | + |
| 17 | +### 1. detectMimeType Panic 修复 (严重) |
| 18 | + |
| 19 | +**问题**: 当文件没有扩展名时,`detectMimeType` 函数会触发 `slice bounds out of range` panic |
| 20 | + |
| 21 | +**修复前**: |
| 22 | +```go |
| 23 | +ext := strings.ToLower(filePath[strings.LastIndex(filePath, "."):]) |
| 24 | +// 如果文件无扩展名,LastIndex 返回 -1,导致 slice bounds out of range [-1:] |
| 25 | +``` |
| 26 | + |
| 27 | +**修复后**: |
| 28 | +```go |
| 29 | +dotIndex := strings.LastIndex(filePath, ".") |
| 30 | +if dotIndex == -1 { |
| 31 | + return "application/octet-stream" |
| 32 | +} |
| 33 | +ext := strings.ToLower(filePath[dotIndex:]) |
| 34 | +``` |
| 35 | + |
| 36 | +**影响**: 使用 `oho add` 发送无扩展名文件附件时不再崩溃 |
| 37 | + |
| 38 | +### 2. ClientInterface 接口完善 |
| 39 | + |
| 40 | +**问题**: `PostWithQuery` 方法未在接口中定义,导致 Mock 客户端无法正确模拟 |
| 41 | + |
| 42 | +**修复**: |
| 43 | +- 在 `ClientInterface` 中添加 `PostWithQuery` 方法定义 |
| 44 | +- 更新 `MockClient` 添加 `PostWithQueryFunc` 注入支持 |
| 45 | +- `add.go` 改为使用 `ClientInterface` 而非具体 `*Client` 类型 |
| 46 | + |
| 47 | +**影响**: 提升代码可测试性,支持更好的单元测试隔离 |
| 48 | + |
| 49 | +--- |
| 50 | + |
| 51 | +## ✅ 新增测试 (770 行) |
| 52 | + |
| 53 | +新增 `oho/cmd/add/add_test.go` 文件,包含 10 个测试函数: |
| 54 | + |
| 55 | +| 测试函数 | 覆盖场景 | 用例数 | |
| 56 | +|---------|---------|-------| |
| 57 | +| `TestConvertModel` | 模型格式转换 (nil/string/Model) | 5 | |
| 58 | +| `TestDetectMimeType` | MIME 类型检测 (各种扩展名) | 19 | |
| 59 | +| `TestCreateSession` | 会话创建 (成功/失败/API 错误) | 6 | |
| 60 | +| `TestSendMessage` | 消息发送 (简单/附件/no-reply/错误) | 7 | |
| 61 | +| `TestRunAddSuccess` | 完整流程集成测试 | 4 | |
| 62 | +| `TestRaceConditionScenarios` | 竞态条件模拟 | 3 | |
| 63 | +| `TestTimeoutScenarios` | 超时边界测试 | 2 | |
| 64 | +| `TestErrorPropagation` | 错误传播验证 | 3 | |
| 65 | +| `TestPartialFailureHandling` | 部分失败处理 | 1 | |
| 66 | +| `TestJSONOutputFormat` | 输出格式验证 | 2 | |
| 67 | + |
| 68 | +**总计**: 52 个测试用例,覆盖 `oho add` 命令所有关键路径 |
| 69 | + |
| 70 | +--- |
| 71 | + |
| 72 | +## 📚 新增文档 |
| 73 | + |
| 74 | +### PROJECT_SUMMARY_ZH.md (664 行) |
| 75 | + |
| 76 | +完整的项目摘要文档,包含: |
| 77 | + |
| 78 | +1. **项目概述** - 目标、定位、核心功能、技术栈 |
| 79 | +2. **架构设计** - 目录结构、模块划分、数据流和调用关系 |
| 80 | +3. **核心实现分析** - `oho add` 流程、HTTP 客户端、错误处理 |
| 81 | +4. **测试覆盖** - 测试结构、新增用例、覆盖率分析 |
| 82 | +5. **已知问题和修复** - 间歇性失败分析、bug 修复记录 |
| 83 | +6. **使用指南** - 安装步骤、命令示例、故障排查 |
| 84 | + |
| 85 | +--- |
| 86 | + |
| 87 | +## 📦 文件变更 |
| 88 | + |
| 89 | +| 文件 | 变更类型 | 说明 | |
| 90 | +|------|---------|------| |
| 91 | +| `oho/cmd/add/add.go` | 修改 | 修复 detectMimeType,使用 ClientInterface | |
| 92 | +| `oho/cmd/add/add_test.go` | 新增 | 770 行单元测试 | |
| 93 | +| `oho/internal/client/client_interface.go` | 修改 | 添加 PostWithQuery 方法 | |
| 94 | +| `oho/internal/client/client_mock.go` | 修改 | 添加 PostWithQueryFunc mock | |
| 95 | +| `oho/PROJECT_SUMMARY_ZH.md` | 新增 | 664 行项目摘要 | |
| 96 | + |
| 97 | +**统计**: 5 个文件,+1458 行,-10 行 |
| 98 | + |
| 99 | +--- |
| 100 | + |
| 101 | +## 🧪 测试状态 |
| 102 | + |
| 103 | +``` |
| 104 | +✅ 所有现有测试通过 (18 个包) |
| 105 | +✅ 新增 10 个测试函数 |
| 106 | +✅ 边界条件 bug 已修复 |
| 107 | +✅ 测试覆盖率达到生产就绪标准 |
| 108 | +``` |
| 109 | + |
| 110 | +### 测试运行命令 |
| 111 | + |
| 112 | +```bash |
| 113 | +cd oho |
| 114 | +make test |
| 115 | +# 或 |
| 116 | +go test -v ./cmd/add/... |
| 117 | +``` |
| 118 | + |
| 119 | +--- |
| 120 | + |
| 121 | +## 🚀 升级指南 |
| 122 | + |
| 123 | +### 安装/更新 |
| 124 | + |
| 125 | +```bash |
| 126 | +# 方法一:快速安装 |
| 127 | +curl -sSL https://raw.githubusercontent.com/tornado404/opencode_cli/master/oho/install.sh | bash |
| 128 | + |
| 129 | +# 方法二:源码编译 |
| 130 | +git clone https://github.com/tornado404/opencode_cli.git |
| 131 | +cd opencode_cli/oho |
| 132 | +make build |
| 133 | +sudo cp bin/oho /usr/local/bin/oho |
| 134 | +``` |
| 135 | + |
| 136 | +### 验证安装 |
| 137 | + |
| 138 | +```bash |
| 139 | +oho --version |
| 140 | +# 应显示:oho version v1.1.1 |
| 141 | +``` |
| 142 | + |
| 143 | +--- |
| 144 | + |
| 145 | +## 📋 推荐升级人群 |
| 146 | + |
| 147 | +以下用户**强烈建议**升级到此版本: |
| 148 | + |
| 149 | +- ✅ 需要使用 `oho add` 发送文件附件的用户 |
| 150 | +- ✅ 在自动化脚本中使用 `oho add` 的用户 |
| 151 | +- ✅ 遇到过间歇性失败的用户 |
| 152 | +- ✅ 需要高测试覆盖率保障的团队 |
| 153 | + |
| 154 | +--- |
| 155 | + |
| 156 | +## 🔧 技术细节 |
| 157 | + |
| 158 | +### 版本信息 |
| 159 | + |
| 160 | +``` |
| 161 | +版本:v1.1.1 |
| 162 | +提交:6db26d9 |
| 163 | +类型:Annotated Tag |
| 164 | +兼容性:完全向后兼容 |
| 165 | +``` |
| 166 | + |
| 167 | +### Git 历史 |
| 168 | + |
| 169 | +``` |
| 170 | +commit 6db26d9 (HEAD -> master, tag: v1.1.1) |
| 171 | +Author: AI Agent |
| 172 | +Date: Sat Mar 21 2026 |
| 173 | +
|
| 174 | + fix: oho add 命令间歇性失败修复 + 完整单元测试覆盖 |
| 175 | + |
| 176 | + 主要变更: |
| 177 | + - 修复 detectMimeType 在无扩展名文件上的 panic |
| 178 | + - 添加 ClientInterface.PostWithQuery 方法 |
| 179 | + - 更新 MockClient 支持 PostWithQueryFunc |
| 180 | + - 将 add.go 改为使用 ClientInterface |
| 181 | + |
| 182 | + 新增测试 (770 行): |
| 183 | + - 10 个测试函数,52 个测试用例 |
| 184 | + - 覆盖 oho add 命令所有关键路径 |
| 185 | + |
| 186 | + 新增文档 (664 行): |
| 187 | + - PROJECT_SUMMARY_ZH.md 项目完整摘要 |
| 188 | +``` |
| 189 | + |
| 190 | +--- |
| 191 | + |
| 192 | +## ⚠️ 已知限制 |
| 193 | + |
| 194 | +- 无自动重试机制(待改进项) |
| 195 | +- 无连接池复用(待改进项) |
| 196 | +- 无 debug 日志输出(待改进项) |
| 197 | + |
| 198 | +这些限制不影响当前功能,将在未来版本中逐步改进。 |
| 199 | + |
| 200 | +--- |
| 201 | + |
| 202 | +## 📞 问题反馈 |
| 203 | + |
| 204 | +如遇到问题,请提交 Issue 并附上: |
| 205 | + |
| 206 | +1. `oho --version` 输出 |
| 207 | +2. 完整的错误信息 |
| 208 | +3. 复现步骤 |
| 209 | +4. 相关日志(使用 `--json` 输出) |
| 210 | + |
| 211 | +--- |
| 212 | + |
| 213 | +## 👥 致谢 |
| 214 | + |
| 215 | +感谢所有测试和反馈此版本问题的用户! |
| 216 | + |
| 217 | +--- |
| 218 | + |
| 219 | +**Full Changelog**: https://github.com/tornado404/opencode_cli/compare/v1.1.0...v1.1.1 |
0 commit comments