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。
一起交流
分享你的思考,让讨论更进一步。