Skip to content

Latest commit

 

History

History
579 lines (563 loc) · 177 KB

TODO.md

File metadata and controls

579 lines (563 loc) · 177 KB

TODO

  • 状态菜单显示已连接遥控器的电量(#860)

    • 已实现。2026-11-05 使用小米蓝牙遥控器 2 Pro 实测,菜单和连接页均为 94%,连续打开两次各显示一行。未知读数、断开及多设备已由自动化覆盖,菜单外观截图待补。详见 Testing/MenuBarVisibility.md 用例 6。
  • 优化菜单栏点击与主界面入口(#799)

    • 鼠标左右点击统一显示状态菜单;“打开主界面…”置顶并保留原有状态和操作。
    • 2026-11-02:公共兼容构建已通过左右点击、再次点击图标/点外部/Esc 收起、键盘选择主界面入口及隐藏 Dock 的本机验收;完整截图和中英文浅深色外观验证仍待补齐,详见 Testing/MenuBarVisibility.md。
  • 完成加密诊断日志与 Sentry 受控验收

    • 本地日志已改为每次启动独立的公钥包裹 AES-GCM .rmlog;App 不保存解密私钥,公开宿主不提供解密能力。
    • 用户主动发送时,Sentry 只接收公开白名单事件和可选私有 provider 的类型化安全事件;不读取本地日志,不上传身份、真实订单/支付标识、用户内容、设备身份或第三方 App 私有状态。
    • 自动化测试和 DSN 为空路径已完成;私有业务事件可跨重启保留并仅在成功发送后标记。2026-09-27 已完成内部解密工具和受控 Sentry 测试项目验收,包含真实网络发送、敏感字段零命中、重复发送去重、密文权限与内部解密。生产公钥轮换/保管和真实用户现场日志支持流程完成后再勾选。
    • 2026-10-01:内部包构建与最终 App 校验已支持强制要求有效的 32 字节 Curve25519 公钥,避免再次分发签名公证通过但无法生成 .rmlog 的包;生产密钥保管和轮换仍未完成。
    • 2026-10-04:修复可选公钥缺失时的 App 校验误判;六个真实脚本回归用例通过,强制模式仍拒绝缺失或非法公钥。签名与公证结果单独记录。
    • 2026-10-08:预览版 staging 在公证前发现诊断配置写入导致 App 签名失效;已加入“注入配置后重新签名”及签名阶段默认超时修复,待修复合入后重新完成双架构签名、公证、日志和 Sentry 验收。
    • 2026-10-08 候选:公开安全事件新增 7 天、256 条跨重启留存;配置解码错误仅发送稳定分类。自动化覆盖重启、白名单、容量、过期和发送确认,实际 App 与 Sentry 网络验收仍待完成。
    • 详见 feature/encrypted-diagnostic-logs/README.md 与 Testing/EncryptedDiagnosticLogs.md。
  • 定位并修复 RC003 长会话尾部缺失

    • 2026-10-18:已交付 RC001/RC003 接近 60 秒的菜单栏提醒:53 秒黄色闪烁并播放一次系统提示音,57 秒红色闪烁;Build 248 的 RC003 真机记录见 Testing/StatusBarConnectionAppearance.md。该提醒不延长或强制结束会话,长会话尾部完整性问题仍保持未完成。
    • 现有现场分析记录样本时长约占会话时长的 84%~96%;该比例不能证明无线到达率或系统丢包根因。
    • 2026-10-13:PR 653 撤回独立蓝牙队列与跨线程取值改动。只补入口、拒绝、解码、缓冲、路由、输出、录音和现有转写结果的关联日志。
    • 高频通知只累计;新 ATVV 诊断每 10 秒一次进度、每段最多 12 条进度、最多 20 条诊断行。输出未排完或归属不明时不宣称成功。
    • 同日补充软件键 down/up 提交时序、缓冲溢出/取消/配置失败样本,以及无 STOP 时的两秒停收观察与单次恢复日志;观察器只读,不结束会话。
    • 待办:真实 RC003 复现长句尾字、首字延迟、连续会话和断连恢复;按新日志缩小范围后再确认根因和修复。
    • 记录见 Bug 诊断记录。
  • 蓝牙遥控器系统自定义名称(#406)

    • 已接入按设备身份读取名称、历史编号和事件刷新;A2854 独立 API 实验已验证改名读取和重连身份稳定,并补充序列号默认名识别;候选程序实际运行、截图及端到端验收待完成,保持 Draft。
    • 2026-09-20:已按跨平台合同把已连接遥控器卡片统一为“通用型号 / 系统蓝牙名称 / 连接与电池状态”三行,并按通用型号的拼音/拉丁化结果稳定排序;当前连接的完整系统名只在内存显示,仍待生产窗口与多型号真机验收。
    • 验证入口:BluetoothDeviceNames。
  • 修复蓝牙扫描停滞后重连循环静默终止

    • 2026-10-11 更新 #632:根因是 CoreBluetooth 扫描在没有回调时不会结束,扫描尝试永久停留在 .scanning,导致后续重连循环不再发起,表现为蓝牙连接在用户侧长时间无法自行恢复。修复新增 BluetoothScanRecoveryPolicy 扫描窗口(20 秒)与退避重试,超过窗口后按策略结束本次扫描并重新发起发现流程,避免静默终止。
    • 已覆盖扫描窗口超时、取消、重试与恢复路径的自动化回归,公开宿主与蓝牙生命周期测试通过。真实遥控器在休眠唤醒、系统蓝牙开关与干扰环境下的恢复表现仍按测试手册人工验收。
    • 记录见 Bug 诊断记录。
  • 统一 SayAll 品牌、官网与当前上架战略

    • App 英文名称统一为 SayAll,中文名称继续使用“无线麦”,官网统一为 https://sayall.app。
    • 2026-08-17 补齐发布产物名称层:canonical bundle 与安装目标统一为 SayAll.app,英文显示 SayAll、简中显示无线麦;RemoteMic 可执行文件、com.hd838a.RemoteMic Bundle ID 和 Remote-Mic-* 发布资产文件名继续保持兼容。安装器仅在 Bundle ID 匹配且新 App 已验证后,把旧 Remote Mic.app / 无线麦.app 移到目标卷对应的废纸篓;Trash 不可用时保留旧 App。
    • 2026-08-19 修复路径改名后的内测权限身份:Push 候选 CI 只保留无签名凭据的 ad-hoc exact-SHA 证明,不作为分发包;私有 Draft 与公开 Pre-release 必须由受保护工作流使用正式 Developer ID Team 签名并公证,真实同机升级权限延续仍按 Testing/MacPreviewPermissionContinuity.md 验收。
    • Mac App 继续采用独立下载方式维护,Mac App Store 上架暂时暂停;当前只推进 iOS App 与内嵌 Apple Watch App 上架,且不拆分商店专用版本。
  • 使用 Cloudflare CDN 加速 Mac 下载

    • 官网固定入口为 https://download.sayall.app/mac,只解析 GitHub 最新正式版并跳转到同域名的版本化 DMG,不把 Pre-release 作为默认下载。
    • Sparkle 的稳定和预发布 feed 使用 download.sayall.app/mac/channels/<channel>/ 固定通道;Cloudflare 边缘解析公开 GitHub Releases 并重定向到同域版本化 appcast,客户端不再直接请求未认证 GitHub Releases API。版本化 ZIP 与本地化更新说明继续使用 download.sayall.app/mac/releases/<tag>/。
    • GitHub Releases 继续保存全部签名、公证资产;发布后必须从 GitHub 与 CDN 分别下载并逐字节比较,同时验证 HEAD、Range、签名、公证和候选更新发现。完成公开 Worker、官网和 1.8.12 Pre-release 验证后再勾选。
    • 2026-09-03:补充 Apple Silicon / Intel 的 stable、preview 四个 appcast 通道;发布后必须验证 preview 通道与新候选 appcast 一致,stable 通道仍与动态读取的正式版一致。1.9.21 的签名、公证、真实 Sparkle UI 和公开字节验收仍由统一 Mac 预览版流程完成。
  • 在 Mac App 提供低门槛问题反馈入口

    • “关于”页面已增加“问题反馈”,点击后由默认浏览器打开 SayAll 工作台的最低权限入口;状态栏不再重复显示,不传递账号、设备标识、Token 或动态口令。
    • 自动化已覆盖固定入口地址;真实浏览器跳转、自动进入排行榜及提交反馈仍需人工验收,通过后再标记完成。
    • 2026-10-03 已用真实浏览器打开 Mac 最低权限入口,确认会进入 SayAll 工作台投票排行榜并显示“提交新事项”;未实际创建测试反馈,避免污染线上数据,因此本条仅剩真实提交闭环待验收。
  • 通过 SayAll Workshop 受控 Agent 处理需求与 Bug

    • Agent 只能从 Workshop 生成的 Issue 和固定基础提交开始,只读初检、查重和计划完成后,必须经过管理员批准或受控测试环境的正式策略事件,才能生成 Patch、分支和 Draft PR。
    • Agent Bot 不得直接写入 main,不得读取发布、签名、私有依赖或生产 Secret;完整 macOS CI 和真实用户验收仍按 Testing/AgentAutomation.md 执行。
    • 当前仅接入 remote-mic-app,测试阶段禁止自动合并和生产部署;测试完成后恢复 admin-required。
  • 在 Mac App 提供官网分享入口

    • 分享模块位于个人中心顶部,设置页和侧边栏不再显示分享入口;二维码与复制按钮使用同一个带 utm_source=mac_share 的本地化官网链接。
    • 链接和二维码完全在本机生成,不联网、不引入第三方依赖;中英文界面、真实扫码、系统剪贴板和 800×650 布局仍需按测试手册完成用户验收。
    • 2026-10-03 重新通过链接规范化、二维码与剪贴板同源、复制失败处理及设置页接线自动化;本次分享迁至个人中心,并完成中英文浅深色截图及 1020×772 实际窗口导航、展开和滚动验收(见 历史截图证据已按仓库清理规则移出)。本条保持未完成,手机真实扫码与系统剪贴板验收仍待完成。
  • 建立可选硬件信号模拟回归门禁

    • 私有模拟器 V1 已覆盖小米遥控器 12 个原始按键、36 个短按/双击/长按场景、7 个长按连发场景,以及 BLE 分片、sync、异常、重连、旧回调和双设备隔离;模拟依赖仅在测试环境变量存在时加载,普通开源构建不依赖私有仓库。
    • 自动化只代表 L0–L2 进程内协议和状态响应通过;CoreBluetooth、IOHID/DriverKit、Power 系统行为、射频、音质和安装环境继续由系统级与 RC001/RC003 真机门禁负责。
  • 建立 macOS / Windows 共用的硬件功能兼容合同

    • Testing/HardwareCompatibilityContract.md 统一设备能力声明、按键与触摸事件生命周期、单击/双击/长按、按住连发、连续快速按、App 切换器、多设备隔离、电池状态、语音触摸互斥、异常恢复、脱敏日志、实机矩阵和候选/兼容/推荐门禁。
    • 平台底层实现可以不同,但用户可观察行为必须一致;硬件或平台缺少能力时必须明确标记不支持或未知。macOS 与 Windows 必须分别完成真实硬件、虚拟麦克风和最终用户流程验收,一个平台的结果不能替代另一个平台。
    • 原 Testing/HardwareVoiceAudioContract.md 保留为强制语音子规范,继续执行“首字快、尾字全、正常不 flush”。
  • 修复 MiRemoteV 音频通道停止后仍被误判为就绪

    • 宿主健康检查现同时验证所选设备、音频引擎、播放器播放状态和实际设备绑定;播放器停止时不再继续接受并丢弃语音缓冲。
    • 蓝牙、iPhone、Apple Watch、Web、测试音和长录音开始前会读取实时健康状态,异常时自动重建输出通道,不再要求用户重复选择 MiRemoteV 2ch 才能恢复。
    • AVFoundation 最小复现和自动化回归已通过;真实 MiRemoteV、睡眠唤醒、RC001/RC003 与第三方语音工具仍按 Testing/MiRemoteVAudioStaleRecovery.md 验收。
    • 2026-09-12 补充启动兼容恢复:已完成配置但当前 UID 为空时,优先恢复仍可枚举的最近一次明确选择;只有一个受支持候选时才允许历史配置恢复,多候选或历史设备缺失均不猜测。自动化覆盖持久化、恢复决策和失败日志,真实重启与第三方工具验收仍待完成。
    • 2026-09-20 补充静音与低音量自愈:配置及每次语音开始前只检查稳定识别的 MiRemoteV 2ch / BlackHole 2ch;明确静音时解除静音,volume 严格低于 0.2 时恢复到 1.0,阈值及以上保持不变。App 新安装 PCM 增益继续默认为 10 dB,已有用户保存值不变。真实 MiRemoteV input/output 属性自愈和自动化已通过,BlackHole 与第三方文字上屏仍按 Testing/VirtualAudioAudibilityRecovery.md 验收。
    • 2026-09-27 补充会话切回按需恢复(同机多账户反馈):挂起原因全部解除后,若所有已配置的桥都没就绪且没有活跃语音,则主动重建蓝牙语音链路,等价于用户手动点「立即重新连接」;任一桥就绪或有活跃语音时与改动前完全等价(空操作)。同时把该链路补齐日志:SYSTEM AUDIO 新增 configured_bridges / discovery_bridge,恢复决策写 SYSTEM AUDIO voice_link_recovery,蓝牙恢复统一为 BLE RECOVERY phase=... trigger=system_wake|session_activated。策略真值表与接线回归已自动化;未复现、未真机验收,真机流程见 Testing/MacIdleSleepAudioRelease.md 用例七,调查状态见 Bugs/2026-09-26-multi-user-session-switch-mic-no-audio.md。
    • 2026-11-03 用户音量合并为一个控件:连接页「语音设备」面板只保留一个「音量」(0–1000%,步长 20%,默认 100% 即原始音量,1000% 约 +20 dB),作用点统一在虚拟输出写缓冲,对所有遥控器链路生效;虚拟声卡自身音量由 App 固定写成 100%,不再暴露给用户,既避免被外部改动留在低位,也让旧的「增益只对小米蓝牙生效」问题一并消失。老用户的历史 dB 增益会按幅度折算迁移(例如 10 dB → 316%)。真机音量为听感验证,连接页截图与第三方文字上屏仍待验收。
    • 2026-11-03 引导页不再另做一套增益:OutputVolumeSlider 成为连接页「语音设备」面板与 Onboarding 语音测试卡共用的唯一控件(标签、范围、步长、数值格式只写一次),onboarding.voice_test.gain.* 文案与 audio.gain.* 键随之改为音量语义或删除。
  • 建立可选私有功能组件集成边界

    • 2026-10-19:打包前检查私有 Mac 代码的标准 SwiftPM Tag。私有版本与宿主 pin 分别通过 PR 更新;无读取权限的本地打包使用公开兼容层,完整官方发布继续要求全部组件。
    • 私有功能的源码、测试、资源和内部文档由独立私有组件维护;本仓库只保留稳定的可选适配层和语音会话生命周期契约。
    • 未提供私有组件时,公开源码仍可完整构建且不展示私有入口;正式发布流程必须显式提供并验证私有组件,禁止静默生成缺少私有能力的安装包。
    • 2026-09-09:公开 SwiftPM 元数据不再解析私有 Mac Remote 仓库;macOS CI 始终先执行零私有权限的完整测试和双架构构建,有权限时再按固定 Commit 追加私有集成检查,受保护发布仍要求全部私有组件并在缺失时失败。
    • 详细功能规划、资格管理和服务配置不再保存在公开仓库。
    • 2026-08-14:修复快捷指令组件在最终 macOS App 中错误使用 SwiftPM 根目录资源路径的问题;宿主继续把私有组件 Bundle 放在 Contents/Resources,最终 ZIP 验证必须移除同版本构建缓存后真实打开受影响页面,避免绝对构建路径回退掩盖打包缺陷。
    • 公开宿主不提供私有功能资格入口,也不会主动创建相关身份或发起资格请求;未提供私有组件时继续完全隐藏,已授权用户的本地功能开关仍默认关闭。
  • 完成会员页面与首个 Plus 收费按键方案

    • 2026-10-25 更新 #746:iPhone / Apple Watch 路径接入会员门禁。此前被门禁挡住时 enablePhoneRemoteConnection() 静默返回,右栏只显示一张扫不上的下载二维码;现在先记 .membershipRequired 状态与日志,左栏状态卡标题写明「此连接是会员功能」、说明改成「开通会员后即可连接;右侧按钮可直接开通。」(与小程序页面同一做法),并隐掉门禁态下做不到的第二张按键卡与橙色恢复卡;右栏顶部显示私有统一「点击开通会员功能」按钮,App Store 下载入口保留。全 App 仍只有一个会员按钮(与小程序路径共用),未新增仓库自有入口。本地 100 项引导页测试通过;真实购买、真实会员状态与真实手机 / 手表连接仍待实机验收,父项保持未完成。
    • 2026-10-21 更新 #714:私有组件新增 authorized 访问判定,宿主按组件 .swiftinterface 是否暴露该能力分别启用 SAYALL_MEMBERSHIP_AUTHORIZED_ACCESS 与 SAYALL_PROFILES_AUTHORIZED_ACCESS,旧版组件与缺少可选接口时继续按既有判定降级,不改变已保存方案行为。公开宿主、私有组件与会员集成测试通过;真实会员授权与支付闭环仍待验收,父项保持未完成。
    • 2026-10-16:Onboarding 候选按 Siri Remote 构建能力和 Installer 收据显示入口;安装后可完成真实语音测试。只在本次临时启用且权益不足时于完成前停用,原有启用状态与有效离线租约保留。会员权益页同步常用语和 Siri Remote 语音,移除小程序与网页版宣传;真实设备、会员使用及升级回滚仍待验收,整体不勾选。
    • 2026-10-15:项目文档统一说明常用语和 Siri Remote 均为会员功能;Siri Remote 的 PKG 组件安装与会员启用是两个独立条件。历史测试记录不作为免费使用承诺。
    • 2026-10-22 更新 #649:沿用私有平台 2.2.7,宿主透传会员会话的数字支持码和脱敏请求 ID。本地日志与复制摘要保留定位字段;线上 Sentry 接收与真实服务失败仍待集成验收。
    • 2026-10-13:按键页 Siri Remote 卡片增加会员门禁;非会员显示“点击开通会员功能”并进入会员页,Plus 与有效离线租约保留原有启用逻辑,PKG 安装仍是独立前置条件。
    • 2026-10-04:修正会员连接宿主与私有遥控镜像的固定依赖合同;新镜像47项测试及Intel构建、宿主私有源码组合798项测试通过。完整双架构CI与真实支付验收继续待完成。
    • 2026-10-03(230):连接页字号、自动连接说明与授权图标修复完成,本地 61 项测试及完整包通过;用户确认已有 Plus 登录/退出门禁真机通过,扫码支付到 Mac 自动解锁仍待测。
    • 2026-10-03:会员门禁界面收敛为私有统一“会员功能,点击开通”按钮;键位方案只显示单行提示,连接页移动端置于右侧顶部并统一状态文字。本地 2.0.0 包与界面验收记录见 Testing/MembershipAndButtonProfiles.md,真机支付与硬件验收继续保持待完成。
    • 公开 Mac 宿主已加入可选会员与按键方案薄桥接:私有 Package 或会员服务配置缺失时入口完全隐藏,公开构建继续独立编译运行;宿主只传递现有公开动作的稳定 ID 与 JSON,不包含会员、订单、验签或收费方案实现。
    • 实体 HID、Nearby iPhone / Apple Watch 和 Web Remote 已统一接入完整方案动作执行;方案未绑定、会员不可用或动作执行失败时继续执行原公开映射,不删除已保存方案。
    • 自动化与本地 Debug 集成已完成;仍需完成生产会员 API 配置、真实支付闭环、Developer ID 签名公证包、800 × 650 页面截图、真实遥控器/手机/Watch/Web、双设备、第三方 App、7 天离线跨度及升级回滚验收后再勾选。详见 Testing/MembershipAndButtonProfiles.md。
  • Windows 版本

    • 当前范围只包含小米 RC003;已完成相关 forks、Windows 实现、权限/安装和虚拟麦克风路线研究。首选源码基线为 miaomiaozii/windows-remote-mic-app,但产品化仍需独立真机验收、免费自签流程和第三方组件审查。
    • Windows 版本正在开发,尚未发布内测版本;源码与后续发布计划维护在独立的 Windows 仓库,Windows 源码仍未合入本仓库 main。
    • Windows 与 macOS 必须独立构建、签名、打包、验证和发布:Windows 当前决定只使用免费自签 Authenticode 证书与 EXE/MSI/ZIP 产物,不购买微软/公共 CA 签名,也不复用 Apple Developer ID、APP/PKG/DMG、公证或 Sparkle 流水线。自签版本仍会出现未知发布者或 SmartScreen 提示。
    • Windows 可行性、候选源码、Release、CI、许可与最终排名研究材料已迁移至独立的产品资料工作区,不随公开源码仓库发布。
  • 开发手机伴侣 App,让手机可以替代或补充蓝牙遥控器控制 Mac

    • 已实际完成并运行良好。Mac 端负责执行按键动作、打开应用和输出虚拟麦克风;手机端提供虚拟遥控按键,以及点按切换或按住说话两种语音方式,不要求用户必须购买 RC003。
    • iOS 16+ SwiftUI 工程现由独立私有仓库维护,并已完成核心遥控页面:方向、确定、返回、主页、菜单、TV、音量、关机和语音均具备按压状态、无障碍标签与增强震动反馈;麦克风键既支持短点按开始、再次点按停止,也保留按住说话、松手停止,录音真正就绪时追加一次清晰反馈;已授权时预热并复用录音管线,语音开始信号先于音频引擎启动发送,以缩短首句等待。iOS 17 及以上继续使用当前麦克风权限与状态监听 API,iOS 16 单独使用系统兼容分支。全部 12 枚可配置按键(含关机键和两个确定入口)会向支持该能力的 Mac 发送按下/松开事件,复用实体遥控器的单击、双击和长按识别;旧版 Mac 自动回退到原单击命令。顶部移除 Logo,设备连接状态、名称或校验码居中显示;六枚中部按键按“返回 / 菜单 / 音量+、主页 / TV / 音量-”排列并向中心微收,Mac 端存在非默认按键配置时会在全部 12 枚对应可配置按钮内部同步显示简短动作标题;顶部关机键的长标题可完整换行显示,六枚中部按键使用统一的图标区和标题区高度,使菜单等不同形状图标下方的文字保持同一水平基线且不越界。页面使用仓库内高分辨率浅银色铝合金拉丝背景,麦克风按钮采用与金属机身协调的低饱和钛灰配色,固定单屏布局且不支持滚动。
    • 已接入附近直连最小闭环:iOS 通过 Bonjour 发现 Mac 并显示真实设备名称;浏览器只有在本地网络权限链路进入 ready 后才建立连接,等待授权期间不提前连接。每次全新发现优先使用普通局域网,3 秒无结果后切换点对点模式;点对点模式只做两次有限重建,两种模式均无结果时会提示用户重新开关 Wi-Fi,仍失败再重启 iPhone。发现、连接、授权和权限等待状态不会被降级或重试打断,手动刷新及明确失败后的前台恢复都会重新从普通局域网开始。iOS 进入校验码显示状态并回复准备完成后,Mac 才显示授权弹窗;断开的待授权连接会自动撤销,新的已认证连接可安全接管残留的已授权旧会话,重新打开 iOS App 不再需要重启 Mac。Mac 弹窗和 iOS 顶部都使用醒目的大号校验码。Network 底层错误只保留在开发日志中;iOS 会在沙盒内轮转记录 App/系统版本、生命周期、网络路径与接口、Bonjour 发现模式、浏览代次和结果增删、模式切换与重试计划、连接路径与耗时、安全会话阶段及麦克风启动阶段,用户可主动分享 .log 脱敏日志,日志不包含音频、按键内容、设备名称、IP、校验码、密钥或身份信息。Mac 1.6.7 返回的辅助功能/按键失败和语音输出失败会转换为可操作的中文提示,未知服务端错误仍使用通用提示。麦克风权限只在首次使用语音按钮时触发,录音会话使用与纯录音匹配的系统模式,授权后可点按或按住录音。
    • 附近连接已接入会话级安全保护和双方校验码。用户首次在 Mac 允许后,该次 iOS App 安装会成为受信任设备,后续附近连接自动授权;删除 iOS App、重新安装,或在 Mac 设置中清除受信任设备后,都必须重新确认。当前手机伴侣 App 的附近直连、遥控和语音闭环已经满足完成标准;跨互联网控制属于可选后续能力,不影响本条完成状态。
    • TestFlight 发布链路已跑通:iOS 工程使用 Automatic Signing,Xcode Cloud 已成功上传内部 TestFlight,且已完成真机安装体验。公开文档不记录开发者团队或应用标识。首次使用语音按钮会主动请求麦克风权限,即使 Mac 尚未连接也不会静默忽略授权入口。
    • iOS 核心回归测试已覆盖固定六键顺序与图标、全部可配置按键的白名单协议名称、重要按键震动强度、语音松开反馈、前后台重连判断、普通局域网到点对点的有限降级策略、用户可见错误转换、两位校验码格式,以及遥控协议消息的完整编解码和旧版缺省字段兼容。
    • iOS 0.8.8 完善 Mac App 信息页:进入页面时立即重新发现 Mac,并在与遥控页一致的铝质背景上展示 Mac 名称、版本、连接方式、配对状态、最近连接和连接检查;同时显示官网下载入口、实体麦克风遥控器推荐、语音本地传输说明,并支持系统分享(包括 AirDrop)和复制链接。页面标题使用“无线麦”,顶部导航及 54pt 左右按钮保持固定,信息模块支持滚动;页面底部显示当前 iOS App 的版本与 Build,点击可复制,并提供分享脱敏诊断日志入口。页面外边距和卡片间距统一为 20pt,信息卡片保持 14pt 圆角和一致的内部留白;返回按钮和左侧边缘右滑均可返回遥控页。下载卡片的大号地址直接显示带 https:// 的官网地址并打开官网,官网、分享和复制链接跟随 App 当前语言。iOS App 已支持中文和英文,首次安装默认使用手机语言,第二页底部可随时切换并持久保存选择;语言切换上方以清晰说明显示 TestFlight 公测完整链接,点击即可复制。新版 Mac 会把真实 App 版本发送给 iOS,旧版 Mac 仍可兼容连接并回退显示运行状态。有刘海或灵动岛的 iPhone 会将不透明的“App Logo + 无线麦”彩蛋绘制在顶部切口后方,彩蛋不参与页面布局;Logo 复用主屏 App Logo,并使用同一 App Icon 圆角矩形轮廓。
    • 第一阶段优先支持 iPhone/iPad 前台使用:通过系统网络框架和附近发现服务安全连接 Mac。附近设备可以使用点对点链路,不应把“连接同一个无线路由器”设为硬性前提;长期设备信任已经落地,并支持在 Mac 端主动清除。
    • 手机遥控仅作为体验与备用功能:Mac App 启动时不自动开启附近连接服务;用户每次启动后必须主动点击“连接手机”才开始等待 iPhone,等待期间可以随时取消并释放监听与旧会话,再次开启后可由其他 iPhone 连接。等待状态使用提醒色,“无需邀请码”使用中性色,不再误用连接成功绿色。
    • 2026-08-19 增加 iPhone 二维码局域网直连候选:Mac 只在用户开启手机连接后生成短时、一次性二维码;iPhone 扫码后优先连接当前监听周期的地址,失败自动回退 Bonjour/P2P。邀请字段保持可选,Watch 继续使用原 TCP/BLE 路径;真实相机、Bonjour 零结果、多网卡和 Watch 回归完成前保持待验收。
    • 按键协议当前只发送白名单虚拟按键单击事件,由 Mac 根据本机配置映射到现有 ButtonAction / KeyboardInjector;禁止手机直接下发 shell、任意脚本或未授权键盘数据。按住重复、双击和长按手势留待后续真机调节。
    • 手机麦克风第一版已发送 16kHz 单声道 PCM,并由 Mac 接入现有 VirtualAudioOutput 和 MiRemoteV 2ch 链路;手机语音会话开始和结束时,Mac 会同步产生一次系统语音键按下和释放,使手机音频能够进入与实体遥控器一致的豆包唤起流程。后续再根据弱网和延迟实测决定是否增加 Opus、抖动缓冲和音频中断恢复。第一版保持 App 在前台,不承诺锁屏遥控、后台常驻或持续收音。
    • 后续再评估 Android、桌面小组件/快捷指令、多台 Mac 切换和跨互联网远程控制;跨互联网需要独立的账号、端到端加密、设备撤销和中继服务,不与附近直连第一版混在一起。
    • 架构选择、官方平台限制、实现阶段和验收研究材料已迁移至独立的产品资料工作区,不随公开源码仓库发布。
    • iOS 源码、专属 CI、设计备选图和 iOS 待办已迁移到独立私有仓库;本仓库继续维护 Mac 端附近连接、授权、按键执行和音频接收,拆仓不改变现有协议或运行行为。Mac CI 已增加仓库边界门禁,禁止迁出的 iOS 目录和专属 CI 回流。
  • 为 Apple Watch 提供独立的 Mac 连接入口

    • 连接页已按 iPhone → Apple Watch → 网页版的顺序加入专用入口;iPhone 与 Watch 共用同一个按需开启状态,任一入口都可以取消等待,Mac 启动时仍不自动监听。
    • 2026-08-14 修复 1.8.22 实际未启动 Watch BLE、旧 TCP 取消回调误停 Watch BLE,以及 Mac Bonjour 只监听端口但未确认服务发布的问题。Mac 现在只在用户点击后同时启动 Phone Bonjour 与 Watch BLE;Bonjour 发布超时、被移除或 listener 失败会自动恢复,Watch 等待 GATT 服务注册完成后才广播。
    • 2026-08-15 根据真机日志修复 Watch BLE 音频积压:Watch 端控制优先并限制约 300ms 实时窗口;Mac 端分别跟踪 iPhone 与 Watch 语音来源,通道占用和输出未就绪返回不同普通用户提示,延迟停止不再释放或污染另一端会话。
    • 2026-08-18 补充首次收音业务就绪握手:新版 Mac 只有在虚拟麦克风与系统语音键准备成功后才发送可选 voiceReadyV1,新版 Watch 收到后才启动采集;停止、断线或失败会取消迟到开始结果,旧版两端继续走原兼容路径。
    • 2026-08-18 针对真机“Watch 已开始收音但第三方工具没有有效电平”,修正 Mac CoreBluetooth 批量写请求只响应一次;组件与宿主增加 GATT 接收、重组、解码、peak/RMS、来源门禁和虚拟输出入队分层日志。配套 Watch 将无响应写入限制为 161-byte 安全包,同时保留系统背压和完整音频,不以丢帧换取低延迟。
    • 2026-08-19 修复 Watch 停止后立即重新开始偶发 voice_busy:Mac 移动语音增加 stopping 与 stop generation,同一来源等待旧尾音排空后自动开始新会话,不同来源继续互斥;配套 Watch 让停止/开始优先于旧音频、隔离迟到帧并降低逐帧日志负载。核心 BLE、ADPCM、161-byte 分包和实体遥控器链路不变。
    • 2026-08-15 补充分离的 iPhone / Watch 已连接状态:成功授权后对应行显示“已连接”和“取消连接”,断线但监听仍开启时回到等待,取消连接会断开当前会话并同时停止附近监听;等待状态继续使用提醒色,只有真实连接使用成功色。
    • Mac 附近连接与网页版会话实现已迁入独立 SayAllMacRemote 组件并固定 revision;Watch 授权提示会根据设备名称显示专用说明,既有 iPhone、Web、实体遥控器和按键映射链路保持兼容。本机 Release APP 已验证 Bonjour 可被系统发现、Watch BLE 已广播且取消等待会停止两者;当前 Mac 229 项、私有组件 26 项回归通过。
    • 自动化与 Release 构建通过后仍需真实 Apple Watch、实际测试 Mac、虚拟麦克风和第三方语音工具完成发现、授权、按键、收音、取消等待及客户端接管验收,再标记完成。
  • iOS App 与 Apple Watch App 支持连接 Mac 后处理的长时间录音

    • iOS 或 Apple Watch 在暂未连接 Mac 时可以完成一段长时间录音并在本地暂存;恢复或建立与 Mac 的连接后,再按会话顺序将录音传给 SayAll Mac,并通过用户选择的微信输入法或豆包输入法转换成文字。
    • 需要明确单段录音时长和本地存储上限、低电量/应用被系统终止/断线后的保存与续传、重复发送防护,以及录音、传输和文字转换失败时的可恢复提示;只有 Mac 成功接收并完成文字上屏,才算本次处理完成。
  • 没有遥控器时支持使用 MacBook 内置麦克风进行语音输入

    • 2026-10-24 用户确认连接页保留现有设备设置,新增“用 Mac 麦克风说话”按钮;悬停提示为“仅在不使用遥控器时使用”。连接页、菜单栏右击菜单和可配置全局快捷键控制同一次麦克风送音。
    • 本次候选使用“所选物理麦克风 → 当前虚拟麦克风 → 输入工具”的路线。保留输入工具中的 SayAll 选择;不通过本功能改变系统默认设备,不做常驻声音检测或遥控器混音。本条替代此前豆包/微信直接读取物理麦克风的计划,本次不修改 Onboarding。
    • 2026-10-24 根据 Build 251 的 runtime.log 修复音频引擎启动配置通知被误判为采集失败的问题;真实麦克风和第三方文字上屏仍待验收。
    • 2026-10-25 按用户确认修正 Build 264 行为:三个入口只启停物理麦克风送音,不发送语音快捷键、不恢复输入位置、不切换前台应用。验证范围见 Bug 记录。
    • 2026-10-28 用户澄清:选择 Mac 麦克风只进入待命,实际采集由键盘 Fn 等原有语音快捷键控制,按住或点按模式与用户配置一致。正在修复;不得把选择音源记为开始收音。
    • 行为见 产品规范,验证见 测试手册。真实权限、物理收音、尾字、第三方文字上屏和遥控器互斥仍待验收,保持未完成。
  • 开发静态产品信息网页

    • 展示无线麦的核心定位、主要功能、适用场景、下载入口和基础使用方式,并提供清晰的产品截图与录屏演示。
    • 页面应适配桌面和手机浏览器,优先保证加载速度、素材清晰度和分享体验;截图、录屏、版本信息和下载链接需要便于后续持续更新。
    • 本条只负责产品信息与媒体素材展示,与下方可实际连接并控制 Mac 的“手机网页版遥控器”是两个独立功能。
    • 中英文纯静态官网已完成并部署到 sayall.app,包含下载入口、核心功能、使用步骤、真实产品截图、系统要求与隐私说明;旧域名继续重定向到新官网。当前尚未加入真实录屏演示,因此本条暂不标记完成。
  • 发布前完成品牌、域名与知识产权清单核对

    • 在正式更换产品品牌或对外发布前,统一核对品牌写法、官网与下载入口、App 名称、应用标识、公开账号、商标初筛、Logo 权属、第三方许可和必要的发布联系信息,避免不同渠道使用相互冲突的名称或资产。
    • 公开仓库只保留这项发布门禁,不记录域名持有人、账号状态、商标检索判断、邮箱规划或其他品牌资产明细;完整品牌与知识产权清单保存在私有产品资料库。
  • 开发无需安装的手机网页版遥控器

    • 网页版作为原生 iOS Nearby 连接之外的独立入口:Mac 主动连接公网 WSS 会话中继,手机通过 HTTPS 页面扫码加入,经 Mac 校验和明确允许后发送白名单按键与按住说话音频。
    • 第一版不需要账号、局域网发现或路由器端口转发;使用临时会话、传输加密、严格消息限制和不保存语音内容的隐私边界。WSS 不能描述为服务器不可见的端到端加密,后续再根据技术需求评估 WebRTC 或应用层端到端加密。
    • 真实域名、VPS、IP、SSH、证书、Token 和生产配置不得进入开源仓库;公开代码只保留占位符和脱敏模板。
    • 第一版代码与公网部署已完成:包含 React 手机单屏遥控器、内存 WebSocket relay、Mac 扫码与逐次批准、白名单按键、自定义标题、16kHz PCM 按住说话、移动语音来源互斥、限流、安全响应头和隐私日志边界。
    • 全部 12 枚可配置按键已增加可选按下/松开事件能力,Web 与 Nearby iOS 分别维护手势状态,并复用实体遥控器的单击、双击和长按配置;连接旧版 Mac 时自动回退到原单击命令。Web 前端与中继服务已分别迁移到独立私有仓库,并各自使用专属 GitHub CI;本仓库只保留 Mac 客户端的协议实现、连接入口和发布配置。
    • 第二轮弱网修复保持现有 WSS 架构,暂不引入 WebRTC:扫码页面只解析并暂存一次性会话凭证,必须由用户点击“连接 Mac”后才建立 WebSocket;麦克风仍只在按住说话时请求。已加入手机端 60 秒短时断线恢复、Relay 已批准会话续接、音频发送积压保护、浏览器自动增益/降噪、Mac 端 240ms 起播抖动缓冲,以及播放完尾音后再释放系统语音键的收尾流程。
    • 网页版视觉已独立适配 Safari:使用与浏览器栏融合的纯色背景,顶部只显示连接状态和 Mac 名称;中间六键使用与方向盘一致的石墨色圆角矩形,麦克风和确定按钮支持从按钮内部开始纵向滑动。页面禁止长按选择文字,并在支持的平台提供按键震动;控制器使用稳定视口高度避免 Safari 地址栏收放导致滚动抖动,页面下方保留约 25KB 的内联 App Logo,并提供 Mac App 下载、单一官网、iOS TestFlight 公测、复制公测链接、实体遥控器推荐和连接教程。README、Mac 关于页与菜单、iOS Mac App 信息页也已补充官网入口。已批准会话在两小时内可免重复扫码,但恢复连接仍必须由用户手动点击。
    • Mac 手机网页版入口不再要求固定邀请码;直接打开连接页。一次性会话与每次连接的 Mac 人工批准仍保留,iOS TestFlight 公测入口和复制链接操作不受影响。
    • Cloudflare-only 主线接入:私有适配器授权、二维码/Plus 预览、staging 自动免检、按服务环境选择 trial/release 小程序码及点按/按住串行恢复;连接页不再提供独立免会员开关,切换环境停止旧会话后重新连接。本轮测试、构建和生产视图证据见 PR,不能沿用旧 VPS 的部署或真机结论。未发布新安装包,验收步骤见 Testing/CloudPhoneRemote.md。
    • 2026-10-09 手机入口候选:iOS 改用 App Store 正式版,保留原右侧会员/连接逻辑;微信小程序使用动态码,一次扫码后自动连接。Mac 隐藏网页版入口,旧浏览器协议保持兼容。自动化已通过,真实微信、按键、音频及文字验收待完成,父项保持未完成。
    • iOS TestFlight 公测不需要网页版邀请码。正式 Mac 发布流程会从本机私有生产配置注入 WSS 地址,并在构建和最终 App 校验阶段强制检查;地址缺失时不再打开内部会话页,连接页直接显示“正式服务尚未配置”。
    • 当前已通过 TypeScript 检查、生产构建、18 项 Web/relay/浏览器测试、129 项 Swift Testing、42 项 Self Test 和 Release App 构建;公网 HTTPS/WSS 已再次完成建会、网页加载、加入、批准、按键、语音握手、二进制音频和关闭全链路验收。
    • iPhone 17 Pro Safari 已完成核心麦克风真机体验,语音链路可用,存在但可接受的延迟;尚需继续验证虚拟麦克风实际听感、切后台停止、Android Chrome、不同网络组合与现场延迟,完成这些人工验收后再勾选本条。
    • Web 前端、服务端及其详细开发资料由独立私有仓库维护;共享协议变更必须与 Mac 客户端保持向后兼容并完成跨仓库验证。Mac CI 已增加仓库边界门禁,禁止迁出的 Web/Server 目录和专属 CI 回流。
  • 本地统计增加用户最常用的快捷键和实体按键排行

    • “个人中心”保留本地总量 KPI,并以常用快捷键 / 动作、实体按键和单次语音时长三个分区展示排行;数据仅保存在本机,不上传按键内容、快捷键配置或使用明细。
    • 2026-10-21 新增独立的本地数值摘要候选,按上海时区拆分有效音频时长。旧统计键与页面日期口径兼容;后续页面时长改为有效 PCM 时长,旧历史不重算。2026-10-22 修正累计会话漏计;真实语音回归待验收。验证见 Testing/ProfileStatistics.md。
  • 在独立侧边栏页面按应用和日期保存、查看本地语音转写记录

    • 候选代码已完成:功能默认关闭,用户主动开启后,从公共语音会话读取目标输入框中本次连续新增或替换的最终文字;不依赖 AI 功能或 API Key,不保存音频、输入框全文、前后文、窗口标题、文档名或网址。
    • 记录按目标 App 与语音结束时的本机日期写入 Application Support/RemoteMic/Transcripts/v1,正文文件权限为 0600;“回眸”位于侧边栏“统计”下方,默认展示全部 App 的倒序时间线,顶部应用栏固定“全部应用”,其余 App 按最近使用排序并支持单行横向浏览或页面内展开,日期可逐日折叠;使用真实 App 图标筛选单个应用,并支持复制、单条删除、按 App 删除和底部全部删除,删除前确认并移入 macOS 废纸篓。
    • 2026-08-18 总集成审计修复侧边栏顺序遗漏:.transcripts 现在固定紧跟 .statistics,顺序回归会阻止页面再次变成不可达;800 × 650 全侧边栏点击仍需在最终组合候选中验收。
    • 2026-08-19 修复组合动作后立即说话时的初始焦点竞争:快照不可用会短时重试,下一段开始前会最终结算上一段,并为所有取消路径记录不含正文的具体原因;真实 Codex 与遥控器仍待签名包验收。
    • 已修复语音结束后快速发送或紧接下一段语音时丢失已识别候选的问题;自动化覆盖默认关闭、开启、关闭、使用后关闭、连续文字差异、快速发送、连续语音、安全目标拒绝、按 App/日期落盘、权限和可恢复删除。仍需用 RC003、Nearby iOS、网页版和真实第三方输入框完成无 AI/无 Key、前后台、重启、跨日、敏感输入框及 800 × 650 页面人工验收后再勾选。
    • 本次 WorkTree 增加独立的本地原始录音资产:默认关闭,按日期/sessionID 保存 M4A/AAC,并与回眸文字关联;录音与文字开关互不影响,支持播放、导出和废纸篓删除,但回眸不提供 Finder 入口。真实 RC003、Nearby iPhone、Watch、Web 和第三方 App 验收通过前不标记完成。
    • 2026-08-27 修复无可编辑输入框时的录音 App 元数据回退,并让录音-only 日期组默认展开;真实 RC003、移动端和第三方 App 验收仍是完成门槛。
    • 2026-08-28 修复回眸大记录量下文字/录音日期组身份冲突导致的重复、空白和滚动卡顿;“全部应用”仅显示最近 7×24 小时并引导按应用查看更早记录。真实大规模归档与微信 UI 验收仍是完成门槛。
    • 2026-08-29 增强文字归档读取与回眸展示失败日志;播放失败按记录写入脱敏诊断并在页面显示非技术化提示。真实签名包仍需验收缺失/损坏录音与损坏文字归档场景。
    • 2026-10-10 合并同日文字与独立录音,日期和日内条目统一倒序;关联录音不再重复单列。自动化和页面证据见 Bugs/2026-10-10-reflections-date-order.html,父项保留原实机验收边界。
    • 2026-10-15 统一回眸操作顺序为复制、播放/暂停、停止、分享、删除,并统一分享图标,单条、应用和全部删除均靠右;停止按钮保持占位,空闲时禁用。布局验证见 Bugs/2026-10-15-reflections-action-alignment.html,父项实机边界保留。
    • 2026-10-15 修复回眸录音暂停/继续/停止、无线麦前台应用回退、文字与原始录音开关耦合,以及关联记录重复删除入口;真实微信、无线麦 App 和播放控制仍需人工验收。
  • 在无线麦SayAll.app 内集成本地语音历史只读 MCP

    • 已将唯一正式运行时实现为 App 内 Swift stdio Helper,提供默认关闭总开关、每客户端 256-bit 授权、SHA-256 哈希、撤销、脱敏审计、App 列表和按时间/App 分页查询;App 内可一键连接 Codex、Claude Code、Cursor 和 OpenCode,并保留标准 MCP JSON、Codex TOML 手动降级,用户不需要 Node.js、npm 或开发工具。GetSayAll/sayall-mcp 只提供公开契约、Schema 和集成资料。
    • 主仓库提供中英文 AI 安装与 MCP 配置指南,约束 AI 必须先取得用户明确授权、不得静默开启访问或上传令牌,并说明完整 App 检查、快速连接、手动配置、验证和排障流程。
    • canonical Helper 路径统一为 /Applications/SayAll.app/Contents/Helpers/SayAllMCP;非标准目录使用运行中 App 的真实路径。授权状态只保存 Helper 路径指纹,App 移动、改名或旧记录缺少指纹时显示移除并重新连接提示,不自动覆盖其他 MCP 配置。
    • 未发布的 Node 实现、旧目录和旧事件格式不纳入兼容;正式 v1 发布后保持 Helper 路径、serve 参数、环境变量、工具名、已发布字段语义和 RemoteMic/MCP/v1/access.json 向后兼容;v1 输出 Schema 为封闭对象,新增输出字段或其他破坏性变化使用新工具名或并行 v2。
    • MCP 只读现有 Application Support/RemoteMic/Transcripts/v1,不监听网络、不常驻、不修改或删除历史;自动化已覆盖四客户端配置合并、冲突拒绝、私有备份、移除和失败授权回滚,仍需在四个真实客户端完成连接、分页读取、撤销、关闭后拒绝和第三方数据处理人工验收后再勾选。
    • 已修复快速连接失败后重复显示“已撤销”授权的问题:客户端与配置先预检,安装中途失败的临时授权直接丢弃,授权列表只显示有效授权;同一快速客户端和同名手动客户端不能重复生效,并按 CLI、配置格式、同名冲突、路径安全、写入或安装命令显示具体失败原因。
    • 已修复 Codex 配置把路径 / 错写为 TOML 不支持的 \/ 并阻止会话创建的问题;快速连接状态改为提示关闭并重新打开具体 AI 客户端,明确无需重启无线麦,仍待真实 Codex 验收。
  • 在左侧侧边栏新增“排行榜”,展示所有主动参与用户的全局使用排名

    • 已先将现有纯本地统计从“关于”页迁移为独立“个人中心”页:顶部保留累计按键、累计语音、本周按键和最长单次语音 KPI;日 / 周趋势合并为最近半年日历热力图,按键 / 动作排行榜位于左侧,使用日历与单次语音时长排行榜位于右侧上下排列,三个排行榜均最多显示 10 条,单次语音显示结束时间和目标 App,并可跳转“回眸”;2026-10-03 按新布局将分享模块移至个人中心顶部,个人中心仍为侧边栏最后一项并移除独立分享按钮,统计卡片与面板改用遥控器卡片的淡底色和细描边。本阶段不包含全局排行榜、数据上传或服务端能力,本条仍未完成。
    • 2026-10-10 使用日历固定连续 182 天,最老日期位于左上角,按列递增到右下角当天;星期标签随实际日期轮转,不补首尾空格。验证见 Bugs/2026-10-10-calendar-ending-today.html,父项继续保留真实数据验收边界。
    • 2026-10-12 使用日历默认定位末列,按分钟刷新当天;悬停显示日期、回眸条数、按键和语音统计。高度按方格计算,文字与关联录音只计一次。验证见 Bugs/2026-10-12-calendar-details.html,真实跨午夜与用户数据仍需复验。
    • 新产生的本地每日统计使用版本化元数据,同时保存输入来源、具体按键或语音入口、小时分布、语音会话次数、各来源语音时长、最长会话、首末活动时间、时区和日历来源;单次语音 Top 10 保存开始时间、结束时间和来源。元数据保持本地、按日聚合且不记录设备标识、按键映射、快捷键内容、目标 App、文本或音频。
    • 当前本地统计已有今日、本周和累计三个维度的按键次数与语音时长;排行榜第一版提供最长单次语音时长、累计语音总时长、语音会话次数和按键次数四个核心指标,并分别展示日榜、周榜、月榜与总榜,以及 Top N、当前用户排名、差距和最近同步时间。语音会话次数以一次真实开始到停止为一条,不能按音频包、暂停片段或重试次数重复累计。
    • 已观察到用户单次连续语音输入可达到约 3 分钟,因此单次时长不能按几十秒或 1 分钟简单截断;以一次真实的语音开始到停止作为单次会话,界面统一使用时分秒显示,并分别记录“今日最长单次”“本周最长单次”“历史最长单次”“今日累计”“本周累计”和“历史累计”。本地每日统计已包含当日按键次数,并按本机日历聚合、将跨日语音计入结束当天;服务端日榜仍需明确统一的结算时区和跨日会话归属规则。
    • 排行榜数据后续支持生成可分享的个人统计卡片或分类榜首海报。图片必须标明统计周期、结算时间、指标单位和排名口径,只展示用户主动公开的昵称或匿名身份,不包含原始语音、识别文字、快捷键内容、设备信息或未经用户同意的头像。
    • “榜首”文案只能基于已完成结算且通过基础防刷校验的服务端数据生成;数据仍在变化、样本不足或存在异常时只能生成个人统计卡片。导出失败不得影响排行榜和本地统计。
    • 排行榜必须默认关闭并由用户主动加入;加入前清楚说明会上传哪些聚合数字。未加入的用户继续保持现有纯本地统计,不出现在榜单中,也不因打开排行榜页面自动上传数据。
    • 用户使用随机生成的排行榜身份和自选昵称,不以蓝牙地址、外设 UUID、Mac 序列号、Apple ID 或其他硬件标识作为公开或服务端主键;设备凭证存入 Keychain,支持退出排行榜、删除云端数据和重新生成身份。
    • 为减少历史数据篡改和刷榜,排名默认从用户加入排行榜后开始累计,不直接信任或一次性上传既有本地总数;客户端按增量批次同步,服务端校验累计值单调递增、单次会话起止时间与持续时长一致、合理速率、重复请求和版本签名,并提供限流、封禁与榜单重算机制。真实的数分钟长语音不能仅因时长较长就判定为作弊。
    • 需要新增独立后端 API、数据库、定时日榜与周榜结算、匿名身份认证、离线增量队列、失败重试和服务状态降级。无网络或服务不可用时仍显示本地统计,并明确标注排行榜暂不可用,不能影响蓝牙、语音和按键核心功能。
    • 实现时同步更新“关于”页、README 和隐私说明中“数据仅保存在本机 / 不会上传”的现有表述;发布前明确数据保留期限、删除流程、服务器区域、运营成本和隐私政策,并完成接口滥用、重放、伪造统计及昵称内容审核测试。
    • 工作量判断:中等偏多。侧边栏和榜单 UI 较小,主要成本是可信统计、服务端长期维护、隐私合规和防刷;若不准备运营后端,可先做仅本机的个人成就页,不能称为全局排行榜。
  • 基于本地语音转写历史主动生成“昨日回忆”“夸夸自己”等每日回顾

    • 当前公开 TODO 没有同类条目;私有产品战略已经规划“语音历史进入本地知识库,并生成每日或每周回顾”,本条是该方向面向用户的明确产品入口。
    • 前置依赖是用户明确选择保存的本地语音转写历史和稳定的记录时间、来源及原文引用。当前 Mac App 只保存语音次数、时长、来源和时间段等聚合统计,不保存日常转写正文;不能仅凭这些数字生成有内容的回忆,也不能把 Onboarding 中临时出现的测试文字当成历史记录。
    • 每日回顾优先整理昨日的重要想法、决定、待办、反复出现的主题和未完成问题,并允许从每条结论返回对应原始记录;资料不足时明确显示“昨日没有足够记录”,不得补写或猜测用户没有说过的内容。
    • 增加可选的“夸夸自己”视角:从昨日真实记录中提炼已经完成的事情、坚持投入的行动、解决的问题和可以被看见的进步,用具体事实给出正向反馈。不得脱离原始记录进行空泛吹捧、虚构成果或对用户性格和心理状态作未经依据的判断;用户可以查看对应来源,也可以关闭这类内容。
    • 语义整理需要接入用户选择的大模型 API 或后续官方托管模型,但只发送用户明确允许参与本次回顾的文字范围。生成结果默认保存在本地,支持编辑、重新生成、导出和删除;功能默认关闭,不因存在语音时长统计就自动上传内容或推送回顾。
    • 产品价值判断:当本地转写历史已经可用时价值中高,它能把被动历史变成每天可感知的持续收益,并自然连接待办和知识库;但当前 ROI 受前置数据层制约,应先完成可搜索、可追溯、可删除的本地转写历史,再开发自动回顾,不能排在语音输入核心质量之前。
    • 详细的数据模型、模型调用、知识库和商业化边界继续保存在私有产品资料库;公开仓库只记录用户行为、依赖关系、隐私边界和验证状态。
  • 将最低支持版本降低到 macOS 14.0,仅支持 Apple Silicon Mac

    • macOS 14.0、14.4 和 15.0 的 arm64 编译探测结果完全一致:66 条可用性诊断全部集中在 SettingsView.swift 的 macOS 26 Liquid Glass API,没有额外核心功能编译错误。
    • MiRemoteV 2ch 已成功构建为 arm64、Mach-O minos 14.0;Sparkle 2.9.4 的 Apple Silicon Framework 最低版本为 macOS 11.0。
    • macOS 26 继续使用原生 Liquid Glass;macOS 14/15 使用非 Glass 系统兼容样式,保持功能和布局可用,不要求视觉完全一致。
    • 发布产物继续只包含 arm64,不支持 Intel、x86_64 或 Universal Binary;同步调整并验证 App、MiRemoteV 2ch、PKG、DMG、Sparkle 更新和公证流程。
    • 代码与发布机验证已完成:macOS 14.0 App 编译、36 项 Self Test、76 项 Swift Testing、App/驱动 minos 14.0、两个 PKG 和 DMG 的结构及权限验证均通过。
    • 发布机运行时审计发现并修复了本地化订阅触发菜单重建时复用状态项被同时插入两个 NSMenu 的 AppKit 断言;启动和语言切换必须保持无该异常。
    • v1.4.12 以 pre-release 发布,v1.4.13 已晋升正式版;最低版本、架构、签名、公证和 Sparkle 元数据均已进入正式发布链。
    • macOS 14 完整研究、实现边界和验收材料已迁移至独立的产品资料工作区,不随公开源码仓库发布。
  • 在真实 macOS 14 Apple Silicon 机器完成运行时验收

    • 已在真实 macOS 14 Apple Silicon 机器完成运行时验收,确认实际运行正常。
    • 验收范围包括安装与卸载、降级界面、蓝牙配对与重连、HID、权限、ATVV 音频、MiRemoteV 2ch、Sparkle 更新、睡眠唤醒和音频路由变化;详细依据保存在独立的产品资料工作区。
  • 支持 2017 Intel MacBook / MacBook Pro 的 macOS Ventura 13

    • 已完成 macOS 13 SwiftUI 可用性适配,并建立与 Apple Silicon 正式发行线隔离的长期 Intel 发行变体:Intel 仅构建 x86_64,输出到 dist/intel,使用带 Intel 的独立资产名和 appcast-intel.xml;默认发行仍保持 macOS 14、arm64、原资产名和 appcast.xml。
    • Intel App、Sparkle 五个可执行文件、MiRemoteV 2ch、安装/卸载 PKG 和 DMG 已通过构建与静态验证;安装器会在删除已有 App 前检查系统与架构,普通用户机器上的脚本不依赖 Xcode 或 Command Line Tools。
    • 预览版 Feed 解析已按当前稳定 Feed 的文件名选择资产,Intel 开启预览版更新时不会串到 Apple Silicon 的 appcast.xml。Apple Silicon 默认构建和发行产物仍需作为每次 Intel 改动的回归门禁。
    • 已经过多名 Intel Ventura 用户测试,安装、启动、蓝牙遥控、按键和语音核心路径可以正常使用,Intel 发行线转为正式支持。公开测试步骤见 Testing/IntelVenturaCompatibility.md。
    • GitHub Actions 对 Apple Silicon 与 Intel 分别构建和验证;正式候选通过受保护的 mac-release Environment 生成两套独立签名、公证产物。稳定晋升沿用同一批候选字节,不重新打包。
    • 2026-08-21 修复 Intel macOS 13 将不透明 AppIcon 直接显示为完整正方形的问题:主图标改用已批准的透明圆角品牌源文件,并在 App 打包校验中强制检查十档 .icns 图层的 Alpha 通道、透明四角和不透明中心;等待真实 Intel Ventura 的 Finder、Launchpad、Dock 与覆盖安装图标缓存验收。
  • 优化 macOS 安装器,为普通用户只提供一个明确的安装入口

    • 当前 DMG 同时展示 Remote Mic.app、Applications 快捷方式、Install Remote Mic.pkg 和卸载 PKG,用户容易误以为 App 与 PKG 需要分别安装,或不知道应该选择哪一种。现有安装 PKG 实际已经同时安装 App 和 MiRemoteV 2ch 兼容麦克风,主要问题是发布入口重复而不是缺少合并安装能力。
    • 第一方案是让 DMG 只突出一个签名并公证的 Install Remote Mic.pkg,一次完成 App、兼容麦克风、权限正确性检查和安装后启动;不再在同一 DMG 根目录提供并列的 App 拖拽入口。只需要 App、已经安装其他回环设备的高级用户可通过单独的 ZIP 或明确的高级下载入口获取,不与普通安装流程并列。
    • 不优先把安装器包装成自定义 Install.app:音频驱动仍然需要管理员授权和系统安装能力,包装 App 最终仍需调用内嵌 PKG 或增加特权辅助进程,会扩大嵌套签名、公证、权限、失败恢复和安全验证范围。只有系统 PKG 的交互无法满足品牌引导或安装状态展示时,才进一步评估 Install.app 外壳。
    • 卸载入口不与首次安装争夺注意力:优先在 App 的帮助或关于页面提供“卸载兼容麦克风”及说明,必要时再下载或打开已签名的卸载 PKG;卸载必须明确区分“只移除兼容麦克风”和“同时删除 App 与本地设置”。
    • 需要验证全新安装、已有 App 升级、已有驱动升级、只装过 App、只装过驱动、安装取消、管理员授权失败、安装后首次启动、Sparkle 后续更新和完整卸载;新的单入口流程必须继续通过 App、PKG、DMG、签名、公证、Gatekeeper、文件权限和最终安装结果校验。
    • 2026-08-13 已完成候选代码:DMG 根目录只保留一个安装 PKG;App-only ZIP 和卸载 PKG 继续作为高级 Release 资产。驱动在 PKG 内暂存,安装后使用系统自带 file、plutil、codesign 和文件权限检查判断现有 MiRemoteV 2ch 是否健康且同版本、同架构,健康时原样保留,缺失、损坏、架构不符、签名异常或版本不匹配时才替换;安装脚本不调用开发者工具。本轮按要求未生成产物,完成真实安装矩阵后再勾选。
    • 2026-08-15 已为 Apple Silicon 与 Intel 独立安装包增加系统 Installer Distribution 门禁:使用真实硬件能力而非 uname -m 判断架构,中英文界面会在安装前明确提示错误包并指向另一版本;preinstall/postinstall 继续保留二次检查。双变体 ad-hoc PKG/DMG、产品归档结构及 Apple Silicon 拒绝 Intel 包的只读命令行路径已验证;最终 Developer ID 签名、公证包仍需在真实 Intel 与 Apple Silicon 上完成 Installer.app 双语言交叉验收后再勾选。
    • 2026-09-06 公开资产矩阵扩展为 13 项 canonical payload:两架构安装 PKG 既保留在对应 DMG 内,也作为独立可下载资产发布;另上传 1 项 candidate-provenance.json 作为来源证明。下一份真实签名候选仍需验证 GitHub/CDN manifest 全量字节、两架构安装与卸载。
    • 2026-09-06 安装器发行品牌统一为 SayAll:Apple Silicon 使用 Install SayAll.pkg / Uninstall SayAll.pkg,Intel 使用带 Intel 后缀的对应名称,Installer.app 标题同步为 SayAll;公开 Release 资产使用 SayAll-VERSION-BUILD-... 命名。历史 Bundle ID、Package ID、receipt、DMG/ZIP 名称和旧 App 路径保持不变,避免破坏升级兼容。
    • 2026-08-29 修复 Issue #101:Uninstall Remote Mic.pkg 不再只删除兼容麦克风,而是在 Bundle ID 校验后把 canonical/历史 App 与 MiRemoteV 2ch 一起移入可恢复的 macOS 废纸篓;废纸篓或移动失败时停止并回滚本轮已移动项。安装器替换旧驱动时也保留备份,失败即恢复,成功后才移入 root 废纸篓。本地设置和 BlackHole 明确保留。代码与伪目标卷验证完成;由于仍需最终 Developer ID 候选在 Apple Silicon/Intel 上完成管理员授权、真实废纸篓和取消/失败矩阵,本总任务暂不勾选。
    • 2026-09-06 安装、升级与卸载流程已纳入 Apple Remote HCI 系统服务;安装前会核验既有 Helper 签名标识与 LaunchDaemon 的 Label、可执行路径,无法确认归属时停止覆盖。静态门禁覆盖服务恢复、加载、卸载移入废纸篓和状态目录回滚;真实管理员授权与覆盖升级仍随最终测试包验收。
    • 2026-10-04 已增加 App 更新同步升级 helper 的源码候选:App 携带系统安装副本及签名声明,准备音频前检查已安装和运行版本,同版本不请求安装。已补主动启用门禁:默认关闭,后台禁止交互授权,Cancel 后的等待状态跨重启保留;用户主动启用或重试才请求授权。完整私有集成 868 项与社区 818 项全部通过;上一轮发布 fixture 的 SIGPIPE 失败保留为历史记录。真实旧 PKG 迁移、Sparkle、管理员授权、回滚与实体语音仍待验收,父项保持未完成。启用和重试入口已移入遥控器卡片;启用后不提供停用入口;卡片最多三行,无对勾,启用按钮位于右侧垂直居中;卡片不增加说明文字,遥控器图上方不增加元素。步骤见 Testing/AppleRemoteHelperUpgrade.html。
  • 将虚拟麦克风新安装名称设为 SayAll,保留旧用户名称

    • 新安装显示 SayAll;已有 MiRemoteV 2ch 保持旧名,修复和更新也使用旧名称负载。主 UID、Box UID、Model UID、Bundle ID、安装路径、包 ID 和已保存选择不变。同一系统仅部署一个驱动实例。
    • 已实现两种预签名负载、安装前名称决策、名称形态记录、重复实例保护、历史状态恢复、失败回滚,以及 App 真实名称显示。BlackHole 兼容能力保留。
    • 2026-10-03 review 修复首次安装失败后残留 App/receipt 导致重试改选旧名的问题:负载写入前保存名称选择;补齐健康旧驱动不被替换的验证与失败重试回归。双架构各 19 个副本场景和 74 项 Swift 定向测试通过;真实安装验收仍待完成。
    • 2026-10-08:修复可信名称记录冲突和历史驱动健康检查导致的安装阻断。实际名称优先,旧记录与驱动可恢复,配置和 UID 保留。恢复用例必须完整执行安装脚本并重试成功;最终签名包的两架构现场安装仍待验收,父项保持未完成。
    • 2026-10-10:卸载 PKG 将可信名称目录移入废纸篓,失败时随 App 和驱动回滚。驱动不存在时安装 SayAll,覆盖 1.9.21 卸载器保留记录、receipt 和偏好的情况。已有驱动修复及更新仍保留原名;两平台真实安装待验收,父项保持未完成。
    • 2026-10-22:PR #620 已同步最新主线,两架构各 43 个隔离场景通过;最终签名包的真实安装与 CoreAudio 验收仍待完成,不标记为已发布。
    • 自动化与实机边界见 测试手册。Apple Silicon / Intel 的最终签名包、旧用户升级和第三方语音验收未完成,暂不勾选。
  • 设计并实现完整的首次 Onboarding、权限设置流程,并重新布局“连接”和“按键映射”页面

    • 首次启动使用可恢复、不可跳过的多步骤 Onboarding,而不是一次弹出全部权限或只展示功能介绍。当前流程依次覆盖:欢迎、单页选择当前构建实际包含的控制来源、选择输入工具、对应必要权限、所选来源真实连接与普通按键、音频回环设备选择、同一来源真实语音文字测试、三个普通按键和完成页。
    • 2026-08-18 修复手机分支按需音频门禁:iPhone/网页版要求受支持的虚拟音频设备已选择且仍存在,实际输出在语音开始时建立并由下一页真实声音和文字验证;停止语音后的正常释放不再阻塞完成页。实体遥控器仍要求持续输出就绪。三种控制方式统一要求蓝牙、输入监控和辅助功能全部开启,手机本地网络由下一页真实连接验证;本地测试包强制注入并校验 Web Relay 配置后才可交付。
    • 在 Onboarding 增加遥控器蓝牙配对提示:同时长按“主页 Home + 菜单 Menu”可使遥控器进入蓝牙配对模式。当用户需要首次配对、清除旧连接后重新配对,或连接排障需要重置配对关系时,明确展示这组按键和后续在 macOS“系统设置 → 蓝牙”中重新连接的操作;不能把进入配对模式误写成 App 已自动完成蓝牙重置。
      • 2026-10-23 核对实现状态:提示已随 1.8.25 Stable 发布(见 Resources/en.lproj/ReleaseHistory.md)。OnboardingView.swift 的 physicalRemoteContent 按 onboardingControlSource 渲染 onboarding.remote.first_pairing.wake 与 onboarding.remote.first_pairing.pair 两步,中英文文案齐备;open_bluetooth 提供“打开蓝牙设置”入口。措辞只说明如何进入配对模式,未声称 App 已自动重置蓝牙连接。
      • 两处与原文字面的偏差:提示落在“遥控器”步骤而非欢迎页(OnboardingFlow.visibleCases 顺序为 welcome → remoteAvailability → permissions → remote → …);“系统设置 → 蓝牙”重新连接作为页面独立按钮提供,未并入配对提示的步骤卡。按产品实际行为记录为已完成,如需把提示前移到欢迎页或并入步骤卡另开工作项。
    • 输入工具页右栏按当前工具显示四项配置指引:豆包、微信、Vokie 使用浅色/深色真实截图,Typeless 与其他工具使用简短说明;五个工具都显示“去除系统 Fn 占用”和微信 App Fn 冲突步骤,麦克风匹配由语音测试页核对,最终仍由真实文字测试验证。
    • 2026-09-29 修正英文 Onboarding 的第三方官方名称与普通用户术语:豆包使用 Doubao,微信输入法使用 WeType,其他入口使用 Other Voice App;生产离屏截图支持显式选择中英文,英文页面不得再因固定卡片高度或行数限制而截断。
    • 2026-10-03 修正 Mac 英文术语、语音恢复提示、连接批准弹窗与截图选项对照;保留原始中文截图及现有语音模式,真实设备验收状态不变。
    • 新用户 Onboarding 已改为 staged 语音键统一固定为 Fn,不再根据工具历史配置自动覆盖正式快捷键;真实文字通过后才提交验证后的 Binding。
    • Onboarding 语音测试输入框页提供音量说明与 0–1000% 调节(与连接页共用 OutputVolumeSlider 和同一个值),支持用户用小声/气声反复测试;自动化已覆盖页面与持久化路径,仍需真实遥控器、音频设备和第三方输入工具验收。
      • 2026-09-25 已完成候选实现:新增版本化 Profile/Binding/PairingPlan,覆盖豆包、微信、Vokie、Typeless 与其他工具;工具页保持豆包、微信、Vokie、Typeless、其他的相对顺序,其中微信与 Typeless 仅在确认已安装时显示,豆包、Vokie 和其他始终显示;历史 ChatterFly 值迁移为未选择。
      • 工具页不展示快捷键来源、学习路径或 Command/Option 选择;本次 Onboarding 的 staged 语音键统一固定为 Fn,选择工具时不立即改写正式配置。
      • 新配置采用 staged → verified 事务:只有真实会话开始、PCM、正常停止、第三方配置确认与文字上屏全部通过后才持久化;返回、退出或异常中断恢复原配置。
      • 控制来源已合并成单页并按 Package 门禁:公开构建只显示小米遥控器;完整包增加苹果遥控器第 6/7 代、Chromecast 及 Apple companion/Web 备用方式,实体设备优先展示。
      • Vokie 通过公开 Bundle ID / URL Scheme 后台启动,sayall://launch 回流只做激活与日志记录;回流状态不能替代真实语音门禁,也不读取第三方私有配置。
      • 自动化已覆盖默认矩阵、来源转换、Fn 点按、Chromecast 原生 toggle、事务回滚、Package 编译门禁与 Deep Link 解析;仍需完成公开/完整包生产截图、私有 Package 构建、真实第三方工具、iPhone/Watch/Web 模式上报、各硬件真实语音文字与 macOS 14/15/当前系统验收后才能勾选。
      • 详细方案与证据保存在私有资料库 projects/remote-mic-app/research/onboarding-voice-shortcuts-and-input-method-visibility/v1/ONBOARDING-OPTIMIZATION-PLAN.md;公开仓只保留行为、兼容边界和验证状态。
      • Secure Input 仅作为实体遥控器普通按键无响应时的候选诊断;需在真实密码输入/安全键盘场景验证“重新检测”恢复路径,并确认普通按键页不执行用户已有映射。
    • 在 Onboarding 新手引导中增加“打开 App 并聚焦输入框”的演示动画:清楚展示用户按下已映射的遥控器按键后,无线麦打开或切换到目标 App,并自动把焦点放入可输入文字的区域。动画用于解释这一核心能力,应支持重新播放,并与后续真实按键测试和自定义 App 配置衔接。
    • 在 Onboarding 的设备选择步骤支持苹果遥控器,并按所选型号显示对应真机图:用户安装时选择了可选 SiriRemoteComponent.pkg 时,在“是否有实体遥控器 / 选择控制来源”步骤提供 Siri Remote 选项,并把该步骤固定的 Resources/RC003-remote-photo.png 小米遥控器图换成 Siri Remote。
      • 只有安装时选择了可选 Siri Remote 组件(即当前 App 内苹果遥控器能力可用)才显示该选项;未安装组件的用户继续完全看不到,不得出现无法完成的入口,也不得为判断型号提前触发权限或蓝牙扫描。
      • 用户所选型号必须进入后续门禁:连接、普通按键、语音样本、松开停止和文字上屏只以所选型号为当前控制来源;其他同时在线来源(小米遥控器、iPhone、网页版)不能代替通过。
      • 该步骤按所选型号切换示意图:苹果遥控器复用私有 Package 已有真机图与热点资源(A2540 复用 A2854 图片),小米遥控器保持现有 RC003-remote-photo.png,不重复打包第二份资源;未做选择时按真实已连接型号或默认型号显示,图片与选择不得长期不一致。
      • 需要同步更新 feature/first-run-onboarding/PRODUCT_SPEC.md(选择控制来源)与 platform-macos.md、Testing/FirstRunOnboarding.md 及完整 UI 截图清单(新增 Siri Remote 实体分支的浅色/深色页面);真实 A2854/A2540 与 RC003 的首次配对、普通按键、真实语音文字上屏验收通过前不标记完成。
    • 每一步必须显示“用途、当前实时状态、一个主要操作、验证结果和失败后的下一步”。完成状态来自权限 API、蓝牙/HID、音频设备和真实语音数据检测,不能因为用户访问过页面或点击过系统设置就标记成功。
    • 流程不提供“跳过”或“稍后继续”,必要步骤未通过时不能进入下一页或主面板;关闭 App 后保存当前位置,下次启动直接恢复。设置页提供“重新运行设置向导”入口,并明确说明重新检查不会清除现有连接、按键映射或其他设置。
    • 从系统设置返回 App、App 重新获得焦点、重启、遥控器重连或音频设备变化时自动刷新当前步骤。对于输入监控或辅助功能需要重新勾选、关闭后开启或重启 App 的情况,提供准确操作和“重新启动无线麦”按钮,并在重启后恢复到原步骤。
    • 真实语音测试分别确认语音会话开始、实际 PCM 样本到达、所选语音输出设备就绪、松开后会话结束和文字实际出现在向导输入框;测试内容不由无线麦保存或上传。
    • 已完成 Onboarding 后权限被撤销或设备失效时,只在主面板显示对应修复提示并直接打开失败步骤,不强迫老用户重跑完整向导;流程使用版本化状态,新版本只补跑新增或失败的必要检查。
    • 重新布局“连接”页面,按“RC003 连接与语音状态 → 主要连接/重连操作 → 手机 App 与网页版等备用入口 → 对应排障信息”的顺序组织;当前状态和最常用操作优先显示,错误信息直接关联可执行的解决步骤,避免设备状态、语音触发和多种手机连接入口混在同一视觉层级。连接页在已完成 Onboarding 后按公开运行状态和 SayAll 自身 HID 失败显示语音键兼容提示:Karabiner 显示专项步骤,其他 HID 工具显示通用检查提示。
    • 重新布局“按键映射”页面,按“遥控器实物图与当前选中按键 → 当前按键动作配置 → 映射启用状态与必要说明 → 高级或实验选项”组织;保留全部现有映射能力、语音键独立触发模式和实物图点击定位,不因布局调整改变普通按键含义、默认配置或持久化格式。
    • 已按确认设计完成“连接”和“按键映射”两个现有设置页的重布局:连接页保留实体遥控器、语音输出、MiRemoteV 2ch、Nearby、TestFlight、受信任设备和网页版全部入口;按键页同时展示所有按键的单击、双击、长按,并默认锁定正在编辑的按键。
    • 已实现 Typeless 式双栏 Onboarding:顶部仅显示“准备 › 设置 › 试一下”,不显示步骤编号、总数、百分比或强制提示;流程状态版本化持久保存,完成前启动时强制显示向导且不启动完整运行时,进入设置阶段后才启动蓝牙和音频服务。
    • 历史 Fn-only 阶段曾实现:Onboarding 按公开 API 显示微信输入法与 Typeless,首次设置统一使用 Fn/地球键,Typeless 使用 Fn 点按,并保留老用户安装状态迁移。该规则已由 2026-09-21 的 Profile/Binding 配对方案替代,不再作为现行产品行为;历史自动化和迁移证据仅用于兼容回归。
    • 自动化已覆盖步骤顺序、前后导航、启动窗口与延迟运行时门禁、所有能力门禁、退出续接、完成版本和重新运行;Onboarding 定向测试通过。完整 Swift 测试 178 项、18 个 suite 以及 42 项项目自检全部通过,Release 构建和测试 App 代码签名校验通过。无需屏幕解锁,已用生产视图离屏生成并逐页检查浅色、深色各 8 张真实实现截图,1020 × 772 页面无裁切且两种外观左右视觉体系一致;截图能力保留为 App 隐藏入口和本机 Skill。v1.8.8 (100) 已作为公开 Pre-release 发布,最终 ZIP 锁屏启动存活且无新增崩溃,公开下载资产逐字节校验和从已安装 1.8.7 (68) 发现候选更新均通过。
    • 2026-08-11 候选修复升级首次启动时“HID 按键已收到但 BLE 仍显示未连接”的停滞:向导只请求一次恢复,且空 bridge 的“重新查找”会实际启动蓝牙连接;仍待真实 Sparkle 升级和 RC003 基线验收。
    • 2026-08-11 已修复旧版已安装用户升级后被误送入完整 Onboarding:旧 Build 或 Sparkle 启动记录会在没有任何向导状态时一次性迁移为已完成;真正全新安装、中途未完成和主动重新运行仍必须继续向导。自动化已覆盖边界,等待真实 Sparkle 升级验收。
    • 2026-08-11 曾把音频步骤扩展为全部系统输出;2026-08-19 明确收敛为只展示并接受 MiRemoteV 2ch 与 BlackHole 2ch,Beosound、扬声器和其他普通设备不能通过,主设置页的普通设备选择不受影响。
    • 2026-08-11 候选修复新配对遥控器需要重启才能显示、BLE 已连接但普通按键无响应:从系统蓝牙设置返回时刷新 discovery;多个 HID service 部分应用电源键保护时只监听安全 Location,失败或缺失 Location 继续关闭;设备卡改用“小米蓝牙遥控器 2 / 2 Pro”完整名称并自适应状态布局,连接页去除重复信息,文件菜单新增日志目录入口。208 项 Swift 测试、42 项项目自检、16 项硬件模拟、Release 构建和浅/深色生产 Onboarding 截图已通过,仍待 RC001 / RC003 新配对、双设备、电源键和电池充电状态真机验收。
    • 2026-08-21 设置页设备选择器只展示实时已连接的遥控器,避免历史断开 profile 挤压连接页和按键映射页;没有已连接设备时保留查找/重连入口,不影响首次使用和新设备发现。按键映射页 1–2 台设备使用固定宽度卡片靠右排列,3 台及以上才启用隐藏滚动指示器的横向滚动,并让选择区填充“自定义按键”开关右侧的剩余宽度。自动化与构建验证见 Testing/ConnectedRemoteCards.md,真实双遥控器与首次配对仍待现场验收。
    • 2026-10-05 修复遥控器卡片空白区域无法点击的候选;卡片留白和边框内侧执行设备选择,卡片内次要按钮保持独立。产品规范、设计规范和点击用例已同步。运行界面复现与本地构建通过;真实多设备验收按 Testing/ConnectedRemoteCards.md 执行。
    • 2026-08-11 已审计全部八页恢复门禁:遥控器页回到前台时同时刷新 BLE/HID,显示生产 HID 状态并提供重新检测;音频页回到前台自动刷新;完成页重新验证当前权限、BLE 和音频,同时避免依赖视图重建会丢失的临时语音/按键标志。对应自动化已加入,真实权限、热插拔、驱动和第三方语音工具仍待完整验收。
    • 2026-08-13 已加入本地首次成功漏斗与卡点自愈:记录进入、阻塞、重试、恢复、通过、完成、失败码和阶段耗时,相同轮询状态去重;每个阶段只突出一个主要修复动作,完成页按权限、遥控器或音频状态定向回跳。用户可复制脱敏设置诊断,内容不含设备名、设备标识、路径、用户文字或音频,也不会上传。自动化已覆盖失败码、事件去重、摘要和回跳,真实权限/硬件/第三方语音工具仍按测试手册验收。
    • 2026-08-15 遥控器页补充首次连接顺序:先长按 TV 键约 2 秒直到遥控器底部白灯闪烁,再同时长按 Home + Menu 进入蓝牙配对;现有连接和实体按键门禁不变。
    • 2026-08-17 输入法设置候选:语音工具页增加微信输入法,豆包/微信选择后自动切换对应 macOS 输入源;按浅色/深色展示各自 Fn 设置截图,两者共同检查系统 Fn 必须为“不执行任何操作”,并展示微信 App 清空两个语音输入快捷键的截图。2026-08-21 已限制主动切换只发生在输入法选择页,离开该页不再重复触发系统确认;真实第三方输入法与微信 App 设置仍待人工验收。
    • 2026-08-17 已修复语音工具页四个选择卡错位和左栏必须滚动的问题:选择卡等高并顶部对齐,豆包/微信四项设置迁移到右栏;生产视图在 1020 × 772 下逐页检查无内部滚动或裁切。
    • 2026-08-17 已修复没有实体遥控器的用户无法完成 Onboarding:先并列选择“有遥控器 / 当前没有遥控器”,优先实体遥控器;只有没有遥控器时才继续选择推荐 iPhone App 或“没有 iPhone 时”使用网页版。生产状态已确认遥控器连接时自动进入实体流程,不提前启动 discovery。三种控制方式统一要求蓝牙、输入监控和辅助功能;三条路径都必须由所选来源完成真实连接、普通按键、语音样本、松开停止和文字上屏,其他同时在线来源不能代替通过。
    • 2026-08-18 候选修复语音测试页偶发没有成为文字写入目标:输入框出现、App 回到前台和点击重试时都会重新聚焦;输入法只在选择页主动切换,后续页面不重复触发系统确认;占位符与正文统一为 15pt 并对齐内容起点。2026-09-21 补充语音松键时提交原生 NSTextView 的 marked text,并在第三方工具延迟撤销组合态时恢复本次 attempt 已显示文字。定向测试和浅色/深色生产页面已通过,真实豆包、微信输入法与实体遥控器文字提交仍待现场验收。
    • 2026-08-29 基于 1.9.18 (171) 候选修复语音测试与返回导航:语音输入框改由 AppKit NSTextView 建立并验证真实 first responder;每次语音 attempt 只在松开并等待文字提交后记录一个脱敏终态,区分输入目标未就绪、焦点丢失、无样本、手输和第三方工具未提交,并保留真实文字上屏门槛。权限页主动返回时只抑制一次已连接实体遥控器的自动前进,允许用户改选无遥控器路径。自动化已覆盖策略、旧诊断事件兼容和脱敏摘要;真实 RC003、iPhone、网页版与第三方语音工具仍待验收。
    • 2026-08-29 补充三种受支持语音工具均未安装时的 Onboarding 提示:仍保留“其他语音工具”入口,但明确要求第三方工具支持语音输入、由用户在工具设置中选择麦克风,并在语音测试页再次显示当前虚拟音频设备;第三方工具未提交文字时继续按真实文字门禁阻断并提供针对性恢复说明。豆包未安装时无论当前选择哪种工具,都持续显示豆包输入法官方安装入口。
    • 2026-08-31 根据 1.9.19 (172) 豆包现场补充双端麦克风门禁:SayAll 音频页选择 MiRemoteV 2ch/BlackHole 2ch 只配置输出端,语音测试页要求用户在所选第三方工具中选择同一麦克风并勾选不可忽略确认;切换工具或设备后确认自动失效。诊断 schema 3 按 attempt/generation 区分收到、调度、实际播放、中断与 pending 音频、设备绑定、瞬时/持续失焦和第三方不可观察边界。用户已确认豆包改为 MiRemoteV 2ch 后恢复;自动读取第三方内部麦克风仍受公开接口和跨 App 数据边界限制,因此第 179 项的逐项自动检查保持未完成。定向测试 63 项、完整 Swift 测试 435 项、项目自检 44 项和 Release 构建均通过;三种控制方式浅色/深色共 58 张生产截图已逐张检查,真实微信、Typeless、BlackHole、iPhone 和网页链路仍待独立现场验收。
    • 2026-09-05 在语音测试输入框页集中显示“无线麦发送键 → SayAll 音频输出 → 第三方识别键/全局唤起 → 第三方麦克风”的配置核对卡;第三方状态只能逐项由用户确认,切换工具或设备后确认自动失效,音频未就绪显示红色并阻止继续。新增 Testing/OnboardingConfigSummaryScreenshots.md 记录 112 张浅色/深色生产截图证据;真实第三方工具和音频链路仍待现场验收。
    • 2026-09-09 将“关于”侧边栏入口改名为“设置”,权限与隐私、通用、诊断与日志合并到同一页;导出/导入配置及登录启动/启动打开主窗口各合并为一行,待更新版本 Release Notes 固定显示在检查更新区域右侧。2026-09-10 继续按确认设计稿收紧为原生平铺分区,移除首屏品牌 Hero、反馈大卡和展开二维码,并把分享模块固定到支持入口之后的页面最底部。2026-09-12 放大顶部 Logo,将名称与一句话介绍移到 Logo 下方,移除重复的“重新检查”入口,并把唯一的“检查更新”按钮与预发布开关合并到一行。已完成中英文浅色/深色截图,并补充权限恢复动作、诊断摘要脱敏与写入、旧权限路由及分享导航状态的行为自动化;真实 macOS 权限、系统设置跳转与最小窗口交互验收仍按 Testing/AboutUpdateCenter.md 执行。
    • 2026-09-28 已完成设置页多 App 图标选择框架、稳定标识持久化、启动恢复、资源缺失回退与脱敏日志;2026-09-29 已接入稳定标识 faceted-duck 并补齐中英文名称与打包逐字节校验;2026-09-30 按确认统一由 Apple Silicon 与 Intel 共用用户提供的透明圆角 Resources/AppIcons/faceted-duck.png 原始字节,选择按钮不显示名称文字,并在运行时增加透明安全边距以匹配 Dock 中其他 App 的视觉尺寸。2026-10-03 已重新通过目录、图片应用、透明安全边距、缺失资源回退和设置页接线自动化;2026-10-04 将缺省选择和 App 打包主图标统一为 v2“几何鸭”,保留经典鸭选项和已有明确选择;2026-10-05 确认最新提交加入手工 .icon、Assets.car 和 CFBundleIconName 后触发 LaunchServices 通用文件图标回归,已恢复 ICNS 路径;Apple Silicon 与 Intel 静态 App 包均使用方形原图,Intel 运行时资源继续保留圆角透明原图。2026-10-10 在激活策略变化、窗口最小化和恢复后重新应用当前圆角运行时 Logo。2026-10-13 用户确认 2.0.0 build 248 的 Dock 右侧窗口缩略图标记仍为方形;归档资源检查证明 Intel 静态 ICNS 四角不透明。候选仅将 Intel 静态 ICNS 改为公开圆角 Logo,移除 Intel 运行时 PNG 的单独覆盖,保留 Apple Silicon 静态兼容基线。静态图层回归测试通过;真实 Intel 原始用例、白底和覆盖安装缓存仍待验收。已核对固定私有组件的 MembershipAppIcon 读取宿主当前图标;缺少宿主图像时仍使用私有 PNG 回退。用户于 2026-10-13 要求先合入,再自行打包送测;Intel 外观验收保持未完成。
    • 2026-10-02 侧边栏固定显示 SayAll 与安装包版本,品牌及中间导航相对首轮实现上移 15pt;该阶段分享保持原图标与跳转行为(2026-10-03 已迁至个人中心顶部),个人中心使用当前 App icon 并随设置即时同步。已完成最小窗口导航、图标切换与分享交互检查,截图及验证边界见 历史截图证据已按仓库清理规则移出;不代表上项两架构 Dock 与重启验收完成。 本次补充已统一原生确认弹窗的运行时圆角 Logo;Intel 静态 ICNS 的新候选与现场边界见上项。 2026-10-28 按用户要求将 Logo 放到侧边栏顶部,两处品牌名统一为 Oxanium SemiBold 600,底部个人中心改用系统账户图标;构建、60 项设置页回归、公开构建最小窗口导航和中英文浅深色离屏检查通过,证据见 Testing/AboutUpdateCenter.md 用例 1B。2026-10-30 按第 8 版已确认设计收紧侧边栏为 136pt 横向图标加文字布局,Logo 使用 44pt 顶部品牌块,英文 Button Profiles 和长用户名按可用宽度换行并保持图标与文字块垂直居中;构建、61 项设置页回归、1020×772 生产截图和实际导航点击检查通过,证据见 Screenshots/design-drafts/sidebar-compact/v8/ 与 Screenshots/sidebar-compact-production/。2026-10-31 按用户要求改用内容测量宽度:侧边栏在 104–136pt 内取当前语言最宽的一行(中英文都约 129pt),文字到左缘和右缘都为 15pt;顶部 Logo 与品牌字保持 44pt / 16pt。设计与测试手册已同步,构建与生产截图证据待补齐。
    • 2026-09-05 新增 feature/first-run-onboarding/PRODUCT_SPEC.md 作为 Onboarding 跨平台唯一产品规范入口,并拆分 macOS 与 Windows 平台适配附件;仓库开发规则要求以后检查、开发或移植 Onboarding 前先阅读该规范,平台实现不得降低真实连接、真实音频、真实文字、恢复、诊断和隐私门槛。随后补充根目录 FILE_NAMING.md:文件语义按完整相对路径判断,功能目录已经提供 Onboarding 作用域,因此保留 PRODUCT_SPEC.md 固定角色名,不重复命名为 ONBOARDING_PRODUCT_SPEC.md。
    • 2026-08-19 修正两个错误通过条件:音频页只允许 MiRemoteV 2ch 或 BlackHole 2ch 满足设备门禁,Beosound 等普通输出不能通过;每次语音会话开始会清空旧文字,只有确认来自 HID 系统且无用户进程来源的物理 keyDown 才按手输阻塞,合成、combined/private、非零 PID、缺失或未知事件来源 fail-open。真实豆包、微信输入法、Typeless 仍需现场验收。
    • 2026-08-19 候选修复 Typeless 与遥控器识别:语音工具选择同步 Fn 点按偏好,三种控制方式通过权限页都会应用;已通过生产 HID 链路验证的普通遥控器按键可在语音 bridge 尚未 Ready 时证明实体控制已识别,并继续后台恢复。普通键盘和仅系统蓝牙文字状态不能通过,真实 Typeless 与 RC001 / RC003 仍待现场验收。
    • 2026-08-20 根据 1.9.3 真实现场日志修复未绑定实体遥控器的 HID 首报告死锁:discovery 先以非独占模式打开所有安全候选,首份包含已知普通按键的真实报告再绑定实际操作的设备,空闲/未知报告不抢占;保留双遥控器隔离、电源键保护和首按不丢失。自动化已通过,仍待 RC001 / RC003 真机验收。
    • 2026-08-20 候选修复权限页已授权卡片无法再次打开系统设置:蓝牙、输入监控和辅助功能整卡在两种状态下都可点击;已授权蓝牙只打开隐私页,不额外重连。正式签名 Remote Mic.app 与 SayAll.app 保持相同 Bundle ID、可执行文件、Team ID 和 designated requirement 时原则上延续 TCC 权限;ad-hoc 包不能作为继承验收。
    • 2026-08-20 根据 Issue #100 增加升级权限定向恢复:已完成 Onboarding 的用户刚完成版本更新后,若三项权限任一实时缺失,直接打开“权限与隐私”补授权,不重跑完整向导;权限全部正常、普通启动和新用户流程不变。公开 1.9.3 PKG 已包含旧 App 安全迁移。
    • 2026-08-21 修复 App 改名后的 PKG 升级时序:检测到已安装的 SayAll.app、Remote Mic.app 或 无线麦.app 后,先停止 RemoteMic 进程,再执行 MiRemoteV 2ch 更新和 coreaudiod 重启;新 App 验证通过后旧路径仍只移入废纸篓。2026-08-22 修复旧 receipt 导致的 bundle relocation(component plist 将 Applications/SayAll.app 设为不可重定位),并用官方 1.8.3 → 真实签名、公证 1.9.7 (130) PKG 复验通过;实体遥控器按键仍需独立真机验收。
    • 2026-08-24 修复全新首次启动时 Onboarding 窗口在 SwiftUI 完成布局前按近似 1 × 1 尺寸居中,随后向右下扩张并超出屏幕的问题:窗口现在先建立完整 1020 × 772 内容尺寸,再启用位置保存并居中;隔离 Bundle ID 的空偏好域首次启动、原始异常 frame 恢复和已完成 Onboarding 的设置页真实窗口复验均通过,外接显示器、低缩放分辨率与 Intel 仍按测试手册验收。
    • 2026-08-20 根据 1.9.3 真实现场日志修复未绑定实体遥控器的 HID 首报告死锁:discovery 先以非独占模式打开所有安全候选,首份包含已知普通按键的真实报告再绑定实际操作的设备,空闲/未知报告不抢占;保留双遥控器隔离、电源键保护和首按不丢失。另将 kIOReturnExclusiveAccess 单独识别为第三方输入工具占用,并在检测到 Karabiner-Elements 时显示具体关闭 “Modify events” / 设为 “Ignore” 指引。自动化已通过,仍待 RC001 / RC003、Karabiner-Elements 与其他 HID 工具真机验收。
    • 2026-08-17 权限依赖复核结论:实体遥控器普通按键映射仍需要输入监控与辅助功能;iPhone 和网页版普通按键来自既有网络链路,不直接依赖 IOHID,但 Onboarding 按产品要求仍统一开启蓝牙、输入监控和辅助功能,以覆盖后续切换控制方式、自定义按键及 Fn 输入法切换。
    • 仍需在 macOS 14、15 和当前系统上验证全新安装、逐项拒绝后恢复、退出后续接、App 重启、权限被撤销、实体遥控器/iPhone Nearby/手机 Safari 网页版断连、音频设备缺失、豆包/Typeless/其他工具及完成后的首次真实使用;使用 1020 × 772 窗口逐步检查 Onboarding 和“连接、按键映射、权限”页面,确保页头、状态、主要操作、滚动和底部导航均不裁切,也不改变窗口几何。
    • 详细步骤、状态模型、错误分支、导航结构、实现切片和验收矩阵保存在私有产品资料库;公开 TODO 只保留产品行为和兼容边界。
  • 自动聚焦输入框(已完成:打开 Codex、Claude、cmux 后自动聚焦其输入区域;内置 App、自定义 App和自定义快捷键现统一等待 system-wide Accessibility 最终焦点成为安全可编辑位置,再允许第一次 Fn 语音启动)

    • 2026-10-23 更新 #722:修复 SayAll 自身处于前台时聚焦自身 composer 造成的死锁。宿主注入的焦点请求在目标为自身进程时跳过 AX 查询(focusFrontmostComposer 判定 processIdentifier 相同即返回 result=skipped reason=self_frontmost),不再进入自等待。定向测试与公开宿主回归通过;真实目标 App 与实体遥控器仍按测试手册验收。见 Testing/CustomApplicationFocus.md。
    • 2026-10-20:修复 WorkBuddy 匿名输入框无法学习的问题。祖先上下文为空时复用已知窗口语义,保留敏感字段和多候选拒绝规则。本机候选包已完成学习和测试输入框,辅助功能焦点最终落在文本输入区;搜索框干扰、冷启动、普通聚焦动作与实体遥控器仍待验收。见 Testing/CustomApplicationFocus.md。
    • 2026-10-23:WorkBuddy 默认 App 入口与免学习聚焦候选,使用 com.tencent.workbuddy.mac 和现有公开 Accessibility 策略。安装后可直接选择“打开 WorkBuddy”;不改动旧自定义配置。948 项自动化、48 项自检及本机 V5.9.0 后台打开、搜索框干扰、冷启动通过;英文深色截图、独立运行日志、真实遥控器和首次语音输入仍待验收,见 Testing/CustomApplicationFocus.md。
    • 2026-11-05:修复聚焦后插入点落在文字之前的问题。Chromium 宿主只收到辅助功能焦点时把插入点放在偏移 0,未聚焦入口因此把语音首字插到已有内容最前面,已聚焦入口则停在末尾;按用户确认的“记忆 / 恢复”语义实现:聚焦期间用 AXObserver 订阅选区变化只记偏移(ComposerCaretTracker),未聚焦入口在聚焦前预置记忆偏移、聚焦同帧直接恢复(宿主钳制越界值,内容变短等价于回到末尾),无记忆才发标准 Cmd+Down 末尾键(完整和弦保证修饰键状态归零),已聚焦入口只记忆不移动,空输入框不丢失聚焦;同时修复目标 App 已在前台时按键仍重新激活、窗口 resign/become key 导致输入框焦点闪断 1–2 秒的问题,已在前台改为跳过激活直接聚焦(reason=already_frontmost)。定向自动化通过;WorkBuddy、Codex、Claude 与自定义 App 的实机光标落点和语音首字仍待验收,见 Bugs/2026-11-05-workbuddy-composer-caret-before-text.md 与 Testing/CustomApplicationFocus.md 用例 0E。
    • 2026-08-22 真机发现该能力对 Claude Desktop 和 ChatGPT 稳定失效(composer_not_found):web 内容的辅助功能树是懒加载的,必须由辅助技术客户端先声明自己。已在聚焦流程中设置 AXManualAccessibility,对不认该 Chromium 约定的外壳降级为标准的 AXEnhancedUserInterface,并把 composer 重试窗口放宽到 12 × 250ms。Claude Desktop 已真机验收通过;ChatGPT 的降级路径仍待复验。根因与步骤见 Bugs/2026-08-22-electron-composer-focus-needs-manual-accessibility.md。
  • 支持通过遥控器按键一键唤起 Codex 并启动其语音功能(仅记录,暂不开发)

    • 第一层“打开或切换到 Codex,并聚焦输入框”已经具备技术基础;目标是将其与“启动 Codex 自带语音输入”组合为一个可配置动作,用户按一次遥控器按键即可开始说话。
    • 实现前先确认 Codex 是否提供稳定的全局快捷键、菜单命令、URL Scheme、App Intent 或其他公开入口。若存在,优先调用公开入口;若只有可访问性树中的麦克风按钮,可评估通过辅助功能执行 AXPress,但不得依赖固定屏幕坐标。
    • 组合动作需要按顺序处理“启动或激活 Codex → 等待窗口和输入区就绪 → 聚焦输入框 → 触发语音功能”,并覆盖 Codex 尚未启动、窗口被关闭、正在其他任务、首次麦克风授权及语音功能不可用等状态。
    • 需要确认再次按键是停止 Codex 语音输入,还是只负责首次唤起;在入口和停止语义未验证前,不承诺单键完整控制录音生命周期,也不能影响现有 Codex 自动聚焦及普通打开应用动作。
  • 常用语按键直发(macOS)

    • 2026-10-13:修正常用语入口被压进单个动作网格单元格的问题;横向按钮移至网格外,会员标识使用 12pt。验证与私有会员现场边界见 布局修复记录。
    • 2026-10-13:实现已移入私有会员 Package;公开宿主只保留动作 ID、入口和可选适配。显示和使用由会员服务决定,公开构建不承诺包含常用语实现。下方 2026-10-03 的文件位置、构建接线和验收结果为迁移前历史,不作为当前公开构建要求。
    • 产品规范已合入 feature/common-phrases/PRODUCT_SPEC.md(PR #460);实现、构建接线、测试手册和截图清单都必须以该规范为准。本条只记录状态,不重复规范内容。
    • macOS 交互、存储、构建与插入行为已实现并经用户真机验收;未来范围与各硬件/平台的独立验证要求继续保留。
    • 2026-10-03 界面跟进:移除常用语侧栏,在“打开常用语”动作旁进入调整页;共用黑色五键圆盘,左侧先选位置,再从库中选择内容保存分配。保持候选状态,验证记录见 测试手册。
    • 同日视觉对齐:常用语库恢复描边行、蓝色选中态、拖动排序与键位标签;编辑区恢复多行完整句、蓝色保存和图标删除,验证边界仍以测试手册为准。
    • 同日交互跟进:动作目录改为五组平级,具体 App 平铺且自定义 App 位于末尾;常用语浮层宽 300、居中、80% 不透明度,顶部说明放大,方向/OK 选中即关闭并保留本次插入和松键消费。继续保持候选,真实环境待验收。
    • 同日导航与点击范围跟进:顶部说明改为两行居中 14pt;按键页筛选及动作按钮覆盖边框内全部留白;调整页使用同一行的“返回”与标题,返回点击区域 72×44pt。真实环境验收状态仍以测试手册为准。
    • 用户主动打开常用语面板后,面板是短时窗口而非常驻开关:方向键围成一圈、OK 键居中,五个按键各插入一条常用语,返回键关闭面板且不透传给前台 App。插入在光标位置进行,不替换已有内容,也不自动回车。
    • 内置常用语唯一人工编辑源已入库为 Resources/CommonPhrases/built-in.md(当前 12 条)。默认键位在该文件「默认键位」一节显式声明(OK/左/上/右/下 = 编号 1–5),实现不得按列表顺序自行推断;编号 6 及以后不进默认键位,只作内置内容供用户选用。
    • 文本只保存在本机,不联网、不上传,日志和诊断输出不记录常用语正文;用户可自行新增、编辑、删除和调整顺序,修改内置条目不回写 built-in.md。
    • 插件化(统一的插件注册、启用状态、生命周期和按键动作入口)本轮不做;规范只要求在动作目录中预留稳定动作 ID,便于将来平移而不返工。
    • 打包链路确定为“构建期生成”:构建脚本读取该 md 的表格行生成 JSON 资源并打进 App,App 只读 JSON。修改 md 后重新打包,内置常用语必须随之变化;表格缺列、单元格为空、编号不连续,或「默认键位」一节与表格不一致时构建失败,不允许静默使用旧数据或代码内置回退。生成结果只取表格数据行,表格以外的散文段落不参与。
    • 插入采用系统剪贴板 + Cmd+V:写入前快照原剪贴板,插入后若用户未自行复制新内容则恢复,用户新复制则不回滚;常用语正文不得进入日志与诊断输出。
    • 实体遥控器、手机遥控和网页版遥控只要配置了触发,就必须都能打开面板并插入;面板打开期间不区分单击、双击和长按,且认领必须发生在手势识别之前,否则配了双击或长按的键会被推迟到手势判定结束才响应。
    • 面板已显示时再次按同一个“打开常用语”按键关闭面板;关闭按钮固定在右上角且顶部、右侧边距相同。输入框不可用提示使用短文案并显示 5 秒;备份导入导出携带官网和 GitHub 来源链接,旧备份继续可读。
    • 当前状态:JSON 生成与打包、打开动作、面板即时认领、剪贴板事务、用户编辑与持久化及导入导出已完成,公开宿主与私有集成 CI 通过。2026-10-03 用户在本任务确认“真机测试通过,合入吧”,本轮 macOS 功能验收完成,通过 PR #558 集成 main。确认未列出逐设备、逐目标 App 或逐用例结果,不扩展为全部硬件与平台兼容认证;详见 测试手册。上方同日候选状态为验收前记录。
    • 验证门槛:需覆盖真实遥控器逐键插入、连续多次发送、无可用输入框、只读与密码输入框、前台 App 切换、面板开关后原映射完整恢复,以及微信、豆包等真实第三方输入框的真机验收;语音键的按下/释放会话、首字延迟和尾字完整性必须不受影响。
  • 将输入设备与按键动作两端配置化,并评估用户共享动作市场(自定义 App 动作第一阶段已完成)

    • 自定义 App 动作第一阶段已完成并经用户真机验收:Mac 端支持从本机选择任意 .app,将“只打开 App / 激活后发送聚焦快捷键 / 聚焦用户记录的 Accessibility 输入框”绑定到单击、双击或长按,并随多遥控器配置及导入导出保存。同一触发方式切换当前动作时,只改变启用项,不会清除已录入的自定义快捷键、已选自定义 App 或该 App 已学习的输入框;切回后可直接继续使用,恢复默认时才清除按键级配置。旧 ButtonAction raw value 和旧配置继续兼容。
    • 用户补充了一个更具体的第一阶段需求:例如 Proma 安装在 macOS“应用程序”目录后,只要配置其精确 Bundle ID,就应能作为自定义 App 被唤醒;用户再通过“记录目标输入框”选择要聚焦的输入区域,App 保存稳定的 Accessibility 特征,之后无需拆包、改源码或跟随无线麦频繁重新编译,即可把“打开 Proma → 聚焦输入框”映射到遥控器按键。
    • 动作端先配置化固定且通用的部分:显示名称、Bundle ID、启动或激活方式、聚焦策略、目标输入框的 role / identifier / placeholder / 祖先上下文等 AX 特征、重试和超时。输入框记录必须提供测试、重新记录和失效提示;目标 App 升级导致 AX 树变化时不能误聚焦搜索框、设置框、Token 或密码输入框。
    • 输入端也使用“物理设备 → 标准化控制项 → 单击 / 双击 / 长按 → action ID”的 Profile:对于标准 HID 键盘、媒体遥控器和游戏手柄,可以配置设备匹配条件、usage page / usage、按下松开和逻辑按键名称,使输入器不再局限于某个遥控器型号。私有 BLE 配对、ATVV 音频、特殊 report 解码或厂商协议仍需要受测代码适配,不能声称任何设备都能只靠配置支持。
    • 当前 ButtonAction、预置 App 和执行分支仍是封闭枚举;正在引入的设备 Profile 主要解决按设备保存映射,并不等于动作定义、App 聚焦规则或新 HID 控制项已经完全数据驱动。目标架构应统一为“输入设备 Profile → 标准化触发 → 稳定 action ID 与版本化参数 → 受控执行器 → 明确结果”,并允许 AI 按公开 Schema 生成可导入配置。
    • 第一阶段只做本地配置、记录、测试和导入导出,优先完成“自定义 App + 输入框聚焦”和标准 HID / 游戏手柄控制项;宏工作流、多个步骤之间的条件判断和共享市场后置。后续动作包可以再支持快捷键、受限 URL Scheme、用户已经创建并明确选择的 macOS 快捷指令,以及由多个安全动作组成的顺序工作流。
    • 可配置普通按键的双击窗口、长按阈值,以及独立的单击、双击、长按和按住行为:候选分支 codex/button-gesture-timing。按住只选择重复单击或重复长按,入口位于按键名称右侧;新建或首次修改且满足能力条件的按键默认重复单击,旧配置和用户清除状态不变。默认 300/550ms;识别时间按遥控器型号共享,按键页底部提供滑块、学习和保存入口。配置、迁移与运行时自动化完成后仍需实体遥控器、最小窗口和播放器验收。见 Testing/UnifiedButtonConfiguration.md。语音键保持即时按下/释放;手机、手表和网页保持原行为。
    • 按键映射新增“向上滚动 / 向下滚动”两个动作:用滚轮事件滚动前台窗口的内容区(方向键 CGEvent 只能在输入框内移动光标),事件定位到前台应用主窗口中心并在取不到窗口时退回当前指针位置,按住可按既有 100ms 间隔连发。实现、本地化与构建已完成;2026-10-03 已通过动作标识、滚轮事件、前台窗口定位和按住连发 Swift Testing 回归。真实遥控器与 Electron 聊天应用仍按 Testing/RemoteScrollActions.md 验收,因此保持未完成。
    • 按键映射新增“宏按键库”子页面:用户先在独立页面创建、命名、测试和保存可复用动作,再由遥控器的单击、双击或长按引用稳定的宏 ID,不再在每个具体按键下面临时重复配置目标 App、快捷键和聚焦方式。第一版宏至少覆盖自定义快捷键、打开或激活 App、发送聚焦快捷键,以及打开 App 后聚焦用户学习的 Accessibility 输入框;输入框学习、重新学习和测试入口必须直接显示在宏编辑页面。已有按键配置需要无损迁移并继续支持导入导出;同一宏可以被多个按键或设备引用,编辑和删除时必须明确展示影响范围。宏定义与物理按键绑定从一开始就解耦,为后续官方模板和用户共享市场保留版本、来源、能力声明和本地覆盖字段,本地脚本按后续新增产品决策单独授权,社区执行代码仍不开放。
      • 2026-10-15 已增加无需学习记录的“聚焦输入框”组合步骤;它复用按键页公开 Accessibility 聚焦回调,并在确认焦点后继续后续步骤。第三方 App、真实遥控器和 Intel Mac 仍待现场验收。
      • 2026-10-02 源码候选:绑定编辑统一到按键页,组合动作页移除物理绑定区并显示引用;键位方案预览只读并可跳转。新增统一解析、版本化基础绑定和迁移备份。真实设备、系统权限与第三方目标响应尚未完成,保持未勾选;见 Testing/UnifiedButtonConfiguration.md。
      • 2026-10-11 二进制集成修复:实际 Build 245 显示动作库但按键页列表为空。清单回归确认私有二进制未启用统一接口;已补齐构建条件。最终签名包的搜索、绑定及升级仍需验收,父项保持未完成。
      • 2026-10-04 左右键路由候选修复:显式单击覆盖优先于原生透传,兼容新旧接口,阻止基础连发夹带动作;统一接口现在按最终方向动作连发,旧接口无法提供最终动作时保持单发;无覆盖保留普通透传与连发。真实 RC003、Full Keyboard Access 和第三方可见结果待验收。见 Bugs/2026-10-04-profile-arrows-native-passthrough.html。
    • 组合动作增加本机 Shell/AppleScript 高级步骤:默认关闭、按源码授权、异步执行、60 秒默认步骤超时、取消/超时终止进程组、测试输出上限;源码可备份,导入后未授权。社区/官方预设不接受脚本,本期无语音钩子和 Webhook。
      • 2026-10-23 核对实现状态:本条此前记为“2026-10-02 已有源码候选和自动化”,但公开仓库与私有组合动作包均检索不到对应实现(MacroAction 现有枚举只有 openApplication / openURL / waitForApplication / focusLearnedTarget / sendKeyboardShortcut / runShortcut / runMacro / builtInAction),属于描述与代码不符,现已修正。
      • 实现落点为公开仓库当前仓库,不依赖私有组合动作包:步骤类型、授权开关、执行器与超时/进程组终止在 Sources/RemoteMic/ 内实现,避免核心能力被私有包门禁挡住。宿主已有的 Process 执行路径(KeyboardInjector.swift 的 runCmuxCommand)可作为进程启动、超时终止和输出限制的参考实现。
      • 安全边界沿用既有约束:默认关闭、按源码授权、导入后未授权、社区/官方预设不接受脚本、只允许用户本人创建的本地动作显式授权;脚本源码可备份但执行结果与授权信息不得进入配置导出或日志。
      • 自动化需覆盖默认关闭、授权状态、Shell/AppleScript 参数校验、超时与取消、进程组终止、输出上限和导入后未授权;真实遥控器触发、真实输入法与第三方 App 回归仍待现场验收。
    • 组合动作新增“运行快捷指令”步骤:自动读取并在 App 回到前台时刷新本机快捷指令,页面内搜索选择并显示名称、Identifier 与可用状态,支持单步测试;执行固定使用 Identifier,不通过 shell。Schema 0.2-draft 支持导入导出名称和 Identifier,并明确声明“依赖本机快捷指令”,不导出快捷指令本体;目标 Mac 缺少对应 Identifier 时安全停止。软件自动化已覆盖,真实快捷指令、首次隐私授权、iCloud 同步、前后台和跨 Mac 导入仍按测试手册人工验收。
    • 组合动作常用功能新增“打开网址”:在步骤卡片内填写完整网址,由系统默认浏览器打开;仅允许 http / https,拒绝本地文件、自定义 Scheme、账号密码、缺少 Host、控制字符和超长网址。支持保存、撤销和导入导出,软件自动化使用注入式打开器覆盖校验与执行边界;真实默认浏览器、前后台及遥控器触发仍按测试手册人工验收。
    • 组合动作新增“执行已有组合动作”:在步骤卡片内搜索并选择本机已有动作,运行时按稳定 ID 解析最新已保存版本;当前动作不出现在自身候选列表。保存前检测直接和间接循环,运行时再次防御损坏配置,最多嵌套 8 层;本机旧动作格式继续可读;统一交换包递归携带导出时的嵌套动作版本与依赖。软件自动化已覆盖最新版本、缺失依赖、循环与深度边界,真实遥控器链路仍按测试手册人工验收。
    • 增加用户自建的“调用本地 CLI / 发送 HTTP Webhook”高级动作:可绑定遥控器普通按键,也可分别绑定一次语音会话的开始和结束事件,例如开始时执行 lazytyper start、结束时执行 lazytyper stop,或通知 Home Assistant、n8n 和用户自己的服务器脚本;无线麦SayAll.app 不需要为每种服务开发内置适配器。
      • CLI 必须由用户明确选择本机可执行文件并分别填写参数,不把整段文本交给 Shell 解释,不自动展开管道、重定向、命令替换、环境变量或下载后的脚本;执行结果提供成功、退出码、超时和可脱敏的错误摘要。
      • Webhook 允许用户配置明确的 http / https 地址、请求方法、Headers 和 Body 模板;认证信息存入 Keychain,不进入配置导出、日志或社区动作包。请求必须有超时、并发和响应大小限制,失败不能阻塞按键处理、收音开始、松开停止或音频尾帧排空。
      • 每次真实语音会话的开始和结束事件最多各触发一次,并按同一会话 ID 关联;断连、取消、启动失败和 App 退出时要有明确的结束/补偿策略,避免外部服务永久残留在“录音中”。手机和网页只能触发 Mac 上已经保存并授权的动作 ID,不能直接下发 CLI、URL、Header 或请求正文。
      • 该能力默认关闭并标记为高级功能,保存和首次运行前展示实际可执行文件或目标域名及风险。用户本人创建的本地动作可以显式授权;官方或社区模板不得默认携带可执行命令、私密地址、认证信息或未声明的网络请求。
    • 2026-10-29 连按诊断补时间字段:HID EDGE 增加 since_release_ms / hold_ms,HID PRESS rejected 增加 since_release_ms / latch_remaining_ms,用单调时钟计算,不含按键内容、快捷键或设备身份。只加字段,不改 600ms 闩锁的任何判定;此前判断「回弹还是误伤」需要人工对齐时间戳。新增报告驱动回归,并在 Testing/RapidRepeatedButtonPresses.md 写明读取方法;2026-10-29 Intel build 271 首次实机采样确认字段可用(hold_ms 双峰:27 次 < 10 ms、35 次 ≥ 150 ms,中间区间 0 次),真实遥控器其它型号与闩锁拦截率统计仍待采集。
    • 2026-10-29 主页键快捷键伪 Fn 修复:Intel 机器上主页键(Home,键码 115)让系统硬件快照只带 Fn、不带数字键盘位,既有过滤只覆盖方向键,于是 Command+Shift+H 以 Fn+Command+Shift+H 投递,Chrome 无响应;同配置的下键正常。执行事务现在只在显式配置或真实按住 Fn 时才保留该位,并同步诊断字段。快捷键生命周期回归与全量公开测试通过;2026-10-29 Intel 真机自测通过(build 271,主页键与下键都打开 Chrome 主页,204 个投递事件 event_function=false);真实遥控器其它键位、Chrome 以外目标与 Apple 芯片回归仍待验收。
    • 2026-10-22:补充升级前已删除组合动作的历史引用清理。成功加载后查看位置,确认后重读动作库并清理仍缺失引用;取消不改配置。公开及二进制宿主测试、Release构建和中英文浅深色生产页面通过,真实遥控器待验收。见 问题记录。
    • 2026-10-20 更新 #709:修复无线麦处于前台时,前台搜索框内 Delete 键连发被宿主自身抑制的问题。宿主不再把 deleteBackward 一律排除在连发之外,并在映射到 Delete 的自定义快捷键时同样放行连发,恢复删除连发并在松开时停止。硬件模拟与公开宿主回归通过;真实目标 App 与实体遥控器仍待验收。见 Bugs/2026-10-20-sayall-delete-repeat.html。
    • 2026-10-20 快捷键候选:已确认原生方向键的伪Fn污染执行快照;复用已有过滤器追踪真实Fn。三类入口改用同一宿主投递层,补齐裸键事务与方向键属性。18项生命周期覆盖1248种配置,公开924项、新接口源码集成935项通过;最终local包校验通过;用户确认普通按键右Command+L在Chrome/网易云生效,删除连发松开即停。组合动作、方案入口及其余真实场景待验收。见 问题记录。
    • 2026-10-29 快捷键注入状态:事件过滤器被系统禁用(安全输入、回调超时)后复位 Fn 状态,避免松开边沿丢失后每个快捷键都被加上 Fn;Help/Insert 写进硬件快照的 Help 位不再并入合成事件,大小写锁定位仍保留;裸 Home/End/Help/Forward Delete 补齐 primary_kind。生命周期回归与全量公开测试通过,手动验收见 测试手册。这是与平台无关的代码状态问题:Apple 芯片同样存在,只是需要真实 Fn 边沿(实体键盘或语音键 Fn 模式)才进入该状态;真机仍需按手册复核。同批审计的两项只记录、未处理:录制侧对 Fn 层键位的修饰键归一化只覆盖方向键,Intel 上录 Home/PageUp 可能存成 fn Home(待 Intel 实测确认后再改);语音键 Fn 模式下其他快捷键仍带 Fn 属产品语义(遥控器来源的 Fn 是否应视为已验证),待产品决定。
    • 2026-10-03 源码候选按确认设计收敛:保留按键特色画布,新增组合动作搜索与选择;组合动作采用基本设置、编排步骤、测试与保存三步草稿,取消不覆盖旧动作。方案保留原逐步配置,补齐 Siri Remote 图片/热点及 Chromecast 14 个普通键、系统占用策略和专有键导入导出。旧 0.1/0.2/0.3 定义、稳定 ID、绑定文件与基础迁移保持兼容;自动化和本地 UI 结果见 Testing/UnifiedButtonConfiguration.md,真实设备尚未验收,父项保持未完成。
    • 2026-10-10 候选:Chromecast 左、确定、右默认可配置,旧豁免设置不再阻止三键。宿主策略、私有画布测试及中英文浅深色截图已通过;系统媒体双执行、快速按、按住释放和真实语音基线仍待验收,父项保持未完成。
    • 2026-10-03 按本会话六项 UI 要求统一动作库与方案库样式和搜索,调整按键标题开关、说明和语音卡片滚底;自动化与最小窗口通过,本地公证包待用户重测。未改变执行或语音路径,父项仍未完成。
    • 2026-10-03 按用户要求将遥控器列表固定在按键标题同一行,交换连接与回眸;最小窗口布局和自动化通过,新本地公证包待用户复验多设备横滚。执行和语音路径不变,父项保持未完成。
    • 2026-10-20 按键页头改为标题、副标题、开关三行,并与设置页顶部对齐;设备区域向左扩展,卡片可容纳时靠右、超宽时横滚,背景不变。60 项页面回归、中英文浅深色截图及公开宿主窗口检查通过;真实多设备与私有组件验收不在本次结果内,父项保持未完成。
    • 2026-10-03 同步已合入的常用语 PR #558:三配置808/808/860项与自检48通过,补中文浅深色六入口及英文关键状态22张实际窗口截图;真实设备与语音基线仍待验收。新增“发送常用语”宏步骤须在现有两仓工作合入后从最新主线独立开发。
    • 2026-10-03 用户测试发现新建选中反馈不明显、历史方案数据占用旧宏绑定文件导致加载失败;本轮修复并补全新建/保存/重开及旧数据兼容回归,取消“更多动作”和底部 MCP 说明。真实硬件边界仍保持待验收;见 Bugs/2026-10-03-macro-creation-feedback-and-legacy-loading.md。 按键页按用户要求补充“点击按键配置设置动作”副标题,共享页头保持13pt操作指引。
    • 2026-10-10 修复候选:搜索忽略首尾空格;动作库返回保留原编辑项,清空搜索并显示自定义动作。最后步骤提示到按键页明确选择动作。公开842项、免费集成850项和隔离窗口创建/保存/返回/选择/重开通过;真实遥控器及第三方执行待验收。见 审查记录。
    • 当前状态:2026-09-13 已将免费“组合动作”和付费“键位方案”拆为 macos-combination-actions、macos-button-profiles 两个目录和两个 Swift Package;官方 App 默认集成免费组合动作,付费键位方案只有显式设置 SAYALL_BUTTON_PROFILES_PACKAGE_PATH 时才加入构建。公开 App 仅保留薄适配层;免费 Package 存在时“组合动作”无需邀请码直接显示和执行,旧资格客户端与本机数据只为兼容保留,不再控制访问。未包含组合动作 Package 时不显示入口且不接管按键。组合动作开放不改变其他受邀私有功能的独立 Feature Flag、资格策略和默认关闭状态。2026-08-14 已修复历史资格流程的时间解析、本地化、编辑快捷键和最终 App 资源路径问题,并在 Package 和宿主构建脚本增加禁止页面绕过解析器的门禁。2026-08-16 继续统一组合动作编辑页的信息层级:固定遥控器预览尺寸、突出测试与保存、名称限制为 20 个字符、对齐步骤标题字号、显示目标 App 图标和 Bundle ID,并扩充常用预置 App;宿主侧边栏改用显式顺序表,主页面相对顺序为按键、组合动作、统计、连接、权限、关于。2026-08-17 遥控器绑定区新增保存前后动作提示:绑定按键页已有动作或替换其他组合动作时,直接显示当前会执行什么和保存后会执行什么,不新增弹窗。2026-08-19 宿主页面补充说明:输入框学习只负责聚焦目标 App,回眸里的 MCP / TOML 只负责授权读取本地历史,二者互不替代。2026-08-24,1.9.10 (136) Developer ID 预览包已通过免邀请码入口、固定候选 appcast 的真实 Sparkle 升级、首次重启和二次启动验收;2026-08-26 修复组合动作页面把可见状态误当按键捕获状态的问题:新增默认关闭的显式“选择遥控器按键”模式,页面切换、关窗和隐藏时清除捕获,确保原按键映射继续执行;2026-09-09 修复共享快捷键 Profile 的重录串改:重录已存在的快捷键时采用 copy-on-write,只更新当前步骤,其他组合动作保持原快捷键。自动化和 Release 构建已通过,真实键盘和实体遥控器人工验收仍未完成,因此该父项暂不标记完成。详见 Bugs/2026-08-26-macro-binding-capture-disables-remote-buttons.md、Bugs/2026-09-09-routine-shortcut-rerecord-overwrites-another-routine.md 与 Testing/QuickCommandsPrivateIntegration.md。
    • 2026-10-05 候选:导入页按用户附件纠正为方案 3 左右双栏,移除导入选项,右侧保留来源。查看会员进入当前设置窗口。最终构件构建、包校验及中英文浅深色生产页面已检查,四张截图和摘要已保存;真实会员保存旅程仍待验收。
    • 2026-10-05 返回回归:最终主线包复现会员往返后空白;恢复视图初始内容,并把会员提示传到标题下方。仅验收中文 Light,真实 Plus 保存仍待验收。
    • 支持按遥控器型号保存、预览、一键应用和上传完整布局模板:模板把标准化物理按键及单击、双击、长按绑定到宏 ID,可以为“小米遥控器 2 Pro + Codex”“小米遥控器 2 Pro + OpenCode”等常见组合提供开箱即用布局。应用前必须展示将覆盖的键位、所需 App、宏和权限,缺失依赖或需要学习输入框时先完成本机配置,再原子替换当前布局;发布时移除设备标识、私人输入框特征和其他本机数据。实施顺序为本地模板导出导入、官方精选模板、最后开放社区上传、搜索、评分、版本更新和回退,用户修改已安装模板后不得被市场更新静默覆盖。
    • 建立参考 TourBox 的预设中心:把随 App 提供且离线可用的“系统预设”、无线麦审核维护的“官方精选”、用户上传的“社区预设”和尚未发布的“我的预设”明确分区并显示来源标识。支持按遥控器型号、目标 App、使用场景、语言和作者筛选或搜索,优先为小米遥控器 2 Pro 提供 Codex、OpenCode 等系统布局;社区预设必须经过安全校验并展示作者、版本、依赖、兼容设备、安装量或评分等信息,不能与官方预设混淆,也不能因下架或市场不可用影响已安装的本地副本。
    • 不允许市场动作默认执行任意 Shell、AppleScript、动态库、下载后的可执行文件或未声明的网络请求,也不能直接绕过现有白名单让手机或网页下发任意命令。高风险能力即使以后开放,也必须逐项授权、显示将要执行的内容,并提供撤销、禁用、审计和失败回滚。
    • “开放接口”和“建设市场”分阶段实施:先验证本地动作包、文档、示例和配置迁移,再考虑官方精选目录,最后才评估社区发布、搜索、评分、举报、签名、审核、依赖、版本兼容、下架、更新回滚和恶意内容治理;市场不可阻塞当前独立语音输入 V1。
    • 该能力可以覆盖 Codex 之外的自定义 Agent,但不能因此删除现有稳定内置动作;旧配置、iOS 和网页版仍使用稳定动作标识,无法识别扩展动作时必须明确显示不可用,而不是执行其他默认动作。详细可行性、接口草案、安全模型和实施顺序保存在私有产品资料库。
  • 配置导入导出(原有个人配置 v1:支持版本化 JSON 导入导出;本地使用统计不随配置迁移)

    • 2026-10-20 更新 #699:设置页配置导出简化为直接唤起系统保存面板,不再要求选择对象、分组、用途和预览步骤。该轮实现随后被同日“完整备份”分流替代(见下一条),当前生效的导出交互以完整备份格式为准。
    • 2026-10-19 完整备份候选:设置页改用独立 macOS 格式,保存全部设备、方案、动作、App、快捷键、常用语及用户偏好;按文件内容分流导入,拒绝旧读取器和其他平台。源码与隔离设置页导出/恢复通过,跨 Mac 验证按 测试手册 执行。历史 v1 完成状态不代表本轮全部验收完成。
    • 2026-10-19 历史候选(已由完整备份分流替代):Finder 双击 .sayall 进入键位方案导入;未完成 Onboarding 时暂存请求,完成后继续。生产页面挂载测试覆盖请求时序,签名安装与首次使用旅程仍待验收。见 Testing/FirstRunOnboarding.md。
    • 2026-10-13:按确认设计统一设置页入口。顶部导出默认进入完整个人备份,顶部导入接受 .sayall 和旧 JSON;下方重复入口移除。键位方案与映射按当前遥控器范围备份,账号与凭据不导出。定向测试、最终二进制构建及资源检查通过。实际页面完成导出保存、导入预览、取消和个人设置保存;Free 收费方案门禁正常。真实设备与升级回滚未测。见 统一配置入口验收。
    • 2026-10-03 统一对象包支持组合动作、App 配置和键位方案独立/批量导入导出。软件测试通过;最终统一二进制 App、真实设备及旧版安装升级/回滚仍待验收。见 配置导入导出验证。
    • 同日主线冲突复验:保留统一绑定、个人配置 v2 和本机脚本;交换 1.0 规则保持。公开及免费/收费源码集成完整测试通过,最终 App 与真实验收状态不变。
    • 用户确认当前实现为正式第一版:统一包、组合动作、Manifest 和 Catalog 使用格式 1.0;后续读取器必须保留第一版兼容,旧个人配置 v1 和此前导出文件继续可读。
    • 同日局部修正候选/替换列表与整库导出的耦合;导出只读取所选对象及依赖,市场校验完整 App 集合。软件回归和 code review 已执行,真实验收边界保持。
    • 同日审查修正可选字段增删时的中断恢复,以及切换 App 聚焦方式后的验证门禁。公开宿主与收费源码集成完整测试通过;切回输入框聚焦仍须验证,真实验收边界保持。
  • 兼容 Typeless 等点按切换式语音输入

    • 默认关闭的“语音键模拟 Fn 点按”模式把按下和松开转换为两次 Fn 点按,同时保留 RC003 必须物理按住才能采音的硬件行为;这不是持续录音或独立语音输入。
    • 功能入口位于“按键映射”页遥控器下方,与语音键的固定按住说话行为放在一起说明;连接页不再重复展示该设置。
    • 已完成辅助功能权限门、全目标 HID neutralize 与失败回滚、generation 会话状态、开头 pre-roll、结尾排空、配置兼容及自动化测试;新增跨组件首次语音门禁,覆盖目标延迟 0~3 秒、5 秒缓存、提前松开、超时、目标切换、敏感字段以及 RC001/RC003 模拟 STREAM_START → AUDIO → STREAM_STOP,不再把第三次成功视为通过。待实体遥控器复验默认豆包路径、Typeless 路径、录音中关闭开关、断连恢复和唤起目标后的第一次文字上屏,再标记完成。
    • 1.7.6 预览版已因 macOS 26 启动阶段的 HID 服务生命周期崩溃撤回;修复后服务对象会在映射读取和写入期间持续持有所属 HID 客户端,并由生命周期回归测试覆盖。1.7.7 已在 RC003 连接和代表性持久化设置下通过最终 ZIP App 的首次启动、正常退出、二次启动、四种功能状态及无新增崩溃报告门禁;PKG 内嵌 App 与已启动验证的 App 完全一致,已发布为 Pre-release。Typeless 等实验路径仍按本条后续真机范围继续验证。
    • 2026-09-01 修复 1.9.18 中启动、唤醒或手动开启时 HID service 暂未枚举导致 Fn 点按偏好被持久化关闭:matched=0 现在保持用户开关并进入有限恢复,已枚举目标后的真实写入失败仍按安全策略关闭并回退硬件 Fn;自动化通过,仍待 RC003 休眠后先启 App、再唤醒遥控器并完成 Typeless 第一次语音真机验收。
  • 语音键支持 Fn/左 Command/右 Command/左 Option/右 Option 长按模式

    • 默认保持 Fn/地球键;可在“按键映射”页选择左 Command、右 Command、左 Option 或右 Option 长按。修饰键模式需要辅助功能权限,并覆盖 RC003、iPhone、Apple Watch 和网页版语音入口。
    • 修饰键模式不得通过全局 flagsChanged 监听普通键盘;只在真实语音会话开始/结束时发送成对 keyDown/keyUp。Fn 点按模式仅在 Fn/地球键模式有效。
    • 组件和策略自动化已覆盖配置迁移与原子导入门禁、左右键码、跨来源 owner latch、输入源多 owner、每个 Bridge Ready 策略、F5 映射事务和设置页紧凑布局;部分 BridgeAppModel 接线仍由源码范围断言保护,未启用硬件模拟依赖,不能替代回调级事件回放。待 RC003、iPhone、Apple Watch、网页版、系统权限及目标第三方语音应用真实环境验收后再标记完成。详细测试步骤见 Testing/VoiceKeyModes.md。
    • 2026-08-29 补充 RC003 HID service 晚于 BLE Ready 时的有限恢复:重试完整读取当前 voiceKeyMode 的映射流程,不把模式写死为 Fn;Fn 真机已命中 matched=0 → recovery completed,Fn 点按与左/右 Command 的恢复自动化已覆盖,真实硬件和第三方 App 仍按测试手册验收。
    • 2026-10-03 清理陈旧标题:主线已支持 Right Option,并重新通过模式持久化、权限门、左右侧注入、Right Option 释放、跨来源 owner 与恢复路径自动化;RC003、移动端入口和第三方语音工具真机矩阵仍未完成,因此父项继续保持未完成。
    • 2026-10-06 增加 Left Option 模式,沿用专用左侧键码与辅助功能权限门;真实遥控器和第三方语音工具矩阵仍待验收。
  • 语音键短按定位当前 App 聊天输入框

    • 默认关闭,与 Fn 点按模式互斥;短按取消该次短音频并聚焦当前 App,长按继续使用已选语音触发键。
    • Accessibility 通用路径已覆盖 Electron / Chromium 建树重试和安全候选排名;微信仅对精确 Bundle ID 使用有尺寸门禁的窗口相对降级。Lark/飞书、Telegram 和微信已完成 RC003 真机验收。
    • 2026-08-26:短按入口对前台 cmux 复用其公开 CLI 与 Accessibility 终端聚焦;搜索框、设置框和普通终端输入框允许定位,密码/令牌/密钥字段仍拒绝,待 1.9.13 真实场景复验。
  • 普通遥控器语音键突破一分钟录音限制

    • 曾尝试在普通物理语音会话收到 STREAM_START 后每 10 秒调用 ATVV v1.0 MIC_EXTEND,并设置 180 秒关闭与 2 秒超时重连。
    • 2026-08-11 真机日志确认普通物理会话没有 microphoneOpened 状态,定时调用持续返回 ATVV MIC_EXTEND rejected,命令并未写入遥控器;模拟租期模型不能证明真实固件行为。
    • 上述候选方案已经撤回:普通会话不再定时续期、不再由 Mac 强制限制为三分钟,也不再因关闭确认超时重连。底层命令只保留给未来成功主动 MIC_OPEN 的独立实验。
    • 当前问题仍未解决,需要重新取得 RC003 约 60 秒停止的完整真机日志,再基于真实控制/音频事件顺序研究固件边界。
    • RC003 长录音、稳定语音基线和 iOS 点按/按住录音的真机步骤统一维护在 Testing/ExtendedVoiceRecording.md。
  • 开关键支持开关式长时间录音

    • 用户主动开启持续录音实验功能后,将遥控器开关键临时绑定为长时间录音开关:第一次点击开始录音,录音期间不需要持续按住;再次点击立即结束录音。关闭实验功能后恢复原按键映射;语音键继续保持现有的“按住说话、松开停止”逻辑。
    • 默认最长录音时间为 1 分钟,并允许在设置中选择 1 分钟、3 分钟、5 分钟或无限时长。达到所选上限后自动停止;用户再次点击可以随时提前结束。
    • 录音期间必须提供明确的持续录音状态和剩余时间提示;无限时长模式下,遥控器断连、App 退出、音频链路失败或用户主动停止时仍必须可靠关闭麦克风,不能留下后台持续收音状态。
    • 已确认 RC003 的语音键正常硬件路径是“按住收音、松开停止”,单击本身不会保持收音。需要先验证实体开关键是否会通过蓝牙发送 macOS 可识别的 HID 事件;触发后由 App 主动发送 MIC_OPEN,并验证 1/3/5 分钟和无限模式能否通过 ATVV v1.0 的 MIC_EXTEND 稳定维持。
    • 已进入核心真机验证阶段:持续录音作为默认关闭的本地实验功能,仅在用户主动开启后自动绑定开关键,并保留关闭前的原映射;核心验证包含主动 MIC_OPEN、每 10 秒 MIC_EXTEND、再次点击关闭及固定 1 分钟安全上限。待真实 RC003 验证通过后,再开发 1/3/5 分钟与无限时长设置、完整倒计时和其余产品化界面。
    • 1.6.10 预览验证发现持续录音的会话门禁误拦截普通语音键直接发送的 STREAM_START,同时新增说明使按键映射页超过窗口高度;已按普通语音兼容边界和可滚动页面约束修复,持续录音真机状态仍保持“验证中”。
    • 最新 RC003 真机对照确认:Power 主动 MIC_OPEN 会返回 STREAM START session=0,但整个会话没有任何 audio characteristic 数据;同一连接随后使用普通语音键会立即收到连续 120-byte 音频包。控制状态不能视为真实录音成功,当前固件上的实验入口已撤下,旧设置会自动关闭并恢复 Power 原映射;后续只有找到新的固件级可行路径后才重新开放验证。2026-08-26 新建独立 RC003 续流实验 WorkTree/测试包,改为从真实语音段 STREAM_STOP 后重开 MIC_OPEN,仍待真机确认重开音频与 MIC_EXTEND。
  • 修复语音结束后立即按电源键时偶发触发系统锁屏或关机确认框(已完成)

    • 用户复现:把遥控器电源键映射为回车,语音说完后立刻按下,容易泄漏原始电源键系统行为并出现锁屏或关机确认框,而不是只执行回车;等待约 0.5–1 秒再按则正常,且语音持续越久似乎越容易出现。
    • 持续录音真机验证确认无需先结束语音也可稳定复现:App 在同一秒成功执行 toggleLongRecording,loginwindow 同时收到原始 Power 事件并进入 Software Sleep。RC003 无法被普通用户进程独占,现有 Session Event Tap 对系统电源路径不可靠;根因不是持续录音动作本身,也不能通过延长 180ms 窗口可靠解决。
    • 已改为在启用自定义映射时,使用 RC003 专属 HID UserKeyMapping 将 Keyboard Power (0x66) 预先映射为无危险的 F20 (0x6F),再启动 HID 监听;映射失败时按键监控失败关闭,退出或关闭自定义映射时恢复原 Power 映射。单元测试和项目自检已覆盖应用、恢复及失败关闭;RC003 真机复验确认自定义动作正常执行、电脑不再锁屏,且系统日志不再出现对应 Power 事件。
    • 相关 UX 观察:方向键当前在按住 350ms 后进入连续触发,方向键每 100ms 重复一次;边界时序下可能出现用户认为“点一下却走两格”的感觉。这是现有设计,暂不单独判定为 Bug;若反馈增多,再评估延长首次连发延迟、增加设置项或优化按下/松开判定。
    • 2026-08-12 修复非独占 HID 监听下实体方向键被长期拦截:App 定时连发不再重复登记物理 .down,monitor 在断连、停止或权限撤销时会释放仍按住的 suppressor 状态;映射关闭时仅以非独占 back-only 路径补齐无原生事件的返回键。硬件模拟已覆盖全部 11 个原生按键的正常松开、按住期间断连和双遥控器共享计数,并验证返回键不进入抑制器;等待真实 RC001/RC003 与 MacBook 键盘复验。
    • 2026-10-20:候选修复独占 HID 模式下菜单、音量等按键泄露原生事件。所有接管按键统一登记抑制,显式透传和合成标记仍放行,松键与断连释放抑制状态。模拟回归、公开宿主 910 项测试和 48 项自检通过;实体遥控器验收未完成。见 Bugs/2026-10-20-profile-import-focus-volume-debug.html。
    • 2026-08-21 跟进 Issue #137 的单次 release 丢失:遥控器原始首击改由 HID down 短窗口配对,held 状态只继续拦截系统 autorepeat;未配对的实体键盘新首击会清理陈旧状态并立即通过。新增缺失 release 的回归序列,本地 89 项聚焦测试与 42 项自检通过;等待 PR CI 与真实 RC003 monitored 模式丢包验收。
    • 2026-08-19 针对 1.9.0 内测版 OK 键偶发无响应补齐 HID 分层诊断:区分系统回调、设备过滤、解析、按下/松开边沿、手势和动作执行,并保持原按键行为不变;日志不记录原始报告或设备标识。精确根因仍需 RC003 真机再次复现后确认。
    • 2026-08-25 修复单击绑定为不可连发动作时连续快按只有第一次生效:shouldAcceptRawPress 的 600ms 松开稳定闸门新增按按键的「允许连续快速按」开关,默认关闭且默认行为与上一正式版一致;startRepeatIfNeeded 的按住连发策略未改动,被闸门丢弃的按下不再静默、写入 reason=awaiting_stable_release 日志。对应社区反馈 Issue #205 第 2 条。本地 393 项测试与 43 项自检通过,测试手册见 Testing/RapidRepeatedButtonPresses.md;等待 RC001/RC003 真机连按与按住边沿计数验收。
  • 优化语音降噪与人声放大

    • 在遥控器和手机麦克风音频进入虚拟麦克风前增加可控的降噪、人声增益、自动增益和限幅处理,优先提升远距离、小音量说话时的可懂度。
    • 不能只提高现有固定增益,否则会同时放大底噪并造成削波;需要分别评估高通滤波、噪声抑制、AGC 和 limiter 的组合,并提供关闭或强度调节能力。
    • 使用 RC003、手机麦克风和后续兼容遥控器分别验收安静、风扇声、键盘声及较远说话场景;要求人声更清晰且无明显抽吸声、失真、截断、延迟或 CPU 占用异常。
  • 根据用户在 Onboarding 选择的语音输入工具,在语音会话期间临时切换并恢复对应输入环境(候选修复完成,待真实输入法验收)

    • Onboarding 已用版本化本机设置记住豆包输入法、微信输入法、Typeless 或其他语音工具;完成后无需增加第二个开关。只有豆包和微信具有精确 Input Source ID,Fn 从松开变为按下时才检查并按需切换。
    • 使用 macOS Text Input Sources API 按精确 ID 选择 com.bytedance.inputmethod.doubaoime.pinyin 或 com.tencent.inputmethod.wetype.pinyin,不按显示名称模糊匹配;目标已选中时不重复切换。
    • Typeless 和其他独立语音 App 不执行系统输入源切换。是否通过公开接口、快捷键或 URL Scheme 联动仍需另行验证,未经验证不得自动启动或操作第三方 App。
    • 语音开始时保存当前输入源;只选择已经启用的目标输入法,不在日常路径重复调用 TISEnableInputSource;Command 触发前会确认目标输入源已实际激活,并缓存最多 500ms 的早到蓝牙音频;超时、提前松手或按键注入失败时回滚且不发送孤立按键或缓存音频。语音结束或监听停止时,如果用户没有主动改选其他输入法,则恢复原输入源。输入法未安装、切换失败或权限不可用时只保留诊断日志并继续现有语音链路,不影响遥控器语音、虚拟麦克风和普通按键。
    • 2026-10-24 候选:显式语音输入源等待改用具体 RunLoop 模式,避免忙循环,并允许延迟激活和取消事件执行。保持 500ms 超时和 Fn 即时路径;真实输入法、首字及尾音仍待验收。
    • 不拦截或假设 Control + Space 及其他用户自定义输入法快捷键。定向测试覆盖会话恢复、用户手动改选不覆盖、监听停止恢复、已选目标旁路和现有 Fn 去重;完整 Swift 测试、项目自检和真实豆包/微信输入法及遥控器映射出的 Fn 仍需验收。
  • 新增 pre-release 发布,避免未实测的功能被检测到更新

    • “关于”页提供默认关闭的预发布更新开关;仅在用户主动开启后,Sparkle 自动与手动检查才会包含最新候选版本。
    • 2026-09-03 起,客户端不再调用未认证 GitHub Releases API,使用 Cloudflare stable 与 preview appcast 通道。2026-09-12 修复预发布开关把 preview 当成排他通道的问题:开启后同时解析同架构 stable 与 preview,并选择语义版本更高者,确保更高正式版不会被较旧预发布版遮挡;单通道失败时使用另一通道,两个通道都不可用时显示更新信息暂不可用,关闭开关后立即恢复仅检查 stable。
    • 当前流程(2026-09-05):产品改动和版本元数据通过普通 PR 合入后,只从精确 origin/main SHA 进行一次受保护双架构 staging;随后完成真实 Sparkle UI 验收,再由无 Apple 凭据的 publication workflow 公开同一批字节。发布 Workflow 控制面始终使用精确 main HEAD;只有紧急 Hotfix 源码可来自当前稳定 Tag 派生的 hotfix/vX.Y.Z。不得创建 release/pre-*、canary、rerun 或 qualification 分支。
    • 同一 SHA、版本、Build、Run/attempt 和 artifact 的 Runner、审批、GitHub、Apple 或网络故障只重试对应阶段;不重新签名、不升版本。Tag/Release 查询只有明确存在或 404/无 Tag 才能决定占用,认证、权限、网络和其他 HTTP 错误必须 fail closed。
    • staging record、canonical manifest 和 UI attestation 共同绑定发布身份;publication 会在无 Apple 凭据环境中重新恢复并验证 staging record、manifest 和真实 UI attestation,再创建或恢复公开 Pre-release。candidate-provenance.json 的时间戳固定取 staging record,重试不会因当前时间改变摘要。
    • Preview 公开资产是 manifest 定义的 13 项 payload 加 provenance;当前矩阵固定名称由 verifier 检查,Install PKG 同时嵌入对应 DMG 并作为独立链接发布,方便硬件公告要求用户手动安装。Stable 只能把用户指定的已发布 Pre-release 改为正式版;已完成的晋升重试只读复验,不重新构建或上传。
    • Preview 和 Stable 均从 T_ready 起按 30 分钟纯发布目标计时;该指标不取消或降级任何签名、公证、真实 UI 或下载字节门禁。
    • 不存在独立的正式版构建命令。正式版只能选择已经发布并验证过的指定 Pre-release,将完全相同的 Tag、Commit、签名、公证资产和摘要晋升;晋升 Workflow 仍只从精确 main HEAD 运行,禁止为正式版重新构建资产。
    • 2026-08-17:正式晋升工作流补充独立 mac-stable-release Environment 和按需安装 ripgrep 的工具门禁;晋升仍只复验并提升既有候选字节,不读取 Apple 签名 Secrets,也不重新打包。
    • 2026-08-19:GitHub Release 标题和 Tag 注释统一使用 无线麦SayAll.app <版本>,并由 Swift 与 shell 回归测试拒绝旧的 Remote Mic 用户可见标题。
  • 在“关于”页集中展示版本与更新信息

    • 将当前版本、可更新版本、检查更新和预发布更新开关集中在同一模块;检测到更新时直接显示最新版本的本地化内容,不再提供会打开下载链接的版本历史按钮;语言选项保持全部平铺,移除术语表入口。
    • 检测到新版本后显示当前界面语言对应的用户可见更新内容;缺失本地化说明时仍可继续使用 Sparkle 更新,不阻断检查或安装。
    • 2026-09-28:检测到新版本后,侧边栏“设置”齿轮右上角显示红点;点击设置后按具体候选版本记录已读,同一版本不重复提醒,之后检测到更高版本会再次显示。
    • 自动化、候选资产和跨版本升级验证全部通过后,再将本条标记完成并发布 1.8.7 预发布版本;真实用户环境中的可见界面验收继续按测试手册记录边界。
  • 改进更新完成和 App 启动时的主面板可见性

    • 更新安装成功并重启 App 后,将更新完成提示及 App 窗口置于最前方,避免弹窗被其他窗口遮挡而遭到忽略。
    • 更新成功并重启后自动打开主面板(设置面板);此行为始终生效,不受普通启动开关影响。
    • App 普通启动时默认自动打开主面板,而不是只在菜单栏后台运行。
    • 在“关于”页面增加“启动时自动打开主面板”开关,默认开启;关闭后仅取消普通启动时自动打开,用户仍可通过菜单栏手动打开主面板。
    • v1.5.1 已完成:78 项 Swift Testing、36 项 Self Test、Release App 构建与结构验证通过;真实 .app 已验证默认启动显示、关闭开关后仅菜单栏常驻,以及模拟更新时无条件前台显示主面板和更新完成提示。
  • 免按键持续语音控制,通过说话直接执行“打开 Codex”等操作

    • 当前结论:功能可行,优先使用 macOS 15 自带的“语音控制”完成零开发验证。系统支持持续听取、选择麦克风、离线使用、自定义命令和运行快捷指令;若“打开 Codex”不能直接识别,可创建打开 Codex 的快捷指令并绑定自定义语音命令。
    • RC003 的正常产品行为仍是按住语音键收音,但 Infineon 官方 ATVV 参考固件证明主机可以主动发送 MIC_OPEN,协议 v1.0 还定义了 MIC_EXTEND。RC003 是否接受无按键主动开麦、最长能维持多久、能否靠 MIC_EXTEND 续期,目前尚未真机验证,不能再写成已确认绝对不支持。
    • 产品路线仍优先使用 Mac 内置麦克风或带实体静音键和工作指示灯的 USB 麦克风;RC003 只保留为实验性音源候选,避免在续航、休眠和隐私状态尚未确认前承诺持续监听。
    • 第二阶段再评估无线麦内置模式:本地低功耗唤醒词持续监听,唤醒后仅短时识别白名单命令,并复用现有 ButtonAction / KeyboardInjector 执行动作。不能只依赖 SFSpeechRecognizer 无限持续识别,因为 Apple 官方说明单次音频约一分钟、服务可能限流且会增加电量和网络负担。
    • 产品模式必须默认关闭,提供明确的正在监听指示、快速暂停和麦克风选择;不保存或记录原始语音,危险操作需要二次确认,避免环境声音误触发。
    • 可行性、零开发验证步骤、实现分层、RC003 主动开麦协议证据和真机实验方案已迁移至独立的产品资料工作区,不随公开源码仓库发布。
  • 解决组合快捷键配置问题,例如配置 Command + Space 唤起 Spotlight

    • 2026-10-29:修复 Intel 音量键原生泄露(自定义动作与系统音量同时触发)。现场日志已解密确认:原生按下比 App 登记早 200 ms,且主线程停顿 383 ms 期间 tap 线程仍正常,说明卡点是报告投递而非登记调用。HID 报告从主线程 RunLoop 迁到专用线程,音量/TV 在报告回调内提前登记,并复用主线程的指纹、位置、事件级拦截与权限快照(needsEventLevelArm、prearm 锁内复检)。build 269 实测 223 次音量键动作(加 114 / 减 109)按下边沿 0 泄露、命中延迟 p50 5 ms;残留为松开边沿约 10% 的 miss(不影响功能)。范围已收窄:设备级 Consumer 页映射与投递观察日志移出本修复,门禁收紧后需 Intel 复验。 2026-11-01 按评审修复三个阻塞项:提前登记认领改为按按下顺序逐条配对(松键不再整体清空)、监视器级会话代数在同一临界区内校验后再写入(覆盖共享 suppressor 的在途回调)、报告线程就绪超时改走可取消并可等待的撤销路径。见 记录。
    • 2026-10-29:设计共享的原生投递观察器。KeyboardEventSuppressor 由 hidMonitors 与 hidDiscoveryMonitor 共用,每个 monitor 的 start() 覆盖 onVolumeNativeObservation、stop() 清空它,因此「设备级映射是否真的阻止了系统事件」没有可靠日志判据(build 269 实测该行为 0 条)。需要多路复用观察器或把观察职责收敛到共享 suppressor 的唯一拥有者,再重启该诊断。
    • 2026-10-26:候选修复音量原生按下已放行后松开被吞、陈旧记录消费下一次按键的问题,并提前登记音量按下。初次泄露与真实硬件仍待验收。见 记录。
    • 2026-10-26:录入逗号崩溃的线程回归已复现;候选修复将字符解析异步移到主队列,保留专用 tap。真实键盘及输入法待验收,见 记录。
    • 2026-10-25:候选修复已拦截按下对应的提前原生松开,并避免迟到 HID 松开留下多余记录。Chrome 和全局播放补充配置事务及会话层诊断,真实目标结果仍待验收。见 记录。
    • 2026-10-24:RC003 下键 Control + Up 在现场未打开调度中心。已确认配置与 HID 路由,首次无效原因仍待验证;补充逐事件投递和会话监听点关联日志,不改变快捷键行为。见 诊断记录。
    • 2026-10-19:修饰键序列改用投递前快照,过滤非修饰状态位,防止自身 HID 回显导致释放不完整。生命周期、公开全套测试、自检与 Release 通过。网易云、实体遥控器及注入期间同时操作实体修饰键仍待验收,见 Bugs/2026-10-19-shortcut-modifier-feedback.html。
    • 2026-10-19:单击方案的完整快速点击不再被稳定松键门禁吞掉;覆盖 Delete、Command 快捷键和继承单击。公开测试、自检与 Release 通过。真实设备和最终私有二进制 App 待验收,见 Bugs/2026-10-19-profile-rapid-clicks.html。
    • 2026-09-16 候选修复:现有自定义组合发送完整修饰键生命周期,保留物理修饰键状态,失败执行有限清理;事件协议回归已覆盖,Codex 最近会话和 Command+Tab 真实遥控器验收待完成。见 Testing/CustomShortcutLifecycle.md。
    • 2026-09-30 候选修复:真实键盘录入的左右 Control、Option、Shift、Command 组合保留设备侧别,统一快捷键生命周期按侧别选择物理键码;旧配置继续默认左侧。自动化和实际页面截图需随 PR 完成,区分左右侧的目标 App 与实体遥控器仍按同一测试手册验收。
    • 录入器已从窗口内 NSEvent 监听改为仅在用户点击“录入快捷键”后短暂启用的 CGEventTap,可以在系统或其他 APP 的热键处理前捕获并阻止本次按键继续传播;保存格式和后续快捷键执行路径不变。
    • 空配置不再显示“等待按键”,录入入口只在点击后出现;完成后显示明确成功反馈,权限缺失或事件 tap 无法启动时显示可操作的失败提示。
    • 自动化已覆盖 Command + Space 事件捕获与阻止传播、只完成一次、忽略自动重复和合成事件、权限失败,以及页面结构和中英文文案。
    • 真实键盘录入支持无修饰符普通单键,以及左/右 Command、Option、Control、Shift 和 Fn 单独录入;修饰键按下后会等待主键,只有单独释放时才保存为单独修饰键,避免破坏 Command + Space 等组合录入。保存格式和执行路径不变,自动化已覆盖单键、全部单独修饰键、组合判定与零修饰发送;真实键盘和实体遥控器仍按测试手册验收。
    • 修复签名身份变化或权限重新授权后,界面已显示授权但 HID 监听器仍保持停止的问题;App 每次重新激活时仅在输入监控或辅助功能状态发生变化后重建监听,并记录恢复日志。
    • 按键映射页新增页面内“常用组合 / 标准键盘”选择器,不需要先按下实体键盘:常用组合包含 Command + Space 等系统快捷键;标准键盘支持 Command、Option、Control、Shift、Fn 多选组合,以及主键区、F1~F20、方向与导航键和数字键盘。沿用现有快捷键保存格式与执行路径,旧配置无需迁移。
    • 动作编辑区新增“全部 / 基础按键 / 系统与媒体 / 自定义动作”页面内胶囊筛选;筛选只改变可见候选,“自定义动作”同时包含自定义项和具体 APP 动作,编辑另一个按键时恢复“全部”。自动化及 800 × 650 中英文、浅色/深色真实页面截图已通过;仍需实体遥控器人工验收,验收通过前不勾选。
      • 2026-10-03 重新通过动作分类、设置页结构和切换按键后恢复“全部”的软件回归;没有新增未完成的软件项,剩余边界仍是实体遥控器实际选择与执行。
    • 仍需在已启用 Spotlight 快捷键的真实桌面会话中确认 Spotlight 不弹出、页面显示“快捷键录入成功”,并用真实遥控器验证保存后的动作能够唤起 Spotlight;完成该人工验收后再勾选本条。
  • 支持将单独的 Left/Right Option 等修饰键录入为快捷键

    • 2026-10-31:候选修复 #782,独立左右修饰键在发送时补齐系统设备位,保留旧配置格式及空标志释放。回归覆盖八个左右修饰键、Fn、权限拒绝、发送失败与恢复;真实遥控器和目标语音工具仍待验收,父项不提前勾选。见 记录。
    • 标准键盘选择器已经可以直接选择单独的 Left/Right Option、Command、Control、Shift 和 Fn,不依赖 flagsChanged 录入;配置保留左右侧虚拟键码,执行时显式发送按下与无修饰标志的释放事件,避免修饰键卡住。
    • 真实键盘录入器监听 flagsChanged 并按左右虚拟键码识别修饰键;按下时暂存,单独释放时保存,后接普通主键时继续保存为组合键。自动化覆盖全部支持的单独修饰键及多修饰键误判边界,真实键盘与目标 APP 仍待人工验收。
    • 自动化覆盖左右 Option 键码区分、修饰标志、按下/释放顺序和释放事件清空,并回归普通组合快捷键继续使用原单次发送路径。
    • 2026-10-03 已重新通过全部单独修饰键录入、Right Option 侧别与释放、标准键盘选择器和普通组合快捷键回归;真实键盘、目标 App 与实体遥控器执行尚未人工验收,父项不提前勾选。
  • 支持通过遥控器完整操作 macOS Command + Tab 应用切换器

    • 用户触发配置的应用切换动作后显示系统 Command + Tab 切换器;切换器显示期间,遥控器左右方向键只移动当前 App 选项,按“确定 / OK”确认并切换到所选 App。
    • 需要将一次普通快捷键扩展为有生命周期的临时模式:合成并保持 Command 按下,发送 Tab 打开切换器,方向键继续选择,确认时释放 Command;不能在初次 Command + Tab 后立即释放修饰键,否则系统会直接完成切换。
    • 临时模式下需要拦截方向键和确定键,避免同时执行用户原有按键映射;按返回键、超时、遥控器断连、App 失焦或执行失败时必须取消模式并可靠释放 Command,防止系统出现修饰键卡住。
    • 需要真机验证左右方向键、循环选择、只有一个窗口、App 尚未启动、全屏空间、多显示器及系统动画关闭等情况;不使用自制 App 列表替代系统切换器。
    • 2026-08-25 功能分支已实现完整临时模式:任意绑定入口可启动,活动期间 TV 或同一非确定入口继续发送 Tab,左右方向键移动选项,OK 释放 Command 确认,返回键取消;15 秒无操作、前台 App 异常变化、遥控器断连、监听停止或权限失效都会释放 Command。确认后延迟读取系统最终前台 App 并写入诊断日志;macOS 不提供读取切换器“当前高亮但尚未确认 App”的公开 API。
    • 自动化已覆盖事件顺序、确认、取消、左右导航、超时、前台变化和断连释放;TODO 在真实 RC003、WindowServer、多显示器及全屏空间验收完成前保持未完成。
  • 评估并制作老式电话与仙女魔法棒形态的特色语音硬件原型(仅记录,暂不开发)

    • 老式电话原型优先复用已完成的模拟电话 + ATA/FXS 方案:拿起听筒开始语音交互、挂断结束,并可研究用真实电话铃声提示 Codex 或其他任务完成;不得直接把电话线接入 Mac,也不自制高压振铃电路。
    • 仙女魔法棒原型先评估把已验证可用的遥控器或移动端输入能力装入定制外壳,以实体按键触发语音、灯光反馈表示录音状态;挥动手势、空间动作和自研 PCB 后置,第一版优先保证麦克风、连接、停止录音和续航可靠。
    • 两种形态都属于独立的展示与体验原型,不替代标准遥控器兼容路线,也不能使用预录音频或假交互冒充真实功能。详细产品目的、方案关系和验证边界保存在私有产品资料库。
  • 支持苹果遥控器

    • 2026-10-20 更新 #710:修复 Apple Remote 数据流释放时崩溃。SayAllBTPacketLoggerClient 在 deinit 中对自有 stateQueue 执行同步调用,当最后一个回调引用恰好在 stateQueue 自身上释放时形成队列自等待、触发 SIGTRAP。修复引入 stateQueueKey 标记队列身份,析构路径先判断是否已在该队列上:是则直接收尾,否则才同步执行停止清理。私有包生命周期测试与公开宿主回归通过;真实 A2854/A2540 的语音、触摸与断连矩阵仍待现场验收,父项保持未完成。见 Bugs/2026-10-20-apple-remote-packet-logger-deinit.md。
    • 已完成 SiriRemoteForge、Wand、siri-remote-steamos、SiriRemoteVibe 及其他相关开源项目的可行性研究;当前总体首选 SiriRemoteForge,建议按“按键 → 触摸/滚动 → 麦克风高级组件”分阶段验证。
    • SiriRemoteForge 集成评估、候选项目源码与 Release 对比,以及暂停的 Apple Remote Windows 路线研究均已迁移至独立的产品资料工作区。
    • 2026-09-04 已增加通用硬件输入契约并接入 A2854 候选适配器:使用精确 Apple VID/PID 与批准 usage page 监听实体键,以设备实例标准化即时按下、释放、取消、重复报告合并、配置切换后的迟到释放抑制及断连收尾;Siri 键直接进入既有 Fn 按下/释放会话,不经过双击或长按等待。
    • 已通过动态加载系统 MultitouchSupport 接入 A2540/A2854 的候选触摸表面,并按实验初值实现中心移动、轻触点击和外圈连续滚动;多只 Apple Remote 同时连接时注册全部外部触摸源,以触摸子服务和 HID 父接口共享的 LocationID 路由到对应设备,并在设备拓扑变化时刷新会话,不再把触摸限制为第一只或最近按键设备。方向、中心、返回、TV、音量、播放/暂停、静音和电源均进入独立档案映射;Siri 键保持固定语音路径。
    • 已接入完整候选音频链路:Apple Remote 内置麦克风 → 系统 PacketLogger XPC/HCI → Opus → PCM → MiRemoteV 2ch;用户不需要安装 PacketLogger、Bluetooth Profile、Homebrew 或额外硬件,安装包 helper 负责临时 HCI tracing、一次性管理员授权和退出恢复。缺少系统 HCI 语音跟踪时只报告明确不可用,不回退 Mac 麦克风。A2854 的配对、实体键边沿、触摸、断连、权限、签名构建、授权恢复和 RC001/RC003 回归矩阵见 Testing/AppleRemoteHardwareInterface.md;仍需真实 A2854、一次 GUI 管理员认证、Developer ID + Hardened Runtime、公证包和目标 macOS 完成验收,因此本任务保持未完成。
    • 2026-09-05:修复 Siri 键释放后的音频尾部生命周期;正常路径不再立即 flush,而是保留 closing generation 接收在途尾包,并等待 PCM 主线程投递归零与 MiRemoteV 2ch 队列自然排空后再释放 Fn,正常验收要求 interrupted_samples=0;快速再次按下会取消旧停止并继续同一语音会话,避免第二段开头被延后。同步补充 HCI XPC 客户端签名、helper 拒绝阶段和配置 OSStatus 日志。真实设备仍需按测试手册完成 10 次短按、5 次持续录音、5 次快速再次按下和不同 macOS 版本回归。
    • 2026-09-05:候选对齐 RC001/RC003 的按住连发规则;无双击/长按绑定时,返回键、方向键和音量键分别按既有 50 ms / 100 ms 间隔重复,松键、断连、配置或权限变化会停止。Siri 语音活动及尾音排空期间屏蔽触摸输出,当前接触需离开后才恢复,避免说话时误移动、滚动或点击。自动化已通过,真实 A2854 连续删除、连续导航、音量和语音触摸屏蔽仍待现场验收。
    • 2026-09-06:完成 A2854 专属按键设置页接入:使用私有 Package 的真机图片与独立热点,播放/暂停、静音纳入可配置键,Siri 键保持固定语音卡;宿主通过 SAYALL_SIRI_REMOTE_UI_ONLY=1 只引入页面,避免与公开 Apple Remote 目标重复。页面自动化和宿主回归已通过,真实窗口点击与设备验收仍待现场完成。
    • 2026-09-06:Install PKG 已拆分为默认组件与可选 SiriRemoteComponent.pkg;“Siri Remote 支持”在自定安装中默认不勾选,普通升级不会偷偷补装,已安装的 Siri Remote 系统服务保持兼容。最终 Developer ID、公证并 staple 的 Apple Silicon 1.9.21 (174) 已完成安装器核心 E2E:GUI 默认值与主动勾选、已有 Helper 覆盖升级不选择、无 payload 默认安装、选择后 Helper/LaunchDaemon/receipt、完整卸载原路径、无管理员权限拒绝、App 启动和 CoreAudio 枚举均通过。Finder 废纸篓恢复、Installer.app secure UI 授权、无历史 receipt 新机和 Intel Ventura 仍待人工实机,因此只能称为 Apple Silicon 有条件通过;原始历史报告已按仓库清理规则移出仓库。
    • 2026-09-06:修复播放/暂停、静音和电源绕过通用映射,以及音量自定义动作仍伴随系统副作用的问题;A2854 原始 control ID 现在直接驱动页面活动描边,右键保持右列,顶部电源键移到左列,左右卡片数量差为 1,两列卡片中心距与 RC003 统一为 82.65 pt。私有 Package 自动化和宿主定向测试已通过;真实 A2854 的最终 CGEvent 抑制、全部物理键描边和四个自定义动作仍待候选 App 验收,因此本任务保持未完成。
    • 2026-09-06:公开宿主增加可选 Siri Remote 构建边界;未提供 SAYALL_SIRI_REMOTE_PACKAGE_PATH 时社区版可独立编译、默认不启动适配器、不显示专属 UI,也不打包 Siri Remote helper/resource;提供私有 Package 路径后才定义 SAYALL_SIRI_REMOTE_ENABLED 并启用完整工程。社区版与私有 UI-only 构建均已通过自动化编译回归,真实 A2854 验收仍按本条既有实机矩阵执行。
    • 2026-09-07:修复 A2854/RC003 页面回归:连接页按型号显示对应缩略图并保持统一外框,映射页切换设备时回到顶部,Siri 卡片首行与 RC003 对齐;Siri Remote AppSwitcher 改用持住 Command 的生命周期会话,TV 继续 Tab、左右 Cmd+导航、中心确认、返回取消,超时/断连释放修饰键。公开宿主、私有 UI-only 宿主和私有包完整 Swift 测试通过;真实 A2854 系统 AppSwitcher 与窗口视觉仍待实机验收。
    • 2026-09-08:修复本地 Siri Remote 打包校验误把嵌套 Helper 的 macOS 13 下限判定为 Apple Silicon macOS 14 不兼容;主 App 与通用 Helper 仍严格匹配发布下限,Siri Remote 音频/HCI Helper 和 Opus 仅拒绝高于发布下限的组件。真实 A2854 语音、触摸和安装器验收仍待现场完成。
    • 2026-09-08:修复点击 Siri Remote 页面时因 SwiftPM Bundle.module 构建机回退路径失效而触发 fatalError 的崩溃;私有包统一优先解析宿主 .app/Contents/Resources,公开宿主构建增加资源解析器门禁。真实签名包页面点击仍需重新验收。
    • 2026-09-09:修复 Siri Remote 语音键被自定义映射开关拦截,以及音频 helper 尚未就绪时立即释放 Fn、无法唤醒输入法的问题;语音会话现在保持按下并做有限退避重试,正常松键继续无损排空尾音。私有 Siri Remote 指针与环形滚动增益同步提高。自动化与分发资产验证通过后仍需真实 A2854 和目标输入法验收。
    • 2026-09-09:增加 A2540 候选运行时与 0x0314/0x0315 双型号 HID/语音匹配,A2540 复用 A2854 图片和布局;触摸桥改为按 IOKit Product ID 严格绑定 Siri Remote,拒绝 Magic Mouse 0x0269。安装器在既有 receipt/Helper/LaunchDaemon 存在时自动勾选 Siri Remote 可选组件。A2540 完整按键、触摸、语音与 Magic Mouse 共存真机矩阵完成前保持 awaitingRealHardware。
    • 2026-09-10:恢复 Siri Remote 移动/滚动视觉反馈的宿主桥接,指示器优先位于系统鼠标右下且不重叠,屏幕边缘自动换侧;触摸解释器增加径向/切向意图比较和单次 contact 模式锁,扩大外圈与滚动启动阈值,降低鼠标移动与圆周滚动互相误触。私有 Package、完整 Siri 宿主和无私有依赖社区构建自动化已通过,最终体感与视觉位置仍需签名包真机验收。
    • 2026-09-11:候选修复左右 Command 语音注入缺少物理侧别标志的问题,并新增苹果遥控器连续语音旅程门禁;移动与滚动指示器改为 4 pt 安全间距、相同基础尺寸和相同速度缩放,鼠标停在公开 AXPress 元素或其最多四层父元素上时提供约 1.2 秒 OK 点击窗口,执行前再次确认光标未移走。面向用户的名称改为“苹果遥控器 Type-C / Lightning”;没有真实电量且充电状态未知时隐藏整个电池区域。公开 473 项、私有包 61 项、完整私有宿主 514 项和项目自检 44 项已通过,仍需真实遥控器、目标输入法、Accessibility 点击和签名包视觉验收,因此父任务保持未完成。
    • 2026-09-12:按更新后的跨平台产品合同,将独立指示器改为围绕系统原生光标主体的主题色光环;圆周滚动改用页面上/下方向的 Orbit 缺口箭头,箭头数量随速度在 1~3 个之间单调变化,并提供只影响视觉提示的“与页面滚动指示器一致 / 相反”设置。可点击目标窗口延长至约 2 秒,窗口内中心区域轻触会优先执行单次 AXPress,成功后不再合成 CG 鼠标点击,失败或非中心轻触才回退普通点击。宿主已同步私有 Siri Remote 当前 .scrolled(pixels:speed:) 与 .clicked API;公开宿主 483 项、私有集成 13 项、Developer ID 构建与 App 校验均通过。真实遥控器中心轻触、跨 App Accessibility 激活、光标叠加层级和最终体感仍待用户签名包实机验收,因此父任务保持未完成。
    • 2026-09-12:按键映射页将“自定义按键”标题压缩,设备选择器改为横向滚动以容纳三个及以上已连接遥控器,Siri 专属滚动箭头反向设置移至页脚;私有 Siri 页面交换中心确定键与固定语音卡位置以减少连线交叉,小米遥控器图片高度统一为 510 pt,连接状态统一显示“苹果遥控器已连接”。页面回归 38 项、私有映射页 7 项和 App 校验通过;真实多设备窗口视觉仍待签名包实机确认。
    • 2026-09-13:按键映射页移除 Siri Remote 触摸面说明,单击/双击/长按入口自动滚动到编辑器,动作分类仅显示基础按键/系统与媒体/自定义动作;快捷键规范新增完整名称、简写和图标映射,页面默认显示图标并通过悬停和无障碍提供完整名称。公开与私有自动化测试覆盖该行为。
    • 2026-09-13:按键设置页进一步收敛为宿主唯一的共享页面骨架,RC001、RC003 和苹果遥控器只分别提供硬件画布,后续新硬件不得复制动作编辑器、筛选、快捷键或滚动生命周期。Cmd+Tab App 切换器增加苹果遥控器上下文圆周导航:顺时针选择右侧/下一项,逆时针选择左侧/上一项;确认、取消、超时、失败、断连、语音开始或 App 停止后恢复标准触摸。本轮只启用宿主可可靠确认的 Cmd+Tab 场景,不通过 Accessibility 猜测第三方横向界面;自动化完成后仍需真实苹果遥控器和系统 App 切换器验收。
    • 2026-09-13:针对真实设备连续使用后再次失效、微信前台 Bundle ID 已变化但窗口未显示的现场反馈,补充每轮 operation_id、导航与确认聚合计数、会话前后状态、Command 释放、0/150/500/1000 ms 公开进程/窗口可见性探针和唯一诊断终态。当前只完成可观测性补强,未修改导航或激活行为;必须用新包完成至少 10 轮触摸与实体按键 AppSwitcher 真机复测后再确认根因。
    • 2026-09-09:修复当前 macOS 将 com.apple.PacketLogger.HCI 授权规则物化为 session-owner=false 时被误判为弱规则,私有包 47 项测试通过;增加 A2854 电量的公开 IORegistry 兼容读取路径,当前机器未发现遥控器 BatteryPercent,因此仍按合同显示未知。公开宿主清理 SwiftPM 缓存后 460 项测试通过,Siri Remote + 组合动作/键位方案集成 App 构建并通过 verify-app.sh;真实 A2854 语音 PCM/最终文字和电量仍需正式签名包实机验收。
    • 2026-10-31:会员门禁从「启用/停用」收敛到只作用于语音——连接、普通按键与触摸不再读会员状态,无权益时按 Siri 键不采集、不唤醒输入法并记录 membership_required,引导未完成时仍可试用;遥控器卡片保持三行,会员入口与启用/停用/重试内联在第三行。同时修复自定义按键开启时因键位中和映射不可用而拒绝整台设备、导致遥控器不显示的问题。公开宿主 177 项定向测试通过,A2854 实机语音与按键已验证;真实会员账态、引导试用与双平台差异仍待验收。
  • 支持 Xiaomi Bluetooth Remote Control 2(RC001-MS)

    • 真机确认 RC001-MS 与 RC003-MS 使用相同的固件 2671、VID/PID 0x2717 / 0x32B8、GATT Service、ATVV v1.0、16kHz IMA-ADPCM 和 120-byte frame;两款设备均已完成真实普通按键和 STREAM_START → AUDIO → STREAM_STOP 语音链路。
    • App 已通过正式设备信息识别 RC001/RC003,并复用既有协议、解码器、多遥控器独立配置、电量状态和按键映射;RC001 基础连接、普通按键与语音兼容范围已完成。后续条目中仍标注待 Preview 或人工验收的共享按键行为、充电状态和增强项不在此处改写为已验收。
    • RC001 短语音尾帧修复已通过自动化,并完成 RC001 20 次、RC003 10 次共 30 次真机会话;未出现入队失败、播放中断或停止残留。完整兼容性结论和验证材料保存在私有产品资料库。
    • 2026-10-03 针对 Issue #463 增加电量低频刷新:不支持通知或通知订阅失败时每 5 分钟读取一次,App 回到前台和进入相关设置页时立即刷新;通知正常的设备不轮询,相同值不重复写日志。策略与接线自动化完成,仍待 RC001 / RC003 真机电量变化验收。
    • 2026-08-10 修复 monitored fallback 下左右键按住不能连续移动其他 APP 文本光标:当物理左右键与方向动作完全匹配且没有辅助动作时改用 macOS 原生事件;非匹配映射仍保留 App 连发,并修正 timer 重复累加原生按住状态的问题。seized/monitored、无线麦前台和非匹配动作已通过硬件模拟,实体遥控器仍待 Preview 验收。
    • 2026-08-10 基础按键继续补充 Command-W、Command-X、Command-A、Command-Z、Command-Shift-Z、Command-F 和 Command-S;这些固定组合与既有 Command-Q 一样禁止按住重复。无线麦自身补上标准 macOS 菜单,可使用 Command-Q 退出、Command-W 关闭当前窗口。
    • 2026-08-13 基础按键补充 Command-Delete,沿用固定组合键的一次触发策略;动作分类、键码与 Command 修饰键已有自动化覆盖,真实遥控器和目标 App 行为仍需人工验收。
  • 支持更容易购买的低价 ATVV 语音遥控器

    • 2026-08-08 已实际测试三款硬件:小米蓝牙语音遥控器第三方兼容版、Ugoos UR02 和音仕达录音笔。三款设备在当前真实 Mac 环境中均无法建立蓝牙连接,因此没有进入 GATT、ATVV、HID、音频格式或 App 适配阶段,当前均不能列为兼容或推荐设备。
    • 公开的 Linux / BlueZ 日志可以证明特定 UR02 样机曾暴露 ATVV v1.0 和 16kHz ADPCM,但不能证明同型号、同批次或当前样机能与 macOS 配对。此前将 UR02 列为优先工程样机的判断已经撤回,除非找到明确的 macOS 配对方法、固件差异证据或另一只样机完成复验,否则暂停继续投入。
    • “商品宣称蓝牙、内置麦克风或可用于电视 / 手机”不等于支持 Mac;录音笔也不能默认视为标准蓝牙麦克风,它可能只提供手机 App、文件传输、USB 音频或厂商私有链路。现阶段只记录连接失败结果,不在缺少日志和官方资料时推测根因。
    • 后续所有候选硬件先通过 Gate 0:在目标 macOS 版本上完成首次配对、稳定连接、断开和重连;只有 Gate 0 通过后,才继续验证 CoreBluetooth 服务、系统 HID 共存、ATVV 版本、codec、按键、音质和断连恢复。
    • G20BTS Plus / G20S Pro 系列已有 ATVV 实测,但已公开样机主要是 ATVV v0.4、8kHz;当前 App 只接受 16kHz,因此需要补充 8kHz 解码与输出、旧版帧格式和按键会话逻辑,适配成本高于 UR02。同名商品同时存在蓝牙、2.4GHz USB 和不同固件,不能仅凭商品标题承诺兼容。
    • Google Chromecast with Google TV Voice Remote 已有 ATVV v1.0 / 16kHz 实测,理论适配成本也较低,但供货状态不稳定,因此只作为备选兼容设备。
    • 本次测试的“小米蓝牙语音遥控器第三方兼容版”不能与另一个已单独验证可连接 Mac 的 RC001-MS 混为同一型号;完整证据、候选状态和真机验收清单保存在独立的产品资料工作区。
  • 同一个遥控器在多台已配对 Mac 之间切换蓝牙连接(不使用网络转发)

    • 当前结论:小米产品页与 Bluetooth SIG 官方产品记录均未声明 RC003 支持多个配对主机或主机切换;Apple 也明确说明 App 取消本地 CoreBluetooth 连接不保证底层物理链路断开。因此“在任意一台 Mac 的 App 中单击后直接抢占遥控器”目前不能判定为可实现。
    • 必须先用同一只 RC003 和两台 Mac 验证:分别配对后无需重新配对即可来回重连、当前 Mac 释放后遥控器会重新广播、macOS HID 不会立即抢回连接。通过后可实现“当前 Mac 释放 → 目标 Mac 连接”;任一关键条件失败则纯 App 方案不支持,并在此条目标明硬件限制。
    • 研究结论和真机验收步骤保存在独立的产品资料工作区。