主代理
明确目标,准备文件,选择工具和子代理,交付结果。
TaskRead / ShellSendMessage先看任务路径,再看角色分工。
PDF 原字节与任务分开传输;后台返回文件引用和可查询的 Run。
核验执行环境身份;写入并校验文件,同时选定浏览器运行模式。
DOM 为主,截图辅助;用户实时桌面是另一条按需启用的路径。
核验网站账号;登录 / MFA 时暂停自动输入,认证后再恢复。
先登记和监听,再选文件;区分已受理、已可用和结果未知。
返回文档链接,撤销控制权;按策略保留证据、登录态与环境。
职责来自项目工具装配。
明确目标,准备文件,选择工具和子代理,交付结果。
TaskRead / ShellSendMessage依据网页快照操作控件、表单与标签页。必要时使用网页截图和视口坐标。
browser_snapshotbrowser_*依据桌面观察操作窗口和键鼠,覆盖浏览器 DOM 之外的图形交互。
Computeraction: screenshot认证或接管时暂停自动输入;人工结束后,核实账号、目标与控制权再恢复。[P00]
文件复制走文件工具,网页控件走网页工具;真正跨到桌面才使用 Computer。
noVNC 连续画面与模型单张图像是两条通道;都要独立验证权限与输入。
工具结果、网站受理与最终可用状态分开判断;缺证据时保留 unknown。
工具分工 [S01] 网页动作 [S04] 桌面执行 [S03] 流程与成功标准 [P00]
复制、生成、查询等任务有适用的获准接口时,直接使用。
CopyToBox · Shell · MCP有可用 DOM 与当前元素引用时,精确定位控件。
browser_click · browser_fill网页内的自绘控件没有有效元素引用时,按当前截图定位。
browser_mouse_click_xy需要原生窗口、浏览器外壳或跨应用交互时,使用桌面动作。
Computer这是选择建议,不是遇错就逐级降级的重试链。获准接口不可用、请求被安全策略阻断或外部效果未知时,不改用低层工具绕过。[S14]
网页有明确的文件控件,优先结构化操作,不打开系统文件窗口。
文件控件接受 ≠ 服务器受理;Bot 此工具要求 driver v3、/workspace 路径和 ≤16 MiB 非空文件。 [S04]
网页有明确的文件控件,优先结构化操作,不打开系统文件窗口。
文件控件接受 ≠ 服务器受理;Bot 此工具要求 driver v3、/workspace 路径和 ≤16 MiB 非空文件。 [S04]
按当前页面元素引用填写、选择和勾选,核对最终字段状态。
定位歧义先重新观察;不要把“强制点击”当作默认纠错。 [S04]
网页语义不足时,先判断网页视口坐标是否足够,不立刻升级到整桌面。
这是场景选择建议;必须核对当前视口和截图,目标不明时暂停。 [S04]
操作位于浏览器 DOM 之外,且没有适用的获准 API / CLI 时,再使用完整桌面。
目标应用须已安装,桌面和权限须就绪;不是“支持任意操作系统应用”的承诺。 [S02]
身份验证不是一般按钮点击;使用获准认证方式,必要时交给用户。
不能把密码放进聊天、绕过挑战页,或假定硬件密钥能被远程鼠标替代。 [S12]
复制、读取和转换本质上是文件或程序任务,不必绕经桌面。
每条路径标明机器身份;不得静默覆盖目标文件,也不暗示转换软件已经安装。 [S07]
源码确认 [S01]
| 维度 | browserUse | computerUse |
|---|---|---|
| 主要观察 | 网页结构、元素 ref、页面截图 | 完整桌面截图、窗口与视觉目标 |
| 定位空间 | 元素身份,或网页视口坐标 | 桌面 API 坐标,再映射到显示坐标 |
| 动作范围 | 表单、标签页、网页拖拽、文件输入 | 鼠标、键盘、拖拽、滚动与等待 |
| 文件上传 | 有文件控件时优先 browser_upload | 仅在确需桌面交互且获准时操作相关界面 |
| 当前装配前提 | browserUse 角色 + 可用 Box + 桌面标志 | computerUse 角色 + 可用 Box + 桌面标志 |
| 不能独自证明 | 网站最终成功、所有输入通道互斥 | 视觉模型真正收到图像、任意应用兼容 |
Playwright 可直接设置文件输入;动态文件控件先监听 filechooser,再触发并设置文件。Bot 提供自身 browser_upload 封装,不能把底层库所有功能都当作该工具已暴露的能力。[D01] [S04]
browser_snapshot browser_take_screenshot browser_get_bounding_box browser_highlight
browser_click browser_mouse_click_xy browser_type browser_fill browser_select_option browser_check browser_uncheck browser_upload
browser_navigate browser_press_key browser_scroll browser_drag browser_tabs browser_cdp
browser_session_status 查询执行和恢复状态,不产生页面动作。
browser_cdp 有明确的输入与浏览器级命令限制,不是绕过专用工具与审批的通道。[S04]
screenshotclickmovedragtypekeyscrollwait桌面工具可表达左右中键、点击次数与拖拽路径。执行协议中的低层动作多于模型工具入口,不能把全部底层协议都列为模型可调用工具。[S02] [S03]
先读动作与完成证据;技术细节按需展开。
交付新文档 ID / 版本、正确链接及可核对证据。示例域名、ID、路径与回执不是实际运行数据。
参考方案采用 /api/blobs、/api/turn、SSE、microvm-agent 与持久存储规划;Negentropy-Bot 使用桌面 / Host / Box 工具和生成协议。各步的“项目映射”单列 Bot 实现。[P00] [S08]
步骤 17 的认证输入可跳过;步骤 16 与 18 的账号、项目及权限核实仍保留。
接收文件与任务,建立可恢复身份。
01—06用户在智能助手的聊天页面选中本机 PDF,说明使用网站 A 的个人账号上传到项目 B 文档区。此时文件还在用户设备上。
附件在当前消息中可见,目标和授权范围明确。
取消选择不会产生外部效果;需要更换文件时重新选择,避免沿用错误附件。
文件对象、文件名、MIME、大小;目标网站、项目和操作意图。
任务:使用我的网站 A 账号,将 report.pdf 上传到项目 B 的文档区,并返回文件链接。 附件:report.pdf 类型:application/pdf 位置:用户设备
Bot 也可使用连接电脑中的已授权路径,不要求所有文件先进入网页聊天。 [S07]
网页读取原始 PDF,计算 SHA-256。摘要用于校验传输内容,文件名用于展示。
得到原文件字节、长度和摘要,之后的上传使用同一份字节。
本机读取失败时停止提交并显示错误;不要提交只含文件名的空附件。
ArrayBuffer / Uint8Array、SHA-256、文件元信息。
字节:<原始 PDF>
摘要:<原文件 SHA-256>
元信息:{"name":"report.pdf","mimeType":"application/pdf","size":123456}摘要核验是此案例的文件完整性规划,不代表任意 CopyToBox 调用都自动完成全链路验收。 [S07]
网页先向 助手的文件接口发送原始二进制;PDF 正文不会被当作任务文字发送。
文件接口确认保存成功,并返回可引用的 blobId。
上传失败时任务附件不能视为已接收;使用原字节和原摘要重试文件传输。
按数据风险配置恶意内容检查、配额与拒绝策略;仅为原文档传输时不擅自重写文件。
请求体为 PDF 原始字节,摘要放在查询参数。
POST /api/blobs?sha=<SHA-256>
Content-Type: application/octet-stream
<report.pdf 原始字节>
响应示意:{"blobId":"blob-demo","size":123456}/api/blobs 属于网页参考接入;不是 Bot 的通用文件上传协议。Bot 可通过 CopyToBox 拉取字节。 [S07]
智能助手保存原字节,返回受访问控制的文件引用。文件数据与后续任务记录分别持久化。
文件能通过受控引用读取,重启不会只剩一个内存对象。
保存未确认时不启动网站上传;任务失败后按存储策略处理未引用文件。
持久字节、blobId、长度、摘要和用户关联信息。
用户设备的原字节 → 助手的持久文件存储
网页保留:
{"name":"report.pdf","mimeType":"application/pdf","size":123456,"blobId":"blob-demo"}本例的 Postgres / 文件存储是参考选型,不将其当作 Bot 当前数据库部署证明。 [S08]
网页发送任务 JSON。模型与核心收到任务描述和附件引用,原文件在文件存储中。
核心返回可跟踪的 Run;同一次提交与同一任务保持关联。
响应丢失时查询原任务或用同一 clientTurnId 重试准入,不能盲目创建第二次上传任务。
任务文字、会话、clientTurnId、模型选择和 attachments 元数据。
POST /api/turn
Content-Type: application/json
{"text":"上传 report.pdf 到网站 A 的项目 B 文档区","clientTurnId":"turn-demo","attachments":[{"name":"report.pdf","mimeType":"application/pdf","size":123456,"blobId":"blob-demo"}]}在 Bot 中主代理负责组织任务,可委派 browserUse 或 computerUse 子代理。 [S01]
先保存 Run,再向网页推送进度。SSE 是这里选用的展示通道,断开连接不等于取消后台任务。
网页显示可追踪进度,任务状态能在重连后恢复。
SSE 失败时回退轮询;查询任务事实后再决定是否继续,不能靠页面计时器判定业务失败。
Run 状态、文字活动、partial 回复和终态;不承载本方案的连续桌面画面。
GET /api/runs/run-demo/events
event: partial
data: {"partial":"正在准备 report.pdf 的执行环境…"}
网页重连后读取同一 Run 的持久状态。SSE 属于网页参考接入;Bot 的消息交付与转录链路需按桌面/Host 架构理解。 [S08]
核对文件、环境与浏览器运行配置。
07—10先绑定用户与任务,再准备执行环境。本例采用 Linux Docker 容器;完整虚拟机需使用独立的生命周期与来宾接入适配。
正确作用域的容器和 agent 就绪,镜像具备本次需要的能力。
镜像缺少浏览器时明确报告能力不足;不能因为 agent 健康就宣称 GUI 能力已具备。
镜像、容器标识、网络、回环映射和用户卷配置。
智能助手 → Docker CLI → unix:///var/run/docker.sock 容器:用户隔离的沙箱 服务:microvm-agent :8080 宿主入口:127.0.0.1:<映射端口> 持久卷:用户工作目录
Bot 使用自身 Box 连接与生命周期;独立镜像默认单主桌面,而非完整来宾操作系统。 [S09]
核心读取已保存的 blob,经 agent 的 /write 传入沙箱。Base64 解码后仍是同一份 PDF。
任务路径中有完整 PDF,实际文件路径可被后续浏览器进程读取。
写入失败时只重试未完成的文件准备;不要直接跳到网站提交。
使用任务独立目录、受控路径与非特权账户。大文件应设置大小和内存预算,必要时采用流式或分块传输;Base64 不是加密。
受控任务路径、PDF 的 Base64;解码后的原始字节。
POST /write
Content-Type: application/json
{"path":"/root/workspace/.agent-turn/demo/inbox/report.pdf","b64":"<PDF 的 Base64>"}
沙箱得到:report.pdf 原始二进制文件Bot 可调用 CopyToBox;Box 执行服务不是此示例的 microvm-agent /write。 [S07]
本方案要求登记附件产物,并验证沙箱副本的长度和 SHA-256,防止上传错文件。
附件产物登记完成;副本核对证明路径对应原文件。
摘要不匹配时停止任务并重新物化原文件,不继续上传或忽略校验。
单次摘要比对只能证明校验时的字节;上传前仍须确认引用有效,防止校验后被替换。
原文件引用、沙箱路径、长度、摘要;文件元数据入持久存储。
原文件:blob-demo 沙箱副本:/root/workspace/.agent-turn/demo/inbox/report.pdf 长度一致:true SHA-256 一致:true 产物引用:artifact-demo
browser_upload 会暂存文件并建立摘要、字节数等产物引用;不能只凭同名路径判断身份。 [S04]
自动处理可用无头 Chromium;预期需要人工接管时,从开始就在 Xvfb 或来宾桌面启动有窗口的 Chromium。两种模式都可由 Playwright 控制。
模式、执行环境和浏览器会话已登记;需要接管的任务已有可展示的桌面。
真实无头模式需要转为有窗口时,暂停并按策略重建,再核实会话。若外部动作可能已发送,先核对结果,不迁移后重放上传。
受控命令或专用工具参数;结构化执行结果,不包含登录密钥。
运行模式示意(不是部署命令): automation Playwright + headless Chromium takeover-ready Playwright + headed Chromium Linux:Xvfb + VNC + websockify + 授权代理 完整 VM:使用已验收的来宾桌面接入方式 两种模式均需绑定 userId / runId / environmentId。
技术上可用无头浏览器;但该 Bot 基线的 browser_* 与 Computer 装配都要求 Box 的桌面能力。 [S01]
读取页面;按需启用模型截图和人工画面。
11—15本例通过 CDP 连接受管 Chromium。自动与人工接管必须对应同一个已登记的浏览器、上下文和页面;CDP 不是唯一的浏览器控制方式。
自动操作对应正确的受管 browser / context;若启用 GUI,人工画面也对应这个实例。
连接失败重新检查进程和端点;不创建匿名浏览器替代已登录实例。
Bot 浏览器工具绑定 Box、窗口与 view,不把新建空 context 当作恢复原会话。 [S04]
Playwright 发出导航命令;真正向网站请求 HTML、脚本、样式和业务 API 的是沙箱浏览器。
正确站点加载完成,登录态和目标入口可被检查。
TLS、DNS、反爬或页面错误分别记录;遇到挑战页转为可解释的人工接管。
由 browserUse 使用 browser_navigate;实际业务请求由 Box 中浏览器发出。 [S04]
浏览器工具提取最小必要的页面文字、角色和标签。模型据此提出下一步工具调用,后台核验权限后执行,再把实际结果反馈给模型。
目标控件具有明确名称、数量和可操作状态,模型不必只靠屏幕坐标猜测。
元素不唯一或信息不足时继续读取 DOM、缩小范围;必要时用单张截图辅助。
DOM、截图和网页文案均是不可信输入。模型提出的动作不是授权;敏感区域同时限制截图、日志、追踪记录和向模型的外发。
DOM / 可访问性信息、控件定位信息、工具文字结果。
{"url":"https://site-a.example/projects/B","title":"项目 B","elements":[{"role":"button","name":"上传文件","count":1},{"role":"heading","name":"文档"}]}
链路:CDP JSON → 程序输出 → HTTP JSON → 模型工具文字browser_snapshot 返回与当前快照关联的元素引用;页面变化后需要新观察。 [S04]
可选视觉辅助:DOM 信息不足时,把 PNG / JPEG 截图交给支持视觉的模型。无头 Chromium 也能截图,这一步不要求 Xvfb 或 VNC。
仅在 DOM 信息不足或需要视觉核实时使用
有视觉能力的模型实际收到图像,而不是一长段 Base64 文本。
模型无视觉能力时继续 DOM 路径或请求人工协助;不能假装已看见画面。
单张 PNG / JPEG、截图尺寸和文件引用;模型收到图像内容块。
PNG 截图 → /read 返回 b64 → 智能助手解码保存
模型输入示意:
{"type":"image","mimeType":"image/png","data":"<PNG 的 Base64>"}
供应商最终格式由模型适配器转换。网页截图与桌面截图不同;X11 执行器生成 WebP。所选 Provider 是否收到图像需实测。 [S03]
仅在已准备好的有窗口模式中,VNC 从 X 显示读取画面,再经 websockify 和授权代理传到网页 noVNC。截图、桌面和聊天进度彼此独立。
实时观看与人工接管为可选扩展
用户能看到同一受管浏览器的连续桌面,查看与控制权限在服务端执行。
观看断开不等于任务失败;重新鉴权后连接同一沙箱。若控制会话失效,服务端撤销输入权。
RFB 帧缓冲区域更新;经 WebSocket 传递二进制远程桌面消息。
画面方向: Chromium → Xvfb → X 显示访问 / 画面采集 → VNC → RFB / TCP → websockify → 授权代理 → RFB / WSS → noVNC 模型截图另走图像工具;桌面不向模型逐帧发送。
noVNC 供用户查看/接管;Agent 的 Computer 动作直接走执行资源与 X11,不必穿过查看器。 [S03]
核对账号与权限,再交还自动执行。
16—18先检查当前浏览器是否已登录,以及登录的是否为用户指定账号。智能助手的登录与网站 A 的登录是两套独立会话。
确认网站会话属于授权账号,且该账号有项目 B 的访问权限。
账号错误、会话过期或权限不足时不继续上传;转入登录 / 授权流程。
登录状态、当前账号可见标识、项目访问情况;不返回原始 Cookie。
{"signedIn":true,"accountMatches":true,"projectAccessible":true}
智能助手的会话 Cookie ≠ 网站 A Cookie
用户自己电脑里的网站 Cookie ≠ 沙箱浏览器里的 Cookie模型 Provider 登录与业务网站登录不同;本页不要求复制 Cookie 或读取认证文件。 [S08]
无有效登录态时,通过获准认证通道或已准备的桌面完成登录 / MFA。认证是条件步骤;凭据不得进入普通聊天或模型上下文。
没有正确且有效的登录态时执行;已有会话仍须核对账号和项目
同一浏览器获得正确账号的有效网站会话;认证完成能被网站状态确认。
MFA 未完成时保持暂停。控制权过期或网络断开时撤销输入权,重新核实会话后恢复。
人工认证期间禁用或脱敏截图、DOM 回传、视频、网络追踪和诊断输出;“密码不交给模型”不能只依赖密码框遮罩。
必须的会话与认证信息;可选 RFB 键鼠输入。最终登录请求由浏览器通过网站 HTTPS 发出。
无 GUI 路径:已有获准会话,或受控认证通道 → Chromium → 网站 HTTPS 可选 GUI 路径:noVNC 键鼠 → RFB / WebSocket → VNC / Xvfb → 同一 Chromium 有效会话必须确认;人工接管方式按需开启。
有 WebAuthn 桥接源码;browser_fill 的 secret-slot 执行则明确未安装 resolver,不能宣称通用自动填密已完成。 [S04]
必须重新核实账号、项目和任务授权。若使用过可选人工接管,等待用户释放控制后再恢复自动输入。
控制权明确,自动与人工不会同时输入;上传前的权限仍有效。
不能确认输入停止或授权失效时继续暂停;不要依靠前端按钮状态推断控制权。
所有会改变网页状态的自动调用与人工输入共用同一控制许可检查。先停止接收旧许可输入,再排空在途动作,核实页面后恢复。
统一仲裁 browserUse、computerUse 与人工输入是工程验收要求;浏览器单写者或 X11 内部串行并不单独证明跨通道互斥。 [S03]
先记录和观察,再触发并核实新文档。
19—24按 URL、项目标识和页面语义确认目标。优先用 role、label 和稳定的定位条件,而不是屏幕坐标。
目标唯一且账号具有上传权限,后续文件不会落入同名的其他项目。
目标含糊时继续读取或请用户明确项目;元素歧义不能直接切换成盲点坐标。
优先 browser_snapshot + ref;网页视口坐标与 Computer 桌面坐标不能互换。 [S04]
在任何可能触发上传的动作前持久记录意图,并建立结果监听。某些网站选择文件就会立即上传。
上传动作有可恢复身份,监听能覆盖选择文件就自动上传的情况。
准备失败时可以重做尚未触发的准备;一旦动作可能已发送,进入结果核对,不重新发送。
本地 clientTurnId / actionId 只能关联与约束本系统;不能独自保证网站端恰好产生一次效果。
动作 ID、原文件摘要、账号、项目、目录、已知文档 ID 与观察条件。
动作记录示意:
{
"actionId": "upload-demo",
"runId": "run-demo",
"fileSha": "<SHA-256>",
"account": "<已确认账号>",
"projectId": "B",
"previousDocumentIds": ["old-demo"],
"state": "prepared"
}
持久准备 → 建立监听 → 领取执行权
→ 记录 dispatching → 触发上传
上述状态与互斥为工程要求,不表示已有实现。Bot 有规范化摘要、审查及浏览器回执接线;本例完整业务幂等与重启恢复仍需按网站验收。 [S04]
直接把沙箱绝对路径交给 setInputFiles;动态文件选择器使用 setFiles。通常无需操作系统文件对话框。
网站文件输入取得正确文件,或已触发可观察的自动上传。
选择失败先检查路径、权限和控件;超时可能已触发上传,不能再点屏幕重复提交。
本例中 Playwright 与浏览器共享隔离环境的文件系统。若 Playwright 移到宿主,必须验证远程传输语义;不能直接把宿主或用户设备路径当作来宾路径。
沙箱文件路径和浏览器文件输入;实际文件字节在沙箱本地。
async function chooseFile(page, filePath, mode) {
if (mode === "input") {
await page.getByLabel("上传文件").setInputFiles(filePath);
return;
}
const chooserPromise = page.waitForEvent("filechooser");
await page.getByRole("button", { name: "选择文件", exact: true }).click();
const chooser = await chooserPromise;
await chooser.setFiles(filePath);
}
page:已认证的受管页面
filePath:步骤 9 已核对的沙箱绝对路径browser_upload 需要 driver v3、/workspace 下的绝对路径;非空文件上限 16 MiB。 [S04]
读取控件和页面反馈,确认选中了 report.pdf。需要手动提交的网站才点击上传,自动上传的网站直接等待既有动作。
仅当网站需要显式提交时点击;文件选择已触发上传则直接等待同一动作。
已按网站策略触发一次受控尝试,后续进入业务核对;这还不是成功回执。
文件类型或大小被网站拒绝时明确失败;若提交结果不明,持久保存 unknown 并查询。
browser_upload 只报告控件接受情况,服务器受理与文档可用性必须另行核对。 [S04]
真正的文件传输发生在沙箱 Chromium 与网站之间。上传格式由网站决定,可能是表单、原始二进制或分块。
网站收到文件,返回可以继续核实的业务回执或状态。
传输断开或响应丢失时不能认定未受理;先查询文档和操作记录,再决定是否重试。
预签名 URL、对象存储直传和分块 finalize 的目标需显式允许。必须核对真实接收方;URL、令牌和会话信息不能进入普通日志。
PDF 字节、网站会话、CSRF 或站点要求的上传参数。
POST https://site-a.example/<真实上传端点> Cookie: <浏览器管理的网站会话> Content-Type: multipart/form-data; boundary=<示意> 文件字段:report.pdf 原始字节 项目参数:<网站实际要求> 也可能由网站采用直传对象存储或分块上传。
网站上传走浏览器与目标服务的业务连接;不把 CDP、RPC 或 RFB 称为 PDF 的业务上传协议。 [D01]
用新文档 ID、版本、项目和账号核实本次结果。HTTP 200、100% 进度或同名旧文件都不足以单独证明成功。
网站确认对应本次操作的新文档已可用,并取得正确的目标链接。
明确拒绝则记录理由;已受理则继续查询;无法确认则保持 unknown。仅列表没有文件不能证明未受理,也不能因此再次选择文件。
处理中状态保留 uploadId / jobId 并按有界频率查询。未知状态先查询;只有网站对同一请求提供经验证的幂等保证,或证明确未受理,才按有效授权有限重试。
新文档 ID / 版本、文件信息、目标目录、文件链接与证据来源。
{"documentId":"doc-new-demo","projectId":"B","fileName":"report.pdf","status":"ready","url":"https://site-a.example/projects/B/documents/doc-new-demo","evidence":"本次回执与文档详情一致"}browser_session_status 查询执行/恢复状态;网站文档 ID 与 ready 状态是另一层业务证据。 [S04]
保存回执、交付结果、清理本次资源。
25—27保存业务回执、文档链接和证据引用;任务状态与外部动作状态分别管理。unknown 不是成功,也不能被任务结束或服务重启抹掉。
可在重连或服务重启后读回同一份业务结果及证据。
网站成功而本地保存失败时先恢复回执,不再上传;保存 unknown 后等待核对或人工确认。
增加到期核对与人工升级策略;没有结果证据时允许结束本轮交互,但保留动作待核记录及责任人。
必须的动作状态、账号与项目、文档 ID / 版本和 URL;可选截图字节与受控引用。
Postgres:actionId、runId、结果状态、文档 ID、URL、证据引用 文件存储:证明截图原字节 unknown:保留操作意图与已知外部证据;等待核对
状态文档仍将 Browser Flow 生产闭环列为未完成;底层回执代码不等于业务恢复已全面验收。 [S13]
必须返回文字结果与正确链接。按需附加单张证明图;若启用可选实时桌面,画面继续走独立 RFB/WebSocket。
用户看到可核实的结果、正确链接与必要的证明,任务终态可读取。
网页失去连接时重新读取 Run 和证据,不重新上传;链接无访问权时提示网站自己的权限要求。
累积回复、文件链接、截图引用;按需读取 PNG / JPEG;另有实时画面。
SSE 文字:
event: partial
data: {"partial":"已将 report.pdf 上传到项目 B 文档区。链接:https://site-a.example/projects/B/documents/doc-new-demo"}
证明图:HTTP GET <受控截图文件引用>
实时桌面:独立 RFB / WebSocket 连接可返回网站链接;Box 本地产物用 SendMessage 显示为附件,或用 CopyFromBox 放到用户磁盘。 [S07]
结束本次输入许可和监听连接,清理临时进程。浏览器资料与用户卷按既定策略保留,停止容器不等于销毁数据。
没有遗留输入权和无主任务资源,业务证据与受保护登录态符合保留策略。
清理失败记录诊断并交由生命周期管理重试;不能误删另一个任务或用户的数据。
用户取消仅停止后续输入,不能自动撤销已发送上传。虚拟机回滚快照也不回滚网站文档;删除或覆盖远端文件属于新的受权操作。
控制权释放、连接关闭、进程退出结果和环境保留策略。
结束:本次控制权、任务监听、临时资源 按策略保留:用户资料、原文件证据、任务回执 stop / keepWarm:按生命周期保留 destroy:可能删除卷,不用于普通任务收尾
Bot 的账户槽、容器和数据卷有独立生命周期;普通收尾不得据此推断可删除用户数据。 [S08]
固定任务目标、允许的操作、文件与执行环境。目标不清楚或授权不足时,先停在准备阶段。
任务目标、环境身份、授权范围
没有用户目标,就没有可推导的输入许可。
取得当前显示的截图,确认目标窗口、焦点、遮挡和坐标空间。视觉链路不可用时不猜测画面。
观察 ID、截图、尺寸、显示身份
用户的 noVNC 画面并不自动进入模型。
把意图收窄为一项明确动作,描述目标与目的;坐标必须来自同一份有效观察。
目标描述、参数、前置观察
不能把网页视口坐标直接当作整个桌面坐标。
按有效政策审查具体参数;发生人工接管、撤权或目标变化时停止。本页的统一跨通道许可属于工程设计。
动作摘要、许可、有效期与作用域
审批绑定具体动作;等待期间页面变化需重新核对。
将结构化参数交给执行资源和 X11 执行器。输入按局部顺序执行;不把一长串盲点动作当作可靠流程。
执行结果、部分完成信息、诊断
本地命令退出成功不等于目标业务成功。
动作后重新观察,检查预期窗口或对象状态。动作可能已执行但截图失败时,效果仍可能未知。
新截图 + 目标应用结果
只证明本示例中的文档打开,不推导“已上传网站”。
以业务证据决定下一步;需要网页工作则重新委派并刷新观察。无法确认效果时保存 unknown,不重放。
结果链接 / 文件 / 待核记录
子代理返回、工具完成与用户收到交付是三个不同事件。
固定任务目标、允许的操作、文件与执行环境。目标不清楚或授权不足时,先停在准备阶段。
没有用户目标,就没有可推导的输入许可。
源码确认
Agent 直接走受控执行资源,不通过 noVNC 画布模拟人的点击。X11 请求在该执行器内部串行,但跨网页、桌面与人工输入的统一控制仍须额外验证。[S02] [S03] [S05] [S06]
网页元素:ref 与快照绑定。
网页视口:相对于页面内容区域。
桌面坐标:相对于截图声明的 API 空间,再由执行器换算。
Computer 工具通常在动作末尾补截图。若点击已执行、截图随后失败,错误不表示“什么都没发生”。先取得新观察,再核对外部效果。
Computer({
action: "click",
x: 640,
y: 420,
button: "left",
count: 1,
description: "打开已选中的 report.pdf"
})
坐标仅用于说明;不能直接用于真实任务。
强制审查模式下 click / drag 需要目标和目的描述。{
"runId": "run-demo",
"environmentId": "box-demo",
"observationId": "obs-demo",
"coordinateSpace": "desktop-api",
"controlOwner": "computerUse",
"actionId": "action-demo",
"effectState": "prepared"
}
这些可信身份应由运行时绑定;
不能让模型自行声明后直接取得权限。区分文件、指令、文字、模型图像和实时桌面。
用户 → 主代理 / Host → 子代理 / 工具 → 结果交付。网页案例采用 JSON 与 SSE;Bot 的协调、转录和消息通道按项目架构处理。
用户电脑或附件存储 → Box 文件目录 → 浏览器 / 原生应用 → 目标业务。文件复制与网站上传是两次不同的边界跨越。
browserUse 使用浏览器驱动;computerUse 使用生成的 Computer 执行协议,经 Box daemon 到 X11。并非所有工具都必须通过 MCP。
网页或桌面截图 → 图像处理 / 持久引用 → Provider 适配器 → 模型。Bot 的 X11 路径生成 WebP;图片须作为真正的图像内容进入模型。
X11 桌面 → VNC → websockify → noVNC。人工输入沿相反方向返回;查看与控制必须分别授权,不能只依赖前端的只读开关。
任务与架构 [S08] 文件 [S07] 自动控制 [S04] [S05] [S06] 模型截图 [S03] 远程画面 [D03] 控制授权设计 [P00]
browserUse → browser_* → 驱动 / Playwright / CDP → Chromium → 网站
文件输入与业务请求不同;不把 CDP 说成 PDF 的网络上传接口。computerUse → Computer → 执行资源 → Box daemon → X11ComputerUseRuntime → 应用
无需先打开 noVNC;执行器直接操作显示环境。用户 → noVNC → 获准连接 → websockify / VNC → X11 → 同一应用
Xvfb 与 VNC 之间是显示访问/画面采集;RFB/TCP 位于 VNC 的服务连接一侧。| 名称 | 说明什么 | 不能推断什么 |
|---|---|---|
| HTTP / HTTPS | 请求与响应;HTTPS 增加 TLS 保护 | 请求里的账号授权与业务成功 |
| JSON / Base64 | 结构化文本格式 / 二进制编码 | Base64 不提供加密,也不是视觉输入 |
| Connect RPC / 生成协议 | Bot 执行服务的接口与消息契约 | 等同于 microvm-agent 的 /exec JSON API |
| CDP / Playwright | 浏览器控制协议 / 自动化库 | 能操作所有操作系统窗口 |
| X11 / xdotool / xclip | 显示环境 / 键鼠 / 剪贴板工具 | 任意 OS 来宾均有相同实现 |
| RFB / WebSocket | 远程桌面消息 / 双向传输承载 | 每帧都会交给模型,或自带所有鉴权 |
| SSE | 网页参考方案的单向事件推送 | 连接断开代表后台任务被取消 |
任务、审批、交付
本机文件与长期凭据
路由、Agent 回合
工具编排与身份绑定
文件、程序、网页
实际桌面动作
账号与项目
业务回执与文档
以上是职责边界,不是四台必须独立部署的机器。Host 是应用运行时角色,本地模式可运行在容器中;不得只按名字将它画到物理宿主机。[S08]
D:\Work\report.pdf由已连接电脑提供文件访问;使用其路径规则和授权。
/workspace/uploads/report.pdf浏览器或原生应用真正读取的文件必须位于可访问的位置。
documentId / version / URL远端文档以网站回执确认,不能用本地文件名替代。
用户授权一个源路径;文件按字节进入指定 Box 路径,再由该环境中的工具读取。无需先把文件拖进聊天。
CopyToBox({
computer_path: "D:\\Work\\report.pdf",
box_path: "/workspace/uploads/report.pdf"
})用户授权一个源路径;文件按字节进入指定 Box 路径,再由该环境中的工具读取。无需先把文件拖进聊天。
CopyToBox({
computer_path: "D:\\Work\\report.pdf",
box_path: "/workspace/uploads/report.pdf"
})核对源电脑、路径访问权、目的目录及返回字节数;需要强完整性保证时补充摘要验证。 [S07]
把 Box 路径交给网页文件控件。选文件可能立即上传,因此先建立监听并固定动作身份。
browser_upload({
ref: "<当前快照中的文件控件 ref>",
sourcePath: "/workspace/uploads/report.pdf"
})Bot 基线要求 driver v3、非空文件且 ≤16 MiB;网站另有自己的类型、大小与权限限制。 [S04]
把产物放到用户实际磁盘,让用户的本地编辑器或应用继续处理。它不是聊天中显示一个下载入口。
CopyFromBox({
box_path: "/workspace/output/receipt.pdf",
computer_path: "D:\\Work\\receipt.pdf"
})确认连接电脑、目标路径、覆盖策略与完整性;传输中断先查询目标副本,不伪称已交付。 [S07]
通过消息交付带出本地产物。正文回复不是文件复制,也不保证用户磁盘已保存副本。
流程示意: Box 产物路径 → SendMessage 附件处理 → 受控附件引用 → 用户打开或保存 具体参数以当前消息工具 schema 为准。
检查附件可访问性与敏感信息;网站文档链接仍服从网站自己的账号权限。 [S07]
先由获准的网页/程序能力把网站文件保存到 Box,再核对副本,最后选择聊天交付或复制回用户电脑。本页没有依据宣称该基线已暴露专用 browser_download 工具;下载位置、完成事件与取消行为需要单独适配和验收。[S04] [S07]
工程要求
源电脑、Box、用户和任务一致,引用不是公开下载权限。
文件名只用于展示;用字节数与适用的摘要校验完整性。
区分 Windows / Linux 路径;明确目录、覆盖和符号链接规则。
复制完成、附件可打开、网站文档 ready 分别确认。
CopyToBox / CopyFromBox 的工具描述面向各类文件,不应被解释为无限大小的运行保证;内存、传输实现、环境限制与重试均需实测。browser_upload 的 16 MiB 则是该工具明确的准入上限。[S07] [S04]
先核对外部效果,再决定是否继续。
新文档 ID / 版本、目标项目与本次操作一致,且业务状态为 ready。恢复已有结果,不重复上传。
已取得 uploadId / jobId,但文档未可用。按有限频率和期限查询原任务,不重新选择文件。
必须是针对本次操作的拒绝证据。只有授权、文件与目标仍有效且重试条件成立,才允许受控的新尝试。
可能已经触发业务效果。查询原回执或请人核对;列表暂时为空、网络断开都不能证明从未受理。
键鼠动作可能已完成,截图或剪贴板恢复随后失败。重新观察和查询,而不是重放整个 Computer 批次。
可能已经触发业务效果。查询原回执或请人核对;列表暂时为空、网络断开都不能证明从未受理。
结果核对原则 [P00] 桌面部分完成 [S03] 浏览器执行状态 [S04]
工程要求
这两个局部机制有源码,但不能凭它们认定 browser_*、Computer 和人工 VNC 输入已共享同一许可、撤权与排空语义。完整人机交接必须做跨通道验收。[S03] [S04]
重新截图或读取快照,确认坐标空间、焦点与目标。旧 ref、旧坐标和旧审批不得静默沿用。
限制截图、DOM、录屏、剪贴板和日志;密码框遮罩不代表其他通道无泄露。无安全认证途径时保持暂停。
停止后续输入,保存已经发生的效果。取消任务不能撤销已提交业务,关闭窗口或回滚 VM 也不能替代网站核对。
页面文字、截图和文档内容是数据,不是用户授权。不得因为“页面要求”而读取密钥、发送额外文件或修改系统边界。
上述为安全与恢复工程要求,不表示该项目已经通过全部隐私、提示注入或跨通道互斥测试。[P00] [S14]
源码、打包、启用和业务验收分别判断。
字段、实现与调用点存在
同一构建装入目标环境
角色、配置与依赖就绪
真实任务与故障测试通过
| 模式 | 本页应如何理解 | 仍须独立核验 |
|---|---|---|
| Cursor | 使用实际账户与已配置服务;按配置连接本地或远端环境。 | 目标 Box 是否提供桌面及本次任务所需工具。 |
| Local-only | 使用独立 local-v1 账户槽和本地 Docker 环境;不等于没有网络。 | 所选 Provider、电脑连接与网站访问权限。 |
| Fully-offline | 只接受获准的回环模型连接,并裁剪 Web、云端等能力;依赖需事先准备。 | 不能以模式名称代替全网隔离审计;访问外部网站不属于离线任务承诺。 |
下面的选项仅保存在当前页面会话,不改变项目配置。复验应绑定同一源码、不可变镜像、Provider、目标网站与运行 ID;不能拿不同候选的成功片段拼成一次通过。
{
"sourceCommit": "<固定源码 SHA>",
"imageDigest": "<不可变镜像 ID>",
"environment": {"os": "<实际系统>", "boxId": "<目标 Box>"},
"provider": "<实际 Provider / 模型 / 图像能力>",
"scenario": "<目标网站或应用 + 账号作用域>",
"runId": "<真实运行编号>",
"expected": "<预期业务结果>",
"observed": "<实际结果与回执>",
"faultCases": ["<断连、取消、部分完成等结果>"],
"evidenceRefs": ["<脱敏证据引用>"],
"verdict": "<通过 / 失败 / 未完成>"
}本页保留文件接收、沙箱准备、网页观察、登录接管、上传与结果交付的六阶段、27 步组织。网页接口、microvm-agent、SSE、Postgres 与控制许可为此参考架构的术语;不是 Negentropy-Bot 当前全部实现的描述。
自主桌面七步、人机统一控制权、验收清单与可信记录字段属于工程设计。它们在页面中标为“工程要求”或“参考规划”;动态场景只作讲解,不产生运行证据。
CopyToBox、CopyFromBox 与聊天附件交付的不同语义。
source/host/runner/tools/sand-file-transfer-tools.tssand_teach_by_demonstration 开关、学习工作流与恢复入口。
source/host/extensions/teach-recording/extension.ts私有显示检查、FFmpeg 录制、保存/丢弃与队列分发。
source/host/extensions/teach-recording/teach-recording-service.ts范围覆盖任务分工、网页与桌面操作、文件流转、认证接管、异常恢复与启用验收。具体操作系统、应用、硬件密钥、下载协议和网站业务都需要其对应的运行证据。正文与交互可离线使用;来源链接需要联网。
先看职责;定义、示例和边界按需展开。
给任务提供隔离的进程、文件与网络环境。Linux 容器与完整虚拟机是不同的后端,不能只凭 microvm-agent 名称判断。
接收 report.pdf 的副本,运行浏览器和网页操作程序,让这些操作与用户自己的桌面浏览器分开。
沙箱是否是容器、完整虚拟机或其他环境,取决于后端;此处的 Linux 参考后端是容器。
用户电脑上的 report.pdf → 助手文件存储 → 沙箱任务目录 → 沙箱中的浏览器。
在网页上传参考架构中提供命令和文件接口的服务。名称不说明环境一定是完整虚拟机。
参考案例中的 /exec、/read、/write;Bot 使用自己的 Box 执行服务。
不是 Negentropy-Bot 当前执行接口的别名。
助手后台 → HTTP 请求 → microvm-agent → 沙箱里的命令或文件操作。 /exec:运行命令 /write:写入文件 /read:读取文件
Docker 是运行和管理容器的工具;Docker Engine 是宿主机上实际创建、启动和停止容器的服务。
按用户启动或复用沙箱,设置容器网络、执行服务入口和持久数据卷。
容器启动成功只是环境准备完成;还要检查浏览器、文件和具体网站操作。
助手后台调用 Docker 命令 → Docker Engine 启动用户的沙箱容器。
用于控制浏览器的软件库,可以按按钮名称、输入框标签和页面结构定位控件,执行导航、填入信息、设置文件和截图。
找到项目 B 的上传控件,把沙箱中 report.pdf 的路径交给浏览器,并观察网站结果。
它发出浏览器操作指令;实际访问网站和发送 PDF 的是浏览器。目标控件和业务成功条件仍要按真实网站确定。
找到“上传文件”输入框 → setInputFiles(filePath) → 浏览器读取 PDF。
一种浏览器及其运行引擎。它加载网页、执行网页脚本、显示页面,并维护网站自己的登录会话。
使用用户的网站 A 账号浏览项目 B,读取所选的本地 PDF,并按网站要求发送上传请求。
用户设备与隔离环境内的浏览器各有登录态;需要人工接管时必须提前准备桌面,不能只给现存无头进程添加一个查看器。
自动模式:Playwright 控制无头 Chromium。可接管模式:启动时选择有窗口 Chromium,自动与人工共用该实例。
一种 X 显示服务,可以在没有实体显示器的环境中提供桌面画面,让有窗口的程序正常绘制。
让沙箱里的 Chromium 有一个可绘制的桌面,供 VNC 读取画面。
它负责显示环境;向用户传画面、处理远程接管还需要 VNC、协议桥接和网页客户端。
Chromium 绘制窗口 → Xvfb 保存显示内容 → VNC 读取桌面。
一类远程桌面系统,用来把一个桌面的画面送到另一端,并接收键盘、鼠标操作。它通常使用 RFB 协议。
从 Xvfb 取出浏览器所在的桌面画面,经内部连接送到协议桥接服务;接管时反向传递输入。
观看画面和控制键鼠需要分开授权;程序运行在沙箱中不代表可以直接开放给所有人。
Xvfb 桌面 ↔ VNC 服务 ↔ RFB / TCP ↔ websockify。
一个双向协议桥接程序:一侧接受网页使用的 WebSocket,另一侧连接桌面服务使用的 TCP。
让 noVNC 能与内部的 VNC 服务通信,转递 RFB 画面和输入消息。
它主要桥接传输;用户身份、沙箱归属和控制许可由桌面授权代理与后台管理。
noVNC → WebSocket → websockify → TCP → VNC;画面按反方向返回。
运行在用户网页中的远程桌面客户端,接收桌面画面并在网页上显示;得到控制权限后还能发送键鼠输入。
让用户直接在助手页面看到沙箱浏览器,在需要登录或验证码时接管同一个浏览器。
它是用户观看和接管的通道。模型是否收到截图,需要另外的图像工具和模型输入链路。
用户打开桌面视窗 → 通过获准连接看画面 → 获得控制许可后输入。
浏览器把页面组织成的一棵结构树,包括文字、链接、按钮、输入框等元素及其属性。程序可以读取这份结构。
让助手知道页面标题、项目名称、上传按钮和文件输入在哪里,减少只靠截图坐标猜测的操作。
DOM 是网页结构,截图是像素画面;读取页面数据时仍要排除密码、令牌等敏感内容。
读取页面结构 → 找到名称为“上传文件”的控件 → 用 Playwright 操作。
Chrome DevTools Protocol,即浏览器开发工具协议。可以发送读取页面、执行操作和截图等指令。
本例通过 CDP 管理受管 Chromium。无头模式用于自动处理;有窗口模式中,人工与自动对应同一浏览器和会话。
本例的连接选型,不是所有自动化的必需组件。connectOverCDP 仅支持 Chromium 系,能力保真度低于 Playwright 原生协议,需验证版本与启动参数。
Playwright → CDP 的 JSON 指令 → Chromium;本方案在沙箱内用 WebSocket 承载。
网页与服务之间常用的请求、响应协议。请求说明要读什么或执行什么,响应返回状态和数据。
聊天页向助手上传文件、提交任务;助手后台向沙箱执行服务发出执行和文件读写请求。
HTTP 是通信规则;JSON、PDF 或图片是内容格式;实际身份校验由对应接口实现。
POST /api/turn:提交任务。 POST /write:把文件写入沙箱。
在 HTTP 外增加 TLS 保护,校验服务端身份并加密传输中的数据。浏览器地址通常以 https:// 开头。
沙箱浏览器通过网站自己的 HTTPS 连接加载页面、登录和上传 PDF。
是否使用 HTTPS 要逐段看:网站连接使用 HTTPS,不会自动使助手入口的 HTTP 连接也被加密。
沙箱 Chromium → https://site-a.example/ → 网站页面与上传服务。
传输层安全协议,用加密和证书验证保护连接。HTTPS、wss 通常依靠它。
让网站登录、文件上传,以及采用 wss 的远程桌面连接在传输中得到保护。
传输加密保护连接;账号权限、操作授权和持久存储仍需要各自的检查。
HTTPS = HTTP + TLS;wss = 受 TLS 保护的 WebSocket。
网页与服务建立后可持续互相发送消息的一种连接方式,适合即时指令和连续画面消息。
沙箱内承载 CDP 浏览器指令;用户到桌面代理的连接承载 RFB 画面与键鼠消息。
WebSocket 只说明消息怎么运送;CDP 和 RFB 分别规定消息的意义,不能把两者混成同一套操作协议。
ws://:普通 WebSocket。 wss://:通过 TLS 保护的 WebSocket。
Remote Framebuffer,远程帧缓冲协议。它描述桌面哪些区域变化、如何传画面,以及如何表示键盘、鼠标输入。
把 Xvfb 桌面上的 Chromium 画面送到 noVNC;接管时把用户输入送回桌面。
RFB 画面供用户看;模型推理通常读取按需截取的单张图片,这两条路径分别处理。
容器内:RFB / TCP。 网页侧:RFB / WebSocket。
一种基础网络传输协议,为两端提供有序的字节流。上层服务在这条连接中组织自己的消息。
本方案中 VNC 与 websockify 在容器内部通过 TCP 传递 RFB 消息。
TCP 本身不说明业务操作,也不自动提供 TLS 加密。
TCP 负责字节流;RFB 负责说明这些字节表示画面还是输入。
Server-Sent Events,服务端发送事件。网页保持一条 HTTP 连接,服务端陆续写入文字事件。
向聊天页面推送任务活动、逐步生成的回复和任务结束信息。
本方案用 SSE 传文字和文件引用;连续桌面用独立 RFB / WebSocket。连接断开时仍要查询后台任务状态。
event: partial
data: {"partial":"正在核实网站上传结果…"}浏览器提供的接口,用于建立 SSE 连接并接收服务端文字事件。
聊天页面可订阅某个 Run 的事件端点;SSE 不可用时按设计回退查询。
它管理显示连接;后台任务能否继续、已经执行到哪里,要以持久任务记录为准。
网页打开 /api/runs/<runId>/events → EventSource 接收任务文字事件。
操作系统为本机进程之间提供的一种通信方式,常以文件路径标识入口,不需要公开网络端口。
Docker 命令通过宿主机的 /var/run/docker.sock 连接 Docker Engine。
访问 Docker 的这个入口意味着能管理容器,权限由宿主机控制;它与网站 HTTP 请求是不同通道。
Docker CLI → unix:///var/run/docker.sock → Docker Engine。
Application Programming Interface。程序按约定的地址、方法和参数请求操作,接收约定的结果。
助手文件上传、任务提交、沙箱执行和模型调用分别有自己的 API。
API 不一定通过 HTTP,也可以是本地函数、进程或库接口;要看具体实现。
/api/blobs:接收文件。 /api/turn:接收任务。 /exec:在沙箱运行受控命令。
用键值、列表、数字和字符串描述数据的文本格式,便于程序按字段读取。
描述任务、文件元信息、工具参数、执行结果和进度事件中的 data 内容。
JSON 是数据格式。它可以通过 HTTP、WebSocket 或程序输出传递;JSON 本身不提供加密。
{"name":"report.pdf","size":123456,"blobId":"blob-demo"}一种文字编码,使中文、英文和其他字符都能以确定的字节序列保存或传输。
编码任务说明、JSON 和 SSE 文字,保证中文名称及回复能被正确解码。
它用于文字编码;PDF、PNG 等二进制文件应按原始字节处理。
“项目 B”这段文字 → UTF-8 字节 → 网络传输 → 还原同一段文字。
一种编码方式,把 PDF 或图片等二进制内容转换为可放入 JSON 字符串的文本。接收端解码后还原原字节。
此处的沙箱文件接口示例通过 b64 字段写入 PDF 或读取截图。
Base64 是编码,不是加密。把它放入普通聊天文字也不会自动成为模型的图像输入。
{"path":"<沙箱路径>","b64":"<文件编码后的文字>"}
接收端解码 → 还原文件。根据文件字节计算出固定长度摘要的一种算法。原文件与副本使用同一算法计算,可以核对内容是否一致。
在网页上传及沙箱副本校验中,确认最终选择的 PDF 对应用户上传的原文件。
摘要不能替代账号、目标项目与操作授权;同名文件也可能有不同摘要。
原文件的 SHA-256 = 沙箱副本的 SHA-256 → 作为字节一致的校验证据。
直接保存和发送文件的字节内容,不把它转换成聊天文字或改写文件格式。
网页上传 PDF 到助手时,HTTP 请求体可以直接使用这些字节。
原字节说明发送的内容;接口仍需校验大小、摘要和当前用户访问权限。
Content-Type: application/octet-stream 请求体:report.pdf 原字节。
告诉程序内容是什么类型的标记,例如 application/pdf 表示 PDF,image/png 表示 PNG 图片。HTTP 的 Content-Type 常使用它。
帮助接口识别附件类型、选择图片处理路径,并按网站要求提交内容。
类型标记和文件名可以用于处理,但验证内容还需要实际字节与相关检查。
PDF:application/pdf 截图:image/png 或 image/jpeg 未指定具体类型的字节:application/octet-stream。
一种 HTTP 请求体格式,把文件字节、项目参数等内容分成多个部分,每部分都有自己的名称和类型。
网站 A 可能使用这种格式接收 report.pdf 以及它所属的项目或目录参数。
网站也可能采用原始字节直传或分块上传;助手需要观察该网站真正使用的协议。
同一请求里:文件字段 = report.pdf;项目字段 = B。具体字段名称由网站规定。
一种常用文档格式,保存页面、文字、图像和版式。本任务中的 report.pdf 是用户希望上传的原文档。
作为文件经过助手存储、沙箱文件目录,再由沙箱浏览器发给网站。
传文件不等于模型必须先阅读或提取整个文档;本任务的重点是把正确文件上传到正确位置。
report.pdf 始终按文件字节传递;任务文字只引用它的名称、编号与路径。
用于保存某一时刻页面或桌面像素的静态图像格式。
网页截图格式按工具选择;Bot X11 执行器生成 WebP。
图片进入普通文本不等于模型取得视觉输入;RFB 连续画面是另一条通道。
截图 → 保存 PNG → 文件通道回传 → 视觉模型收到真正的图像内容。
关系型数据库的一种选型。此案例用它解释任务元数据与持久文件分开存储。
保存 Run、动作状态与证据引用的参考方案。
不据参考选型断言 Bot 实际使用 Postgres。
任务 ID、文件摘要、文档 ID、结果状态 → 数据库;PDF 和截图字节 → 文件存储。
一种对象存储服务及常用兼容接口,用对象键保存和读取文件,而不必让每个运行实例各自保存一份。
采用对象存储的部署可以用它保存附件和截图;本地部署也可以使用宿主机的持久文件目录。
使用哪种文件存储取决于部署配置;这张流程图不代表当前已经启用 S3。
blob / 文件引用 → 对象键 → 对应的 PDF 或截图字节。
Docker 管理或挂载的文件空间,用来让需要保留的数据与容器进程的生命周期分开。
存放用户工作目录和需要保留的浏览器资料;复用沙箱时仍可读取这些内容。
正常停止与销毁是不同操作;销毁可能删除卷,保留与清理必须遵循用户作用域和策略。
容器停止 → 用户卷保留 → 后续获准任务重新挂载。
网站让浏览器保存的一小段数据,常用于标识登录会话。浏览器按域名、路径及相关规则决定是否携带。
网站 A 的登录 Cookie 由沙箱浏览器管理,用于后续访问项目和上传文件。
助手登录、网站登录、用户本机浏览器与沙箱浏览器各自有会话;Cookie 属于敏感登录资料。
在沙箱浏览器登录网站 A → 后续网站请求携带该网站自己的 Cookie。
Playwright 中的 browser context,用来划分浏览器会话空间,包括 Cookie 和相关存储。其内可以有多个页面。
自动操作与人工接管必须使用同一受管上下文,才能继续使用同一个网站账号的登录态。
另建空 context 通常不会带上原上下文的登录信息;这里的上下文指浏览器会话,不是模型的聊天上下文。
同一 Chromium → 同一 context → 登录页面和项目 B 页面。
Multi-Factor Authentication,多因素认证。网站除了密码,还可能要求验证器验证码、安全密钥或其他证明。
网站 A 要求额外验证时暂停自动操作,让用户在同一沙箱浏览器中完成。
认证完成仍需确认账号和项目权限,并把人工控制权交还后再恢复自动输入。
输入账号密码 → 网站要求验证码 → 用户接管输入 → 核实正确账号并继续。
Cross-Site Request Forgery,跨站请求伪造。网站常用专用令牌或来源校验,确认带登录状态的请求来自获准流程。
浏览器按网站脚本和表单正常上传,携带网站要求的会话与验证参数。
助手登录凭证不能替代网站的 CSRF 检查,访问被拒绝时要诊断对应站点与请求。
上传表单中可能有隐藏的验证字段;浏览器按网站流程提交它们。
服务端判断谁可以向执行环境发送输入的授权。
参考规划要求自动操作与人工接管受同一控制边界约束。
这是工程要求;某一个执行器的内部串行不能证明所有输入来源已经互斥。
自动输入暂停 → 用户获得接管许可 → 用户完成登录 → 输入排空并释放 → 自动恢复。
Playwright 的元素定位器,按角色、标签、文字或选择条件定位网页元素。
在项目 B 文档区找到唯一的上传控件,检查它是否能操作,然后执行文件设置或点击。
同名按钮可能有多个;需要结合项目和区域限定。定位超时也不能直接推断外部操作没有发生。
page.getByRole("button", { name: "上传文件", exact: true })Playwright 设置网页 input[type=file] 内容的方法。传入沙箱内的文件路径,浏览器读取对应文件。
把已核对的 report.pdf 选进网站上传控件,通常省去操作系统文件对话框。
部分网站在设置文件后立刻上传,所以必须先准备监听;这个动作本身不能证明网站上传成功。
await page.getByLabel("上传文件").setInputFiles(filePath);filechooser 是浏览器发出的文件选择事件;取得选择器后,Playwright 用 setFiles 把指定文件放进去。
处理只有点击“选择文件”之后才出现输入控件的网站。
监听必须先于点击,避免漏掉事件;上传可能紧接着文件选择发生。
先监听 filechooser → 点击“选择文件” → 取得选择器 → setFiles(filePath)。
浏览器提供的文件列表对象,包含当前输入控件选中的文件及其名称、大小等信息。
检查网站输入控件里选中了正确的 report.pdf,而不是另一个文件。
选中正确文件只证明本地准备完成;业务成功要看网站回执。
读取 FileList → 核对文件名与大小 → 按网站要求提交或等待自动上传。
助手后台与模型供应商通信的接口。模型根据任务、页面信息和工具结果返回回复或下一步工具调用。
分析 DOM 文字,必要时分析截图,再决定浏览器下一步该做什么。
模型给出建议或调用参数;真实文件读写、网页操作和网站上传由具体执行组件完成。
页面信息 → 模型服务 → 下一步工具参数 → 后台检查授权并执行。
多模态模型可以处理文字以外的内容;这里需要的是接收图片并理解页面画面的视觉能力。
当 DOM 不足以判断页面时,助手将单张截图作为真正的图像内容交给支持视觉的模型。
实际选择的模型是否支持图片需要检查;普通工具文字中的 Base64 不会自动变成图像输入。
截图 PNG → 文件回传 → 模型适配器生成图像内容块 → 支持视觉的模型。
stdin 是程序输入通道,stdout 是常规输出通道,stderr 是错误与诊断输出通道。它们是进程之间的字节流。
沙箱程序接收参数并输出结构化结果;执行服务返回 stdout、stderr、退出码和超时信息。
退出码和程序输出不是网站业务回执。此处 /exec 示例收集完成后的 stdout / stderr;实际项目是否支持流式返回,须检查接口实现。
Playwright 脚本输出 JSON → 执行服务收集 stdout → HTTP 执行结果返回后台。
Input / Output 的缩写,泛指程序读取或写出数据,例如读文件、写文件、发送网络请求或收集程序输出。
网页读取 PDF,助手保存文件,沙箱写入副本,浏览器读取选中的文件。
I/O 是操作类别,不是一种网络协议;本地文件读取通常不需要 HTTP。
读文件 → 计算摘要 → 写入另一个受控目录。
blob 指一段二进制数据;blobId 是助手文件接口返回的引用,用来指向已上传的那份文件。
先保存 PDF,再在任务 JSON 中引用 blobId,避免每个步骤都重新传整份文件。
引用编号不是公开下载授权,读取文件仍要校验用户访问权。
附件:{"name":"report.pdf","blobId":"blob-demo"}任务登记的文件产物及元数据,例如入箱附件、截图或执行生成的文件。产物引用把文件与用户、任务和证据关联起来。
记录沙箱中的 PDF 对应哪个原文件;保存结果截图的受控引用,便于之后查看。
产物元数据和文件原字节都要有合适的持久存储,单独一个路径字符串不能保证文件还在。
原 blobId + 沙箱路径 + 文件摘要 + 所属任务 → 文件产物记录。
Run 是助手接受任务后建立的执行记录,runId 是它的追踪编号。页面用同一个编号查询进度和最终结果。
把用户提交、后台执行、SSE 进度和重连查询关联到同一次任务。
网页连接和后台任务是不同生命周期;页面重连后应查询原 Run,而不是再创建一次网站上传。
/api/runs/<runId>/events 订阅这一任务的进度。
由客户端为一次任务提交生成并重复使用的标识,用于把网络重试与原消息关联。
提交响应丢失时,帮助准入流程识别这是同一次消息,而不是用户又发了一次新上传任务。
消息准入去重与网站上传去重是两个问题;外部操作仍需要回执、动作身份和未知效果核对。
首次提交和网络重试都使用 {"clientTurnId":"turn-demo"}。把需要恢复的内容保存到数据库或持久文件空间,避免只存在于某个进程的变量或缓存中。
保存任务、文件、上传意图、业务回执和 unknown 状态,使重连或重启后能查询事实。
缓存可以加速读取;任务依赖的唯一证据必须能从持久存储恢复。
服务重启 → 重新读取任务记录和证据 → 从原状态恢复。
网站返回或可查询的业务结果,能说明哪份文档、哪个项目、哪个版本对应这次操作。
核实项目 B 中出现了本次上传的新文档或新版本,并取得正确文件链接。
HTTP 200、进度 100% 或同名旧文件都不足以单独证明业务成功。
新文档 ID + 项目 B + 文件信息 + ready 状态 → 与本次动作关联的成功证据。
操作可能已经送出,但没有足够证据判断网站是成功、拒绝还是仍在处理。这是一种需要核对的持久状态。
上传超时或回执丢失时,保存已有事实并查询网站,避免重复上传同一个文件。
先查询和对账,不盲目重放。若网站确有适用于同一请求的幂等保证,或有证据证明未受理,且授权仍有效,可按约定有限重试。
提交后断网 → 保存 unknown → 查询本次文档 / 回执 → 确认后再报告结果。
同一操作身份被重复提交时,接收方按协议复用已有结果或去重,避免创建多份文档。常通过幂等键关联请求。
网站支持时用同一操作键核对或重试;助手自身也要保存动作身份,区分恢复查询与新提交。
每个网站的支持情况需要验证;助手本地生成一个编号,不会自动让外部网站具备幂等能力。
同一幂等键 → 网站识别原请求 → 返回同一个业务结果。
表示某次任务不再继续执行的状态,例如完成或明确失败;它与页面连接是否在线分别判断。
聊天页面读取终态和已保存的结果,决定展示完成、失败或需要进一步核对的事实。
后台任务结束不能覆盖外部上传尚不确定的事实;结果说明仍应如实保留 unknown。
任务活动 → 等待回执 → 保存结果 → 结束任务并交接链接。
连接助手与工具服务的接口规范;图片能力取决于工具结果与模型适配链路。
可以提供业务连接器,与网页、桌面和文件工具协作。
不是 Computer 的必经中转,也不代表所有 Provider 已完成图像输入验收。
模型请求工具 → 助手调用 MCP 工具服务 → 执行工具 → 返回结果。
Command-Line Interface,命令行接口。使用文字命令和参数启动程序并读取输出。
助手后台调用 Docker CLI 管理容器,沙箱也可以启动受控命令行程序。
CLI 是程序使用方式,不是网络协议;它执行什么、通过什么连接访问服务,要看具体命令。
运行一条受控 Docker 命令 → 管理容器 → 读取退出码与输出。
HyperText Markup Language,用标题、段落、按钮、表单等标签描述网页内容和结构。浏览器读取它,再构建页面。
网站 A 的页面从 HTML 开始加载;本说明也作为一个独立 HTML 文件保存。
HTML 负责结构;网页外观由 CSS 描述,交互行为通常由 JavaScript 执行。
网站返回 HTML → 浏览器构建页面 → 程序读取 DOM 并找到上传控件。
Cascading Style Sheets,用来规定网页元素的位置、大小、颜色、字体和响应不同屏幕宽度的显示方式。
让网站页面和本流程说明按设计显示;浏览器将样式应用到页面内容。
样式说明元素怎样显示;是否能点击、上传是否成功还需检查实际控件和网站业务结果。
HTML 的上传按钮 + CSS 样式 → 浏览器中可见的按钮。
浏览器可以运行的一种编程语言,常用来响应点击、读写网页状态并向网站发送请求。JS 是它的常见缩写。
网站用脚本处理文件选择、触发上传和显示进度;本 HTML 也用脚本实现步骤切换与名词解释。
网站脚本的具体行为要观察确认,尤其是选择文件后是否自动上传。
选择文件 → 网站 JavaScript 读取事件 → 浏览器发送上传请求。
浏览器加载页面、执行脚本并可截图,只是不显示可供人接管的窗口。
网页参考方案可选;不等于任意 Bot 环境都开放该模式。
Bot 该基线的 browser_* 装配要求 remoteBoxHasDesktop;有窗口切换应另做会话恢复验收。
无头 Chromium → 读取 DOM → 设置 report.pdf → 网站 HTTPS 上传。 按需截图也可以在无头模式中完成。
由窗口、控件、画面和键鼠操作组成的界面。
可供 Agent 自主桌面操作,也可供人查看和接管。
自主操作与人类查看器不是同一条执行通道。
Chromium 窗口 → Xvfb → VNC / 桥接 → noVNC 网页视窗;获准输入按反向路径返回。
Box 执行服务使用生成消息与 RPC 端点承载控制和执行。
传送文件、Shell 与 Computer 等请求和结果。
不是网页参考方案的 microvm-agent HTTP JSON 接口。
按开关和环境条件录制桌面并分发给 learn-from-demonstration。
形成视频、元数据与有签名的待处理队列。
要求私有 fork 显示、FFmpeg 与学习工作流;录制成功不等于回放成功。
没有匹配名词。更换关键词或类别。