@ agentproto/ 司机浏览器
浏览器提供者工具包. 它给每个浏览器后端( 一个隐形的 Firefox) 在 REST 后方, Playwright 管理的 Chromium, 系统 Chrome, 主机浏览器 一个形状,所以一个主机可以 列表,发射,附加和门 同样的方式.
Spec: BROWSER AIP(职称) BROWSER.md, (中文(简体) ), agentbrowser/v1页:1
活性剂/活性剂#53。 。 。 .
AIP号码是临时的,直到编辑指定为止.
盒子里装的是什么
| 块 | 这是什么 |
|---|---|
defineBrowser | 验证一个清单( zod)并返回被冻结的 BrowserProvider。在 createDoctype一样 defineDriver纯粹的建筑,没有I/O. |
BrowserProvider | 显示字段外加 launch(opts, ctx)中,一个同位素保证返回 a BrowserInstance。 。 。 . |
BrowserInstance | id, (中文(简体) ), endpoints {rest?, cdp?}, (中文(简体) ), pid?, (中文(简体) ), wasAlreadyRunning, (中文(简体) ), health(), (中文(简体) ), attach(opts), (中文(简体) ), stop()。 。 。 . |
BrowserDriver | 页面和标签控制端口(navigate, valice, 点击, 填充, 截图, 网络, 生 CDP), 其选项和结果形状有zod schemas. |
BrowserCapabilities | 页面级别旗帜( N)canFullPageScreenshot,.)和进程级旗帜(stealth, (中文(简体) ), headless, (中文(简体) ), cdp, (中文(简体) ), downloads, (中文(简体) ), recording(中文(简体) ). 所有默认关闭. |
createBrowserRegistry | 注册、查询和列出提供者。 重复的ID抛出. |
makeBrowserProviderLister | 一个标准 @agentproto/provider-kit 列表在注册处. |
assertCapability, (中文(简体) ), BrowserUnsupportedError | 能力门. |
定义提供者
import { defineBrowser } from "@agentproto/driver-browser"
export const camofox = defineBrowser({
id: "camofox",
name: "Camoufox (stealth Firefox)",
description: "Stealth Firefox behind a local REST service.",
version: "1.0.0",
transport: "http", // sdk | http | cli
location: "local", // local | remote (remote = a third party sees session data)
capabilities: { stealth: true, downloads: true, headless: true, persistentProfile: true },
async launch(opts, ctx) {
// Return the running instance if one is healthy: wasAlreadyRunning: true.
// Otherwise start one.
},
})
能力门
需要提供商缺乏的能力的呼叫会因打出错误而失败, 非不透明运输故障 :
import { assertToolSupported, isBrowserUnsupportedError } from "@agentproto/driver-browser"
try {
assertToolSupported(provider.capabilities, "browser.list_requests", provider.id)
} catch (err) {
if (isBrowserUnsupportedError(err)) {
err.code // "browser:unsupported" (stable)
err.capability // "cdp"
err.message // '"browser.list_requests" needs the "cdp" capability, which is not supported on provider "camofox"'
}
}
BrowserUnsupportedError 扩展 AIP-14 ToolError这样 toToolResult
设置 code 财务报告和审定财务报表 cause: { capability } 输入标准信封.
卫生
BrowserInstance.health() 返回时 { ok, reason?, lifecycle? }。 。 。 . lifecycle
包含监管主机从服务读取的字段 /health,所有数据
可选( 服务器报告) null 以它尚未确定的地方发誓 bootId, (中文(简体) ),
startedAt, (中文(简体) ), browserState (单位:千美元)launching | running | idle | crash-looping, (中文(简体) ),
launchedAt, (中文(简体) ), lastLaunchMs, (中文(简体) ), lastRestartReason。 。 。 .
主管
createBrowserSupervisor 在健康环下经营一个供应商。 时间和
进程访问被注入( e)clock, (中文(简体) ), orphanSweep.listProcesses/kill),这样
测试不需要真正的睡眠或过程.
import { createBrowserSupervisor, browserInstanceMarker } from "@agentproto/driver-browser"
const supervisor = createBrowserSupervisor({
provider,
launchOptions: { label: "work" },
healthIntervalMs: 10_000,
launchBudgetMs: 120_000, // a slow launch inside the budget is not a failure
crashLoop: { maxFailures: 3, windowMs: 300_000 },
orphanSweep: { marker: browserInstanceMarker("work") },
onBackendRestart: ({ previousBootId, bootId }) => {},
})
await supervisor.start()
- 发射-发射探测器.
maxFailures失败windowMs(发射完毕)launchBudgetMs将状态翻转为crash-looping不再试图发射,由start()或由 健康循环,直到明确restart(),它清除了计数器. - 健康环. 读取
BrowserInstance.health()更改bootId表示 后端重新启动并起火onBackendRestart。 。 。 .browserState: "crash-looping"(即使是在503与ok: false)是国家,主管 报告,不是"下":重启是没有帮助的.launching不是一个 失败。 一个平地ok: false页:1unhealthyThreshold连续探测器 引发重启. - 孤儿扫地.
sweepOrphans仅指向命令的进程 携带精确的标记符 (--agentproto-browser=<key>),从a 已注入进程列表 。 它从不按进程名匹配,也从不信号 目前的进程。 发射时将标记传递到浏览器的 argv. KeepAlivePolicy。 。 。 . 烂摊子的收割者政策 页:1keepAlive和闲置的浏览器下拉闸 (单位:千美元)shouldShutdownIdleBrowser在任何保留Alive会话时拒绝 已存在.
合规包
import { createFakeBrowserProvider, runConformance } from "@agentproto/driver-browser"
const { provider } = createFakeBrowserProvider()
const report = await runConformance(provider, { levels: ["core", "interaction", "network"] })
report.ok // false if any check failed
report.failed // ["core/launch-idempotent", ...]
级别 : core (明显,例状,一能发射,健康,
导航,同位素站,远程提供者报告没有本地的pid),
interaction (评价、DOM、截图、点击/填写固定图),
network (需求数) cdp, (中文(简体) ), download (需求数) downloads和 profile (需求数)
persistentProfile) (中文(简体) ). 提供者不声明其能力的级别
报告为 skipped 输入 browser:unsupported,从来没有作为一个
失败 network 级别仍然检查缺失的能力失败
与 browser:unsupported 而不是一个不透明的错误。 这个 download 职等
只检查申报的能力是否与工具门一致
现在, 因为驱动端口没有下载动词; 添加提供者检查
extraChecks。 。 。 .
对于 location: "remote" 供应商通过 launch: { baseUrl }装具船
startFakeRemoteBrowserServer() (当地http,随机端口)和
createFakeRemoteBrowserProvider() 因此,可以进行远程合规
没有第三方. createFakeBrowserProvider({ faults }) 正在建设
故意被破坏的变体.
范围
这套包装有模型、主管和符合要求的套装. 混凝土提供者和运行时工具接线在其它包中直播.
许可证: Apache -2.0.