Skip to content

Releases: wjf1/zcode-remote-app

v0.5.0-beta5: 会话内切换模型可选档位 + 修复新会话草稿残留

Choose a tag to compare

@wjf1 wjf1 released this 01 Oct 13:12

里程碑:把思考档位选择延伸到会话内切换模型;修复首轮指令发送后输入框仍残留同一段文字

新增(会话内切换模型可选思考档位)

  • 会话页顶栏模型胶囊改为两级菜单(ConversationScreen):
    • 第一级列出可用模型,带推理档位的模型右侧显示 ▸ 提示;
    • 点选后进入第二级,列出该模型的合法档位(中文:关闭/低/中/高/最高),选择即以「模型 + 档位」一起下发;
    • 无推理档位的模型保持一级点选、直接切换;第二级顶部提供 ← 模型名 返回项;
    • 切换成功后浮层提示带上档位(如「模型已切换为 deepseek/deepseek-v4.1-flash · high」)。

修复(新建会话后输入框残留首轮指令)

  • 首轮指令重复出现在输入框:
    • 根因:createNewSession 成功后会把首轮指令回填到输入草稿(原本作为网络失败兜底),但 firstInput 实际已随 createSession 成功发送,
      导致进入会话后输入框仍留着同一段文字,看起来像「没发出去」;
    • 修复:创建成功后清空 promptDraft 与待发附件,输入框保持空白。

沿袭上一版

  • 新建会话弹窗的「思考档位」选择器(按模型合法档位动态展示)继续生效;
  • 审批/表单应答的跨会话串台修复继续生效。

v0.5.0-beta4: 新建会话可手动选择思考档位

Choose a tag to compare

@wjf1 wjf1 released this 01 Oct 13:00

里程碑:把 PC 端权威的模型思考档位表搬进新建会话弹窗,支持按需选择推理强度

新增(思考档位选择器)

  • 新建会话弹窗新增「思考档位」选择器(CreateSessionDialog):
    • 数据源为 model-selection::getView 解析出的各模型合法档位表(如 deepseek 关闭/低/高/最高、gemini 关闭/中);
    • 切换模型时自动重置档位选择,档位随所选模型动态刷新;无推理档位的模型不展示该选择器;
    • 档位值做中文映射(disabled→关闭、low→低、medium/enabled→中、high→高、max/xhigh→最高),并提示「档位越高推理越深入,但耗时与消耗也更大」;
    • 未手动选择时沿用自动策略(取首个非 disabled 档位),手动指定模型 ID 时档位交回自动挑选;
    • 选中的档位随 createSession 的 config.thought 下发,避免再出现非法档位导致的创建失败。

真机实测:各模型合法思考档位(来自 model-selection::getView)

account:bigmodel-start-plan/GLM-5.3-Flash                -> [low, high, max]
64a1207f-…/deepseek/deepseek-v4.1-flash                  -> [disabled, low, high, max]
64a1207f-…/meta/muse-spark-1.3-contributor               -> [disabled, enabled]
64a1207f-…/Qwen/Qwen3.8-Flash                            -> [low, medium, xhigh]
new-provider/cmd/deepseek/deepseek-v4.1-flash            -> [disabled, low, high, max]
new-provider-2/glm-5.3-flash                             -> [low, high, max]
new-provider-3/gemini-3.8-flash-high                     -> [disabled, enabled]
new-provider-3/claude-opus-4-6-thinking                  -> [disabled, enabled]

v0.5.0-beta3: 修复推理模型思考档位校验失败(Reasoning level is required)

Choose a tag to compare

@wjf1 wjf1 released this 01 Oct 12:47

里程碑:彻底解决新建会话/切换模型时因思考档位(reasoning level)非法导致的「Model creation failed」

修复(推理模型思考档位必须按模型真实合法值下发)

  • 根因定位(真机 + 官方 Host 源码交叉实证):
    • 官方 registry 对带推理能力的模型强制校验 modelSelection.options.reasoningLevel,其值必须落在该模型 config.optionSpecs.reasoningLevel.values 内;
    • 旧实现硬编码下发 thought: "enabled",而该值仅对 Gemini / Claude 等部分模型合法;
    • DeepSeek 系列合法值为 [disabled, low, high, max]、GLM 为 [low, high, max],"enabled" 直接触发
      Reasoning level is required for <provider>/<model> → 会话创建即失败(task_status=error 并归档),
      手机端表现为停在 0 行 draft 且无任何提示。
  • 修复实现:
    • 新增 model-selection::getView 调用(远程桥实测可达),解析出每个模型的合法思考档位表并缓存;
    • 新建会话与「会话内切换模型」均改为按所选模型自己的合法档位下发(优先启用推理:取首个非 disabled 档位;
      例如 deepseek→low、gemini→enabled、GLM→low);
    • 拿不到档位信息时不下发 thought,交由 PC 端按模型默认档位决定,避免再次误发非法值;
    • createSession 日志补充 thought / mode 输出,便于后续排查。

真机实测证据(档位表解析结果)

account:bigmodel-start-plan/GLM-5.3-Flash                -> [low, high, max]
64a1207f-…/deepseek/deepseek-v4.1-flash                  -> [disabled, low, high, max]
64a1207f-…/meta/muse-spark-1.3-contributor               -> [disabled, enabled]
64a1207f-…/Qwen/Qwen3.8-Flash                            -> [low, medium, xhigh]
new-provider/cmd/deepseek/deepseek-v4.1-flash            -> [disabled, low, high, max]
new-provider-2/glm-5.3-flash                             -> [low, high, max]
new-provider-3/gemini-3.8-flash-high                     -> [disabled, enabled]
new-provider-3/claude-opus-4-6-thinking                  -> [disabled, enabled]

v0.5.0-beta2: 修复新建会话模型校验失败与待办审批跨会话串台问题

Choose a tag to compare

@wjf1 wjf1 released this 01 Oct 11:40

里程碑:修复新建会话带模型时校验失败变成 draft/error 的缺陷,彻底解决待办审批跨会话点击无反应问题

修复(核心交互稳定性)

  • 修复审批与表单交互应答会话 ID 串台(ConversationChannel.kt):
    • 根因:原 resolve 优先使用了当前打开的 sessionId,当用户在待办 Tab 或切换到新会话后点击其他会话的审批时,将错误的 session 传给服务端,导致服务端判定 no pending interaction 静默忽略,且界面无反馈;
    • 修复:严格优先绑定 approval.sessionId / el.sessionId,杜绝跨会话串台;当未进入具体会话时,自动基于当前活动工作区构建发送目标,确保在任何 Tab 点击审批均能成功提交;
    • 接入乐观消除与即时反馈:点击允许/拒绝瞬间卡片立即消除并同步系统通知栏,失败自动回滚并弹出原因,待办页与会话页均能实时显示操作反馈。
  • 修复新建会话推理模型(如 Gemini)校验失败报错(ConversationChannel.kt):
    • 根因:官方 Host 对 Gemini 等带有推理能力的模型硬性校验必须提供 reasoning level,此前只传了 provider 和 model,服务端抛出 Reasoning level is required,导致首轮输入未执行、会话刚创建就直接失败进入 draft/error 态;
    • 修复:显式提供 thought: "enabled" 与 mode: "yolo",并预填指令草稿,首轮会话稳定启动推进。
  • 优化会话空状态与发送按钮常驻视觉引导(ConversationScreen.kt):
    • 修复空会话时死板显示“正在同步会话内容…”的问题,草稿态优雅展示“新会话已就绪,在下方输入指令发送给 PC 端 Agent 开始任务”;
    • 输入栏右侧常驻发送图标占位(未输入时浅灰禁用,输入文字立即高亮激活),清晰指示发送入口。

v0.5.0-beta1: 移动端架构重构、新建会话与模型目录直读 (实测 7 个模型)

Choose a tag to compare

@wjf1 wjf1 released this 01 Oct 02:55

里程碑:重构为底部 3-Tab 现代移动端架构,移植官方 ZCode 设计系统规范,集中式待办看板、独立设置中心、新建会话与模型目录直读 (实测 7 个模型)

新增(架构重构、新建会话与会话内动态切换模型)

  • 支持移动端远程拉取桌面端模型目录并自主选择(Remote Model Catalog Fetching):
    • 核心技术突破:通过远程桥必开的 system::info 获取真实桌面用户主目录(homedir),结合 file::readTextFile 直接读取 ~/.zcode/v2/provider_config.json,彻底攻克远程 RPC 作用域限制,实机成功解析全部可用模型目录(涵盖 commandcode、Gemini、DeepSeek 等 7 个配置模型);
    • 三路模型数据保障:结合配置文件直读、WorkspaceConfigChannel 配置流订阅与实时会话快照提取,保证任何情况下均有模型数据显示;
    • 支持手动指定模型 ID:新建会话弹窗支持手动输入任意模型 ID(如 deepseek-r1 / glm-4.5 / claude-3-5-sonnet)显式指定,留空则智能跟随 PC 默认。
  • 会话内实时动态切换模型(In-Session Model Switching):
    • 基于官方 V4 原生命令信封机制(zcode-agent::sendConversationCommandV4,type = "switchModelConfig"),带 baseRevision CAS 防冲突校验;
    • 沉浸式会话详情页顶部 AppBar 新增模型状态胶囊(如 gemini-3.8-flash-high ▾),点击可展开切换当前工作区可用模型列表;
    • 切换成功后服务端实时广播 state.updated 增量帧更新本地会话快照,下一轮对话指令直接以新模型驱动推理与执行。
  • 支持移动端原生发起新会话(New Session):
    • 基于官方 V4 协议原生信封机制(zcode-agent::sendConversationCommandV4,type = "createSession", sessionId = null);
    • 会话工作台顶栏右侧新增「+ 新建会话」快捷操作,支持任务指令文本与系统语音识别直接填充;
    • 创建成功后自动同步订阅并无缝跳转至沉浸式对话控制台,直接查看 Agent 的首轮推理与执行过程。
  • 底部 3-Tab 移动端架构(对标 GitHub Mobile / Claude Mobile):
    • 彻底淘汰此前单页垂直杂乱堆叠的形式,建立清晰的 3 大专属视窗(MainActivity.kt):
      1. 会话 (SessionsTab):纯粹的会话流与工作区列表,顶部紧凑设备指示,支持标题/路径搜索与状态快速筛选;
      2. 待办 (ApprovalsTab):专属集中式审批与表单问答看板,底部导航栏实时待办徽章(Badge),卡片展示等宽命令预览与倒计时进度条;
      3. 设置 (SettingsTab):独立的设备管理与控制中心,彻底剥离所有低频配置项。
  • 全局物理返回键拦截(BackHandler):
    • 在会话详情页、扫码页、保活教程页中拦截系统侧滑返回手势,平滑退回主屏列表,彻底杜绝手势误杀退出的问题。
  • 状态持久化:
    • 使用 rememberSaveable 保持 Tab 状态与会话状态,屏幕旋转或分屏时不再重置。

优化(对标官方 ZCode 工业级设计规范)

  • 官方色彩体系与微边框(ui/theme/Theme.kt):
    • 完整接入官方 theme-zai-dark(#161616)与 theme-zai-light(#F8F8FA)配色体系;
    • 引入官方标准的 15% 微边框(Hairline Border)替代粗糙厚重阴影,视觉层次通透分明;
    • 引入官方 Trajectory 四色轨迹语义:用户消息蓝、助手青、思考紫、工具琥珀橙。
  • 全面淘汰 Emoji,接入 Material 矢量图标:
    • 移除原界面中充斥的 ⚠️、🔧、🧠、⏳、📎、🎤、✕ 等 Emoji,全部替换为规范的 Material 矢量图标,统一 1.5dp 线宽。
  • 官方同款深度思考组件(ReasoningBlock):
    • 采用紫色思考轨迹胶囊 + AnimatedVisibility 平滑展开高度动画 + 官方标志性左侧纵向弱导向竖线,支持一键复制。
  • 官方紧凑工具卡片(ToolCallCard):
    • 紧凑工具类型徽标 + 成功/失败/运行中状态徽标,支持终端框格式化展开。
  • 代码块与 Markdown 渲染优化(MarkdownView.kt):
    • 修复代码块浅色模式下写死纯黑背景的问题,自动适配浅灰色/深灰色底色;
    • 修复引用块(Quote)左侧竖线高度无法撑满文本的问题;
    • 增加代码一键复制的成功绿色勾选状态反馈。
  • 全面屏边缘防遮挡(Edge-to-Edge):
    • 补全 navigationBarsPadding,手势导航横条不再遮挡输入框与底部导航。

v0.4.0-beta6 · 会话排版全面对齐桌面版 + 设置版本与更新闭环

Choose a tag to compare

@wjf1 wjf1 released this 30 Sep 18:10

会话排版全面对齐桌面版体验,设置面板体现软件版本与在线更新闭环。

1. 会话排版彻底对齐桌面版:

  • 纯 Compose 原生 MarkdownView 引擎:
    • 助手消息不再是简陋的纯文本或局促在 300dp 狭窄细长框内,放宽至宽幅卡片排版;
    • 完整解析并渲染各级标题(#~####)、粗体(**bold**)、斜体、行内代码与删除线;
    • 代码块独立卡片:深色背景、顶部语言标签、横向平滑滚动(horizontalScroll)、等宽字体,支持一键复制代码到剪贴板(带轻提示);
    • 列表与引用:无序列表圆点与有序列表数字悬挂缩进;引用块左侧带主色强调竖条与柔和浅色背景。
  • 深度思考过程(Reasoning)重构:
    • 收起时为精致优雅的胶囊折叠条:▾/▸ 🧠 深度思考 (N 字符);
    • 展开后接入 Markdown 排版分层渲染,并支持一键复制完整思考过程,彻底解决此前挤在小灰块里密密麻麻英文排版糟糕的问题。
  • 消除空白工具调用大卡片:
    • 工具调用改用紧凑芯片展示:🔧 工具名 · 状态 [详情],仅在工具名或内容非空时展示,收起时高度极小,不再出现空白突兀大灰框。
  • 状态枚举全中文本地化:
    • 完善 completedSuccess -> 已完成、completedError -> 执行出错、completedInterrupted -> 已中断、running -> 运行中、idle -> 空闲 等全部状态枚举,消除生硬英文。

2. 设置面板软件版本与更新闭环:

  • 软件版本明确展示:设置面板中清晰展示当前已安装版本:v0.4.0-beta6 (Build 10);
  • 在线拉取与检查更新:
    • 提供「检查更新」按钮,对接 GitHub Releases API;
    • 支持配置私有仓库 GitHub 访问 Token(保存在本地加密设置中,免受私有仓库权限限制);
    • 发现新版本时弹出新版本详情卡片,显示最新 tag、更新日志摘要,并提供**「浏览器下载 APK」与「复制下载链接」**;
    • 若已是最新,显示绿色勾选提示。
  • 电脑端推送更新指南:
    • 附带电脑端快速更新说明:手机连接电脑后在仓库根目录执行 ./build.sh install 即可一键编译推送覆盖升级。

升级说明:

  • 证书签名指纹与历史版本一致(1D:46:E9:…:24:BE:55),已装设备可直接覆盖升级。
  • 16 KB 页对齐全检 PASS。

v0.4.0-beta5 · 相机扫码全面重构与修复

Choose a tag to compare

@wjf1 wjf1 released this 30 Sep 17:53

彻底重构扫码模块,修复「APP 扫二维码功能无效,只能手动输入链接码」的问题。

根因与修复:

  1. 图像物理朝向校准:手机竖屏手持时,相机传感器物理方向为横向(rotationDegrees = 90 或 270)。旧实现直接将未旋转的 YUV 数据送入 ZXing,导致图像在解析器视角下为 90 度横倒;PlanarYUVLuminanceSource 不支持旋转,密集二维码无法识别。现根据 rotationDegrees 对 Y 灰度平面进行顺时针像素旋转校准,送入正向图像。
  2. 抗屏幕摩尔纹与二值化兜底:开启 TRY_HARDER 与 UTF-8 编码;优先使用 HybridBinarizer,失败时立即回退 GlobalHistogramBinarizer(显著提升电脑显示器反光和点阵屏幕下的识别率);finally 块强制复位 MultiFormatReader.reset() 状态机。
  3. 清晰度保障:配置 ResolutionSelector 钉住 1280x720 目标分辨率,确保 152 字符高密度二维码矩阵边缘不失真。
  4. 触摸对焦与视觉辅助:支持点击屏幕任意位置重新对焦测光(CAF+AF);叠加绿色取景参考线框,增加防重复配对锁。

升级说明:

  • 证书签名指纹与历史版本一致(1D:46:E9:…:24:BE:55),已装设备可直接覆盖升级。
  • 16 KB 页对齐全检 PASS。

v0.4.0-beta4 · 互踢死循环修复

Choose a tag to compare

@wjf1 wjf1 released this 30 Sep 17:11

修复互踢死循环:App 不再参与终端抢占,被踢后停在横幅等手动恢复。

现象:App 与桌面端「移动端远程控制」面板(内嵌官方 Web 页,同为同账号 terminal)反复互踢——被踢 3s 后自动重连抢回名额又把对方踢掉,3s 级死循环直至面板关闭(桌面端日志 23:30–23:40 全程还原)。

修复:KICKED / 配对失效 / 协议不匹配三类终态失败后不再自动重连(此前 WS 关闭回调无条件重连,绕过了终态语义)。被踢后 App 停在「控制权已在别处接管」横幅;关闭桌面端面板后手动点「断开→重新连接」恢复。断网等非终态失败仍保持自动重连。

使用建议:手机 App 与桌面端远程控制面板避免同时开启(官方协议:同账号同时刻只允许一个终端在线)。

升级说明:签名同指纹可覆盖升级。minSdk 31 / targetSdk 35。

v0.4.0-beta3 · 16KB 页对齐修复

Choose a tag to compare

@wjf1 wjf1 released this 30 Sep 16:29

消除 Android 15「应用兼容性」警告(16 KB 页对齐)。

修复:升级三个含 16 KB 未对齐原生库的 AndroidX 依赖——CameraX 1.3.4→1.4.2、datastore 1.1.1→1.1.7、graphics-path 钉住 1.0.1(API 兼容,无代码改动)。

验证:新增检查脚本 tools/_16k_check.py(ELF LOAD 段 + zip 偏移双重对齐),修复前 4 FAIL → 修复后 16/16 全 PASS。

升级说明:签名同指纹可覆盖升级;该弹窗仅出现在可调试应用上(release 本不弹),此版从根上消除。minSdk 31 / targetSdk 35。

v0.4.0-beta2 · 真机验收问题修复

Choose a tag to compare

@wjf1 wjf1 released this 30 Sep 15:06

修复真机验收(2026-09-30)发现的两处 App 缺陷。

修复:发送永久卡死(P2)
桥断开瞬间点发送,命令被投进已死连接、永远等不到 ack,App「发送中」状态永久卡住(只能重启)。现在:

  • RPC 层新增 15s 超时兜底(timeoutMs + 主线程 Handler)
  • 桥重建/通道复位时把旧桥挂起请求全部以错误收场(failPending)
  • 发送 / 审批应答 / 停止 三处命令统一超时
  • 失败提示停留时间 4s → 8s(真机上 4s 易被错过)

真机验证 PASS(飞行模式断网复现):sendText chars=2 → rpc timeout id=12 after=15000ms → UI 自动复位。

升级说明:签名与 v0.3.0-m3 同指纹,已装设备可直接覆盖升级。minSdk 31 / targetSdk 35。