网页操作与任务控制

网页工具栏保留地址、前进后退、刷新、操作标记、操作历史和预览控制。页面内不提供独立的暂停或继续按钮。任务的暂停与继续只由聊天输入框旁的执行控制负责。

点击、滚动与输入

用户和 Agent 都可以操作网页,包括 OpenProgram 自己的界面。点击、滚动、按键、输入及导航不改变任务执行状态,不发送暂停请求,不创建页面写入限制。旧客户端发来的网页操作通知作为兼容消息忽略。

关闭与恢复

关闭网页立即关闭,不等待任务暂停。工具发现原页面失效后,先按原窗口和标签页身份重新获取页面;页面仍存在就读取当前状态,确认不存在时按最后已知 URL 重新打开。恢复只返回新的观察,不重放旧点击或提交,不选择其他网页代替。连接无法确认时报告错误,不假定页面已关闭。

任务暂停

显式暂停通过统一执行控制停止后续生成和工具操作。页面权限、所属任务和快照校验仍然保留。恢复任务后读取最新页面;不存在另一套页面暂停权限。

预览与状态

浮动预览标题栏提供“打开页面”、“更多”和“关闭小窗”X 图标。收起只隐藏小窗,保留网页与会话资源,可从资源面板重新打开。“更多”中的“自动显示 Agent 正在操作的网页”是勾选项:选中时跟随 Agent 当前操作的网页,取消时保持当前网页。它不表示窗口置顶,不控制 Agent 执行。标题栏没有图钉和展开/缩小按钮;拖动与边缘调整大小保持可用,旧的展开尺寸仍可恢复。操作历史、点击标记与页面生命周期用于显示状态,不决定任务是否执行。登录丢失及未保存数据不能恢复时明确报告。

预览操作验收

原有 X 实际只隐藏预览,图钉切换显示策略,双箭头改变预览尺寸。目标使用现有隐藏与跟随函数,不改变资源生命周期或会话归属。通过标题栏收起后网页保留,资源入口可重新打开;更多菜单切换跟随策略且不发送执行控制请求;桌面与 Web 菜单行为一致。验证紧凑标题栏和八方向调整大小。

实现状态

实现已通过独立规格审查与质量审查。组件、界面、契约及安装检查验证上述行为。

预览操作与资源分类通过独立规格和质量审查。完整检查及安装验收记录在任务证据中。

固定预览视口

交互小窗按固定 1920 × 1080 CSS 像素渲染网页。改变小窗尺寸只改变显示比例,比例由宽高共同约束,原生矩形按 16:9 适配后取整,均匀覆盖显示;取整必要时裁切末端不足一个原生像素,矩形以外显示宿主背景。桌面使用 Electron enableDeviceEmulation 的固定 viewSize 和显示 scale;Web iframe 使用固定宽高和 CSS transform。打开普通标签页时恢复原有页面缩放和正常窗口布局。页面实例、DOM 布局、滚动位置和 Agent 的 CSS 坐标不随小窗尺寸变化;操作标记使用相同的显示比例。Agent 输入使用原生页面经归属检查后报告的 input_scale 换算;截图坐标与滚轮距离保持 CSS 像素。MCP 引用保留上游命名空间,悬停按所属 frame 的实际边界换算。Agent 截图使用固定 CSS 分辨率的 CDP 截图,按设备像素比换算,结束后恢复当前原生显示参数。并发截图共享一次结果,尺寸、导航、归属或预览模式变化会使尚未完成的截图失效。

固定视口实现状态

代码实现、规格审查和质量审查通过,安装版 App 验收单独记录。验收覆盖小于 480 像素的小窗、普通尺寸、原生及 Agent 点击、滚动、截图、应用缩放、导航和普通标签页恢复。

小窗移动与渲染开销

只移动位置时仅更新原生边界,不重新设置设备模拟或页面缩放。重复边界不触发原生布局更新。显示比例仅在原生尺寸改变时更新;导航和最后一个调试器连接退出时强制恢复。渲染层使用同一组按应用缩放换算并取整后的原生尺寸。未进行鼠标手势时显示可交互的原生页面;手势期间使用下述一次性显示画面,不增加循环截图。

小窗通过可移除的作者级样式(Electron 移除接口使用此来源)隐藏根页面滚动条轨道,保留滚轮、键盘和内部区域滚动。退出小窗时移除样式,并处理插入过程中发生导航或退出的情况。原生视图本身按 16:9 适配,未使用区域由宿主显示;按取整后的原生矩形均匀覆盖,避免露出网页画布的白色背景。仅设置原生透明背景不足以去除这类空白。边缘调整区保持在原生视图外。验收覆盖连续六十次移动和重复边界不重设模拟、尺寸变化、强制恢复、样式生命周期、应用缩放、连续拖动、滚动和完整标签页恢复。

小窗渲染优化通过独立规格与质量审查。完整检查和安装验收单独记录在任务证据中。

连续拖动与缩放

按住鼠标拖动或缩放时,使用一次解码的当前显示画面,与小窗边框在同一个渲染器内移动和缩放。此时不修改原生网页尺寸或设备模拟参数。松开后向隐藏的原生页面一次性提交最终尺寸,等待显示画面捕获返回,再恢复网页交互。虚拟页面保持 1920×1080;显示画面通过 capturePage 获取,不使用 CDP 或周期截图。失效或超时的结果不能隐藏或恢复已经替换的小窗。只有手势期间,页面动画的显示暂时保持在当前帧。

无外框小窗布局

小窗不显示装饰性外框、阴影或左右及底部留白。网页铺满 30 CSS 像素标题栏以下的区域。小窗外轮廓统一采用 10 CSS 像素圆角:标题栏仅顶部为圆角,内容区按底部圆角裁切占位内容、iframe 和手势画面。保留的手势画面顶部也采用 10 CSS 像素圆角。内容区与标题栏背景相同,使原生网页顶部圆角缺口与标题栏颜色一致。Electron View.setBorderRadius 使用 10 与应用缩放比例的乘积取整,最小为 1;缓存已应用半径,仅在值变化时更新,回到普通标签页时按需恢复为零。八个透明调整大小区域向外延伸;每个角提供 24×24 CSS 像素命中区域,一半位于网页之外。只有鼠标悬停的角显示弧形提示;移动和缩放不会显示其他角的提示。提示线宽 2px,保留 14×14 提示区域和 12px 外圆弧,定位在角外侧 2px,不预留间隙。原生页面接收网页输入,调整大小使用外侧命中区。可放置范围在每边外侧保留 22 CSS 像素:角部手柄占 12 像素,相邻侧栏调整区域占 8 像素,另留 2 像素间隔。默认和展开尺寸继续保持内容 16:9 比例。这项外观调整不改变视口、会话归属或手势生命周期。

可编辑字段的精确值

native type 对普通 input 和 textarea 保持原生填写。contenteditable 编辑器在原生可编辑性检查和清空后,以一个纯文本节点替换选中内容并派发 input 事件,避免 Chromium 段落节点使空行产生额外的渲染换行。该操作不修改编辑器 CSS,也不归一化请求文本。操作在 input 处理器执行后读取实际渲染 innerText;如果编辑器改写文本或 CSS 折叠了有意义的空白,则返回操作失败并要求重新观察。调用方不能以失败为理由自动重复写入。后续公开观察仍是字段精确读回成功的证据。