大数跨境

OpenCode v2.2.3 到 v2.2.5:一天一夜三个版本,先接 Claude Code,再磨长会话

OpenCode v2.2.3 到 v2.2.5:一天一夜三个版本,先接 Claude Code,再磨长会话 创见AI实验室
2026-11-01
18
导读:OpenCode 一天一夜连发 2.2.3、2.2.4、2.2.5,47+20+15 条,先接 Claude Code 当供应商,再把终端与产物磨成能留下来的东西。

系列导航:这一篇同时讲 v2.2.3、v2.2.4、v2.2.5 三个版本。上一篇是OpenCode v2.2.1 与 v2.2.2:两天两个版本,一个往前推,一个往回拉,v2.2.0 的总览在OpenCode v2 更新日志 03:v2.2.0 一篇抵十篇——桌面端重写、插件能画界面了。

本文目录

  • 一、二十八小时,四个版本
  • 二、2.2.3:把 Claude Code 接成供应商
  • 三、2.2.3 的另外两条线
  • 四、2.2.4:终端跟会话走,产物能发出去
  • 五、2.2.5:全是手感
  • 六、要动手的地方
  • 七、怎么升
  • 八、一句话

一、二十八小时,四个版本

oc223225-02-timeline.png

先摆时间(北京时间):

版本
发布
条目
PR
v2.2.2
10-30 02:43
31
6
v2.2.3
10-30 17:55
47
60
v2.2.4
10-31 00:59
20
19
v2.2.5
10-31 07:17
15
14

从 2.2.2 到 2.2.5,四个版本压在 28 小时 34 分里。这篇要拆的后三个,跨度 13 小时 22 分——一天一夜。

三个版本的条目数是 47 → 20 → 15,一路往下掉。这不是内容变少,是在做同一件事的收尾:先一口气把能力加进去,再连着两版把边角磨掉。

节奏快到什么程度?看间隔:15 小时 12 分、7 小时 04 分、6 小时 18 分。到最后两个版本,已经接近"改完就发"。npm 的 latest 现在指向 2.2.5,三天里换了四次。

老规矩记一下:npm 上的包总比 GitHub 的发布说明早两三分钟(2.2.3 是 17:53:57 推包、17:55:45 挂说明)。要核发布时间,以 npm 为准。

二、2.2.3:把 Claude Code 接成供应商

oc223225-03-claude.png

这一版最值得说的是Claude Agent:一个内置供应商,走的不是 API key,而是你本机 Claude Code 的登录。

三个动作:

  1. 装 Claude Code(它不在 OpenCode 里,得先有本机可执行的文件)。
  2. claude auth login 登录。注意不是 /login——Claude Code 自己提示的那条是错的,2.2.4 专门修了这个误导。
  3. 在 /connect 里选 Claude Agent。选完,模型列表里才多出 Claude 的模型。

装在非标准位置、或者机器上有多个版本,用 OPENCODE_CLAUDE_PATH 指过去。

它到底接了什么:接的是登录态和模型,不是把权重搬进 OpenCode。所以额度算在你自己那边,换机器要重新登录。这点别理解错——省事是真的,但它不是"免费的 Claude"。

2.2.4 又补了三处:引导式安装(从供应商列表选 Claude Agent,把安装、登录、连通性检查串成一条流程)、连接检查、以及从「Needs sign-in」直接恢复,不用退出去重来。

同批还有个反向动作:2.2.4 提高了 DeepSeek V4.1 Flash 在 OpenCode Go 里的额度。一边接外援,一边调自己这边的价,两件事在同一批里做完了。

三、2.2.3 的另外两条线

47 条里除了 Claude Agent,还有两条值得记。

第一条:长会话的渲染开销。 流式回复和长对话现在做的渲染工作少了很多,五个 PR 一起改(#60489、#60481、#60513、#60521 等)。具体是时间线增长、缩放后滚动、高亮、DOM 观察器性能这几处。

这条对天天挂着长会话的人意义最大。之前的体验是:聊到几百条消息,往下滚会卡,输入框打字有延迟。改法不是"优化一下",是把不必要的重渲染按掉。

第二条:桌面端补 2.2.2 的漏。 这一版的说明里有一句很直白:侧栏标签关不掉、新建标签按钮点了没反应,是 2.2.2 引入的回归(#60430、#60436)。反复弹「Session not found」是另一条——删掉的会话在拿到 404 之后直接被清掉,不再重试(#60459)。另外 web 端走 HTTP 时「Open file」也修好了(#60462)。

这就把前面的节奏解释清楚了:2.2.2 那天翻了四处默认值,翻的过程中碰坏了侧栏。15 小时后 2.2.3 补上。发布快,代价是偶发回归;兜底也快,所以还能接受。

顺手几条值得留意的:

  • 删会话时会清掉它的持久终端(#60322)。之前删了会话,终端还在后台挂着。
  • 嵌套工具的进度不再替换父级 execute 那行(#60480)。多级调用时时间线不再错乱。
  • 失败时也能拿到半成品:AIError.partial 会保留已经生成的那部分输出(#60477)。以前一出错,前面生成的内容就白费了。
  • TUI 在 experimental.media_blob 开着时,历史图片改成懒加载(#60116)——只在你点开预览时下载。

四、2.2.4:终端跟会话走,产物能发出去

oc223225-04-durable.png

20 条,改结构的只有两件。

终端从「窗口的」变成「会话的」

以前的终端属于窗口进程,关掉窗口或者服务重启,里面的东西就没了。现在终端是会话的 PTY,由服务端持有:

  • 服务重启,连回滚的历史一起恢复,不是给你一个空屏。
  • 同一个会话,桌面端、TUI、另一个窗口看到的是同一条终端。
  • 可以改名,名字存在服务端,重启还在;你起的名字优先于 shell 自己报的标题。

改名这个接口其实 2.2.3 就加好了(persistentPty.update,带 userTitle 和 persistent-pty.updated 事件),2.2.4 才接到桌面端上。两版配合着来。

artifacts:agent 能发布 HTML

打开 experimental.artifacts 之后,agent 多了四个工具:artifact_create、artifact_read、artifact_update、artifact_delete。托管有两种:内置的本地静态文件服务,或者插件提供的存储。SDK 那边是一整套 client.experimental.artifacts.{providers,list,create,get,update,delete,view},插件侧是 ctx.experimental.artifact.transform(...)。

注意它默认是关的。 默认关通常意味着"还没想清楚"——权限怎么给、能不能公网访问、多个会话的产物怎么隔离,这些在说明里都没写。想试就开,别直接接到生产流程上。

另外这一版还有一条容易被忽略、但很关键的改动:启用的定时任务现在能在 opencode serve 下运行,而且多个服务进程之间做了协调,同一个任务只会触发一次(#60478)。这条听着枯燥,但它意味着定时任务不再依赖你开着桌面端窗口。从"客户端功能"变成"服务端能力",是能不能长期跑的界线。

五、2.2.5:全是手感

oc223225-06-shortcuts.png

15 条,没有新功能。三个方向:

快捷键。Cmd+Opt+O 选 worktree,Cmd+Opt+B 选 base branch(Windows / Linux 用 Ctrl+Alt;base branch 那组 2.2.4 就有,这一版和 worktree 一起摆到了工具提示里),Cmd+Shift+X 切 shell 模式。引用弹窗里按住 Cmd 会把对勾变成发送,或者直接 Cmd+Enter——只发这一条引用和评论,输入框里剩下的内容原样保留。

最后这个设计值得单独夸一句:它解决的是"我想先就这段话回一句,但不想把已经写了一半的提示词搅进去"。以前只能先发出去,或者手工剪切。

压缩按百分比。compaction.buffer 现在可以写 "20%",按模型的上下文窗口留白;写数字仍按 token 算。这件事小,但很准——小窗口模型和大窗口模型用同一个配置,不用每次换模型重算。

配套还修了两处:输入上限比模型窗口更大时,压缩会按窗口封顶(#60660);LiteLLM 报的上下文超限错误,现在会触发压缩,而不是直接终止会话(#60692)。

报错说人话。read 找不到目录时,点名是哪个目录、最近的那个存在的是谁(#60688);edit 找不到 oldString 时,贴出文件里最接近的几行,或者直接告诉你"这处改动已经在了"(#60689)。

还有两处工程上的:MCP 单条 stdio 消息超过 10 MiB 不再被断开(#60694);切模型或续跑时不再把 reasoning 转成普通文本——那个转换会让某些供应商直接报错(#60498)。

六、要动手的地方

oc223225-05-breaking.png

82 条变更,真正会让旧代码跑不起来的有两条,都在 2.2.3;2.2.4 和 2.2.5 一条都没有。

① TUI 插件要 OpenTUI 0.8。@opencode/plugin 现在要求 @opentui/core 和 @opentui/solid 至少 0.8.0。0.8 里 ScrollBox 的 wrapper、viewport、content 和滚动条变成了 facade 对象,不再当渲染节点用;自定义 RenderContext 必须实现 clock 和 onAnimationTick。

这条是硬依赖,写完 TUI 插件不升版本会当场编译不过。不写插件的,跟你无关。

② 托管策略拆细。integration.use 现在只管集成账号,MCP、skill、plugin 各有自己的动作:mcp.use、skill.use、plugin.use。旧写法里带前缀的规则会自动换算,但裸的 integration.use 不再顺带覆盖那三者。

个人用户基本碰不到;用 managed policy 统一管的团队要检查一遍规则。

另外 2.2.5 有一处行为变更,不算破坏性但值得知道:调一个叫 bash 的工具,现在会自动按 shell 执行,权限一样,不再报错。插件里真有一个叫 bash 的工具时,仍然用插件那个(#60687)。这是兜底,不是坏事。

七、怎么升

npm 的 latest 已指向 2.2.5。

npm i -g @opencode/cli@latestopencode --version    # 2.2.5

桌面端打开会提示更新,或去 https://opencode.ai/download 覆盖安装。

写 TUI 插件的,多一步:

npm i @opentui/core@0.8 @opentui/solid@0.8

想试 artifacts,在 opencode.json 里加:

{  "experimental": { "artifacts": true }}

想用 Claude Agent:装 Claude Code → claude auth login → /connect 里选 Claude Agent。

八、一句话

2.2.3 把别人家的 agent 接进来,2.2.4 把终端和产物变成"能留下来的东西",2.2.5 把每天要做几十次的动作缩短成一次按键。

三天 82 条,只剩两条要改代码。这个比例说明它已经从"能干什么"走到"用得顺不顺",而后者才是每天都要付的时间成本。


互动问题:你更在意"接上 Claude Code 多一个模型来源",还是"终端和产物能活过重启和换设备"?我的答案是后者——前者解决一次选择,后者解决每一天。

精选系列





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