This release adds 2 notable features for engineering teams evaluating rollout.
Published 2d
MCP Browser & Automation
✓ No known CVEs patched
✓ No known CVEs patched in this version
Topics
ai-agent
ai-agents
browser-automation
claude
docker
fastapi
+6 more
llm
local-first
mcp
novnc
playwright
self-hosted
Affected surfaces
auth
breaking_upgrade
Summary
AI summaryCompose deploys now correctly pass APP_ENV and OpenAI-compatible providers to the controller.
Full changelog
Added
- Route-presence gate (
controller/tests/test_route_presence.py). Router mounting is now verified directly instead of being guarded by a dependency pin. Three independent layers: everyinclude_routercall site is represented in the OpenAPI surface (13 canaries, each naming its owning module), the surface has not collapsed, and the canaries actually dispatch at runtime. Layer 3 is not redundant — since FastAPI 0.137app.routesholds_IncludedRouterwrappers rather than flattenedRouteobjects, so introspection and dispatch can diverge (#101).
Changed
fastapicap<0.137lifted to>=0.139.2,<0.140, and its stated rationale corrected. The cap claimed 0.137 changedinclude_routerinternals so every mounted route vanishes silently, and set the condition for lifting it — "revisit behind a route-presence smoke test" — but that test was never written, so the cap could not be evaluated and simply ossified. Measured directly: the app exposes an identical 91-path surface on 0.136.3, 0.137.0 and 0.139.2, with the full suite green on 0.139.2; PR #82, the bump that triggered the cap, was itself fully green. What 0.137 did change isapp.routesholding_IncludedRouterwrappers, so nothing may enumerateapp.routesexpecting.path(#99, #101, #102).- CI lint no longer drifts from the ruff pin it is supposed to enforce. The lint job hardcoded
ruff==0.15.12whilecontroller/requirements-dev.txtpinned0.15.21; Dependabot only bumps the requirements file, so the gate sat 9 patch versions behind and drifted further with every bump — lint could pass in CI and fail locally. The job now reads the pin from the requirements file. Same one-dependency-two-sources failure class as the Playwright drift guarded byscripts/check_playwright_pins.py(#101). - Richer MCP tool schemas for the lowest-rated tools.
browser.get_session,browser.get_auth_profile,browser.activate_tab,browser.execute_action, andharness.list_runs(the five tools Glama graded C) now document what they return, where their IDs come from, and every input parameter; shared input fields (session_id, tabindex,run_id) gained schema descriptions that flow through to every tool built on them.
Fixed
- Compose deploy now wires
APP_ENVand the v1.4.0 OpenAI-compatible providers into the controller.APP_ENVwas absent fromdocker-compose.yml, soAPP_ENV=productionin.envnever reached the container — it always ran indevelopment, silently skipping production hardening. And the new providers (openrouter,xai,deepseek,minimax,openai_compatible) weren't passed through, so they couldn't be configured through a standard compose deploy despite being supported in code. Both are now in the controllerenvironment:block. Caught by smoke-testing the deploy end to end.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About LvcidPsyche/auto-browser
Give your AI agent a real browser — with a human in the loop. Open-source MCP-native browser agent.
Related context
Beta — feedback welcome: [email protected]