☰
OpenChamber 1.3.1 发布解析:默认新聊天与惰性会话创建的实现拆解
2026/11/4 1:20:42 网站建设 项目流程

OpenChamber 1.3.1 发布解析:默认新聊天与惰性会话创建的实现拆解

【免费下载链接】openchamberAgentic Development Environment based on OpenCode AI agent项目地址: https://gitcode.com/gh_mirrors/op/openchamber

OpenChamber 1.3.1 于 2025-12-22 发布,三件事构成核心:应用启动后默认落在新聊天、全平台换新 Logo 与图标、会话创建推迟到首条消息发送之后。本文以 changelog/1.3.1.md 为事实依据,结合packages/ui的会话同步源码与各端图标资源目录,把每个改动落到具体文件和函数上,并给出可动手核实的验证步骤。

空会话到底从哪来?

先说结论:旧行为下,"新建聊天"这个动作本身就是一次后端会话创建——你点完按钮还没打字,数据库里已经多了一条空记录。用多了,侧边栏会堆积大量从未使用过的空白会话,既污染列表,也给多端同步添了负担。

1.3.1 的解法是把创建时机整体挪到发送时刻:"新建聊天"不再触达后端,而只是一个存在前端的本地草稿;只有第一条消息真正发出,后端会话才会落地。这个版本没有## VS Code分组,两条 New 加两条 Fix 全部落在## App下,按 changelog/README.md 的约定,1.3.1 也不会出现在扩展市场的变更日志里。

把会话创建推迟到第一条消息 🐢

会话创建路径统一收敛在 packages/ui/src/sync/session-actions.ts 的createSession函数:它向 OpenCode SDK 发起创建请求,成功后把会话写进useGlobalSessionsStore、通过registerSessionDirectory预填充路由索引,并调用markSessionAsOpenChamberCreated打上"由应用主动创建"的标记。这个标记让应用能区分"用户真正开始了对话"和"界面只是停在占位态",是惰性创建能成立的前提。

这里藏了一个容易被忽略的点:草稿态本身由 packages/ui/src/components/chat/ChatContainer.tsx 的autoOpenDraft逻辑维护——当前没有活动会话、也没有已打开的草稿时,组件自动调用openNewSessionDraft({ automatic: true })。换句话说,"启动后落在新聊天"实际落在一个本地状态上,而不是数据库里的一条记录。侧边栏从此只对应真实发生的对话,同步和列表都不会再为"点了一下没说话"的会话付成本。

首条消息发出后发生了什么?

草稿变成会话的瞬间,界面不能出现"转圈等创建"的断档。packages/ui/src/sync/DOCUMENTATION.md 中 "A draft's first send" 小节描述了完整链路:客户端先用descendingId("ses")本地铸造会话 id,再用openPendingSessionTranscript为它打开空 transcript,消息立刻上屏;此时真正的createSession请求才发出,响应回来时界面、选择、记录都已就位,无需重新挂载。

这一步的关键在于顺序:先呈现消息、后落地会话。创建失败时草稿原样恢复、已输入文本不丢;发送路径还有防重复保护,sentDraftIds会拒绝同一草稿的第二次提交,保证一次回车只产生一个会话。

应用为什么启动就落在新聊天

这一改动看起来只是"默认视图换了个位置",实现上却是会话 UI 的一条自动路径:packages/ui/src/components/chat/ChatContainer.tsx 中,autoOpenDraft为真且不存在活动会话时,openNewSessionDraft被自动触发;packages/ui/src/apps/MobileApp.tsx 的移动端入口同样组合了useSessionUIStore与全局会话 store,保证手机端冷启动也是同一套"草稿优先"的行为。

收益很直接:从打开应用到能输入,中间不再需要"点新建"这一步,而打开这个动作本身又不再产生任何后端记录。两个改动是互相咬合的——正因为新建不建会话,"默认打开新聊天"才敢成为默认行为。

图标到底换了哪五个端?

把源码翻一遍会发现,图标并不是手工替换文件:scripts/brand/DOCUMENTATION.md 写明仓库里每个 logo 文件都出自generate.mjs,改图形等于改geometry.mjs后运行bun run brand:generate,输出文件被手改时--check会直接失败。这版新标识同步落到五条资源链路:

  • Web / PWA:packages/web/public/ 下的favicon.svg、apple-touch-icon.png、深/浅色logo-*与pwa-*多尺寸资源,由site.webmanifest统一声明;
  • 桌面端:macOS 图标是packages/electron/resources/icons/AppIcon.icon下的分层 Icon Composer 文档,scripts/brand/generate-macos-icon-assets.cjs 等脚本在打包时渲染出多尺寸 asset;文档解释了分层原因——macOS 会把单张平面图标在 Clear/Tinted 模式下压成灰糊,分层后系统能对每层独立渲染玻璃效果;
  • VS Code 扩展:packages/vscode/assets/ 的app-icon.png、icon.svg与icon-titlebar.svg;
  • 移动端:packages/mobile/assets/ 中 Android 自适应图标icon-foreground.png与icon-background.png,iOS 图标随 Xcode 工程的 Assets 管理;
  • 文档徽章:docs/references/badges/ 下的openchamber-logo-dark.svg/openchamber-logo-light.svg。

品牌资产代码化生成的价值在于:一次图形改动即可同步所有平台,且各端图标永远来自同一份几何描述,不会出现"桌面端是新图、移动端还是旧图"的错位。

升级后怎么自己验证?

  • 打开应用应直接落在新聊天草稿,此时侧边栏不出现空会话记录;
  • 输入并发送首条消息后,会话才进入列表,且归属当前目录对应的项目分组;
  • Web 标签页、Electron 窗口与 VS Code 扩展侧边的图标均应显示新品牌资源;
  • 仓库根目录运行bun run changelog:check应通过,说明 changelog/1.3.1.md 的结构与 changelog/index.json 一致,应用更新弹窗里的说明即取自这份索引。

会话不再提前落地的收益,要到下一个版本才真正显形:changelog/1.4.0.md 里"Run multiple agents in isolated worktrees"意味着一条提示词可能派生出多个并行会话,倘若草稿仍随手建会话,侧边栏很快会再次被空记录占满。先堵住这个源头,后面的能力才放得进来。

【免费下载链接】openchamberAgentic Development Environment based on OpenCode AI agent项目地址: https://gitcode.com/gh_mirrors/op/openchamber

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询