Back to Aionui

PRD:应用内浏览器 & Agent 浏览器操作

docs/prds/agent-browser/prd.md

2.1.47-final9.1 KB
Original Source

PRD:应用内浏览器 & Agent 浏览器操作

写在前面

这份 PRD 要回答的问题:用户让 Agent 上网查东西、办事情时,怎样让整个过程发生在 AionUi 里——用户看得见、插得上手、登录态不丢。

给谁用

  • 让 Agent 上网干活的用户(查资料、比价、盯页面、填表单)——主场景
  • 想在侧边随手开个网页对照着聊的用户——次场景

产品现状:侧边预览框已能展示 Agent 打开的网页(带地址栏、前进后退),也支持多个预览 tab 并存。但用户不能自己主动打开一个浏览器页面;Agent 的浏览器操作能力默认关闭、需要手动配置才能用;网页登录态不持久,重启即丢。

1. 用户能自己打开浏览器吗?

目标体验:预览框不只是"Agent 给什么看什么"的被动窗口,用户随时可以主动开网页。

入口位置:复用文件树面板右上角已有的「打开工作区,用……」下拉,在菜单中新增「浏览器」一项。该下拉当前提供 VS Code / 终端 / 文件管理器三个选项,均为"跳出 App 用外部工具打开工作区文件夹";浏览器是"在 App 内打开",因此在菜单中以分隔线与前三项区隔,避免用户误以为会启动外部 Chrome。

  • 「浏览器」参与该下拉已有的"记住上次选择"行为:用户选过一次后,直接点主按钮即打开浏览器。
  • 该下拉当前在临时工作区与 WebUI 模式下整体隐藏(因为"打开文件夹"在这些场景无意义)。浏览器在临时工作区仍然有意义,因此临时工作区下下拉需保持可见,菜单中仅保留「浏览器」一项,避免出现用户找不到浏览器入口的死角。
    • WebUI 模式例外:WebUI 是在普通浏览器里访问 AionUi,没有 Electron 的 <webview> 容器,也没有可供 Agent 操作的 CDP 端口——技术上无法承载应用内浏览器。因此 WebUI 模式下该入口仍然隐藏;这不是遗漏,而是该形态不具备的能力。
  • 预览框已展开时,tab 栏同时保留新建浏览器 tab 的 ➕ 入口。
  • 点击后新建一个空白浏览器 tab,聚焦地址栏。
  • 地址栏支持直接输入网址回车访问;输入的不是网址(如"天气预报")时,按默认搜索引擎搜索。

Case 覆盖

场景期望行为
输入不带 http:// 的域名(如 github.com自动补全协议并访问
输入中文/关键词走搜索引擎
页面加载失败(断网、404)页内给出可理解的错误提示 + 重试按钮,不白屏
页面内点链接默认当前 tab 内跳转;页面要求新窗口打开时在新 tab 打开
临时工作区下拉可见,菜单仅「浏览器」一项
WebUI 模式入口隐藏(该形态无 <webview> 与 CDP,不支持)

2. Agent 怎么操作这个浏览器?

目标体验:用户说"帮我打开某网站查一下",Agent 直接操作 App 内的浏览器,页面在侧边预览框实时呈现——用户看着 Agent 干活。

  • 装好即用,零配置:不需要用户设置任何端口、命令或开关。
  • Agent 能做的操作:打开网址、点击、输入、滚动、读取页面内容、截图。
  • Agent 每一步操作在预览框中实时可见(页面跳转、内容变化跟随呈现)。
  • Agent 操作的 tab 与用户手动打开的 tab 是同一套浏览器 tab,用户可以随时接管:Agent 打开的页面,用户可以自己继续点、继续输入(典型:Agent 打开登录页 → 用户自己输账号密码 → Agent 继续后续操作)。

Case 覆盖

场景期望行为
Agent 说"打开 X 网站"预览框自动展开并显示该页面
Agent 操作时用户正在看另一个预览 tab不强行抢焦点,tab 上给出活动提示,用户可点过去看
页面需要登录Agent 停下说明,用户在预览框里自己登录,之后 Agent 继续
用户中途关掉了 Agent 正在用的 tabAgent 感知到页面已关闭,向用户说明而不是静默失败
同时开着两个 AionUi 窗口/实例各自的 Agent 只操作各自实例内的浏览器,互不串扰

3. 多 tab 怎么管?

**归属:跟随项目,与现有预览框完全一致。**右侧预览区属于项目而非单个会话,浏览器 tab 沿用同一规则,用户不需要理解任何新概念:

  • 同一项目内切换会话 → 浏览器 tab 原地不动。一个项目里可能开多个会话让 Agent 分头干活,它们围绕同一批资料和网页,右侧不应跳变。
  • 切换到另一个项目 → 换成该项目自己的浏览器 tab;切回来能恢复。
  • 不属于任何项目的普通会话,行为与该场景下文件预览的现有行为保持一致,不单独设计。
  • 登录态是唯一的例外:全局共享一份,不随项目切换(见第 4 节)。

其他规则

  • Agent 打开新页面 → 预览框新增一个浏览器 tab;用户手动打开 → 同样新增 tab。
  • 浏览器 tab 与既有的文档/文件预览 tab 并列共存于同一条 tab 栏,切换、关闭交互一致;靠图标区分类型(浏览器 tab 显示网站图标 + 页面标题,文件 tab 显示文件图标 + 文件名)。
  • 浏览器 tab 特有的地址栏与前进/后退只出现在浏览器 tab 内,即"预览框里嵌了一个浏览器页签",而非把整个预览框变成浏览器。
  • tab 数量建议设上限(如 10 个),超出时提示用户关闭旧 tab,避免内存失控。

4. 登录态怎么保存?

  • 用户在应用内浏览器里登录过的网站(Cookie、本地存储),重启 AionUi 后仍然有效——和普通浏览器一致的预期。
  • 所有浏览器 tab 共享同一份登录态,且不随项目切换:用户在任意项目、任意 tab 登录过的网站,Agent 在别处打开时也是已登录状态。这是"用户帮 Agent 过登录关"场景成立的前提。
  • 登录数据只存本机,不上传。
  • 设置中提供「清除浏览数据」入口,一键清空 Cookie 与站点数据。

5. 默认开启的安全边界与知情提示

Agent 操作浏览器的底层机制,会在本机开放一个控制通道。默认开启意味着装好即有——这是零配置体验的代价。

  • 风险:本机上的其它程序理论上也能通过该通道操作 AionUi 内的浏览器页面(仅限本机,不暴露到网络)。业界浏览器自动化工具均采用相同机制,属常规风险水位。
  • 产品立场:默认开启,换取"装好即用";同时在设置中提供总开关(关闭后 Agent 失去浏览器操作能力,手动浏览不受影响),并在设置项旁用一句话说明机制与影响。

首次知情提示:Agent 第一次操作应用内浏览器时给一次性提示,让用户知道正在发生什么,而不是页面莫名自己动起来。

  • 首次触发时以轻量提示呈现(如"Agent 正在操作应用内浏览器"),不打断 Agent 的工作,不需要用户确认即可继续。
  • 提示中附带前往设置的入口,用户可当场关闭该能力。
  • 仅首次提示,之后不再重复出现;提示已读状态本机记录。
  • Agent 操作进行中,对应的浏览器 tab 上保留可识别的活动标记,用户随时能看出这个 tab 正被 Agent 操作。

6. 验收标准

  1. 全新安装、不做任何配置,对 Agent 说"打开 GitHub 看看 AionUi 的最新 release"→ 预览框展开、页面呈现、Agent 读到内容并回答。
  2. 从文件树面板右上角下拉选「浏览器」→ 输入网址 → 正常浏览;输入关键词 → 搜索结果。
  3. Agent 连续打开 3 个不同网站 → 预览框出现 3 个 tab,标题/图标正确,切换流畅。
  4. 在某网站登录 → 完全退出 AionUi 再启动 → 该网站仍是登录态。
  5. 同一项目内切换会话 → 浏览器 tab 保持不变;切到另一项目 → 换成该项目的 tab;切回来能恢复。
  6. 临时工作区下拉可见且能打开浏览器;WebUI 模式下该入口不出现(该形态不支持)。
  7. 首次 Agent 操作浏览器 → 出现一次性知情提示;再次操作不再提示。操作期间 tab 上有活动角标。
  8. 设置 → 系统 → 应用内浏览器 → 清空浏览数据 → 二次确认后清空,此前登录的网站全部退出登录。
  9. 设置中关闭 CDP 总开关 → Agent 表示无法操作浏览器;重新开启 → 恢复正常。
  10. 同时启动两个实例,各自的 Agent 操作互不串扰。