跳转到内容

原生 Personal 客户端

桌面产品现已采用一个持久 twin 主对话。下文的原生多助理页面属于历史实现,尚未按本次桌面重构适配或验收。手机工作暂缓,这些页面不代表当前桌面契约。

Wuu 的 iOS 和 Android 客户端通过公开、版本化的扩展客户端服务呈现原生 Personal 界面,不运行桌面插件 JavaScript,也不读取插件存储。宿主权限见用户级宿主;构建和真机检查见原生客户端说明。

Coding 宿主保留 Projects 导航和已有默认入口。经过验证的 Personal 宿主打开 Personal。当前登录下会记住选择的入口与已授权宿主,重新打开不需要选择工作目录或创建会话。首次设置宿主仍使用现有的账号设备目录或 iOS 配对流程。

每个具名助理绑定持久主对话。Personal 没有线程选择、新线程或分叉入口。主助理只显示名称,专属助理另显示职责。首次使用可幂等地确保默认助理存在;重连、重试和通知始终继续原助理。主对话缺失会报错,不会静默创建另一段对话。

Personal 提供对话、事项、今天、共享记忆、通知设置和日历。“今天”组合公开事项、持续事项、当前本地日期的日历窗口、最近结果以及日历和专属助理的待决定提案。助理设置提供名称、沟通方式、专属助理职责及暂停/恢复;创建专属助理需确认不可变提案,中断后重试同一个提案。修改、停止和恢复事项使用页面显示的 revision 作为 expected_revision;执行记录使用独立的 requirements_revision。正在停止或等待不代表完成。

当前连接的 initialize 必须声明 user_space_id: local 和 product_domain: personal,还必须提供已启用且活跃的 Personal 清单项及其准确指纹。发现缺失、禁用、歧义或作用域不符时保持不可用。插件清单通知只能沿用本次真实初始化验证过的不可变作用域更新指纹;断线会清除该作用域,单独的清单通知不能恢复权限。

调用通过 plugin/client/request,携带显式 Personal 路由和当前贡献指纹。适配器只属于一个已认证登录与宿主;连接和选择代际会拒绝迟到响应。Personal 宿主的通知与快照不会进入 Coding 线程列表,也不会调用 Coding 工作目录和线程 RPC。

向新后台任务或已有会话委派时,助理保留原始文字,并可添加明确标注的相关上下文摘要。系统不会复制整段主对话,也不保证所有模糊指代都能正确解析。

任务交接支持最多 16 个附件、原始字节合计不超过 20 MiB。发送端只读取宿主绑定原消息的附件,校验摘要后,通过已选择的状态文档提供者保存不可变快照(每块 512 KiB base64),插件任务存储仅保留小型清单引用。分块绑定源消息、插件和用户空间,每次读取重新检查会话权限;全部分块提交后才发布清单。快照随工作区状态保留用于恢复。目标端校验字节并在自己的附件目录中写入工作副本。消息仍标记为 Agent 来源,来源标签不授予读取原对话的权限。新任务和任务更新使用同一交接路径。超限、不可读取或内容改变的文件会明确失败,不会用发送端本地路径代替。两端宿主均须支持附件交接 v1。重试沿用原运行和快照;结果不确定时先核对原操作。

准备好的消息不是已受理的工作。发送前,客户端将原始文字、附件字节及稳定业务请求 ID 保存到按登录和宿主隔离、排除备份的应用私有重试存储中。结果不确定的发送可以跨进程恢复;重连不会自动重发。用户明确重试时保留业务 ID,每次传输使用新 ID。在重试或明确放下本机重试前,不能切换助理。放下本机记录不会撤回可能已到达宿主的请求。重试存储不可读取时暂停新发送,需先核对历史再明确放下。

手机 Personal 每条消息最多 64,000 个 UTF-8 文字字节、四个图片/PDF 附件,附件合计不超过 3 MiB;允许仅发送附件。文件名不超过 255 个 UTF-8 字节,不能包含路径分隔符和控制字符。可信 user_input 信封包含准确文字与文件字节,插件输入只含匹配的摘要、名称和媒体类型引用。

下载通过助理与消息序号,或事项与要求版本,再加附件种类、索引和 SHA-256 定位,不接受任意全局路径或执行会话。手机支持原始数据不超过 12 MiB 的图片/PDF 预览,分块读取 base64 并校验完整文件摘要。大文件或不支持的格式会明确说明限制。普通原生文字控件可使用系统键盘听写;此处没有 Wuu 自建语音识别器。

显示历史使用独立、有大小上限且可由系统清理的缓存,按登录、宿主和助理区分。离线历史明确只读,附件需重新连接。缓存只保存展示字段与附件元数据,不保存附件字节、凭据或执行会话标识。切换账号、退出和撤销设备会关闭旧写入者并清理相关历史与重试记录。缓存不构成远端访问权限。

记忆管理读取活跃和非活跃记录,可查看冲突、尚未生效或过期的事实、来源与生效时间。更正使用明确的用户编辑来源和显示版本。忘记记忆需要明确确认,只移除共享召回,不删除原始聊天、文件、导出和备份;已忘记的记录不含原记忆内容。

安静时段和 Personal 通知偏好采用设置版本检查,不会代替系统推送权限,也不会自动订阅设备。日历读取显示状态、新鲜度和最近成功时间。空列表或过期缓存不能证明有空,冲突检查仅覆盖选定日历。

日历写入要求独立发现活跃的 Personal Calendar 贡献。确认页冻结操作 ID、版本和预览摘要,展示账号、日历、事项要求版本、修改前后字段、准确日期时间与时区、全部受邀人、通知选项和冲突检查范围与时间。只有明确确认才调用 operations.confirm。传输失败会锁定本次已尝试的确认,提供只读状态检查;不确定或进行中的操作可只读核对,不重复写入。完成状态带有提供方回读证据,通知是否送达仍需另外验证。该页面不执行账号授权设置。

通知只是提示,不是同步或授权。Personal 通知包含以下字符串:

字段含义
version1
product_domainpersonal
user_space_idlocal
host已授权宿主公钥
recipient当前手机的账号公钥
agent_id持久具名助理
task_id可选,属于该助理的事项
message_seq可选,其主对话中的正整数规范十进制消息序号

对应 URL 为 wuu://personal,查询参数使用同样字段但不含 recipient。URL 打开需要当前登录和重新读取的已授权宿主目录;通知还要求本次登录的推送同意及匹配的接收方。重复查询字段、未知版本、无效 ID 和会话/工作目录路由会被拒绝。新导航取代旧的待处理打开请求;归属不符的事项被拒绝;消息无法定位时保留原助理并说明原因。

原有仅含宿主的 Coding 通知保留旧路由。无效的 Personal 负载不回退到 Coding。通知和重试均不创建新会话。APNs/FCM 凭据、签名原生构建和真机送达需要单独验证,协议测试不能替代这些验收。

历史入口按人物名字、事情或原话搜索当前具名助理,可选本地日期范围;日期会转换为明确时刻,由宿主在分页前筛选。点选结果恢复原主对话消息序号。修改条件会丢弃旧游标和迟到结果;工具执行和隐藏推理不属于这个对话检索视图。

主助理和专门助理的 agents.history 使用相同的可见性与真实用户输入来源规则。内部身份指令保留在物理审计记录和提供方上下文中,不显示成用户气泡;真实用户文字即使与这些指令相似也会保留。可见的工具结果附件作为助理附件保留,不暴露工具输出;tasks.history 仍是执行审计视图。详见会话历史契约。

agents.history 读取最近或更早消息时,最多向前查找四个物理页,每页不超过 50 条记录,另用一次单条读取取得快照;同一次查找保持在该快照内。如果扫描页只有被筛除的记录,空结果仍可能带有 has_earlier: true;客户端应使用 end_seq: first_seq - 1 继续读取更早消息。明确指定 start_seq 或游标的读取保留请求的源地址,不会自动向前跳页。

记忆详情展示贡献助理、最近更新助理、贡献版本、实际执行来源,以及可用的来源、生效和记录时间。来源引用作为证据展示,没有对应消息定位时不伪装成已解析链接。

通知设置提供关闭、1、5、15 分钟的按负责助理聚合。聚合只改变通知,每条对话及其可读时间不变;它不代替系统推送权限或提供方送达验证。

桌面 Personal 可以引用已有稳定地址的对话消息,也可以在事项详情选择“回复这件事”。两种入口打开 Replies 浮层,显示原消息或事项上下文、关联的主对话消息和独立回复输入框;关闭后恢复主聊天草稿。回复仍保存在同一个持久主对话中,浮层不会创建新的执行会话。引用只指明目标,不授权新操作,也不会自动重新执行;主助理仍负责理解用户的请求。

消息地址使用 {session_id, seq},不使用临时渲染条目 ID。agents.send.relation 与用户原文分开传递,并与已认证的 user_input.relation 信封保持一致。Personal 事项关系位于 relation.metadata.task_links,包含 task_id、requirements_revision、可选的 execution_session_id 与 question_request_id。历史和实时助理输出保留相同关系。创建事项时使用宿主绑定的当前回合来源消息,不使用模型填写的序号,也不猜测最新历史行。

引用目标必须是主对话内可见消息。系统检查事项与执行归属、已知需求版本及待回答问题身份。过期问题应重新选择,不能把答案套用到其他版本。同一输入重试不能悄悄更换目标或重复增加需求版本。没有引用的普通聊天不继承先前事项;详细工具过程与 worker 历史继续保留在执行视图,不混入主对话。