同时提供手动文本转发和 AI 主动请求。聊天右上角菜单 → 会话通信:选择已有目标会话,编写文本或填入最近一次 AI 回复,点击“发送并在目标会话执行”。不自动携带附件、发送方历史或输入框草稿。
目标会话默认不接收 AI 发起的请求;用户可在其通信面板打开接收开关。手动发送是用户本次明确授权,不受此开关限制。目标使用自身模型、上下文及现有工具审批规则,会消耗 Token。
SessionMailbox保存消息 ID、来源、目标、文本、状态和关联回复;通过AtomicFile原子写入应用私有文件session-mailbox.json,先持久化再发布状态。未修改聊天数据库版本。SessionMessenger每个目标只调度一条消息,复用HeadlessChatRunner和进程级 ChatViewModel。会话忙碌、压缩、待恢复、待审批压缩或有草稿/附件/编辑内容时继续排队,不抢占用户操作。- 执行前再次校验目标接收开关和会话存在性。已开始的执行不因关闭开关而取消;停止操作沿用目标聊天页。
- 重启继续处理尚未启动的队列;执行中的消息标记为“已中断”,不自动重放可能已产生副作用的操作。用户重新发送前应检查目标会话。
- 回复只写入双方可见的通信记录,不自动启动发送方下一轮。AI 使用
session_message的list、send、read查询可接收的会话、异步发送及读取结果;send返回接收记录,不代表执行完成。 - 处理跨会话请求时禁止嵌套发送,避免会话间无限调用;最多 20 条待执行/执行中消息、1,000 条总记录,单条输入最多 16,000 字符,结果最多保存 32,000 字符。完整响应仍可在目标聊天查看。
- 只有参与会话可查询指定通信记录。取消排队或删除已完成记录会影响双方通信面板,但不会删除已经写入目标聊天的消息。
- Android 杀进程后不会继续执行;重新打开应用后恢复队列。本实现不增加远程推送服务。
自动化覆盖接收授权、撤销授权、持久化重载、重复领取、取消队列、启动前回退、重启恢复、队列容量、非法输入、非参与方读取/删除和持久化失败。使用 scripts/build_android_windows.ps1 -RunAllTests 构建与运行 JVM 测试。
设备验证清单:手动 A→B、AI A→B、目标忙碌及有草稿时等待、完成回复关联、取消排队、关闭接收开关、运行时停止/删除目标、重启恢复。无连接设备时不得将这些端到端项目标记通过。