This release fixes issues for SREs watching stability and regressions.
Published 1d
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 summaryFixed Python 3.14 compatibility for AutoBrowserTool synchronous invocation.
Full changelog
Fixed
AutoBrowserToolworks again on Python 3.14. The synchronous path — what LangChain and CrewAI call for.invoke()— usedasyncio.get_event_loop().run_until_complete(), and since 3.14get_event_loop()raisesRuntimeError: There is no current event looprather than creating one.auto-browser-langchainadvertises 3.14 inrequires-pythonand its classifiers, and nothing tested the package at all, so this shipped unnoticed. Now usesasyncio.run(), which is correct on every supported version; callers already inside an event loop should await_arunviaainvoke(#110).python -m app.harness.runno longer crashes when a task fails to converge. The run record'scandidatefield is present but null unless the run succeeded, andpayload.get("candidate", {})returnsNonerather than the{}default when a key exists with a null value — so the summary line raisedAttributeErrorinstead of printing, exactly when an operator was reading the output to find out why the run failed. The--jsonpath was unaffected (#108).
Changed
- The auth-profile containment guards are now pinned by tests.
BrowserAuthProfileServicehandles stored browser auth state (cookies, session tokens) and was the least-covered module in the controller at 22%; its guards were correct but untested, so a refactor that weakened one would have shipped green. Rejection behaviour is now covered for Zip Slip member names, symlink/hardlink/device archive members, containment on a separator boundary rather than a raw string prefix, the profile-name whitelist, and archive-path traversal — plus the end-to-end property that a malicious archive writes nothing outside the root. Each guard's test was verified by breaking the guard and confirming the failure (#105). - The MCP stdio bridge's failure paths are covered.
app/mcp_stdio.py— whatuvx auto-browser-mcpruns — went from 58% to 99%, covering HTTP errors being returned rather than raised (so the server's JSON-RPC error reaches the client instead of a transport crash), teardown swallowing a dead connection, batch/non-object rejection, unreachable-endpoint handling, and protocol-version fallback when the response header is absent (#106). - The quality gates now cover the whole repo instead of the controller.
make lintran on a hardcoded path list that excludedclient/,integrations/,benchmarks/andexamples/— including two packages published to PyPI — and four real errors had accumulated there unseen; all are fixed and the scope is now the repo. A rootruff.tomlgives the previously-unlinted areas the controller's settings rather than Ruff's bare defaults.auto-browser-langchainwent from zero tests to 94% with a CI job that runs 3.11 and 3.14, andauto-browser-clientgained a coverage gate at 85% (it measures 90%) — the controller had enforced 80% while the packages users actually install enforced nothing (#110). - Version parity across all nine version strings is machine-enforced. The release workflow only ever verified the tag against the three published
pyproject.tomlfiles, which is how v1.4.0 shipped with the runtime version strings still at 1.3.1.scripts/check_version_parity.pynow checks every location and reports all offenders (#110). - Roadmap corrected: MCP
resources/subscribepush notifications were listed under "Next" but shipped in v1.1.0 (#107).
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]