# Mika 路线图 原则:**先把事办好,再求快,再扩能力**。按根因归类修机制,不为单个案例打补丁。现在的结构见 [`architecture.md`](architecture.md)。 ## 已完成 - **后台虚拟屏办 App 的事**:内置手机助手(经无线调试,配对一次)、虚拟屏、无障碍读屏与操作、文字识别补读、接管、手机复合工具(查询、连续命令、跨屏采集、找、提取、弹窗、等待、事件、手势、系统命令)。 - **内置浏览器**:私有虚拟显示上的 WebView,经 DevTools 协议真实输入;桌面版身份、标签页池、登录状态与「网站登录」设置、网页接管、下载与上传、只读脚本。 - **Linux 沙箱**:随 APK 自带的 Alpine 运行环境(arm64)、每对话一个工作区、默认断网、文件进出、知识与技能自带脚本、沙箱里调手机工具。 - **运行时**:Run 与收件箱(运行中插话)、任务中心(每对话一个 Run、排队、不同对话并行)、送达账本、重启后标记中断并告知、统一的资源协调、按能力装配、子任务(只读调研)。 - **主循环**:唯一执行入口、工具注册表与按属性办事、观察为中心、不调工具即回答、`end_not_done`、系统生成来源、回答后在后台判定结局、模型临时错误有限重试;工具引擎不直接依赖界面状态(`PackageDependencyTest` 守住)。 - **上下文**:缓存分区、历史只追加、快满时才一次性压缩、用户原话永不裁剪、压缩后补回。 - **定时与条件触发**:一次性 / 固定间隔 / 当地时间每天每周、固定提醒、只读条件检查与状态变化去重、空闲时再做、精确闹钟能力检测、重启与时区变化后重新布置、结果回原对话、计划页。 - **记忆与学习**:事实、偏好、做法(做法需批准)、用户画像、加密存储;个人技能与 App 知识草稿的起草—收下—试用—核实流程。 - **知识**:内置 App、网站知识与技能(`core/src/main/resources/` 下,清单见构建生成的索引和 README),统一格式,查找 / 阅读两对工具。 - **Token 用量**:每次模型调用在源头记账(服务商、模型、用途),本机按小时存 400 天;设置里一个页面看 24 小时 / 7 / 30 / 90 天 / 自定义的总用量、按服务商叠起来的趋势和服务商、模型排行。 - **评测**:`eval/tasks/` 下的真机评测题,分调优池与保留池;假模型剧本与提示词金样测试。 ## 接下来 1. **真机跑真实任务**:失败按根因归类,在机制层面修,看同类任务一起变好。 2. **重新打开核查与审批**(见下「已知问题」第 1 条):这是学习、回放生效的前提。 3. **手机能力 v2**: - 一次多步里能带等待条件(等文字出现、等页面安静后再做下一步),减少模型往返; - 精简观察:读屏结果只发与上一屏的差异、更短的界面描述; - 按需给工具:开局只给一份经过筛选的工具目录,用到时再加载完整定义,工具变多也不撑大固定前缀; - 按同一模型、同一任务测首个反馈时间、模型往返次数、读屏与动作耗时、完成率,以及聊天采集的漏读和重复。 4. **定时任务的后续阶段**:登录态 App 内的条件监控;多步骤的监控编排;运行时长上限与超时清理;免打扰时段;连续失败合并提醒;条件结果带观测值、「数值明显变化才提醒」与冷却;创建、编辑时预览接下来几次的时间;从用户明确说过的长期意图提出计划建议(用户采用后才生效)。 5. **更多来源与能力**:渠道(微信等;渠道接口、主人身份、提问编号对应已在 `core/run/` 定义)、MCP 服务端与客户端的传输层和设置入口。 ## 已知问题与暂缓 1. **开发阶段关掉了最终核查**(用户决定:开发阶段保持关闭,自学暂不启用)。`TaskRun` 里 `reviewFinalAnswer = false`: - 回答一律记为「未核实」;而技能草稿、App 知识草稿、经验路线、个人技能从试用转正式都要求「核实过」,所以这些学习在产品里目前不会发生; - 风险审批按全局的询问 / 自主(见 architecture §4):询问时只有花钱的一步要同意;开了自主时连付款也不拦,`autonomous` 的提前返回(`ConfirmDecision.judge` 开头)排在「不对 Mika 自己动手」(`ownApp`)检查之前,所以这层保护在自主模式下也不生效(用户决定:暂不改。Agent 操作 Mika 自己的界面也可以是在帮用户办事,以后再定); 2. **崩溃恢复的保护不全**:中断了的运行的善后(补送结果、告知用户、往对话记一轮「任务中断」)由 `RunRecovery`(`app/task/RunRecovery.kt`)做:进程被杀后用户一打开 App(`MikaApp.onCreate`)就能收到「已中断」,任务服务被销毁而进程还在时(`TaskService.onDestroy`)当场告知;是否告知过看送达账本,每个中断的运行只告知一次。仍然没有「连续异常重启就暂停附属服务」的保护。从中间续跑不做(屏幕状态回不去),只做「中断 → 告知 → 用户重新发起」。 3. **网页只读脚本的待办**(`core/cap/web/ReadScript.kt`,审查提出,暂不做): - 按 `value` 选元素只拦了直接写 `[value` 的选择器;CSS 转义写法和 `:is()` 里拼出来的写法还能绕过。改成先解析选择器再判断。 - 秘密输入框只遮了 `value` 一类属性;`valueAsNumber`、`valueAsDate`、`selectionStart` / `selectionEnd`、`files` 等还能间接读出内容。改成对秘密输入框只放行白名单里的属性。 - `fetch` 的请求头现在全部放行。改成白名单(`Accept`、`Accept-Language` 一类)。 - 判断「是不是秘密输入框」只看只读环境建起之后的变化,在那之前就被改成 text 的密码框认不出。考虑和页面脚本共用一份「曾是密码框」的记号。 4. **触发器的小缺口**:改时区后,按当地时间重复的计划要到下一次认领时才按新时区重算;`LocalScheduleAdmin` 列出的是全部计划,还没按对话区分归属。 5. **剪贴板**:网页类编辑区靠粘贴输入,安卓 12 起主屏会短暂提示「正在访问剪贴板」;验证码、证件号这类敏感文字粘贴时会在剪贴板里停留约一秒。要彻底避免需要 Mika 自己当输入法提交文字,改动大,暂缓。 6. **网页任务不进经验回放**:网页的动态内容和登录态差异会让对位频繁失败,先把手机上的回放跑稳。 7. **需要第三方账号授权的技能脚本**(云文档、地图接口等)暂不做;要做需要一个安全保存服务凭据的入口。 8. **记忆不做云同步与导出**;以后要做,需要单独设计加密导出。 9. **真机待验证**:内置助手的各项系统操作、助手被杀或无线调试关闭后的自动恢复、重启后的自动恢复、长时间不用后授权失效的引导、网页渲染进程崩溃、Android 13–15 上精确闹钟授权与撤权、锁屏期间的定时任务,目前主要由单测和设备测试覆盖,还需要在真机上逐项跑过。 10. **评测的不可逆题**:默认不跑,要跑须传 `-e evalAllowIrreversible true`;每道题用新对话。发送、删除题会真的做完(只碰题目自己带标记的数据、测试账号);询问模式下下单题停在确认卡片上(`EvalHooks` 的自动回答接得上),开发者选项里开了自主时下单也没有这层安全网,会真的下单。 11. **以后**:连接电脑、任务期间调暗屏幕省电。 12. **悬浮胶囊分步做**:第一步(浮层宿主、开关、干活中 / 需要你 / 你在处理 / 办完的胶囊、接管交还、和通知的配合)、第二步(点开的卡片:小画面、步骤、停止、接管、同意 / 回答、结果、多件事的列表;拖动贴边、缩成一颗、记住位置)、第三步(卡片里的输入:插话、回答、接着聊、空闲时接着最近的对话或开新对话;输入法弹出时让开)、第四步(多件事:列表按要紧程度排、卡片里切换、接管先后按真实的接管队列、交还后下一件马上成为「需要你」)、第五步(手感:不碰它几秒后淡下去、缩成一颗时状态点保持实色、别的 App 弹出输入法时缩成一颗挪到上面、转屏后按比例摆回)已做;上真机逐项验收后再看全屏播放时要不要自动缩起来、胶囊上的字要不要另加短句。