欢迎光临
我们一直在努力

OpenChamber 1.9.5 版本解析:Passkey 免密登录、自定义语音服务与多会话流式同步优化

  • AI Agent
  • 人工智能
  • 代码智能体
  • 交互助手

【免费下载链接】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)或明显异常的端点,从而降低配置错误与潜在的数据泄露风险。配置自定义语音服务时,建议:

  • 确认端点协议为 https://(或本机 http://localhost 调试场景);
  • 确认服务兼容 OpenAI 的 /audio/speech 与 /audio/transcriptions 接口语义;
  • 按服务能力填写 TTS 模型名,并小步调整 pitch / volume 参数验证效果。
  • 四、同步与性能:多会话流式传输的三重优化

    在大量会话并发活动的场景下,1.9.5 对同步链路做了三项针对性优化,App 与 VS Code 扩展同步收益(贡献者 @jwcrystal):

  • 按目录队列(per-directory queues):将流式更新按工作目录分队列处理,避免跨目录的会话更新互相阻塞,使单个目录的活动不会拖慢其他目录的实时刷新;
  • 事件合并(event coalescing):对高频产生的小事件进行合并批处理,减少重复渲染与无效网络往返,降低繁忙工作区下的 CPU 与带宽压力;
  • 片段缺口恢复(parts-gap recovery):流式传输中若出现消息片段缺失(如断网重连、竞态丢包),系统会主动检测缺口并补齐,保证最终展示的会话内容完整连续。
  • 这三项优化共同的目标是:在大量会话并发流式更新的情况下,让实时刷新保持平滑、不丢内容。对于习惯同时在多个项目/目录中运行多个 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 恢复。

    八、升级与验证建议

    结合本版本改动,给出以下升级后的验证清单:

  • 认证侧:若使用受保护实例,先确认页面运行在 HTTPS/localhost;登录后前往设置页注册一枚当前设备 Passkey,验证生物识别/PIN 可完成免密解锁;随后测试"1 周 / 30 天"会话档位是否符合预期,并在另一台设备上验证"Sign Out Everywhere"能全局吊销;
  • 语音侧:在设置中填写 OpenAI 兼容的 TTS/STT 自定义端点,分别验证朗读与语音输入两条链路,并确认非法 URL(如非 HTTPS、格式错误)会被校验拦截;
  • 同步侧:在多个目录同时运行多个会话,观察 Recent 列表中的活跃会话是否保持可见、流式更新是否平滑,并留意断线重连后历史消息是否完整(片段缺口恢复);
  • 工具输出侧:触发一次结构化工具输出,确认树形查看器可展开/折叠;刷新页面后确认 question 工具内容不再丢失;
  • 用量与兼容侧:智谱 AI Coding Plan 用户检查用量统计是否准确;升级 OpenCode 运行时后确认模型变体列表与调用正常。
  • 参考资料

    • 本版本发布说明: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

    赞

    分享

    • AI Agent
    • 人工智能
    • 代码智能体
    • 交互助手

    【免费下载链接】openchamber

    Agentic Development Environment based on OpenCode AI agent

    项目地址:
    https://gitcode.com/gh_mirrors/op/openchamber

    点击查看 免费下载

    上一篇:
    Ollama大模型优化实战:从性能瓶颈到极致体验

    下一篇:
    一句话画出专业架构图?Next AI Draw.io 完整上手指南

    创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

    赞(0)
    未经允许不得转载:171主机测评 » OpenChamber 1.9.5 版本解析:Passkey 免密登录、自定义语音服务与多会话流式同步优化
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址