Skip to content

feat(providers): add Steel cloud browser provider#1302

Open
nibzard wants to merge 2 commits into
vercel-labs:mainfrom
nibzard:feat/steel-provider-native
Open

feat(providers): add Steel cloud browser provider#1302
nibzard wants to merge 2 commits into
vercel-labs:mainfrom
nibzard:feat/steel-provider-native

Conversation

@nibzard
Copy link
Copy Markdown

@nibzard nibzard commented Apr 28, 2026

Summary

  • Adds Steel (https://steel.dev) as a native cloud browser provider, selectable via -p steel or AGENT_BROWSER_PROVIDER=steel.
  • New connect_steel() in cli/src/native/providers.rs mirrors the Browserless/Kernel pattern: reads STEEL_* env vars, POSTs to api.steel.dev/v1/sessions, returns the CDP WS URL with apiKey appended.
  • Cleanup arm in close_provider_session() POSTs to /v1/sessions/{id}/release on connect failure (best-effort, mirrors Kernel).

Env vars

Name Required Description
STEEL_API_KEY yes Steel API key
STEEL_TIMEOUT_MS no Session timeout in ms (positive int)
STEEL_HEADLESS no Run headless (true/false/1/0)
STEEL_SOLVE_CAPTCHA no Auto-solve captchas
STEEL_USE_PROXY no Route through Steel proxy
STEEL_PROXY_URL no Custom proxy URL
STEEL_REGION no Region hint
STEEL_BLOCK_ADS no Block ads
STEEL_PROFILE_ID no Persistent profile UUID
STEEL_PERSIST_PROFILE no Persist profile across runs
STEEL_DEVICE no `desktop` or `mobile`

Context

Reimplementation of #532 against the post-8e43469 ("full native") provider system. The original PR targeted src/browser.ts which no longer exists; this version lives entirely in cli/src/native/providers.rs. Behavioral spec (env var names, request/response shapes, apiKey-on-WS handling) is preserved verbatim from #532.

Test plan

  • cargo build clean
  • cargo fmt --check & cargo clippy -- -D warnings clean
  • 11 new unit tests for parsers, WS URL builder, missing-key path, and updated unknown-provider error — all pass alongside existing 4
  • Live smoke: STEEL_API_KEY=... agent-browser -p steel open https://example.com connects, navigates, returns title; close --all releases cleanly
  • Reviewer with Steel credentials verifies a session against their account

Notes

End-to-end HTTP-mocked test from the TS PR was not ported — providers.rs has no mock framework today, and adding one was out of scope. Unit tests cover env-var parsing and WS URL builder; integration is covered by the smoke run above.

Closes #532 (superseded).

Reimplements Steel as a native Rust provider in cli/src/native/providers.rs,
mirroring the Browserless/Kernel pattern. Selectable via `-p steel` or
`AGENT_BROWSER_PROVIDER=steel`; requires `STEEL_API_KEY`.

Optional env vars configure session behavior: STEEL_TIMEOUT_MS,
STEEL_HEADLESS, STEEL_SOLVE_CAPTCHA, STEEL_USE_PROXY, STEEL_PROXY_URL,
STEEL_REGION, STEEL_BLOCK_ADS, STEEL_PROFILE_ID, STEEL_PERSIST_PROFILE,
STEEL_DEVICE. Sessions are explicitly released on connect failure via
POST /v1/sessions/{id}/release.

The CDP WebSocket URL has the API key appended as an apiKey query param
before connecting (preserving any pre-existing apiKey).

Supersedes the closed PR vercel-labs#532 which targeted the deleted src/browser.ts
TypeScript layer.
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 28, 2026

@nibzard is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant