保留:现有应用体系
ai-core 同步远端状态,ai-ui 渲染统一交互;不在前端重复执行工具。
复用执行底座,自己掌握任务、权限与交互。让不同 Agent 的确认和提问,
通过同一套界面、同一条可靠的响应链路处理。
ai-core 同步远端状态,ai-ui 渲染统一交互;不在前端重复执行工具。
任务、主机、授权、Interaction、命令去重和审计由自己掌握。
以 Paseo 为候选底座,主力三家原生接入,ACP 承担后续扩展。
不是 Web SSH,也不是多模型聊天框。统一交互语义,不抹平 Agent 的能力差异。
关键问题:用户决定怎样回到 Agent?切换 Agent,体验正常对话、流式回复、工具调用、排队、停止与重试。
再通过统一卡片处理操作确认、结构化提问和计划确认。
回答问题 ≠ 授权执行 · 拒绝操作 ≠ 停止任务 · 确认方案 ≠ 自动批准
发送一条消息,观察流式回复,再继续追问。
dev-host-01 / workspace/login-fix
可以自由输入,也可以播放预设场景。
回复由本页预设,用于演示交互流程。
普通消息走 send(),审批与问题走 respond(),停止走控制通道。聊天里输入“好的”不会自动批准操作。
同一个 Session 可以有多个 Turn。执行中发送的新消息进入队列,当前轮结束后依次处理。
已生成内容保留,后续队列暂停。继续话题会创建新一轮,已发生的工具操作不会自动回滚。
dev-host-01 workspace/login-fix
请求、问题和选项分别关联 ID。标题重复或文本含逗号,也不应串题或丢失答案。
只展示底层真实支持的授权动作。缺少必填答案时阻止提交,不默认选第一项。
区分正在提交、请求已处理和工具执行完成。批准成功不代表任务成功。
前端只认识自己的 Interaction 契约。权限选项、问题顺序和原生请求 ID 的差异,
留在 Adapter 内部处理,不渗透到业务组件。
APP SERVER / STRUCTURED RPC
item/commandExecution/requestApproval
item/fileChange/requestApproval绑定原生请求,保留实际可用的批准、拒绝与取消语义。
item/tool/requestUserInput按问题 ID 回传答案。MCP 信息收集等其他请求类型另做兼容验证。
AGENT SDK / CALLBACK BRIDGE
canUseTool暂停对应原生回调,等待有效决定;必要时配合 Hooks 和权限配置。
AskUserQuestion → canUseTool将问题表单与工具授权分开,再按原生结构回填问题和答案。
SERVER API / SDK
permission → permission.reply按 request ID 响应,并准确展示 once、always 等选项的实际范围。
question → question.reply / reject按照原问题顺序映射答案数组,不使用逗号拆分自由文本。
这些是自有领域类型,不是某个 SDK 的直接透传
| 类型 | 用户决定 | 统一表示 | 必须保留的边界 |
|---|---|---|---|
approval操作授权 | 允许/拒绝特定操作 | actionId + scope | 批准本次,不等于全局放行 |
question补充信息 | 单选、多选、自由文本 | questionId + optionIds[] + text | 回答问题,不改变工具权限 |
plan计划确认 | 开始实施/返回修改 | origin + planVersion + actionId | 原生恢复与 Host 启动新轮次分开 |
authentication后续扩展 | 完成专门的认证流程 | 受信任的认证通道 | 不将密码、Token 写进聊天与日志 |
在远端 Host 内运行 ACP Client。按版本协商权限请求与结构化信息收集能力;能连接、能聊天,不代表能完整处理审批、提问和恢复。每个接入实现都应独立通过契约测试。
普通文本提问、sudo、安装向导等可能没有结构化请求。允许明确的人工终端接管,不通过正则猜测后自动授权,也不伪造可靠的审批状态。
PaseoRuntimeAdapter 应隔离底座协议。未经验证的选项不展示;未知请求显式报错或要求接管,不采用默认允许策略。
把“连接状态”“交互状态”“执行状态”拆开。数据库里仍有卡片,
不代表原生回调还活着;消息发出,也不等于 Agent 已经接收。
回答和停止,不能排在当前 Prompt 后面
新输入按会话排队。
默认在当前轮结束后开始下一轮;只有确实支持时才提供立即引导。
审批和问题独立响应。
即使当前轮仍在等待,也可以立即交回用户决定,不进入 Prompt 队列。
停止、中断独立处理。
停止时暂停后续消息队列;中断不等于撤销已经发生的文件或外部操作。
| 场景 | 应该发生 | 不应该发生 |
|---|---|---|
| 浏览器断线 | Host 继续执行或等待;重连读取快照与后续事件 | 自动批准、关闭任务、重发 Prompt |
| 多个客户端回答 | 版本检查 + 原子状态更新,只有一个决定生效 | 重复授权,或后到的决定覆盖先到的决定 |
| 提交后失去回执 | 标记 unknown,核对原生请求与投递记录 | 只因超时就重新调用有副作用的响应 |
| Agent 进程重启 | 用 runtimeEpoch 隔离旧请求,旧回调失效就标记 orphaned | 把旧答案投递给新运行实例中的同名问题 |
| 请求从列表中消失 | 记录取消、外部处理或未知结局,保留真实用户决定 | 把所有 resolved 都解释成“用户已批准” |
它能统一处理 Agent 实际发出的请求;要强制所有敏感操作都经确认,还需要原生权限配置、Hooks、工具服务与执行环境共同限制。
Paseo 是受控复用的执行底座,不是未经验证的安全边界。用自己的协议封装它,
保留小范围补丁,避免把整个 UI、任务系统绑定到底座类型。
用模拟 Adapter 验证审批、问题、计划、取消与多端竞争。先固定请求、响应、回执和异常状态。
产物:Interaction 契约 + 契约测试固定 Paseo 与 Agent 版本,补齐无损答案、禁止默认代答、回执和未知请求处理。
产物:真实 Agent 端到端测试新增 RemoteAgentSession;会话卡片与全局待处理中心共享同一份交互状态,关联业务 Task。
产物:统一远程会话界面主机认证、交互持久化、断线核对、独立工作区和审计。再增加多主机管理与 ACP Agent。
产物:可运营的远程控制层apps/ web/ # 现有工作台 control-plane/ # 用户、主机、任务 agent-host/ # 远端入口 packages/ domain/ # 自有领域契约 interaction-broker/ # 决策与回执 paseo-runtime-adapter/ # 隔离底座协议 persistence/ # 状态与投递记录 workspace/ # 文件、worktree ai-core/ # RemoteAgentSession ai-ui/ # 卡片与待处理中心 testkit/ # 通用契约测试
需要落实到 Adapter,不能只包装前端表单
稳定 ID 与数组结构。标题不作主键,逗号不作多选分隔协议。
缺失必答项就报错。映射失败不选首项,未知请求不自动批准。
区分发送、接收和处理。超时先核对,不把 Promise 返回当成完成。
固定版本与能力清单。新增类型需要测试,无法处理时明确降级。
三家都要通过;“跳过测试”不等于支持
本页整理自本次对话中的推荐方案,属于架构评审与交互演示,不是可连接真实 Agent 的控制台。页面未部署运行时、未验证当前版本兼容性。接口名称和原生映射只用于说明接入方向,实际实现应锁定 Agent、SDK 与 Paseo 版本,并完成契约测试及端到端测试。所有演练数据只保存在当前页面内存中,刷新后重置。