# App 更新说明

# 1.0.41
- 修复 Android App 内文件下载报错 404 的问题：下载地址不再错误地把当前对话路径拼进去
- 修复下载时 `CookieManager` 在非主线程调用导致的崩溃提示

# 1.0.40
- 修复 Android App 内文件下载后系统提示「下载失败」的问题：
  - 放弃系统 DownloadManager，改为应用内下载到私有目录
  - 下载完成后弹出系统「分享文件」面板，让用户选择保存到下载管理、QQ浏览器、微信等目标
  - 仍保留 WebView Cookie，下载接口可正常鉴权

# 1.0.39
- 修复 Android App 内图片/视频「从本地发送」无响应的问题：在唤起系统文件选择器前主动请求 `READ_MEDIA_IMAGES` / `READ_MEDIA_VIDEO` 权限，拒绝后支持再次请求并引导到系统设置
- 修复 Android App 内所有下载（文件卡片、markdown 下载链接）提示「下载启动失败」的问题：
  - 前端在 App 内优先调用 `AndroidDownloadBridge`
  - Android 端将相对下载地址补全为绝对地址，并携带 WebView 登录 Cookie，避免 401 / 无效链接
  - Android 10+ 下载目录异常时自动回退到 DownloadManager 默认位置
  - Android 9 及以下未授予存储权限时先请求权限再开始下载

# 1.0.38
- PDF 文件卡片改为前端 `vue-pdf-embed` 渲染：在卡片下方直接滚动预览多页，不再调用浏览器原生 PDF 预览或 Android 原生 PDF 预览 Activity
- 与桌面端保持一致的文件卡片交互：PDF 和其他类型文件统一头部 + 下方预览布局

# 1.0.37
- 修复 Android App 内 PDF 文件卡片无法 inline 显示的问题：WebView 不支持 iframe PDF，改为卡片下方显示占位区，点击后调原生 PDF 预览
- 修复进入含 PDF 卡片的对话自动弹出「已开始下载」的误报：移除 WebView `setDownloadListener`，避免把 PDF 加载请求误判为下载
- 修复文件卡片点击下载无反应的问题：保留 `AndroidDownloadBridge` 走系统 DownloadManager
- 修复图片/视频「从本地发送」仍然唤起相册/Photo Picker 的问题：Android 端文件选择器改用 `ACTION_OPEN_DOCUMENT` 走系统文件管理器
- 前端常规设置新增「上传诊断日志」按钮，便于排查 App 端问题

# 1.0.36
- 修复 Android App 内文件卡片点击「下载」无反应的问题：前端优先调用 Android DownloadBridge，WebView 同时注册 `setDownloadListener` 兜底，使用系统 DownloadManager 下载到 Download 目录
- PDF 文件卡片移除单独的「预览」按钮，改为与桌面端一致的卡片下方 inline 预览（iframe），视觉和交互统一
- 修复 Android App 内图片/视频「从本地发送」容易失败的问题：
  - 延长文件选择器关闭后的 backdrop 点击屏蔽时长，避免 touch 穿透误关选择弹窗导致上传中断
  - Android 端统一使用 `ACTION_GET_CONTENT` 选择器（按 `image/*` / `video/*` 过滤），避免不同 ROM 的相册/Photo Picker 返回临时 URI 导致上传失效
  - 上传链路增强对 Android WebView 返回文件无文件名/无扩展名的兼容：前端根据 MIME 类型补全文件名，后端在 filename 缺失时自动推断兜底文件名

# 1.0.35
- 新增 PDF 文件原生预览：集成 AndroidPdfViewer，点击卡片「预览」按钮可在 App 内直接查看 PDF，不再依赖浏览器

# 1.0.32
- 识别引擎改为预初始化：模型下载完成后立即在后台加载，用户点击时直接可用（不再每次点击等3-5秒初始化）
- startRecordingInternal 增加详细日志，便于排查录音问题

# 1.0.31
- 修复语音识别无结果：去掉多余的 decode() 调用，对齐 sherpa-onnx Android 官方 API（getResult 内部已含 decode）
- recognizeSegment 增加识别结果详细日志

# 1.0.30
- 修复语音识别无声问题：前端处理 initializing 状态，防止初始化期间重复触发 startListening 导致录音永不停止
- Android 端增加启动取消机制，初始化期间按停止不会意外开始录音
- 完善录音链路日志，便于后续调试

# 1.0.29
- 暂时禁用 VAD（Android 端 Silero VAD 存在 Native 兼容性问题），改为整段识别模式
- 录音结束后一次性识别，效果无差异，彻底消除闪退

# 1.0.28
- 修复 VAD 初始化导致闪退：maxSpeechDuration 30f→5.0f（默认值），VAD 失败时降级为整段识别不崩溃

# 1.0.27
- 语音调试日志改为直接上传服务器（/api/voice_debug），无需手动找文件

# 1.0.26
- 修复点击麦克风后闪退问题：initEngine 增加文件完整性前置校验，numThreads 降为 1 降低内存压力
- 新增「保存日志」按钮，调试日志写入手机 Download/voice_debug.log
- 下载/删除前自动释放引擎资源，避免文件锁定导致异常

# 1.0.25
- 修复下载进度一直显示 0% 的问题（整数除法 bug）
- 新增模型文件完整性校验（文件大小 ±5% 容差），避免下载中断后显示“已下载”
- 新增「删除模型」按钮，可清理不完整的模型文件
- 模型文件移至 agents 代码目录外（/opt/agent/voice_models/），避免部署时被覆盖

# 1.0.24
- 修复语音按钮在首次启动（模型未下载）时不显示的问题：VoiceBridge 改为随 App 启动即注册，不再等待模型下载完成
- 修复个人空间中「下载语音模型」按钮误提示「仅在 App 内支持」的问题

# 1.0.23
- 新增端侧语音输入功能：集成 sherpa-onnx SenseVoice int8 离线语音识别
- 支持中英混说 + 自动标点，完全离线运行，无需网络
- 语音模型约 228MB，首次使用自动下载（可在「个人空间 → 语音模型」手动下载）
- 输入框语音按钮仅在 App 端显示，桌面端隐藏
- 新增录音权限请求（RECORD_AUDIO）

# 1.0.22
- 修复 Android App 内从本地发送图片/视频无效的问题：补充 Android 13+ 所需的媒体读取权限（`READ_MEDIA_IMAGES` / `READ_MEDIA_VIDEO`）
- 修复 Android App 文件选择器在 Android 13+ 上回调丢失的问题：将已废弃的 `startActivityForResult` 升级为 `registerForActivityResult`（Activity Result API）

# 1.0.21
- 修复 Android App 内手机端展开“对话记录”时仍沿用旧宽度的问题，面板宽度与桌面端对话侧栏保持一致
- 修复 Android App 内对话记录展开面板顶部残留系统栏空白的问题，内容从面板顶端开始显示

# 1.0.20
- 新增“新用户欢迎弹窗 + 新手教程”持久化机制：普通账号首次进入会提示是否开始教程，选择“开始吧”或“不再提示”后将状态写入 `data/users.json`
- 新增后端教程状态接口（查询/更新），并排除宿主机模式用户，避免 host 模式触发教程弹窗
- 修复宿主机模式切回普通账号登录时可能遗留 `host_mode` 状态，导致教程提示判定异常的问题
- 优化新手教程欢迎弹窗视觉风格：按钮与系统现有主题风格统一，支持多主题配色

# 1.0.19
- 修复 Android APK 内「个人空间-新手教程」期间无法上下滚动的问题：教程遮罩层现在会正确转发触摸滑动到可滚动容器
- 优化教程滚动目标识别：优先命中当前可滚动页面区域，减少 WebView 场景下滑动失效
- 调整软件更新页版本展示：移除括号内的构建代数，仅显示语义版本号（如 1.0.19）

# 1.0.18
- 新增完整「新手教程」系统（高光 + 悬浮说明窗）：覆盖桌面端与手机端核心功能入口
- 教程交互统一优化：仅保留“下一步”，支持自动点击与点击特效，避免误触真实页面
- 手机端教程新增专属流程：菜单展开、对话记录、工作文件、新建对话、模型/思考模式、个人空间全链路引导
- 教程定位与层级修复：高光区域更贴合小目标；教程弹窗始终保持最高图层，不再被移动端菜单遮挡
- 个人空间教程体验优化：教程期间支持滚动查看内容；移动端标签自动横向滚动到可见后再点击；桌面端标签自动纵向滚动后再点击
- 新增“连接状态指示灯”教程步骤：绿色表示连接正常，红色表示与后端断开
- 教程入口页精简：移除“已完成/重新开始”状态文案，统一为“开始新手教程”
- 主题命名文案统一：将“Claude 经典”调整为“经典”，并同步更新相关引导文案
- 模型偏好页优化：移除“默认思考模型”中“思考模式”的“推荐”标记
- 修复“对话回顾”弹窗多主题适配问题：经典/明亮/夜间主题下的背景、边框、文本、按钮与状态样式统一跟随主题变量

# 1.0.17
- 登录/注册页改为 Vue 实现，统一前端技术栈
- 登录/注册页接入主题变量体系，自动跟随已保存主题（Claude / 浅色 / 深色）
- 移除登录/注册页独立主题切换控件，主题入口统一由主界面个人空间管理

# 1.0.16
- 工作区顶部品牌图标改为内联 SVG 渲染（不再依赖静态路径加载）
- 修复深色/浅色主题下 logo 颜色适配问题，跟随主题文本色显示

# 1.0.15
- 修复图片查看链路：`view_image` 工具结果可正确附带图片内容，降低“识别成其他图片/内容”的误判
- 新增「强约束系统」开关（个人空间）：可分别约束 terminal 系列与子智能体系列工具，要求先阅读对应 `skills/*/SKILL.md`（且仅对已启用 skill 生效）
- 优化输入与消息气泡换行策略：达到最大宽度即换行
- 修复深色模式下 `run_python` 结果区显示异常，代码与输出统一为白色文字

# 1.0.14
- 移除前端「实验功能」中的 Liquid Glass 实验页与悬浮组件，减少无关试验功能干扰
- 删除 `scripts/liquid-glass-demo` 目录（含 node_modules/.next），显著降低部署压缩包体积

# 1.0.13
- 修复工作区连接状态指示灯在轮询模式下常亮问题：新增连接探活心跳，断连时可正确切换为离线状态
- 调整状态灯视觉：离线红灯与在线绿灯均支持扩散呼吸特效

# 1.0.12
- 进一步修复手机端菜单点击反馈：增强去除系统默认蓝色点击高亮框（含快捷菜单按钮按压态）

# 1.0.11
- 优化手机端点击反馈样式：移除默认蓝色点击高亮矩形，减少触控干扰感

# 1.0.10
- 手机 App 左上角菜单新增“刷新页面”入口（仅 App 端显示）
- 加载界面（正在连接服务器）新增“刷新页面”按钮
- 继续优化 App 内更新下载链路稳定性

# 1.0.9-test1
- 测试版本：验证 App 内下载更新链路（DownloadManager）是否在不同浏览器环境下稳定工作

# 1.0.9
- 修复 App 内点击“更新”后依赖外部浏览器下载导致部分机型失败的问题
- 新增 Android JS Bridge 下载通道：优先使用系统 DownloadManager 直接下载 APK
- 前端下载逻辑增加桥接优先与浏览器回退，提升下载成功率

# 1.0.8
- 同步最新对话压缩体验：压缩中状态提示更稳定，压缩完成后反馈更清晰
- 优化压缩后会话切换与列表刷新表现，减少需要手动刷新的情况
- 修复电脑端摘要行与正式输出内容的对齐问题

# 1.0.7
- 应用图标替换为新的机器人插画 PNG 版本

# 1.0.6
- 应用图标替换为指定 JPG 图片资源
- 更新 AndroidManifest 图标引用（icon / roundIcon）

# 1.0.5
- 手机端「工作文件」侧栏最大宽度由 86% 提升到 100%
- 保持默认 60% 起始宽度，并在内容需要时继续自适应扩展

# 1.0.4
- 调整手机端「工作文件」侧栏宽度策略：默认按 60% 屏宽展开
- 当内容较宽时可自适应扩展侧栏宽度（上限 86%），减少内容被截断
- 保持「对话记录」侧栏宽度逻辑不变

# 1.0.3
- 修复 App 端版本读取时机，避免显示“当前版本未知(?)”
- 进一步隐藏 App 端页面滚动条（保留页面内部可滚动区域）

# 1.0.2
- 修复 App 端“当前版本显示未知”问题（版本号改为优先从 Android JS Bridge 读取）
- 优化“软件更新”页更新日志展示：长内容在卡片内滚动，不再无限拉长
- 强化 App 页面滚动隐藏补丁，减少出现系统滚动条的情况
- 更新上传脚本：支持自动打包 + 上传，并同步版本号与更新说明

# 1.0.1
- 移除 App 页面上下滚动条（仅 App 壳生效）
- 优化 App 内页面样式补丁与资源版本参数

## 1.0.0
- 首次发布 Android WebView 壳应用
- 适配移动端抽屉宽度与状态栏主题联动
- 新增个人空间「软件更新」页（仅 App 端显示）
