/Release/v2.0.6
一键配置 OpenCode 使用 DMXAPI 服务的跨平台工具。
Claude 模型使用 /v1/messages 接口测试联通性
调用 config.ClassifyModel 区分 provider 类型,claude 模型走
Anthropic Messages API(/v1/messages,含 max_tokens 字段),
其余模型保持原有 /v1/chat/completions 逻辑不变。
全面代码审查和多平台兼容性修复
api/test.go: Google Gemini 测试加 Authorization: Bearer 头(修复
认证缺失 bug),URL 改用 /v1/models/ 与 opencode 配置一致
- api/test.go: OpenAI Responses API 测试增加响应体解析和 output
非空验证,与其他 provider 行为一致
- api/test.go: GeminiResponse.Candidates 改为具名结构体 GeminiCandidate
- api/test.go: 新增 OpenAIResponsesResponse 响应结构体
- menu_term_darwin.go / menu_term_linux.go: VMIN=1,VTIME=0 改为
VMIN=0,VTIME=1(100ms 超时),修复孤立 ESC 按键导致菜单阻塞问题
- menu_unix.go: 处理 VTIME 超时返回 n=0 的情况
- validator.go: 移除从未被调用的 ValidateInput 函数
- collector.go: 移除因 ValidateInput 删除而孤立的 UserInput 类型
修复终端阻塞、URL重复拼接和配置文件权限三个高优先级bug
menu_term_darwin.go: VMIN=0/VTIME=1 超时模式,避免单独按ESC时read永久阻塞
- config.go: 使用 TrimSuffix 防止 URL 已含 /v1 时重复拼接为 /v1/v1
- writer.go: 配置文件和备份文件权限从 0644 改为 0600,防止 API Key 泄露
修复URL双重拼接、API响应大小限制、配置合并等7个问题
H1/H2: NewTester和配置摘要中规范化URL,避免/v1双重拼接
- M1: opencode --version 使用 exec.CommandContext 加 10 秒超时
- M2: API 响应读取使用 io.LimitReader 限制最大 1MB
- M3: WriteAuth 写入前先备份现有认证文件
- M4: 配置合并使用 map[string]interface{} 保留未知 JSON 字段
- M5: 统一使用包级别共享 stdinReader 避免 bufio.Reader 冲突
Gemini API URL 路径从 v1 改为 v1beta
v1beta 端点支持更多 Gemini 模型和最新功能,与 opencode 配置保持一致。
Google provider baseURL 使用 /v1beta 而非 /v1
@ai-sdk/google SDK 默认 baseURL 为 /v1beta,拼接请求时直接追加
/models/{model}:generateContent,不会自动添加版本前缀。
将 ProviderGoogle 的 baseURL 从 /v1 改为 /v1beta 以匹配 SDK 预期。
BaseURL 规范化支持 /v1beta 等版本后缀
新增 NormalizeBaseURL 函数,使用正则统一去除 URL 末尾的版本路径后缀
(/v1、/v1beta、/v1beta1 等),再根据 provider 类型拼接正确的版本路径,
避免用户传入带版本后缀的 URL 时产生双重拼接问题。
重新设计CLI界面风格并修复macOS终端方向键失效
消除bufio.Reader与raw mode的stdin争抢,修复macOS方向键
移除包级别 stdinReader 避免启动时即缓冲 os.Stdin 数据
- collector.go 各函数改为局部创建 bufio.Reader
- selectMenuImpl 进入 raw mode 后先 drainStdin() 清除残留数据
- makeTerminalRaw 设置后读回 termios 验证 VMIN/VTIME 正确性
修复 7 个多平台兼容性问题
问题1 - display.go: 新增 supportsUnicode() 检测(Windows 检查代码页65001),
symbol() 函数为旧版 CMD 提供 ASCII 降级映射(✓→[OK] ✗→[X] 等),
PrintBanner 在不支持 Unicode 时使用纯 ASCII 横幅
问题2 - display.go: supportsColor() 新增 COLORTERM、Git Bash/MSYS2(MSYSTEM)、
xterm/cygwin TERM 前缀检测,完整覆盖 Windows PowerShell 及常见终端
问题3 - display_windows.go: 首次调用 supportsColor() 时通过 SetConsoleMode
主动启用 ENABLE_VIRTUAL_TERMINAL_PROCESSING(Windows 10+),
display_nonwindows.go 提供空操作存根;sync.Once 缓存检测结果
问题4 - collector.go: 各 huh 调用增加 isTTYError() 判断,失败时 fallback
到 bufio 文本输入(fallbackInput)和数字选择(fallbackSelect)
问题5 - collector.go: 使用 mattn/go-isatty 在调用 huh 前检测 TTY,
非 TTY 环境(管道/脚本)直接走 fallback 分支
问题6 - path.go: 确认 opencode 在 Windows 上同样使用 ~/.config/opencode/
路径(XDG 约定),保持现状并补充注释说明
问题7 - path.go + writer.go: 将 Windows 权限警告移至 EnsureDir,
sync.Once 保证全程只输出一次,移除 writer.go 中的重复输出
| 平台 | 架构 | 文件 |
|---|---|---|
| Windows | x64 | opencode-dmxapi-v2.0.6-windows-amd64.exe |
| Linux | x64 | opencode-dmxapi-v2.0.6-linux-amd64 |
| Linux | ARM64 | opencode-dmxapi-v2.0.6-linux-arm64 |
| macOS | Intel | opencode-dmxapi-v2.0.6-macos-amd64 |
| macOS | Apple Silicon | opencode-dmxapi-v2.0.6-macos-arm64 |
# 下载后直接运行
.\opencode-dmxapi-v2.0.6-windows-amd64.exe
chmod +x opencode-dmxapi-v2.0.6-linux-amd64
./opencode-dmxapi-v2.0.6-linux-amd64
chmod +x opencode-dmxapi-v2.0.6-linux-arm64
./opencode-dmxapi-v2.0.6-linux-arm64
chmod +x opencode-dmxapi-v2.0.6-macos-amd64
# 移除隔离属性(首次运行需要)
xattr -dr com.apple.quarantine opencode-dmxapi-v2.0.6-macos-amd64
./opencode-dmxapi-v2.0.6-macos-amd64
chmod +x opencode-dmxapi-v2.0.6-macos-arm64
# 移除隔离属性(首次运行需要)
xattr -dr com.apple.quarantine opencode-dmxapi-v2.0.6-macos-arm64
./opencode-dmxapi-v2.0.6-macos-arm64