Repository navigation
Releases: OnesoftQwQ/opencode-go-copilot
Releases · OnesoftQwQ/opencode-go-copilot
Release list
v1.13.0
Google Gemini 原生协议支持
- 新增 Google 协议适配器:新增
googleapiMode 与GoogleApi,按 GeminigenerateContent/streamGenerateContent协议发送contents、systemInstruction、generationConfig与tools。Gemini 4 Argon(gemini-4-argon-contributor)不再被错误地发往 OpenAI Chat Completions 而返回ModelProtocolUnsupported(#143)。 - 按模型选择推理端点:优先使用目录中模型级
provider.api,Gemini 走/inference/go/google/v1beta,Anthropic/OpenAI 模型也分别落到各自的协议 base。 - 思考与工具调用:支持 Gemini
thinkingLevel低/中/高(默认中,不提供禁用思考)、thought推理流、图片输入与工具结果图片;回放工具调用时注入skip_thought_signature_validator,满足 Gemini 3+ 的签名校验。 - 完整接入:聊天流式输出、原生/高级 Token 指示器、图片代理多轮、Git 提交消息生成均已支持 Google 协议。
用量与模型列表修复
- 固定控制面端点:套餐用量与模型列表请求不再复用目录中的推理 base,始终访问
https://opencode.ai/zen/go/v1/,修复目录 API 指向/inference后持续 404、状态栏显示Go --的问题(#144)。 - 模型发现恢复:
enableAutoModelDiscovery的/models过滤重新生效。
测试与文档
- 新增 Google 协议与控制面 base 回归测试,扩展 API mode、视觉历史测试。
- 同步更新 README 与
docs/中的协议、端点和测试说明。 - 刷新硬编码模型目录快照,纳入 Gemini 4 Argon。
修复 Issue
v1.12.2
Anthropic 签名 thinking 块回放
- 修复第二轮 400:Claude 5.x(Haiku 5.5)要求回放的
thinking块必须带有效signature,此前扩展会为每条 assistant 消息伪造一个无签名的 thinking 块,导致第二轮请求返回 400messages.N.content.M.thinking.signature: Field required(#137 后续)。 - 签名跨轮持久化:流式
signature_delta到达时,把{thinking, signature}写入私有application/vnd.opencodego.anthropic-thinking+jsonDataPart;下一轮由convertMessages()重建带签名的 thinking 块置于内容最前,VS Code 的LanguageModelThinkingPart只携带文本的问题由此绕过。 - 不再伪造思考内容:无签名的普通 thinking 文本一律丢弃(不再注入
"Next step."),includeReasoningInRequest=false时连签名块也丢弃。
测试与文档
- 新增
scripts/test-anthropic-thinking-signature.mjs覆盖 DataPart 编解码与convertMessages()回放闭环;同步修正既有的 Anthropic 视觉历史与工具结果合并测试。 - 对 OpenCode Go 实测通过:真实流式轮次捕获签名 → 下一轮重建带签名 thinking 块 → 返回 200。
- 同步更新
docs/reference.md、docs/architecture.md、docs/build.md。
v1.12.1
Claude Haiku 5.5 支持
- 修复 400 报错:新增
claude-haiku-5-5模型覆盖项,将其标记为自适应思考(thinkingMode: "adaptive")与 Anthropic 协议。Claude 5.x 系列已移除旧版thinking: { type: "enabled", budget_tokens }形式,会返回 400"thinking.type.enabled" is not supported for this model;现在请求改发thinking: { type: "adaptive" },思考强度通过顶层output_config.effort(low/medium/high/xhigh/max)控制(#137)。 - 统一思考字段构建:新增
buildAnthropicThinkingConfig(),主请求路径与视觉代理轮次共用同一逻辑;旧版 Anthropic 模型仍保持enabled+budget_tokens行为,supportsThinkingParam=false的模型继续省略该字段。 - 关闭思考:
thinking: { type: "disabled" }在默认强度下可用,Git 提交消息生成路径不受影响。
测试与文档
- 新增
claude-haiku-5-5自适应思考回归断言,覆盖请求体形状与旧模型兼容性;并对 OpenCode Go 实测通过(非流式、流式、各强度档均返回 200)。 - 同步更新
docs/reference.md、docs/architecture.md、docs/build.md。
v1.12.0
移除 OpenCode Zen 免费模型支持
- 移除原因:OpenCode Zen 免费层现已拒绝来自 OpenCode 之外环境的请求(返回
403 FreeTierError),免费模型在本插件中已无法使用(#134),因此不再保留该功能。 - 设置项移除:删除
opencodego.enableZenFreeModels设置。此前已启用该设置的用户升级后模型选择器中不再出现 Zen 模型。 - 选择器不再有 Zen 分组:移除 OpenCode Zen 分组、
(Zen)名称后缀与免费模型工具提示;扩展现在只保留opencode-go一个服务商,模型列表全部来自 OpenCode Go。 - 移除 Zen 专用逻辑:Zen 免费模型专用的
required → auto工具选择降级、401「已结束免费使用」错误提示、请求时的 Go/Zen 分流、以及modelsDev.load日志中的 Zen 模型计数一并删除。
兜底目录快照精简
- 快照只保留 Go 服务商:
src/hardcodedModelList.ts移除 Zen 服务商的完整模型元数据(约 4700 行 / 127 KB),官方目录与镜像均不可达时的兜底行为不变。
工具与文档同步
- 修复周度模型检查:
scripts/check-new-models.mjs改为从硬编码快照读取模型 ID(此前引用的src/models.ts/src/zen/zenModels.ts早已不存在,脚本实际已失效),自动创建的检查 Issue 模板同步更新。 - README(中英)、
docs/architecture.md、docs/reference.md、AGENTS.md、设置说明与欢迎页文案已同步移除 Zen 相关内容。
v1.11.1
GLM-5.3 / GLM-5.3-Flash 请求修复
- 不再发送上游拒绝的
thinking字段:GLM-5.3 与 GLM-5.3-Flash 的思考强制开启,其上游路由不接受thinking字段(HTTP 400json: unknown field "thinking"),此前发往这两个模型的请求会直接失败。新增supportsThinkingParam模型能力位(默认true),标记为false的模型请求体省略thinking,思考强度仅通过reasoning_effort(low/high/max)控制。 - 模型选择器不再提供「禁用思考」档:这两个模型无法关闭思考,选择器只保留 low/high/max 三档,避免选择无效档位后触发 400;此前已选择「禁用思考」的会话会按模型默认强度正常思考,不再报错。
- 修复覆盖 OpenAI Chat Completions、Anthropic Messages 与视觉代理三条请求构建路径,并新增
scripts/test-thinking-param.mjs回归测试(字段省略、reasoning_effort保留、档位枚举),已接入npm test。 - 同步更新 README 功能清单、状态栏截图与架构/参考/构建文档。
v1.11.0
推理代理 Base URL 支持
- 新增代理 Base URL 配置:通过新的
opencodego.inferenceBaseUrl设置(machine 作用域、不随设置同步),可将推理请求的 Base URL 覆盖为本地代理/网关地址,适用于可观测性、多 Key 路由、压缩等场景。聊天请求(OpenAI Chat Completions、OpenAI Responses、Anthropic Messages 三种协议)与 Git 提交消息生成均会经过代理;用量查询与模型列表请求仍访问官方地址,不受影响。(#126) - 新增「设置代理 Base URL」命令:在命令面板运行
OpenCodeGo: 设置代理 Base URL即可配置。命令会先在命令框显示兼容性提示——本功能不是用于接入第三方提供商,而是用于接入本地代理服务,代理的协议、路径、模型 ID 与请求头必须与官方端点完全一致,且使用代理后遇到问题时需先排除代理因素再提交 Issue;选择「我已知晓」后才进入输入框,留空可清除覆盖、恢复官方端点。 - 覆盖优先级明确:用户覆盖 > 模型目录 Base URL > 官方默认地址,且输入时即校验 URL 合法性。
- 统一 Base URL 安全校验:新增共享的
validateBaseUrl()(Provider、提交生成与命令输入框三处共用),拒绝非 HTTP(S) 与非法 URL;纯 HTTP 仅允许 localhost/私有网络地址,远程端点强制 HTTPS;同时修复了非法 Base URL 可能引发未捕获异常的问题。 - 新增
scripts/test-base-url.mjs测试,覆盖覆盖读取与 HTTP 安全检查规则。
打包优化
- 清理 VSIX 发布内容:
.vscodeignore新增排除运行时日志(*.log)、.pi-subagents/、docs/、AGENTS.md、锁文件与eslint.config.mjs等非运行所需文件,发布包不再携带本地产物。
v1.10.3
会话路由可靠性修复
- 自动逃离故障后端 (#123):v1.10.2 起 OpenCode Go 按会话亲和路由分发请求,当某个会话被分配到故障后端时,重试始终打到同一台坏机器,导致该对话永久失败(相同报错反复出现,换开场白才能恢复)。现在扩展会识别上游提供方错误(HTTP 400
api_error/上游请求失败/响应非 JSON,及 5xx),自动轮换会话 ID 并立即重试一次——换会话 ID 即换路由后端;轮换结果持久化,后续轮次自动留在健康后端。鉴权失败(401)、限流(429)与内容审核拒绝不参与轮换,维持原有处理。 - 手动重置会话路由:新增命令
opencodego.resetSessionRouting(重置会路由),一键清空全部会话登记,各对话的下一次请求即以新会话路由,无需再靠修改开场白逃离被污染的路由。
会话 ID 机制升级
- 登记制会话 ID:v1.10.2 的会话 ID 由“模型 + 首条用户消息”哈希派生,相同开场白的不同对话会共享会话 ID(如多个对话都以“你好”开头)。现改为登记制:对话首轮请求使用随机 UUID,输出完成后以“模型 + 首条用户消息 + 首轮回复”为键登记,后续轮次从重发的对话历史中提取相同键查回同一 ID——同一对话跨轮次严格稳定,相同开场白的不同对话自然分流,会话缓存优化不再互相干扰。
会话登记持久化
- 重启不再失效:会话登记表持久化存储于扩展全局状态,重启 VS Code 后进行中的对话仍保持原有会话 ID 与路由亲和。条目按“最后使用时间”做 3 天滑动有效期:活跃对话每次使用自动续期,连续 3 天未使用的对话过期并按新会话重新登记;登记表容量上限 512 条(LRU 淘汰)。
日志增强
- 会话 ID 可追踪:
request.start日志新增sessionId与sessionRegistered字段(标记本次请求是复用已登记会话还是新会话);会话轮换日志记录轮换前后的 ID(视觉代理轮次额外标记);扩展激活时记录会话登记恢复数量与过期数量,便于排查路由问题。
v1.10.2
OpenCode Go API 兼容性
- 请求携带
x-opencode-session会话头:OpenCode Go 自 2026-09-05 起强制要求所有推理请求携带该头部,缺失时请求会被拒绝;服务端用它将同一会话的请求路由到同一后端,并优化 prompt 缓存命中。扩展现在会在所有推理请求上自动携带该头部,覆盖三种 API 模式(openai / openai-responses / anthropic)、图片代理的多轮请求以及 Git 提交消息生成,无需任何配置。由于 VS Code 不向语言模型提供方暴露会话标识,聊天请求的会话 ID 由目标模型 ID 与会话首条用户消息确定性派生(SHA-256,格式化为标准 UUID):同一会话跨轮次保持稳定,不同会话互不相同;纯图片等无文本锚点的请求回退为随机 UUID。Git 提交消息生成等无会话上下文的请求每次使用独立随机 UUID。
视觉代理修复
- 按厂商前缀 ID 解析视觉模型:
opencodego.visionProxyModel配置存储的是裸模型 ID(如qwen3.8-plus),而 VS Code 暴露的LanguageModelChat.id是带厂商前缀的完整标识(如opencodego/qwen3.8-plus),此前用裸 ID 精确查找永远匹配不到,导致图片代理报“模型未找到”。现在解析顺序为:先精确匹配完整 ID(兼容用户显式配置vendor/id),再按裸 ID 后缀匹配,并优先选择本扩展自身厂商注册的模型,以确定性地消除同名模型歧义(如tokenrhythm/kimi-k2.6与opencodego/kimi-k2.6)。
v1.10.1
### 视觉代理(Vision Proxy)修复
- 按厂商前缀 ID 解析视觉模型:opencodego.visionProxyModel 配置存储的是裸模型 ID(如 qwen3.8-plus),而 VS Code 暴露的 LanguageModelChat.id 是带厂商前缀的完整标识(如 opencodego/qwen3.8-plus),此前用裸 ID 精确查找永远匹配不到。新增 resolveVisionModel(),解析顺序为:先精确匹配完整 ID(用户可显式配置 vendor/id),再按裸 ID 后缀匹配,并优先选择本扩展自身厂商注册的模型,以确定性地消除同名模型歧义(如 tokenrhythm/kimi-k2.6 与 opencodego/kimi-k2.6)。
模型目录与显示优化
- 模型后缀与提示文案调整:将 OpenCode Zen 免费模型的名称后缀由
Free改为(Zen),使模型在仅显示名称的界面(如自定义 Agent 模型选择)中来源更明确。 - Zen 模型训练数据提示:为 OpenCode Zen 模型新增 tooltip,提示其免费但可能收集数据用于训练,并附官方文档链接;同步补充中文翻译。
- Go 模型列表一致性:在目录构建阶段过滤掉会被路由到 Zen 端点的
-free后缀 ID(如ox-alpha-free),避免用户在 Go 选择器中选择后于 Zen 端点返回 401。
兼容性增强
- 容忍缺失 MIME 类型并遵循工具模式:在 MIME 边界将运行时
LanguageModelDataPart.mimeType视为未知类型,缺失值不再进入字符串方法或导致 Token 计数崩溃;工具选择优先读取官方ProvideLanguageModelChatResponseOptions.toolMode,同时保留modelOptions.toolMode作为旧版兼容回退。
文档重构
- 拆分 AGENTS.md 避免巨型文件:将原先单体的 AGENTS.md 拆分为 architecture.md(架构说明)、build.md(编译构建)、reference.md(文件索引与函数定义),AGENTS.md 仅保留开发规范与代码约定,并补充对应引用链接。
CI 流程改进
- PR 编译检查:新增
pr-compile.yml工作流,在 Pull Request 上执行编译检查,提前拦截类型/编译错误。 - master 更新时快进 dev:新增
sync-master-to-dev.yml工作流,当master分支更新时自动将dev分支快进,保持分支同步。
v1.10.0
OpenAI Responses API 协议支持
- 全新 Responses 协议适配器:新增对 OpenAI Responses API(
/responses)的完整支持,包括输入消息与图片转换、扁平函数工具定义(strict: false)、推理过程与加密推理内容处理、token 用量上报及类型化 SSE 流解析。适配器与原有 OpenAI 兼容 Chat Completions、Anthropic Messages 两个协议并行工作,互不影响。 - 按目录适配器自动路由:扩展读取 models.dev 模型条目中的适配器包(模型级
provider.npm,缺失时继承服务商npm)自动选择请求协议——@ai-sdk/openai走 Responses、@ai-sdk/openai-compatible走 Chat Completions、@ai-sdk/anthropic走 Anthropic;旧目录缺失适配器信息时才用 family 启发式兜底。修复了 Grok 4.5 等 Responses 原生模型被错误发送到/chat/completions而失败的问题(#104)。
无状态推理与工具续传
- 加密推理内容续传:聊天与视觉代理请求使用
store: false,流式返回的reasoning.encrypted_content会保存到内部数据片段中,并在后续轮次(视觉代理追问)及跨会话历史中自动回放,保持推理上下文与工具调用的连续性。 - 视觉代理多轮支持:图片代理(
ask_image)在 Responses 协议下可进行多轮追问,工具调用与结果按function_call/function_call_output标准格式重建。
Git 提交消息生成
- 按协议生成:Git 提交消息生成会根据所选模型的协议自动选择 OpenAI Chat、OpenAI Responses 或 Anthropic 适配器;Responses 路径使用顶层
instructions与类型化输入,且仅在目录声明支持时才会为提交生成关闭思考。
思考开关修复
- 恢复可关思考能力:Chat Completions / Anthropic 协议下可通过
thinking: { type: "disabled" }关闭思考的模型(如 deepseek-v4 系列、glm-5.x、kimi-k3 等)重新获得"禁用思考"选项,不再被强制常开。 - Responses 思考开关按能力显隐:Responses 原生且未声明
none/disabled推理档位的模型(如 Grok 4.5)不再被发送无效的reasoning.effort: "none"(避免端点拒绝),模型选择器中也不再显示无效的"禁用思考"档位。
测试与质量
- 新增协议测试:新增 API 模式解析、Responses 适配器(消息/图片/工具/请求体/SSE/用量/加密推理回放)与视觉历史三协议转换测试脚本,并整合进
npm test一键运行。