用户看得见的那一页(desktop pane)上跑战役时,为了查请求清单、处理 confirm/prompt(含 accept)、或导出 PDF,不得被迫切到 isolated-headless。
PDF 若短期做不到双腿,必须工具面显式披露「仅 headless」并提供一键换面路径——不得静默成功在另一张看不见的页上。与 #5817 纪律一致:bound + pane 不可达时写路由结构化阻断,绝不静默落 headless。
可回看的 Epic Page:Pane 对称性 Epic:同页战役不必翻 headless
锚点:octopus main @ cadbbbb56
octopus
@ cadbbbb56
内置浏览器是双后端:有桌面绑定时优先同页 pane(Electron webview + CDP),否则 headless-driver.ts(内嵌 Playwright Chromium)。对齐目标是 @playwright/mcp 工具面(browser-tools-parity-ledger.md),不是完整 Playwright Test API。
headless-driver.ts
@playwright/mcp
browser-tools-parity-ledger.md
叶表 HEADLESS_ONLY_BROWSER_TOOL_IDS(packages/octopus/src/tool/browser-ids.ts)当前含:browser_pdf_save、browser_handle_dialog、browser_network_requests、browser_network_request、browser_highlight、browser_generate_locator。本 epic 只收前四项中与同页战役直接相关的 network / dialog / PDF;highlight / generate_locator 不绑。
HEADLESS_ONLY_BROWSER_TOOL_IDS
packages/octopus/src/tool/browser-ids.ts
browser_pdf_save
browser_handle_dialog
browser_network_requests
browser_network_request
browser_highlight
browser_generate_locator
HEADLESS_ONLY
browser_drop
browser_run_code_unsafe
newContext
browser_tabs
_request
page.pdf()
扩展既有 guest-network-cdp.ts(#5902 / #5826)采集 → browser_network_* 去 headlessOnly。CDP attach 失败结构化拒绝,不静默空列表。
guest-network-cdp.ts
browser_network_*
guest-dialog.ts 策略 + pending/handle;禁止 guard 与 handle 双答。默认仍 auto-dismiss;accept 必经 act 门。
guest-dialog.ts
推荐先 spike A;不可行再退 B。禁止 bound+pane-live 时静默在 headless 生成「看起来成功」的 PDF。
defineActTool
packages/octopus/contracts/browser-tools-parity-ledger.md
packages/octopus/contracts/browser-tool-surface-v1.md
packages/octopus/contracts/browser-act-surface-v1.md
packages/desktop/src/main/guest-dialog.ts
packages/desktop/src/main/guest-network-cdp.ts
packages/octopus/src/browser/headless-driver.ts
No dependencies set.
The note is not visible to the blocked user.
北极星验收
用户看得见的那一页(desktop pane)上跑战役时,为了查请求清单、处理 confirm/prompt(含 accept)、或导出 PDF,不得被迫切到 isolated-headless。
PDF 若短期做不到双腿,必须工具面显式披露「仅 headless」并提供一键换面路径——不得静默成功在另一张看不见的页上。与 #5817 纪律一致:bound + pane 不可达时写路由结构化阻断,绝不静默落 headless。
可回看的 Epic Page:Pane 对称性 Epic:同页战役不必翻 headless
锚点:
octopusmain@ cadbbbb56背景
内置浏览器是双后端:有桌面绑定时优先同页 pane(Electron webview + CDP),否则
headless-driver.ts(内嵌 Playwright Chromium)。对齐目标是@playwright/mcp工具面(browser-tools-parity-ledger.md),不是完整 Playwright Test API。叶表
HEADLESS_ONLY_BROWSER_TOOL_IDS(packages/octopus/src/tool/browser-ids.ts)当前含:browser_pdf_save、browser_handle_dialog、browser_network_requests、browser_network_request、browser_highlight、browser_generate_locator。本 epic 只收前四项中与同页战役直接相关的 network / dialog / PDF;highlight / generate_locator 不绑。目标
HEADLESS_ONLY叶表与 registry lock,零漂移非目标
browser_drop;E-6browser_run_code_unsafenewContext、完整 device catalogbrowser_highlight/browser_generate_locatorpane 腿browser_tabsaction=new 恒 headlessP0 范围
browser_network_requests/_requestbrowser_handle_dialogbrowser_pdf_savepage.pdf()P0-a Network
扩展既有
guest-network-cdp.ts(#5902 / #5826)采集 →browser_network_*去 headlessOnly。CDP attach 失败结构化拒绝,不静默空列表。P0-b Dialog
guest-dialog.ts策略 + pending/handle;禁止 guard 与 handle 双答。默认仍 auto-dismiss;accept 必经 act 门。P0-c PDF
推荐先 spike A;不可行再退 B。禁止 bound+pane-live 时静默在 headless 生成「看起来成功」的 PDF。
建议拆 PR
验收清单
HEADLESS_ONLY叶表与defineActTool/ registry lock 一致证据锚点
packages/octopus/contracts/browser-tools-parity-ledger.mdpackages/octopus/contracts/browser-tool-surface-v1.mdpackages/octopus/contracts/browser-act-surface-v1.mdpackages/octopus/src/tool/browser-ids.tspackages/desktop/src/main/guest-dialog.tspackages/desktop/src/main/guest-network-cdp.tspackages/octopus/src/browser/headless-driver.ts