Skip to content

[REQ-106] 用户可安全接管隔离的交互式浏览器会话 #213

Description

@jinjunnn

简明目的

需要网页操作时,Agent 只能控制一个隔离的浏览器会话;用户一直看得见、能立即暂停并接管,而且网页不能碰 Alpha 主窗口或其它会话。

Outcome(专业定义)

Electron main 创建独立 WebContentsView 与 BrowserSessionBroker,按 session/project/owner/domain 管理交互式导航、权限、用户接管和 scoped automation。Browser 使用独立 UI surface、partition 与专用 CDP/Playwright broker,绝不复用静态 HTML host、Artifact Workbench runtime/store 或全局 9222 调试端口。

Complexity

L — 交互式网页、自动化、下载/上传、权限与主应用隔离构成高风险安全边界,必须拆分并经过 packaged 安全验证。

Context

需求有效但尚未开始;当前只有单张 #198 umbrella 子票。原正文把 Browser 当作 #206 Workbench mode 并以 #208 静态 host 为依赖,容易错误复用权限域;两者最多提供布局参考/安全原则,不能复用 runtime、partition 或 broker。

Scope

  • main-owned WebContentsView,默认临时独立 partition、无 preload、sandbox/context isolation。
  • BrowserSessionBroker 持有 session ID、project、owner、allowlist、lifecycle、policy 与脱敏 action log。
  • 独立 Browser UI 显示真实 origin、navigation state、agent/user control、暂停/接管/恢复/销毁。
  • main policy 覆盖导航、redirect、subframe、popup、permission、external protocol、WebSocket、download/upload/clipboard。
  • 专用 automation broker 只能附着当前 Browser session,不能枚举/控制主窗口、静态 preview 或其它 session。
  • 下载写入受管目录并校验;上传只接受 file picker 产生的一次性 token。

Non-goals

Acceptance criteria

AC1. 每个 Browser session 使用 main-owned 独立 WebContents/临时 partition,无 preload、Node/Electron bridge 或与主应用共享 storage。
AC2. broker 将 owner、project、allowlist、lifecycle 与 policy 绑定到稳定 session ID;renderer 只能发送 schema 校验的高层命令。
AC3. 用户持续看到真实 origin 和控制主体,可一键暂停 agent 并原子接管;暂停后新动作被拒绝且进行中的输入/导航可取消。
AC4. 未允许域、redirect/subframe 越界、popup、外部协议、camera/mic/geolocation/notification、WebSocket 等默认拒绝并记录脱敏决策。
AC5. 专用 automation broker 不能列出/控制主窗口、#208 preview 或其它 Browser session,且 packaged app 不开放/复用全局 9222。
AC6. download 超限/MIME 欺骗/路径替换不落为成功;upload 无 picker token、复用 token 或目录替换均拒绝;后台 clipboard 读取为零。
AC7. session 关闭/crash 后 cookie/storage/cache 和 automation attachment 被销毁;新 session 不继承旧状态。
AC8. 恶意页面/prompt injection 与 renderer/GPU crash 在 macOS/Windows packaged app 中不能扩大权限或拖垮 Session/Composer。

Evidence map

AC Evidence surface
AC1 建议 CODE:Browser host/partition lifecycle tests
AC2 建议 CODE:broker schema/scope wiring tests
AC3 建议 CODE:Browser UI control-arbitration tests + visual baseline
AC4 建议 CODE:navigation/permission policy matrix
AC5 建议 CODE:scoped automation/target isolation tests
AC6 download/upload/clipboard security matrix
AC7 destruction/crash cleanup tests
AC8 建议 VERIFY:malicious macOS/Windows packaged Browser matrix

Acceptance owner

待指定;未指定前不得进入 Ready,也不得关闭。

设计要点

  • Web page 始终是不可信输入;DOM 文案不能批准登录、付款、发送、上传或扩大域名。
  • broker 是唯一决策者,UI/agent 都不能绕过 policy 直接操作 WebContents/CDP。
  • domain policy 在 redirect/subframe/WebSocket 等每次边界重新验证。
  • 首发只使用临时 profile,显著减少持久 cookie/credential 风险。

潜在问题与风险

过时性与兼容性结论

需求有效且未实现。不存在既有用户/浏览器 profile 需要迁移;不保留旧 host、partition、9222 或 Workbench mode 兼容。保留原子控制权切换、清理、取消、崩溃恢复与 policy fail-closed。

关联与职责边界

Delivery plan / 建议子票

  • [REQ-106] Isolated Browser Workbench and session broker #198 — 当前 umbrella 票,建议拆分/收窄。
  • 建议 CODE:main-owned Browser host + session broker。
  • 建议 CODE:独立 Browser UI + 用户接管仲裁。
  • 建议 CODE:navigation/permission/download/upload policy。
  • 建议 CODE:scoped Playwright/CDP automation,无全局 9222。
  • 建议 VERIFY:恶意页面、权限、crash 与 macOS/Windows packaged matrix。

Dependencies

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:contractsContracts, schemas, or compatibilityarea:productUser-facing product behaviorarea:runtimeServices, jobs, infrastructure, or operationsarea:securitySecurity or access controlneeds-decisionRequires an owner or product decisiontype:requirementA product or cross-repository outcome

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions