Skip to content

Latest commit

 

History

History
44 lines (27 loc) · 4.67 KB

android-session-communication.md

File metadata and controls

44 lines (27 loc) · 4.67 KB

Android 会话通信

目标与入口

同时提供手动文本转发和 AI 主动请求。聊天右上角菜单 → 会话通信:选择已有目标会话,编写文本或填入最近一次 AI 回复,点击“发送并在目标会话执行”。不自动携带附件、发送方历史或输入框草稿。

目标会话默认不接收 AI 发起的请求;用户可在其通信面板打开接收开关。手动发送是用户本次明确授权,不受此开关限制。目标使用自身模型、上下文及现有工具审批规则,会消耗 Token。

会话链接与新对话读取

本节功能包含在 1.16.3 的会话链接追加更新中,请从 本 fork Release 下载最新 app-debug.apk。

在原会话右上角「⋯ → 复制会话链接」,或在会话列表长按该会话后选择同一菜单项。复制的是 minis://session/<id>;只对已保存的会话启用,复制前再次校验存在性,不创建空会话。

新建对话后可以直接输入:

阅读对话 minis://session/复制得到的会话ID,帮我整理其中未完成的工作,并继续处理。

AI 使用 session_message 的 history 操作读取该链接中的历史,然后在新会话工作;target_session_id 同时接受完整链接和原始 ID。历史读取不需要开启目标的 AI 消息接收,不启动目标模型、不向目标发送消息,也不合并两个会话。

每页默认读取 20 行、最多 50 行,总文本预算 32,000 字符;读满预算即停止加载后续消息。返回 has_more、next_offset、next_text_offset 和 next_message_id;将后三项分别传回 offset、text_offset 和 message_id,可连续读取长消息并检查原消息是否已移动或删除。空白/内部记录仍保留其数据库位置。输出以短文字块和多行 JSON 保存,续读信息位于正文前;即使结果落盘,也可用默认文件窗口读完。读取内容作为参考资料,附件只保留文字标记,完整工具输入输出可通过既有 minis-sessions-cli messages --tools 查询。

如果明确要求“向这个链接的会话发送消息”,send 也接受完整链接,仍要求目标开启 AI 消息接收。原 read 操作继续查询通信记录及回复,与 history 的对话历史含义不同。

链接只引用当前安装中的本地数据;删除原会话或在没有该会话的设备上使用,会返回明确的未找到错误。点击链接可跳转原聊天;仅粘贴或读取链接不会更改接收权限。

实现与约束

  • 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、目标忙碌及有草稿时等待、完成回复关联、取消排队、关闭接收开关、运行时停止/删除目标、重启恢复。无连接设备时不得将这些端到端项目标记通过。