聊天式远程控制
补编设计稿,2026-10-20;实施状态见阅读导航。本文件依据现有项目约定补写,不是缺失原文的恢复,也不表示功能已经实现。
1. 定位与开放边界
聊天把自然语言转成可审阅的结构化计划,执行仍使用统一任务系统。
模型没有设备身份、管理员权限或独立执行通道,不能直接操作 Windows Agent。
首个交付闭环只实现受控 browser.open_url;聊天、模型、计划确认和多步骤执行属于后续规划,默认关闭。
页面入口固定为 /app/chat,不意味着当前仓库已存在页面或接口。
本文中的消息、计划及确认接口均为规划对象;实际路由和字段必须在启用前完成版本化契约评审。
用户权限遵循用户权限与模型密钥,任务契约遵循正式开发规格。
各类超时、步骤数、输出限制和预算统一引用设计决策与参数基线。
根 AGENTS.md 优先于本稿;文档完整不等于授权启用聊天或真实设备执行。
2. 用户可见流程
- 用户进入本人会话,界面显示当前设备、可用能力和当前模型配置。
- 用户发送消息;服务端确认会话所有者、模型配置权限及数据出站许可。
- 模型返回普通答复,或符合受控 Schema 的计划建议。
- 服务端校验计划并重新计算风险与权限,向用户展示实际将执行的设备、动作和参数。
- 用户确认不可变计划版本;需要审批时进入独立审批流程,确认不能代替审批。
- 服务端为获准步骤创建持久化任务,分发前和逻辑开始许可时再次校验权限。
- 界面依据持久化任务事件展示执行进度、结果和错误,模型可解释结果但不能改写事实。
- 用户取消或撤销授权时停止后续步骤,并按任务状态请求取消已经开始的步骤。
设备未选择、权限不足、功能未启用、模型不可用时,界面应明确显示对应原因和可行操作。 不得用“正在执行”占位动画暗示任务已经创建;必须先获得服务端任务标识。 没有实际任务结果时,只能展示计划、推测或失败说明,不能生成伪造设备执行结果。
3. 会话与上下文
- 会话和消息的所有者来自认证身份,用户只能读取、修改或删除自己获授权的数据。
- 超级管理员设备管理权不开放私人聊天正文;排障读取需独立授权。
- 一个计划绑定明确设备;切换设备后应重新生成或重新校验计划,不能沿用旧确认。
- 模型只获得完成当前请求所需的最少上下文,不默认发送全量历史、设备列表或其他任务内容。
- 页面文字、文件、截图 OCR、历史模型输出和 MCP 结果均标记为不可信输入。
- 引用不可信内容时保留来源边界;其中的指令不能提高角色权限、变更策略或读取密钥。
- 输出 Markdown 采用安全渲染,禁止可执行 HTML、脚本以及未获批准的外部嵌入。
- 附件、截图和下载内容属于后续独立能力,未实现时拒绝上传或执行,不假设可安全接收任意文件。
- 删除会话不删除关联任务与审计事实;按各类数据保留策略分别处理正文、输出和审计引用。
4. 计划结构与不可变确认
计划应记录计划标识、版本、所有者、会话、触发消息、目标设备、步骤、内容摘要和有效期。 每步声明能力标识、Schema 版本、类型化参数、依赖、超时与预期结果类型。 模型返回的风险、所有者、授权结论和任务状态都不具权威性,服务端必须独立计算。 计划采用严格 Schema,拒绝未知能力、未声明字段、任意 Shell、外部代码及非法依赖。 执行参数不允许携带模型密钥、设备凭据或客户端提供的所有者覆盖字段。 计划内容摘要覆盖设备、步骤顺序、能力、参数、版本、时限及适用策略绑定。 实际规范化方式和摘要算法须在共享协议中固定,避免不同端对“同一计划”产生不同判断。
| 用户动作 | 服务端语义 |
|---|---|
| 确认计划 | 绑定当前用户、计划版本和内容摘要,并重检授权及有效期 |
| 修改参数 | 产生新版本,原确认和审批失效 |
| 重复确认 | 相同版本返回原任务映射,不重复创建有副作用任务 |
| 过期后确认 | 拒绝;重新审阅的新版本才能进入执行 |
| 取消计划 | 停止创建后续任务,并请求取消当前已开始任务 |
| 重新尝试 | 必须先确定旧任务结果;不能自动重试 unknown_outcome |
确认不是长期授权,不能覆盖之后发生的账号禁用、设备撤销、能力禁用和策略变化。 高风险审批需绑定同一不可变摘要并记录请求者、审批者和执行者;审批策略由服务端确定。 审批尚未实现时,要求审批的动作保持拒绝;不能因缺少审批页面而降低风险等级。
5. 计划与任务的关联
会话、触发消息、计划版本、步骤与任务形成可追溯关联,审计使用标识而非复制私人正文。 步骤创建事务写入任务、初始事件及计划步骤到任务的唯一映射。 每个步骤独立使用稳定幂等键;重复确认、客户端重发或调度恢复不能产生第二个执行任务。 相同键与不同内容冲突时必须拒绝,不得默默复用已有任务。 任务的所有者在服务端确定,设备绑定来自已校验计划,不能采用模型自行声明的身份。 任务参数只包含该能力执行所需字段,聊天上下文不能原样附入 Agent 载荷。 步骤映射也需对象级授权;知道任务 ID 不能跨会话或跨用户获得任务内容。 模型调用的日志、用量与调用标识单独记录,不以调用成功冒充设备任务成功。
任务持久化状态只能使用统一集合:
pending, awaiting_approval, dispatched, running,
succeeded, failed, timeout, cancel_requested, cancelled,
expired, unknown_outcome
计划的审阅与编排进度是独立领域信息,不向任务枚举追加 draft、rejected 等状态。
task.rejected 是事件;已创建任务在尚未执行且可证明未产生执行副作用时被 Agent 拒绝,转为 failed 并保留明确错误码。执行后的异常依据实际证据处理为失败或未知结果,不能统一写成拒绝。
创建任务前权限不足时返回 API 错误并审计,不伪造一个已经分发的失败任务。
6. 多步骤编排
第一版聊天执行建议只开放单步骤计划;多步骤在独立验收后开启。
初次开放多步骤时采用顺序执行、无循环、无隐式并行,降低恢复与副作用判断的复杂度。
每步开始前重检当前用户、设备、能力、参数、审批、预算及扩展版本。
上一任务只有确认 succeeded 且输出通过 Schema 校验后,后续依赖步骤才可创建或进入开始许可。
任务输出可含敏感内容,传回模型前执行最小化和脱敏;不能直接把全部输出拼接成系统指令。
动态参数只能引用已声明步骤的受控输出字段,并通过下一步参数 Schema 和策略校验。
会话退出、浏览器关闭或模型断流不等同于设备任务取消,界面恢复后查询服务端事实。
停止后续编排是持久化操作,调度恢复不得绕过用户已提交的取消。
多步骤不是数据库事务:已经打开网页、写入文件或调用外部服务的副作用可能无法回滚。
补偿操作必须是独立、明确授权的新任务,不能由模型自动执行未预先批准的“撤销命令”。
任一步骤失败、被拒绝、过期、权限失效或出现 unknown_outcome,停止后续依赖步骤并给出明确说明。
需要人工核实的结果必须记录核实来源、操作者与审计;不能仅凭模型推测修正状态。
重新规划应形成新版本,并在确认页标出之前已完成的动作,避免用户误以为将从零执行。
7. 撤销、取消与结果不确定
服务端开始许可事务定义逻辑开始点;授权撤销与许可按总纲规定的锁顺序串行判定。
撤销先提交则不批准新开始;许可先提交则任务可能已产生副作用,应请求取消并保存真实结果。
发送取消请求只使任务进入 cancel_requested,收到有效取消确认后才能进入 cancelled。
已成功完成的任务收到迟到取消时保持真实完成结果,不被取消请求覆盖。
Agent 断线或超时只能说明无法及时取得结果;不能据此声称页面没有打开或副作用已回滚。
发生无法确定的执行结果时使用 unknown_outcome,暂停编排且禁止自动重试。
设备重连先核对任务状态,不能因为会话仍存在就重放过期、撤销或不确定任务。
用户界面应展示“结果待核实”及可追踪标识,并区分请求取消与已经停止。
8. 实时事件与可恢复界面
- 控制台使用
/ws/console,经会话和Origin检查后再授权每个订阅。 - 消息和任务进度均来自已授权的数据源,不能按“同设备在线用户”直接广播私人内容。
- 任务事件按持久化顺序补齐;客户端保存游标,重连后去重并请求缺失片段。
- 游标不授予权限,补历史事件时重新验证所有者及设备授权。
- 无权或会话失效后移除对应缓存和订阅,不能继续显示新的任务输出。
- 事件暂时缺失时显示同步状态并查询服务端;不得仅依赖前端计时器标记成功、失败或取消。
- 错误响应包含稳定错误码和
correlation_id;只展示用户获权查看的诊断内容。
9. 预算与模型错误处理
模型调用、工具次数、计划步骤、执行时长、并发和输出大小均受服务端限制。 请求前预留预算,完成后记录实际用量;并发调用不能通过竞态突破限制。 服务商返回未知用量时按策略保守处理,不因为缺少计费字段当作免费调用。 模型超时、限流、结构化输出不合法或内容超限时,返回可理解的错误,不创建未校验任务。 故障转移须符合服务商白名单与用户的数据出站授权,不自动扩大正文接收方。 模型在显示层的解释可失败,但不能抹去已持久化的设备执行结果。
10. 验收要求
- 聊天关闭时,页面、直接接口、伪造计划和工具调用均无法触发聊天执行链。
- 验证跨用户读取会话、计划、任务映射、输出和事件订阅均被拒绝。
- 验证重复确认只关联同一组任务;修改设备、参数或步骤后旧确认与审批失效。
- 注入“忽略权限”“读取密钥”等页面或工具文本,验证其不能提升权限或改变执行策略。
- 验证创建后撤销、分发后撤销、许可与撤销并发,以及执行中的取消竞争。
- 验证断线恢复、重复和乱序事件不会覆盖最终结果,也不会重新执行有副作用任务。
- 验证部分成功、未知结果和超时会停止后续步骤,界面不宣称整体回滚成功。
- 验证模型限流、无效 JSON、预算耗尽和配置删除时,不发生未授权任务或隐式故障转移。
以上为后续功能的验收设计;真实模型、真实 Windows 和模拟测试必须分别记录,不能互相代替。