【免费下载链接】openchamber
Agentic Development Environment based on OpenCode AI agent
项目地址:
https://gitcode.com/gh_mirrors/op/openchamber
点击查看 免费下载
本文基于 changelog/1.9.5.md(版本 1.9.5,发布于 2026-04-14)并结合仓库源码,逐项拆解该版本在安全认证、语音服务、同步性能、会话 UI 与可靠性方面的具体改动,帮助你快速判断升级收益、理解新功能的使用方式与底层实现,并在实际部署中正确配置。
OpenChamber 1.9.5 是一个聚焦"受保护实例安全性与日常使用体验"的版本:它为核心功能引入了 Passkey(WebAuthn)免密登录与 1 周/30 天两级会话过期选项,为语音功能开放了 OpenAI 兼容的自定义服务器接入,并对多会话流式传输、会话列表 UI、Git 面板与首启引导流程做了一轮系统性打磨。读完本文,你将掌握受保护实例的 Passkey 配置与管理方法、语音服务自定义的要点、流式同步的优化机制,以及该版本在 App 与 VS Code 扩展两侧的完整改动清单。
一、版本概览
1.9.5 的核心主题是 Passkey sign-in for protected instances,即面向受保护实例的免密登录能力。整个版本围绕三条主线展开:
- 安全 / 认证:为受保护实例新增 Passkey 登录,并新增 1 周、30 天两档会话过期选项;
- 语音:新增 OpenAI 兼容的自定义服务器支持(同时覆盖 TTS 与 STT),可配置 TTS 模型、音调、音量,并加强自定义 URL 校验;
- 体验与可靠性:优化多会话流式传输(按目录队列、事件合并、片段缺口恢复),修复聊天、Git、启动流程中的多项问题,并新增智谱 AI Coding Plan 用量追踪。
版本同时覆盖 App 与 VS Code 扩展 两个交付载体,其中多数改动在两侧同步落地,少量改动(如桌面端启动流程、用量追踪)各有侧重。
二、安全与认证:Passkey 登录与更精细的会话过期控制
2.1 适用场景:受保护实例
OpenChamber 支持部署在私有网络或公网上的实例,并通过 UI 密码保护访问。1.9.5 之前,这类"受保护实例"每次解锁都需要输入密码;1.9.5 起,你可以为实例启用 Passkey,用设备自带的生物识别、PIN 或安全密钥完成免密认证,同时仍然保留密码登录作为兜底。
2.2 前端实现链路:从凭证仪式到设置管理
Passkey 功能的前端核心逻辑集中在 packages/ui/src/lib/passkeys.ts,它基于 @simplewebauthn/browser 实现了完整的 WebAuthn 注册与认证流程,并封装了与后端交互的 REST 端点:
| /auth/passkey/register/options | POST | 发起注册,获取 requestId 与 optionsJSON |
| /auth/passkey/register/verify | POST | 校验注册响应,完成凭证创建 |
| /auth/passkey/authenticate/options | POST | 发起认证,获取认证挑战 |
| /auth/passkey/authenticate/verify | POST | 校验认证响应,签发会话 |
| /api/passkeys | GET / DELETE | 列出已注册凭证、吊销指定凭证 |
| /auth/passkey/status | GET | 查询 Passkey 启用状态、数量与 rpID |
| /api/auth/reset | POST | 重置全部已保存的认证信息(全局退出) |
从代码结构看,整套流程采用"options/verify 两段式":客户端先向后端请求 WebAuthn 选项(携带设备 UA 作为凭证标签),再调用 startRegistration / startAuthentication 完成浏览器侧的凭证仪式,最后把浏览器返回的 response 连同 requestId 交回后端校验。认证请求还支持携带 trustDevice、issueClientToken、clientLabel、clientKind、dedupeKey 等附加字段,用于桌面端的客户端令牌签发与去重(见 packages/ui/src/lib/passkeys.ts)。
一个值得注意的细节是凭证仪式的可取消性:passkeys.ts 暴露了 cancelPasskeyCeremony(),通过 WebAuthnAbortService 中止进行中的注册/认证,并以 ERROR_CEREMONY_ABORTED 错误码区分"用户主动取消"与"真实失败"(isPasskeyCeremonyAbort)。这意味着用户在确认系统弹窗之前可以随时中止流程,而不必等待超时。
2.3 环境前提:HTTPS 或 localhost
WebAuthn 对安全上下文有硬性要求。getPasskeySupportState() 明确返回两类不可用原因(见 packages/ui/src/lib/passkeys.ts):
- 非浏览器环境(如 SSR)下不可用;
- 非安全上下文(非 HTTPS 且非 localhost)下不可用。
因此,无论是桌面端连接远程受保护实例,还是 Web 端直接访问,都必须通过 HTTPS(或 localhost)承载页面,Passkey 按钮才会出现。这也是 1.9.5 同时加强自定义 URL 校验的原因之一——把不可靠的传输环境挡在功能启用之前。
2.4 会话过期:1 周与 30 天两档选项
与 Passkey 一同引入的是新的会话过期策略:用户现在可以在 1 周 与 30 天 两档之间选择会话有效期,替代/补充原有的较短会话设置。结合代码可以推断其配套机制:
- 信任设备(Trust Device):登录界面提供"信任此设备"勾选,选择结果持久化在 localStorage 的 openchamber.uiAuth.trustDevice 键中(见 packages/ui/src/components/auth/SessionAuthGate.tsx),并在提交密码、Passkey 认证时作为 trustDevice 字段随请求一起发送;
- 桌面客户端令牌:桌面端登录成功后还会通过 /api/client-auth/clients 签发客户端令牌(clientToken),后续请求凭令牌访问,从而在浏览器会话之外维持更长的桌面登录态(见 packages/ui/src/components/auth/SessionAuthGate.tsx)。
简言之:会话时长由实例端配置决定,信任设备与客户端令牌决定会话能否在设备上"续命"。较长的 30 天档适合个人长期使用的设备,1 周档则更适合共享或多用户环境。
2.5 会话失效的主动探测:不依赖轮询的过期检测
1.9.5 对会话过期体验的另一个隐藏改进体现在 packages/ui/src/lib/runtime-auth-expiry.ts。该模块实现了基于响应分类的被动式过期检测:
- 所有 HTTP 响应都会流经 runtimeFetch,模块只对 /api/ 与 /auth/ 路径上的 401 响应进行嫌疑分类;
- 但 401 本身不是过期证据——OpenCode 代理的上游 Provider 密钥失效同样会返回 401,因此每次嫌疑都会触发一次去抖的 GET /auth/session 探针(两次探针最小间隔 15 秒,防止探针风暴),确认后才把状态翻转为 expired;
- 同时注册 visibilitychange 与 focus 监听,当标签页在"笔记本唤醒"等场景重新获得焦点且距上次确认超过 5 分钟时,执行一次重新校验。
配合 AuthExpiredBanner 与登录网关,用户能在会话过期时立刻看到重新认证入口,而不是在请求静默失败后困惑。这与 2.4 的长会话选项共同构成了"长会话 + 快速失效感知"的完整体验。
2.6 设置页管理:注册、吊销与全局退出
已登录用户在设置页中可以通过 PasskeySettings 管理凭证,支持三类操作:
- 添加当前设备凭证:调用 registerCurrentDevicePasskey(),以当前 navigator.userAgent 作为凭证标签,便于区分多台设备;
- 吊销指定凭证:逐条列出已注册凭证(含标签、创建时间、最后使用时间、设备类型、备份状态),可单独删除;
- 全部退出(Sign Out Everywhere):调用 resetAllAuth() 清除实例上保存的全部认证信息并刷新页面,适合设备丢失或凭证泄露场景。
设置页还会根据实例状态给出引导性提示:若实例尚未启用 Passkey,会提示"需先设置 UI 密码";若浏览器不支持安全上下文,会直接展示原因。换言之,启用 Passkey 的前置条件是实例已配置 UI 密码,Passkey 是对密码认证的增强,而不是替代。
三、语音能力:接入 OpenAI 兼容的自定义服务器
1.9.5 为语音功能新增了 OpenAI 兼容自定义服务器 支持,同时覆盖两条链路:
- 文本转语音(TTS):可配置自定义端点,并可设置 TTS 模型、音调(pitch)、音量(volume) 参数;
- 语音转文本(STT):同样支持指向自定义端点。
对应的设置在 App 与 VS Code 扩展的设置界面中以 i18n 消息形式提供(参见 packages/ui/src/lib/i18n/messages/en.settings.ts 等各语言消息文件中的 voice 相关键值),用户可将语音能力切换到自建或第三方 OpenAI 兼容服务,而不再局限于内置提供方。
该改动还包含一项安全强化:更严格的自定义 URL 校验。结合本版本在认证侧对 HTTPS 安全上下文的严格要求可以推断,这项校验旨在阻止用户把语音流量发送到格式非法、协议不安全(非 HTTPS)或明显异常的端点,从而降低配置错误与潜在的数据泄露风险。配置自定义语音服务时,建议:
四、同步与性能:多会话流式传输的三重优化
在大量会话并发活动的场景下,1.9.5 对同步链路做了三项针对性优化,App 与 VS Code 扩展同步收益(贡献者 @jwcrystal):
这三项优化共同的目标是:在大量会话并发流式更新的情况下,让实时刷新保持平滑、不丢内容。对于习惯同时在多个项目/目录中运行多个 Agent 会话的高级用户,升级后应能明显感到 UI 更新的流畅度提升。
五、会话与 UI 改进:让会话列表更聚焦
1.9.5 对会话列表(Recent)的呈现规则做了三处调整(App 与 VS Code 同步生效):
- 活跃会话保持可见:正在进行的会话不会被新活动挤出 Recent 列表,方便随时回到进行中的工作;
- 子代理会话自动展开父分组:打开 subagent(子代理)会话时,其父级分组自动展开,避免在多层嵌套中迷失上下文;
- 隐藏空的归档 / 文件夹分组:没有内容的归档段与空文件夹段不再占据列表空间,让 Recent 视图更干净、聚焦。
这些改动属于纯 UI 信息架构优化,不涉及数据结构变更,升级后即可直接体验,无需额外配置。
六、修复清单:从工具输出到启动流程
6.1 聊天 / 工具输出
- 交互式树形查看器(interactive tree viewer):结构化工具输出(如 JSON 层级数据)现在以可折叠的树形视图呈现,方便逐层展开查看,替代难以阅读的原始长文本;
- JSON 引号渲染修复:修复了 JSON 内容中引号在聊天消息里渲染异常的问题;
- 问题工具内容刷新丢失:修复了"question 工具"的内容在界面刷新后消失的问题,会话恢复路径(subagent / session recovery)也一并加固。
6.2 Git / 桌面启动
- Git 面板可见性恢复:修复了 Git 变更面板在某些情况下不显示的问题,并恢复了侧边栏与 Git 面板的同步;
- 首次启动引导与智能恢复:桌面端首启流程更"有引导",并新增智能恢复流程;同时修复了启动阶段与远程窗口交互中的若干问题,降低早期会话的摩擦感(@jwcrystal)。
6.3 用量与模型兼容
- 智谱 AI Coding Plan 用量追踪:App 与 VS Code 扩展均新增对智谱 AI(Zhipu)Coding Plan 套餐的用量统计(@cainiao1992);
- 模型变体兼容:App 侧恢复了对较旧 OpenCode 运行时的模型变体兼容(@Chi-square-test),VS Code 侧则恢复了对较新 OpenCode 运行时的兼容——两侧方向不同,覆盖了新老版本两种 OpenCode 运行时生态,减少升级后模型列表或调用方式不匹配的问题。
七、VS Code 扩展同步更新要点
VS Code 扩展(packages/vscode)在本版本中的改动与 App 高度对齐,独立落地的部分包括:
- 新增智谱 AI Coding Plan 用量追踪;
- 多会话流式传输的按目录队列、事件合并与片段缺口恢复优化;
- 加固 subagent 会话解析与轮询生命周期处理,减少静默任务失败(这是 VS Code 侧相对 App 侧更强调的可靠性改进);
- 活跃会话保持可见、子代理分组自动展开、隐藏空分组;
- 交互式树形查看器、JSON 引号渲染修复、刷新后问题工具内容保留;
- 对较新 OpenCode 运行时的模型变体兼容修复。
如果以 VS Code 作为主力开发环境,1.9.5 最值得关注的升级收益是:多会话场景下的任务可靠性提升(subagent 解析与轮询生命周期加固)与 Git 面板 / 会话列表的 UI 恢复。
八、升级与验证建议
结合本版本改动,给出以下升级后的验证清单:
参考资料
- 本版本发布说明:changelog/1.9.5.md
- Passkey 前端流程与端点封装:packages/ui/src/lib/passkeys.ts
- Passkey 设置页(注册 / 吊销 / 全局退出):packages/ui/src/components/sections/openchamber/PasskeySettings.tsx
- 登录网关与 Passkey 解锁 / 客户端令牌签发:packages/ui/src/components/auth/SessionAuthGate.tsx
- 会话过期主动探测(401 分类 + 确认探针 + 焦点重校验):packages/ui/src/lib/runtime-auth-expiry.ts
- VS Code 扩展源码:packages/vscode
赞
【免费下载链接】openchamber
Agentic Development Environment based on OpenCode AI agent
项目地址:
https://gitcode.com/gh_mirrors/op/openchamber
点击查看 免费下载
相关推荐
Ollama大模型优化实战:从性能瓶颈到极致体验
一句话画出专业架构图?Next AI Draw.io 完整上手指南
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



