系列导航:这一篇同时讲 v2.2.1 和 v2.2.2 两个版本。总览在OpenCode v2 更新日志 03:v2.2.0 一篇抵十篇——桌面端重写、插件能画界面了,上一篇是OpenCode v2.2.0 实战:图像和 decision 生成怎么用。
本文目录
- 一、两天两个版本,一共 74 条
- 二、2.2.1:让它自己往下跑
- 三、2.2.2:十三小时后,四处默认值被翻过来
- 四、三条破坏性变更,只碰
@opencode/ai - 五、怎么升
- 六、一句话
一、两天两个版本,一共 74 条
先把这三个版本摆在一起看:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
43 |
|
|
|
|
31 |
|
2.2.0 到 2.2.1 隔了 44 小时 12 分,2.2.1 到 2.2.2 只隔 13 小时 26 分。后两版加起来 74 条,不到第一版的三分之一。
有个细节值得单独说:npm 上的包比 GitHub 的发布说明早三到四分钟。2.2.1 的包是 13:12:41 推上去的,说明 13:16:55 才挂出;2.2.2 是 02:40:06 推包、02:43:03 挂说明。也就是说,先有包、后有说明书——2.2.2 那次是深夜两点多,守着装的人拿到的是没有说明书的版本。核对发布时间以 npm 为准,别看 Release 页的 published_at。
另外提醒一句:官网的 changelog 页面只挂最近 10 篇。这两天连发两版,翻一页就掉出去了——想追这个系列,得自己把 GitHub Releases 当数据源。
为什么这么急?看内容就明白:2.2.1 是往前推,2.2.2 是往回拉。不是同一批活做两遍,是前一版上线半天,反馈回来了。
二、2.2.1:让它自己往下跑
43 条里,四条 Highlight 摆得挺散:/goal、image_generate、后台 shell 实时输出、新版模型选择器转正。但真正有架构意义的只有一条——/goal。
/goal 不是"让它更聪明",是"让它别停"
用法很直白:
之后你不用管,它自己往下跑;跑完了,另一个人(reviewer)读一遍目标,判断达没达成。没达成,接着跑;达成了,停。
四步一个圈,关键是第三步和第四步的分工:
- 起:目标写进这次执行,不是新开会话。
- 跑:该调工具调工具,读写文件、跑命令、开子会话,全照旧。这一步没有新东西。
- 判:会话要空闲之前,reviewer 做一次普通的
session.generate,只回两样东西——verdict和reason。 - 续:没达成,往队列里塞一步,让它在同一次执行里接着跑。
因为整个 goal 算一次执行,所以只响一次完成提示,你中途插话也插不进去。听起来像小细节,实际用起来差别很大:以前的"继续"是你在旁边盯着按回车,现在这个动作被运行时接走了。
同批还有另一个实现,最后没合。#58508 的方案是新增一个服务端事件 session.settled,让"会话真的结束了"变成一件可订阅的事;实际合进去的 #59437 没加事件,改由客户端根据已有数据自己判断。理由是改动小、不用动协议层,代价是留了个缺口——子会话还没同步回来时,"完成"会提前触发。这一点 changelog 没写,是我翻 PR 看到的。
三个刹车也顺手做了:/goal pause 停下但留着目标,/goal resume 接着跑,/goal clear 直接扔掉。TUI 里会在输入框下面显示当前状态,桌面端做成一个 composer pill。
要提醒的是:步数额度在每个空闲边界会重置。 意思是它不会因为"额度用完"自己停。你在插件里写续跑逻辑,得自己数圈数,不然它能转到天亮。
/schedule:同一个机制的另一种触发器
定时唤醒会话,三种入口:斜杠命令 /schedule、agent 工具、或者开 experimental.schedules。SDK 那边给了完整一套:client.experimental.schedule.{create,list,get,pause,resume,delete}。
它和 /goal 是一个思路的两面:/goal 是"达成了就停",/schedule 是"到点了就来"。两个都挂在同一个东西上——这次新加的 experimental.idle 钩子。插件可以在这个钩子里往队列塞输入,让会话在同一次执行里多跑一步。
这个钩子比 /goal 更值得记。它把"什么时候该继续"从模型手里交给了运行时,等于给插件开了一个"续命"的口子。GUI 插件那边同批还加了自定义 composer-pill 弹层,两件事加起来,插件能做的事从"画个界面"扩到"接管节奏"。
出图、后台 shell、模型选择器
image_generate:agent 能自己出图了。这一版要手动打开experimental.image_generate,还能用experimental.image_generate.model指定模型。另外接了三家:Codex 登录后能用 GPT Image 2,新增 MiniMax 和 Meta Muse。翻回图像与 decision 那篇看,这些正是当时缺的那块——本机一个图像模型都没有,只能读文档。- 后台 shell:桌面端活动条里点一下正在跑的 shell,直接看实时输出,还能就地停掉,不用跳出去。
- 模型选择器:重设计的那个转正成默认,带收藏和最近使用两栏,供应商能用键盘切。
/reload:桌面端加了重载配置的命令,改配置不用重启。玩插件的人会喜欢这个——之前改opencode.json得整个重启,一次几十秒。
还有一条不太显眼但挺实用的修复:供应商限流以前会被当成"上下文超长"来回重试,等于用错药。这一版把两种情况分开了。
三、2.2.2:十三小时后,四处默认值被翻过来
31 条,6 个 PR,三条 Highlight。翻一遍你会发现:没有新功能,全在改默认值。四个"原来要手动拨、现在直接给"的开关:
|
|
|
|
|
|---|---|---|---|
|
|
experimental.image_generate
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
第三行那条最容易被忽略,但它其实是这一版唯一"加东西"的地方:引用和批注原来各做各的,现在统一成一条流程——选中、引用、可选写一句,三步走完。
「问句卡片回退」值得单独说。 2.2.0 才加了"用数字键回答、多选显示成复选框",两天后默认又回到经典卡片,那套键盘优先的界面被挪进实验开关里。这不是删掉,是降级为可选项。实验开关的意义也在这儿:改坏了能一键退,而且退的时候不用发新版——设置里点一下就行。
顺带修了一串桌面端的零碎:排队中的提示在变长时不再掉帧、Markdown 的锚点链接真的会滚到对应标题、切换目录时每个标签页的时间线状态不再丢、侧栏标签溢出时关闭按钮还看得见、收件箱里「进行中」按执行开始时间排序。
还有两个 API 层面的小补丁:schedule.create 加了 if 和 until 两个参数,还能查每次运行的结果;SessionInfo.time.busy 给出最近一次执行的开始时间——做用量统计的人会需要它。
四、三条破坏性变更,只碰 @opencode/ai
2.2.1 有三条破坏性变更,2.2.2 一条都没有。三条全在 @opencode/ai 这个包上,不碰 CLI、不碰桌面端、不碰 HTTP 接口。只有一段代码会中招:你直接 import 了它。
- 四个图像供应商整个删掉:fal、Black Forest Labs、Replicate、Stability,连同
./providers/fal这四种子路径入口一起移除。没有同名替代品,得换到还在列表里的供应商。 - 五个旧入口改成嵌套路径:
./providers/amazon-bedrock-mantle→./providers/amazon-bedrock/mantle;google-vertex-chat、-interactions、-mistral、-responses同理,全部换成/chat、/interactions这种写法。这些新路径 2.2.0 就已经导出,这次把旧的关了。 - 类型名统一叫
Config:Groq.LanguageModelOptions→Groq.Config,各家都一样。只在类型检查时炸,运行时的值没变,tsc会替你找到。
自查一条命令就够:
没输出,这三条跟你无关。
五、怎么升
npm 的 latest 现在指向 2.2.2,所以按你平时的路径升就行。
CLI / TUI:
桌面端: 打开应用会提示更新,或者去 https://opencode.ai/download 重新下载覆盖安装。装完在设置里看一眼「实验」那一栏——上一版手动开着的 experimental.image_generate 可以留着,不冲突。
SDK / 插件: 先把 @opencode/ai 升到 2.2.1 以上,跑一遍上面那条 grep。如果命中 google-vertex-chat 这类旧路径,改成嵌套写法;命中 LanguageModelOptions 这类类型名,改成 Config。
验证 /goal 能用:
它跑完后你应该看到一段结论;中途想停,/goal pause。
注意步子:如果你在插件里用了 experimental.idle 做自动续跑,自己加一个圈数上限。运行时不替你兜底。
六、一句话
2.2.1 把"什么时候继续"从模型手里拿走,交给运行时;2.2.2 用十三个小时证明,默认值也是产品决策——该开的直接开,该退的退回实验里去。
两天 74 条变更,真正需要你动手的只有三条 import 路径。这个比例,说明它已经从"加功能"转到"调手感"了。
互动问题:你会为了 /goal 这种"自己往下跑"的能力,容忍它可能转到天亮吗?还是宁可每次手动点一下继续?评论区聊聊你的用法。






