聊天式远程控制

补编设计稿,2026-10-20;实施状态见阅读导航。本文件依据现有项目约定补写,不是缺失原文的恢复,也不表示功能已经实现。

1. 定位与开放边界

聊天把自然语言转成可审阅的结构化计划,执行仍使用统一任务系统。 模型没有设备身份、管理员权限或独立执行通道,不能直接操作 Windows Agent。 首个交付闭环只实现受控 browser.open_url;聊天、模型、计划确认和多步骤执行属于后续规划,默认关闭。 页面入口固定为 /app/chat,不意味着当前仓库已存在页面或接口。 本文中的消息、计划及确认接口均为规划对象;实际路由和字段必须在启用前完成版本化契约评审。 用户权限遵循用户权限与模型密钥,任务契约遵循正式开发规格。 各类超时、步骤数、输出限制和预算统一引用设计决策与参数基线。 根 AGENTS.md 优先于本稿;文档完整不等于授权启用聊天或真实设备执行。

2. 用户可见流程

  1. 用户进入本人会话,界面显示当前设备、可用能力和当前模型配置。
  2. 用户发送消息;服务端确认会话所有者、模型配置权限及数据出站许可。
  3. 模型返回普通答复,或符合受控 Schema 的计划建议。
  4. 服务端校验计划并重新计算风险与权限,向用户展示实际将执行的设备、动作和参数。
  5. 用户确认不可变计划版本;需要审批时进入独立审批流程,确认不能代替审批。
  6. 服务端为获准步骤创建持久化任务,分发前和逻辑开始许可时再次校验权限。
  7. 界面依据持久化任务事件展示执行进度、结果和错误,模型可解释结果但不能改写事实。
  8. 用户取消或撤销授权时停止后续步骤,并按任务状态请求取消已经开始的步骤。

设备未选择、权限不足、功能未启用、模型不可用时,界面应明确显示对应原因和可行操作。 不得用“正在执行”占位动画暗示任务已经创建;必须先获得服务端任务标识。 没有实际任务结果时,只能展示计划、推测或失败说明,不能生成伪造设备执行结果。

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 和模拟测试必须分别记录,不能互相代替。