Loading...
Loading...
Compare original and translation side by side
browser-control servebrowser-control execute 'return { url: page.url(), title: await page.title() }'browser-control doctorstatusdoctorbrowser-control relay restartbrowser-control doctor
browser-control status --jsondoctorbrowser-control servebrowser-control execute 'return { url: page.url(), title: await page.title() }'browser-control doctorstatusdoctorbrowser-control relay restartbrowser-control doctor
browser-control status --jsondoctor--session <id>BROWSER_CONTROL_SESSIONbrowser-control execute 'return page.url()'
browser-control execute --session cosmic-otter-866 'return page.url()'sessionsession_newbrowser-control execute --target-url github.com 'return page.url()'
browser-control session adopt --target-url github.com --session githubtargetUrltargetIndexstatusdoctor--session <id>BROWSER_CONTROL_SESSIONbrowser-control execute 'return page.url()'
browser-control execute --session cosmic-otter-866 'return page.url()'sessionsession_newbrowser-control execute --target-url github.com 'return page.url()'
browser-control session adopt --target-url github.com --session githubtargetUrltargetIndexstatusdoctorreturn await snapshot()await ref("e12").click()
await page.getByRole("heading", { name: "Settings" }).waitFor()
if (!page.url().includes("/settings")) {
throw new Error(`Unexpected destination: ${page.url()}`)
}
return { url: page.url(), heading: await page.getByRole("heading").first().innerText() }locator.fill()inputtextareaawait fillInput(page.getByPlaceholder("Username"), "standard_user")return await snapshot()await ref("e12").click()
await page.getByRole("heading", { name: "Settings" }).waitFor()
if (!page.url().includes("/settings")) {
throw new Error(`Unexpected destination: ${page.url()}`)
}
return { url: page.url(), heading: await page.getByRole("heading").first().innerText() }locator.fill()inputtextareaawait fillInput(page.getByPlaceholder("Username"), "standard_user")statebrowser-control session list
browser-control session reset github
browser-control session delete github~/.browser-control/sessions/<id>/journal.jsonlbrowser-control journal --session github --limit 50statebrowser-control session list
browser-control session reset github
browser-control session delete github~/.browser-control/sessions/<id>/journal.jsonlbrowser-control journal --session github --limit 50handoffstartawait handoff("Complete the security-key prompt, then continue", {
timeoutMs: 600_000,
start: () => page
.getByRole("button", { name: /passkey|security key|sign in/i })
.click({ timeout: 600_000 }),
})
await page.waitForURL((url) => !url.pathname.startsWith("/login"))
await page.getByRole("heading", { name: /account|dashboard/i }).waitFor()
return { authenticatedUrl: page.url(), title: await page.title() }{ page: otherPage }handoffhandoff(message)starthandoffstartawait handoff("完成安全密钥提示后继续", {
timeoutMs: 600_000,
start: () => page
.getByRole("button", { name: /passkey|security key|sign in/i })
.click({ timeout: 600_000 }),
})
await page.waitForURL((url) => !url.pathname.startsWith("/login"))
await page.getByRole("heading", { name: /account|dashboard/i }).waitFor()
return { authenticatedUrl: page.url(), title: await page.title() }{ page: otherPage }handoffhandoff(message)starttarget/cross-extension-pagehandofftarget/cross-extension-pagehandoffsnapshot()ref("e12")snapshot({ diff: true })ariaSnapshot(target?, { timeout })screenshotWithLabels({ page, path? })return await snapshot({ within: "main", maxItems: 200 })
// When layout matters, return the image through MCP so it can be inspected.
return await screenshotWithLabels({ page })"ok"snapshot()ref("e12")snapshot({ diff: true })ariaSnapshot(target?, { timeout })screenshotWithLabels({ page, path? })return await snapshot({ within: "main", maxItems: 200 })
// 当布局重要时,通过MCP返回图像以便检查。
return await screenshotWithLabels({ page })"ok"pagecontextbrowserstatemodulesfspathreturn--filebrowser-control execute --session github --file ./perform-flow.js--jsonokvalueerrorwarningsaftermathbrowser-control execute --json --session github '({ url: page.url() })' | jq .value.urlchrome.debuggerfspage.waitForEvent("download")pagecontextbrowserstatemodulesfspathreturn--filebrowser-control execute --session github --file ./perform-flow.jsokvalueerrorwarningsaftermath--jsonbrowser-control execute --json --session github '({ url: page.url() })' | jq .value.urlchrome.debuggerfspage.waitForEvent("download")browser-control session new inspect-prod --read-only
browser-control execute --session inspect-prod 'await page.goto("https://example.com"); return page.title()'Input.*page.evaluatebrowser-control session new inspect-prod --read-only
browser-control execute --session inspect-prod 'await page.goto("https://example.com"); return page.title()'Input.*page.evaluateBrowserControlClientsensitive: trueRedactedimport { BrowserControlClient } from "@opencode-ai/browser-control"
const sensitive = yield* origin.json({
path: "/api/session",
method: "POST",
body: {},
response: SessionResponse,
sensitive: true,
})
const session = BrowserControlClient.reveal(sensitive)BrowserControlClientsensitive: trueRedactedimport { BrowserControlClient } from "@opencode-ai/browser-control"
const sensitive = yield* origin.json({
path: "/api/session",
method: "POST",
body: {},
response: SessionResponse,
sensitive: true,
})
const session = BrowserControlClient.reveal(sensitive)browser-control network start --session github --url /api/ \
--resource-type fetch --resource-type xhr
browser-control execute --session github --file ./perform-flow.js
browser-control network status --session github
browser-control network stop --session github \
--output ./github.har --secrets github${BC_SECRET_1}--secrets github0600browser-control secrets status github
browser-control secrets run github -- ./github-cli repositoriesimport { SecretProfile } from "@opencode-ai/browser-control"
import { Effect } from "effect"
const result = await Effect.runPromise(SecretProfile.run({
name: "github",
command: process.execPath,
args: ["./github-cli.js", "repositories"],
}))BC_SECRET_Nbrowser-control secrets refresh github --session github --url /api/network_*secrets_*browser-control network start --session github --url /api/ \
--resource-type fetch --resource-type xhr
browser-control execute --session github --file ./perform-flow.js
browser-control network status --session github
browser-control network stop --session github \
--output ./github.har --secrets github${BC_SECRET_1}--secrets github0600browser-control secrets status github
browser-control secrets run github -- ./github-cli repositoriesimport { SecretProfile } from "@opencode-ai/browser-control"
import { Effect } from "effect"
const result = await Effect.runPromise(SecretProfile.run({
name: "github",
command: process.execPath,
args: ["./github-cli.js", "repositories"],
}))BC_SECRET_Nbrowser-control secrets refresh github --session github --url /api/network_*secrets_*browser-control recording start ./tmp/demo.mp4 --session github --mode cdp
browser-control recording status --session github
browser-control recording stop --session github--mode autoffmpeg--helpbrowser-control recording start ./tmp/demo.mp4 --session github --mode cdp
browser-control recording status --session github
browser-control recording stop --session github--mode autoffmpeg--helpbrowser-control doctorstatus --jsonconnected:falsedoctorbrowser-control relay restart~/.browser-control/relays/<port>/lifecycle.jsonlruntime:prepareruntime:selectTarget not foundstatefillInputfsgetBoundingClientRect()page.mouse.move()chrome.debuggerBROWSER_CONTROL_DEBUG=1browser-controlbrowser-control doctorstatus --jsonconnected:falsedoctorbrowser-control relay restart~/.browser-control/relays/<port>/lifecycle.jsonlruntime:prepareruntime:selectTarget not foundstatefillInputfsgetBoundingClientRect()page.mouse.move()chrome.debuggerBROWSER_CONTROL_DEBUG=1browser-control