大数跨境

OpenCode v2.2.1 与 v2.2.2:两天两个版本,一个往前推,一个往回拉

OpenCode v2.2.1 与 v2.2.2:两天两个版本,一个往前推,一个往回拉 创见AI实验室
2026-10-31
9
导读:OpenCode 两天连发两版:2.2.1 加 /goal 让它自己跑,2.2.2 十三小时后翻转四处默认值。两版合计 74 条变更。

系列导航:这一篇同时讲 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 条

oc221222-02-timeline.png

先把这三个版本摆在一起看:

版本
发布时间(北京时间)
变更条目
PR
v2.2.0
10-27 17:04
223
256
v2.2.1
10-29 13:16
43
53
v2.2.2
10-30 02:43
31
6

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 不是"让它更聪明",是"让它别停"

oc221222-03-goal.png

用法很直白:

/goal 把 src 下所有 console.log 清掉,跑通测试

之后你不用管,它自己往下跑;跑完了,另一个人(reviewer)读一遍目标,判断达没达成。没达成,接着跑;达成了,停。

四步一个圈,关键是第三步和第四步的分工:

  1. 起:目标写进这次执行,不是新开会话。
  2. 跑:该调工具调工具,读写文件、跑命令、开子会话,全照旧。这一步没有新东西。
  3. 判:会话要空闲之前,reviewer 做一次普通的 session.generate,只回两样东西——verdict 和 reason。
  4. 续:没达成,往队列里塞一步,让它在同一次执行里接着跑。

因为整个 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:十三小时后,四处默认值被翻过来

oc221222-04-revert.png

31 条,6 个 PR,三条 Highlight。翻一遍你会发现:没有新功能,全在改默认值。四个"原来要手动拨、现在直接给"的开关:

项目
原来的默认
2.2.2 改成
你要做的事
出图
手动开 experimental.image_generate
接了能画图的供应商就默认可用
什么都不用做
问句卡片
键盘优先的新样式(2.2.0 起:数字键答问、多选显示成复选框)
默认回到经典卡片,新样式挪进「设置 → 实验 → New question UI」
想用新的得自己去开
引用与批注
时间线引用、终端引用、浏览器批注,三套编辑器
合成一个「可选注释」编辑器
引完顺手写一句
工作树
新会话页要先开一层菜单
点当前分支名,直接开该项目的 worktree 选择器
少点两下

第三行那条最容易被忽略,但它其实是这一版唯一"加东西"的地方:引用和批注原来各做各的,现在统一成一条流程——选中、引用、可选写一句,三步走完。

「问句卡片回退」值得单独说。 2.2.0 才加了"用数字键回答、多选显示成复选框",两天后默认又回到经典卡片,那套键盘优先的界面被挪进实验开关里。这不是删掉,是降级为可选项。实验开关的意义也在这儿:改坏了能一键退,而且退的时候不用发新版——设置里点一下就行。

顺带修了一串桌面端的零碎:排队中的提示在变长时不再掉帧、Markdown 的锚点链接真的会滚到对应标题、切换目录时每个标签页的时间线状态不再丢、侧栏标签溢出时关闭按钮还看得见、收件箱里「进行中」按执行开始时间排序。

还有两个 API 层面的小补丁:schedule.create 加了 if 和 until 两个参数,还能查每次运行的结果;SessionInfo.time.busy 给出最近一次执行的开始时间——做用量统计的人会需要它。

四、三条破坏性变更,只碰 @opencode/ai

oc221222-05-breaking.png

2.2.1 有三条破坏性变更,2.2.2 一条都没有。三条全在 @opencode/ai 这个包上,不碰 CLI、不碰桌面端、不碰 HTTP 接口。只有一段代码会中招:你直接 import 了它。

  1. 四个图像供应商整个删掉:fal、Black Forest Labs、Replicate、Stability,连同 ./providers/fal 这四种子路径入口一起移除。没有同名替代品,得换到还在列表里的供应商。
  2. 五个旧入口改成嵌套路径:./providers/amazon-bedrock-mantle → ./providers/amazon-bedrock/mantle;google-vertex-chat、-interactions、-mistral、-responses 同理,全部换成 /chat、/interactions 这种写法。这些新路径 2.2.0 就已经导出,这次把旧的关了。
  3. 类型名统一叫 Config:Groq.LanguageModelOptions → Groq.Config,各家都一样。只在类型检查时炸,运行时的值没变,tsc 会替你找到。

自查一条命令就够:

grep -rn "@opencode/ai/providers" src

没输出,这三条跟你无关。

五、怎么升

npm 的 latest 现在指向 2.2.2,所以按你平时的路径升就行。

CLI / TUI:

npm i -g @opencode/cli@latestopencode --version    # 应该是 2.2.2

桌面端: 打开应用会提示更新,或者去 https://opencode.ai/download 重新下载覆盖安装。装完在设置里看一眼「实验」那一栏——上一版手动开着的 experimental.image_generate 可以留着,不冲突。

SDK / 插件: 先把 @opencode/ai 升到 2.2.1 以上,跑一遍上面那条 grep。如果命中 google-vertex-chat 这类旧路径,改成嵌套写法;命中 LanguageModelOptions 这类类型名,改成 Config。

验证 /goal 能用:

/goal 列出当前目录下所有 .md 文件,把标题重复的指出来

它跑完后你应该看到一段结论;中途想停,/goal pause。

注意步子:如果你在插件里用了 experimental.idle 做自动续跑,自己加一个圈数上限。运行时不替你兜底。

六、一句话

2.2.1 把"什么时候继续"从模型手里拿走,交给运行时;2.2.2 用十三个小时证明,默认值也是产品决策——该开的直接开,该退的退回实验里去。

两天 74 条变更,真正需要你动手的只有三条 import 路径。这个比例,说明它已经从"加功能"转到"调手感"了。


互动问题:你会为了 /goal 这种"自己往下跑"的能力,容忍它可能转到天亮吗?还是宁可每次手动点一下继续?评论区聊聊你的用法。

精选系列





【声明】内容源于网络
0
0
创见AI实验室
创见AI实验室,我们不只是介绍工具,我们共同创造工作方式的未来。
内容 232
粉丝 0
创见AI实验室 创见AI实验室,我们不只是介绍工具,我们共同创造工作方式的未来。
总阅读23.3k
粉丝0
内容232