OpenCode 2.1.0 在 2026-10-20 发布,官博把「会话归档」写回了亮点:归档状态可过滤,也能恢复。本机用 npm 包装的 @opencode/cli@2.1.1(同日小版本,功能以 2.1.0 changelog 为准)在最小 Spring Boot 项目里核对了配置加载和归档 API;结论是归档确实可用,但默认的 session.list 不会自动丢掉已归档会话,要显式带 archived 参数。

主源是官方 changelog:https://opencode.ai/changelog#v2-1-0。Git 标签 v2.1.0 的提交时间为 2026-10-20T07:17:12Z(北京时间约 15:17)。2.x 走 @opencode/cli,和 1.x 的 opencode-ai 包分开;1.x 日常更新不会自动升到 2.x。

本机装上 2.1.1

npm i -g @opencode/cli@2.1.1
opencode --version
opencode v2.1.1

包里同时提供 opencode 和 opencode2 两个入口,指向同一二进制。若机器上还留着 1.x,升级前先确认 PATH 里到底是哪一套。

最小 Spring Boot 项目 + experimental.todo

在 demo/opencode-todo-demo 建了一个 Spring Boot 3.5.6 / Java 21 的小项目,只暴露 GET /hello,端口 18080。项目根放了:

{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "todo": true
  }
}

这是 2.1.0 文档里打开 TUI Todo 列表(模型侧 todowrite)的开关。本机用 opencode debug config 读配置源,项目文件已经合进来:

[
  {
    "type": "document",
    "path": ".config/opencode/opencode.jsonc",
    "info": {
      "$schema": "https://opencode.ai/config.json"
    }
  },
  {
    "type": "directory",
    "path": ".config/opencode"
  },
  {
    "type": "document",
    "path": "demo/opencode-todo-demo/opencode.json",
    "info": {
      "$schema": "https://opencode.ai/config.json",
      "experimental": {
        "todo": true
      }
    }
  }
]

应用本身能起来:

2026-10-21T08:13:27.905+08:00  INFO ... Tomcat started on port 18080 (http) with context path '/'
2026-10-21T08:13:27.915+08:00  INFO ... Started DemoApplication in 1.278 seconds (process running for 1.588)
curl -sS http://127.0.0.1:18080/hello
ok

这次没有实际调用模型跑 todowrite,只确认了开关能被配置层读到。要看侧边栏任务列表,还得在开了 todo 的会话里让模型写待办。

会话归档:更新字段 + 列表过滤

2.1.0 写明恢复了 session archiving,包括按归档状态过滤和恢复。CLI 侧可以用 opencode api 打到本地 standalone 服务。对本项目里已有的一条会话(id 形如 ses_ea95385baffeBuQWjIdS0KSCiU)做归档:

opencode api --standalone session.update \
  --param sessionID=ses_ea95385baffeBuQWjIdS0KSCiU \
  -d '{"archived":true}'

随后用不同查询参数列会话(只看条数):

opencode api --standalone session.list --param archived=true
# n=1,条目的 time.archived 有值

opencode api --standalone session.list --param archived=false
# n=0

opencode api --standalone session.list
# n=1,默认列表仍带上这条已归档会话

再 {"archived":false} 写回去,archived=false 重新变成 1,archived=true 变成 0。过滤是有效的;容易踩的点是:不带 archived 参数时,已归档会话还在默认列表里,别以为「归档了就从默认列表消失」。

同版本还改了什么(未在本机逐项复现)

官博 2.1.0 另外几条硬改动:Windows 持久 PTY、TUI 长时间命令不再被 Bun 默认 5 分钟 fetch 掐断、SDK/HTTP/插件契约把 provider 回放数据统一成 native(旧的 providerState 等要迁)。本机是 Linux,没测 Windows PTY;也没有改第三方 SDK 集成。插件或自动化如果还在读旧字段名,需要对照 changelog 里的 Breaking changes 表改一遍;存量会话和凭证靠兼容解码器还能读,官方说不需要单独做数据库迁移。

安装与文档入口:https://opencode.ai/v2/docs。从 1.x 显式升 2.x 可用 opencode upgrade --major,或直接装 @opencode/cli。

— 感谢阅读 —
广告

一起交流

分享你的思考,让讨论更进一步。