Skip to content

Releases

v0.2.26

Choose a tag to compare

@github-actions github-actions released this 18 Oct 05:43

v0.2.26

旧 WebView 远控壳(RemoteControlApp)完成 Zcode 设计令牌迁移——至此全 App UI 零 MaterialTheme 直接引用,视觉语言完全统一。

远控入口页

  • 标题/描述/输入框/按钮全部走 Zcode 字阶与语义色,硬编码间距清除
  • 地址输入框与连接页同形状:胶囊圆角 + 输入层底色 + 透明描边
  • 主按钮「打开」与次按钮「扫码」改 48dp 果冻按压(中性反色填充 / 卡底)
  • 历史链接列表从 OutlinedButton 改为卡底果冻行,标题/副标题字阶分层

扫码层

  • 与会话配对扫码页同语言:黑色半透明浮条压底,错误提示改语义红
  • 删除 Material surface 色板与 tonalElevation 残留

WebView 容器

  • 顶栏标题/地址/操作按钮字阶与颜色走令牌,加载进度条改语义色
  • 错误覆盖层对齐 uiLg/uiMd 字阶 + 主按钮果冻按压

🤖 Generated with Claude Code

v0.2.25

Choose a tag to compare

@github-actions github-actions released this 18 Oct 05:29

v0.2.25

渲染层与「看电脑」页完成 Zcode 设计令牌迁移——至此全 App 不再残留 MaterialTheme 默认样式。

Markdown 渲染(MdBlockView / MdMath)

每条 AI 回复都要路过的渲染面,此前标题/代码块/表格仍是 Material 字阶与紫色强调:

  • 正文统一 14sp uiMd,标题按层级映射 uiXl/uiLg/uiMd,列表符号与序号改中性灰
  • 代码块改输入层底色 + 内圆角,语言标签弱化,行内代码背景随主题
  • 表格改面板底色 + uiSm 字阶;引用块用内圆角面板;分隔线用边框色
  • 链接色改语义色,删除硬编码紫色;块级公式回退文本对齐 mono + 次级文字色

看电脑页(UU 远程)

  • 标题/状态文案走 Zcode 字阶与语义色,硬编码间距改设计间距
  • 主按钮改 48dp 果冻按压中性反色填充,绑定中显示内联进度指示;失败态次级「刷新状态」按钮同款触感

其他

  • 清理未使用 import(Alignment、RoundedCornerShape)

🤖 Generated with Claude Code

v0.2.24

Choose a tag to compare

@github-actions github-actions released this 18 Oct 05:13

v0.2.24 — 扫码页对齐设计系统

UI / 交互

  • 扫码配对页迁移到 Zcode 令牌:顶栏/提示文案走 ZcodeType 字阶,取景框与提示条圆角走 ZcodeShape。
  • 提示条去 errorContainer 大红块:改黑色半透明浮层,相机/权限错误文字用语义红——红卡压在取景画面上会干扰扫码视觉,且与 Zai 体系不符。
  • message 与错误条此前会画两个叠层,现合并渲染。

🤖 Generated with Claude Code

v0.2.23

Choose a tag to compare

@github-actions github-actions released this 18 Oct 05:04

v0.2.23 — 连接页对齐设计系统

UI / 交互

  • 连接页全面迁移到 Zcode 设计令牌:作为打开 App 的第一个页面,此前仍停留在 MaterialTheme 默认样式(headlineMedium 字阶、errorContainer 红卡、硬编码间距),与列表/会话页被读成"两个应用"。本版对齐 core/design:ZcodeType 字阶、ZcodeSpacing 4dp 栅格、胶囊输入框(与会话页 ZcodeComposer 同一形状语义)、语义色。
  • 主按钮与扫码入口改为 48dp 触控目标 + 果冻按压,全 App 触感一致;错误卡去大面积红底,改中性底色 + 语义红文字;接入 imePadding,弹键盘不再顶住表单。

自检修复

  • SessionsOrdering.groupByRecency 收窄签名:startOfDayMs 回调参数实现从未使用,调用点只能传恒等 lambda。
  • 补 ConnectScreen 重构后缺失的 Row 导入。

🤖 Generated with Claude Code

v0.2.22

Choose a tag to compare

@github-actions github-actions released this 18 Oct 04:42

输入栏统一:ZcodeComposer

修复

  • 抽出 ZcodeComposer,会话页与新建会话页共用:草稿页发出第一条消息后原地进入会话页,两处输入框此前各自手写、圆角与按钮位置不同,这一瞬间会被读成「跳到了另一个应用」。共用一份组件才能让转场连续。

交互

  • 20dp 胶囊圆角取代 Material 4dp 描边方框:2026 年主流 AI 客户端的输入区是一个明示「这里可以打字」的容器,描边方框是表单语言的残留。
  • 去掉描边:input 底色已把边界说清楚,再描一道边是重复表达,浅色主题下还会显脏。
  • 48dp 触控目标:发送是全 App 最高频交互。
  • 停止与发送互斥占同一位置:两个按钮来回换会让输入框宽度跟着抖。运行中且草稿为空时给停止,一旦开始打字就切回发送——用户意图已经变成「再说一句」。

完整更新日志:v0.2.21...v0.2.22

🤖 Generated with Claude Code

v0.2.21

Choose a tag to compare

@github-actions github-actions released this 18 Oct 04:33

会话页顶栏:知道自己在看哪个会话

修复

  • 顶栏显示会话标题:从列表点进来之后,屏幕上此前没有任何东西指明正在看哪个会话——一次点错要滑到底部靠内容辨认。标题取 state.meta.title(桌面生成或用户改名),取不到时退回首条用户消息;两者都没有时显示占位,绝不编造「新会话」。
  • 顶栏感知连接态:会话页此前完全不看连接状态,断线时唯一的线索是「内容不再增长」,会被读成模型卡住。现在断线显示状态行,运行中显示呼吸点 + 运行中,已连接且空闲则什么都不显示——常态安静、异常才出声,顶栏不会变成永远占两行的横幅。

重构

  • stateLabel 从 feature:connect 下沉到 core:network:它描述的是连接机状态,不是连接页的私产;连接页、任务列表、会话页共用同一份文案(同一件事在不同页面换叫法会被读成两个问题)。顺带移除 sessions → feature:connect 依赖,CameraX/MLKit 不再进任务列表的依赖图。

性能

  • 标题走单独一条 StateFlow(distinctUntilChanged):ChatUi 每帧都是新对象,不加区分地订阅会让顶栏跟着每一行 token 一起重组。

完整更新日志:v0.2.20...v0.2.21

🤖 Generated with Claude Code

v0.2.20

Choose a tag to compare

@github-actions github-actions released this 18 Oct 04:01

会话页不再转圈:在等、读不出来、真的空,三件事分开说

第 4 版迭代。上一版修好了列表——这一版修会话页的同一个病:一个 UI 状态被三种不同的事实共用了。

永挂的「加载会话…」

零行内容时会话页只有一句「加载会话…」。而零行至少是三种东西:还在读、这台电脑的这个工作区没运行所以读不出来、这个会话真的还没有消息。前两种长得一模一样,而且没有任何出口:订阅失败后客户端既不重试也不置态。手机先开、电脑后开是最自然的顺序,这个顺序下会话页就永远停在转圈——用户既不知道该等,也不知道该去电脑上做什么。

现在:Loading 给三张骨架条(内容形状先落地,首帧到达不跳变)、runtime 未启动提示「这个会话还没读出来」并给「立即重试」、真没有消息说「还没有消息」。

订阅失败会自己恢复

失败按 2 / 5 / 15 / 30 / 60 秒退避重试,退到 60 秒仍在重试——用户在电脑上打开工作区,页面自己会长出内容。重试期间不清空已读出的内容:旧快照除实时状态外依然准确,清空等于把「读不出来」谎报成「空会话」。

另外补了一类此前没有出口的故障:订阅被服务端接受了(ACK 成功)但快照帧一直不来。现在 ACK 后 8 秒无帧即视为失败重订阅。

发的是 debug 签名预览包,暂无 keystore 配置。

🤖 Generated with Claude Code

v0.2.19

Choose a tag to compare

@github-actions github-actions released this 18 Oct 03:45

会话真的能建出来,历史会话真的在列表里

继 v0.2.18(手机端审批放行)后的第 3 版迭代。两个「明明做了却看不到」的问题,根因都在同一处:什么东西算数,由服务端落盘决定,不由客户端以为决定。

创建会话:先说话,会话才诞生

原先点「+」立刻发一条 createSession,不带头消息。服务端只建了一条 draft 记录——纯内存、不落盘、不进任务索引。于是「创建成功」和「列表里永远看不到」同时为真,用户只能判定创建失败。

改成:点「+」进入草稿页,会话此刻还不存在;写下第一条指令后才真正创建,那条消息随会话一起发出。会话在第二句话之前就已经落在磁盘上了。

看不到已有会话:列表改读落盘索引

原先列表以运行时的会话流为唯一数据源,桌面没起 runtime 时它一份数据都没有——手机上看到的是「历史会话全没了」,实际是「这台电脑的这个工作区还没运行」。

改成:列表以落盘的任务索引(zcode-task)为权威来源,运行时的会话信息只用来补充实时状态。这一版同时把列表本身的加载态说清楚:Loading 给骨架卡、runtime 未启动说「在电脑上打开该工作区」并给重试、读取失败给重试——用户永远知道是该等还是该做什么。

发的是 debug 签名预览包,暂无 keystore 配置。

🤖 Generated with Claude Code

v0.2.18

Choose a tag to compare

@github-actions github-actions released this 17 Oct 20:14

手机端审批放行(ApprovalDock)

远程操控的典型姿势是人不在电脑前。命令卡在审批上就永远不动了——这一版让手机能直接放行,把产品从能看变成能用。

新增

  • 审批 Dock:会话页输入栏上方呈现当前待决项(授权 / 需要你输入 / 需要确认),纵向排列服务端下发的选项,敏感输入走密码框且不落草稿
  • resolveInteraction 命令:只提交服务端给的 optionId,不硬编码 allow/deny;服务端返回 alreadyResolved(别人在桌面先处理了)按成功对待,卡片撤掉而不是弹错
  • 多待决逐个步进,一次只呈现一个,不做全部放行——一次误触不该交出整轮权限
  • 设计令牌新增 onAttention:attention 填充态上的前景色,深浅两侧分别配对,不靠猜

修复

  • ChatRepository 缺 JsonObjectBuilder.put 导入导致的编译失败(run 62)
  • ApprovalDock 去掉 SizeTransform.using(Compose BOM 2026.02 已非稳定 API),改显式 contentKey 按 interactionId 判定换卡
  • sendText / stop / resolveInteraction 统一补传 workspaceIdentity

🤖 Generated with Claude Code

v0.2.17

Choose a tag to compare

@github-actions github-actions released this 17 Oct 19:48

会话列表加载态 + 创建会话失败原因透出

修了什么

看不到工作区下已有的会话
sessions-index 订阅用的是 runtimePolicy:"existing-only":桌面没有为该工作区运行 CLI 时,服务端直接抛 ZCODE_AGENT_RUNTIME_UNAVAILABLE。原实现 catch 后只打一行 warn 就把列表置空,UI 显示「暂无任务」——用户看到的是"我的历史会话没了",实际是"电脑端 runtime 没起来"。

现在:

  • 列表加载态拆成四态(Loading / Ready / RuntimeUnavailable / Error),UI 分别表达
  • 订阅失败按 2s → 5s → 15s → 30s → 60s 退避重试,runtime 起来后自动恢复
  • runtime 不在时保留上一份快照并降饱和,不再清空
  • 「手机先开、电脑后开」这个最常见的顺序不再永远空列表
  • 每个非成功态都有「重试」入口;骨架屏替代一行「加载中…」

创建会话还是不行
原先五条失败路径全部塌成一个 null,UI 只能说"请确认电脑端在线后重试"。现在按原因分流,把服务端真实 reasonCode / message 显示出来:未连接 / 没有工作区 / 电脑端拒绝 / 没返回 sessionId / 其他错误。

交互

  • 思考行折叠箭头 180° 旋转,按压缩放但不叠 ripple(次要信息不抢注意力)
  • 会话流 contentType 按行类型声明,快速滑动不再错配回收池

🤖 Generated with Claude Code