superbrowser-sdk 2.1.1__tar.gz → 2.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- superbrowser_sdk-2.2.1/.github/workflows/stress.yml +64 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.gitignore +1 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/CHANGELOG.md +73 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/PKG-INFO +1 -1
- superbrowser_sdk-2.2.1/docs/api-ergonomics-audit.md +195 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/api-reference.md +4 -4
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/architecture.md +1 -1
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/quickstart.md +6 -6
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/backend_selection.py +1 -1
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/basic_usage.py +1 -1
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/budget_tracking.py +1 -1
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/error_handling.py +1 -1
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/multi_tab_workflow.py +1 -1
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/session_persistence.py +1 -1
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/pyproject.toml +1 -1
- superbrowser_sdk-2.2.1/scripts/stress_real_world.py +1149 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/__init__.py +1 -1
- superbrowser_sdk-2.2.1/src/super_browser/__main__.py +12 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/facade.py +7 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/loop.py +1 -1
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/page.py +2 -2
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/cli/__init__.py +7 -7
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/controller.py +88 -7
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ip_reputation.py +2 -2
- superbrowser_sdk-2.2.1/stress/__init__.py +7 -0
- superbrowser_sdk-2.2.1/stress/server.py +363 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v194_features.py +2 -2
- superbrowser_sdk-2.2.1/tests/test_benchmarks/test_stress_real_world.py +720 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_cli/test_unified_cli.py +7 -0
- superbrowser_sdk-2.2.1/tests/test_runtime_correctness/test_runtime_fixes.py +407 -0
- superbrowser_sdk-2.2.1/tests/test_vision/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.env.example +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.github/workflows/benchmark.yml +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.github/workflows/dco.yml +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.github/workflows/e2e.yml +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.github/workflows/publish.yml +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.github/workflows/smoke.yml +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.github/workflows/test.yml +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/.pre-commit-config.yaml +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/CONTRIBUTING.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/Dockerfile +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/LICENSE +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/README.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/Super-Browser.png +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/00-SOURCE-INVENTORY.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/01-TRIAGE-QUEUE.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/AGENT-BROWSER-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/AGENT-S-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/BROWSER-HARNESS-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/BROWSER-USE-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/CROSS-PROJECT-SYNTHESIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/FIRECRAWL-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/GAP-INVENTORY.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/HERMES-AGENT-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/HERMES-SELF-EVOLUTION-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/HTTPMORPH-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/IMPLEMENTATION-ROADMAP.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/LAVAGUE-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/OPENCLAW-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/PATCHRIGHT-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/PROJECT-CONFIG.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/SESSION-STATE.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/SKYVERN-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/STAGEHAND-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/UI-TARS-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/UI-TARS-DESKTOP-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/CHROMECLAW-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/CLAW-VARIANTS-ASSESSMENT.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/E2B-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/EVOSKILL-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/GO-INFRA-ASSESSMENT.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/GUARDRAILS-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/KHOJ-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/LETTA-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/MCP-AGENT-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/MCP-ZERO-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/MEM0-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/OPENFGA-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/SKYLL-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/TEMPORAL-ANALYSIS.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/analysis/output/TOOL-BENCHMARK-ASSESSMENT.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/benchmarks/fixtures/behavioral.html +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/benchmarks/fixtures/dom-heavy.html +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/benchmarks/fixtures/form.html +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/benchmarks/fixtures/simple.html +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/benchmarks/v1.11.0-baseline-patchright.json +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/benchmarks/v1.11.0-baseline-patchright.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/conftest.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docker-compose.yml +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/agent-reliability.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/aiv/AIV_FRAMEWORK_v5.3.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/anti-detection-ejecta.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/api-stability.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/behavioral-synthesis.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/browser-networking.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/cloak-integration.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/consistency-engine.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/discovery/DISCOVERY-REPORT.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/error-catalog.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/fingerprint-scoring.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/fingerprint-validation.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/gap-analysis.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/human-behavior.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/memory.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/migration/v1-to-v2.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/migration/v1.8-to-v1.9.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/operating-doctrine.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/platform-abstraction.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/plugins.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/recording.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/rfcs/README.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/rfcs/v2-decomposition.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/rfcs/v2-track-a-api-simplification.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/rfcs/v2-track-b-network-stealth.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/rfcs/v2-track-c-behavioral-realism.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/rfcs/v2-track-d-challenge-infrastructure.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/rfcs/v2-track-e-e2e-harness.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/docs/stealth-coverage.md +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/cloak_stealth.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/fingerprint_scan.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/human_behavior.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/examples/stealth_mode.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/labels/config.json +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/scripts/agent_efficiency_benchmark.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/scripts/browser_benchmark.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/scripts/e2e_trend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/scripts/run_stealth_gauntlet.sh +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/scripts/smoke_published.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/scripts/validate_e2e_report.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/scripts/verify_release_artifact.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/debug.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/delegator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/llm/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/llm/anthropic_client.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/llm/browser_transport.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/llm/budget_aware.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/llm/factory.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/llm/openai_client.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/llm/protocol.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/loop_detector.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/plugins.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/registry.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/router.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/structured_logging.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/agent/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/bezier.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/dwell.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/fitts.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/gauss.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/keyboard.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/mouse.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/navigation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/orchestrator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/prng.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/qwerty.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/scroll.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/session_seed.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/behavioral/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/backends/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/backends/cdp_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/backends/patchright_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/backends/playwright_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/backends/selenium_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/cdp.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/cloak_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/cloud.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/discovery.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/engine.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/fetch.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/injectors/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/injectors/bidi_injector.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/injectors/cdp_injector.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/injectors/page_injector.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/session.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/shutdown.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/browser/tabs.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/budget/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/budget/cascade.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/budget/client.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/budget/compressor.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/budget/cost_estimator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/budget/credential_pool.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/budget/governor.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/budget/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/cli/commands.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/cli/interactive.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/cli/script.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/events/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/events/bus.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/events/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/cache.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/decorator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/presets.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/recovery.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/snapshot.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/interaction/vision.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/memory/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/memory/integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/memory/store.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/memory/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/plugins/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/plugins/decorators.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/plugins/hooks.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/py.typed +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recording/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recording/persistence.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recording/recorder.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recording/replayer.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recording/report.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recording/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/checkpoint.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/classifier.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/coordinator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/event_bus.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/format_validator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/reflection.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/retry_tracker.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/session_recovery.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/recovery/watchdogs.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/results/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/results/output.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/results/typed.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/results/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/results/validation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/action_redaction.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/approval.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/credential_vault.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/domain_filter.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/gate.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/injection.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/manager.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/policy.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/redactor.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/security/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/session/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/session/proxy.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/skills/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/skills/activation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/skills/markdown.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/skills/registry.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/skills/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/action_policy.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/captcha.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/challenges/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/challenges/cache.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/challenges/pow.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/challenges/turnstile.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/dag.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/derive.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/errors.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/inject.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/inject_delivery.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/matrix.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/prng.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rule.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/audio.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/behavior.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/fonts.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/gpu.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/locale.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/navigator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/screen.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/consistency/rules/user_agent.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/diagnostics.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/audio.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/browser_apis.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/canvas.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/registry.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/timing.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/ejecta/webrtc.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/fingerprint_scanner.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/fingerprint_score.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/headers.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/human.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/human_config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/manager.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/profiles/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/profiles/data/linux-chrome-stable.json +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/profiles/data/macos-chrome-stable.json +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/profiles/data/macos-m4-chrome-stable.json +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/profiles/data/windows-chrome-stable.json +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/profiles/host_detect.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/profiles/schema.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/proxy.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/proxy_pool.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/report.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/scoring.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/tls_baselines.json +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/tls_fingerprint.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/user_agent_pool.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/validation/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/validation/checks.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/validation/harness.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/validation/report.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/stealth/validation/suite.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/testing.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/tracing/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/tracing/cost_analytics.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/tracing/flow_logger.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/tracing/middleware.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/tracing/session_db.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/tracing/sinks.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/tracing/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/verification/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/verification/ax_diff.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/verification/hasher.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/verification/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/verification/verifier.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/vision/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/vision/cache.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/vision/controller.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/vision/coords.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/vision/factory.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/vision/ocr.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/vision/providers.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/src/super_browser/vision/types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/conftest.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/conftest.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_01_example_nav.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_02_google_search.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_03_github_login.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_04_amazon_search.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_05_google_forms.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_06_google_flights.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_07_wikipedia_extract.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_08_reddit_spa.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_09_form_complex.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/discovery/test_task_10_signup_flow.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/conftest.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/test_behavioral_realism.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/test_challenge_detection.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/test_interaction.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/test_live_navigation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/test_multi_tab.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/test_navigation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/test_session_persistence.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e/test_stealth_overhead.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/e2e_v1_3_journey.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/conftest.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_config_composition.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_engine_backends.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_error_paths.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_facade_smoke.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_full_lifecycle.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_multi_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_performance_smoke.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_playwright_integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_public_api.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_session_persistence.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_stealth_abstraction.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v1100_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v150_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v160_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v170_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v180_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v190_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v191_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v192_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v193_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v195_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v1_3_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/integration/test_v1_4_features.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/pattern_validation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/conftest.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/test_chrome_runtime.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/test_cli_switches.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/test_headless_indicators.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/test_live_sites.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/test_runtime_enable.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/test_tls_fingerprint.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/stealth_detection/test_webdriver.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_action_timeout.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_browser_transport.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_controller_rebinding.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_debug_mode.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_default_tooling.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_delegator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_error_screenshots.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_facade.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_facade_security.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_facade_security_control.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_facade_security_file_tab.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_facade_security_network.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_facade_security_session.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_fail_fast.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_llm.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_llm_budget.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_llm_production.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_llm_streaming.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_loop.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_loop_detector.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_prompt_isolation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_registry.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_retry_budget.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_streaming.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_structured_logging.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_tab_cap.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_task_02.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_agent/test_types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_behavioral/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_behavioral/test_behavioral.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_behavioral/test_dwell.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_behavioral/test_human_config_dwell.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_behavioral/test_navigation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_behavioral/test_orchestrator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_behavioral/test_session_seed.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_benchmark/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_benchmark/test_efficiency.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_benchmarks/test_browser_benchmark.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_cdp.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_cdp_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_cloak_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_cloak_docs.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_cloak_integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_discovery.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_engine_protocol.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_fetch.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_injectors.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_page.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_patchright_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_playwright_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_selenium_backend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_session.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_browser/test_shutdown.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_cascade.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_cascade_governor.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_circuit_breaker.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_client.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_compressor.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_cost_estimator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_credential_pool.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_governor.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_budget/test_types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_cli/test_interactive.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_cli/test_script.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_cli/test_stealth_check.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_cli/test_stealth_validate.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_e2e/test_report_schema.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_e2e/test_trend.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_ejecta/test_audio.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_ejecta/test_batch37_integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_ejecta/test_batch38_integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_ejecta/test_browser_apis.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_ejecta/test_canvas.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_ejecta/test_integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_ejecta/test_timing.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_ejecta/test_webrtc.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_events/test_event_bus.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_events/test_lifecycle_hooks.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_governance_docs.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_cache.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_controller.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_decorator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_injection.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_page_change.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_presets.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_recovery.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_snapshot.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_interaction/test_vision.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_memory/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_memory/test_cli_config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_memory/test_integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_memory/test_store.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recording/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recording/test_persistence.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recording/test_recorder.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recording/test_replayer.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_checkpoint.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_classifier.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_coordinator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_event_bus.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_format_validator.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_reflection.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_retry_tracker.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_session_recovery.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_recovery/test_watchdogs.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_release/test_naming_consistency.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_release/test_smoke_published.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_release/test_verify_artifact.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_results/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_results/test_batch40_integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_results/test_categories.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_results/test_output.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_results/test_typed.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_results/test_types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_results/test_validation.py +0 -0
- {superbrowser_sdk-2.1.1/tests/test_security → superbrowser_sdk-2.2.1/tests/test_runtime_correctness}/__init__.py +0 -0
- {superbrowser_sdk-2.1.1/tests/test_session → superbrowser_sdk-2.2.1/tests/test_security}/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_approval.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_credential_vault.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_domain_filter.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_injection.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_manager.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_policy.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_redaction_pipeline.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_redactor.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_security/test_types.py +0 -0
- {superbrowser_sdk-2.1.1/tests/test_skills → superbrowser_sdk-2.2.1/tests/test_session}/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_session/test_proxy.py +0 -0
- {superbrowser_sdk-2.1.1/tests/test_stealth → superbrowser_sdk-2.2.1/tests/test_skills}/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_skills/test_activation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_skills/test_integration.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_skills/test_markdown.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_skills/test_registry.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_skills/test_types.py +0 -0
- {superbrowser_sdk-2.1.1/tests/test_tracing → superbrowser_sdk-2.2.1/tests/test_stealth}/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_action_policy.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_captcha.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_captcha_resolution.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_challenge_cache.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_challenge_config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_consistency/test_consistency.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_consistency_inject.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_diagnostics.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_e2e_lifecycle.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_e2e_reporting.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_fingerprint_scanner.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_fingerprint_score.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_headers.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_human.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_human_behavior_v2.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_ip_reputation.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_kasada_detection.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_manager.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_network_stealth_config.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_profiles.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_proxy.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_proxy_pool.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_stealth_bridge.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_tls_fingerprint.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_turnstile_detection.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_user_agent_pool.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_stealth/test_validation.py +0 -0
- {superbrowser_sdk-2.1.1/tests/test_verification → superbrowser_sdk-2.2.1/tests/test_tracing}/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_tracing/test_cost_analytics.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_tracing/test_flow_logger.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_tracing/test_middleware.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_tracing/test_session_db.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_tracing/test_sinks.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_tracing/test_types.py +0 -0
- {superbrowser_sdk-2.1.1/tests/test_vision → superbrowser_sdk-2.2.1/tests/test_verification}/__init__.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_verification/test_ax_diff.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_verification/test_hasher.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_verification/test_types.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_verification/test_verifier.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_vision/test_cache.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_vision/test_controller.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_vision/test_coords.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_vision/test_factory.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_vision/test_ocr.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_vision/test_providers.py +0 -0
- {superbrowser_sdk-2.1.1 → superbrowser_sdk-2.2.1}/tests/test_vision/test_types.py +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: Stress Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
mode:
|
|
7
|
+
description: "Quick or realistic"
|
|
8
|
+
required: true
|
|
9
|
+
default: "quick"
|
|
10
|
+
type: choice
|
|
11
|
+
options:
|
|
12
|
+
- quick
|
|
13
|
+
- realistic
|
|
14
|
+
sessions:
|
|
15
|
+
description: "Number of sessions (realistic mode)"
|
|
16
|
+
required: false
|
|
17
|
+
default: "3"
|
|
18
|
+
concurrency:
|
|
19
|
+
description: "Concurrency (realistic mode)"
|
|
20
|
+
required: false
|
|
21
|
+
default: "2"
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
stress:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
timeout-minutes: 15
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v4
|
|
32
|
+
|
|
33
|
+
- uses: actions/setup-python@v5
|
|
34
|
+
with:
|
|
35
|
+
python-version: "3.12"
|
|
36
|
+
|
|
37
|
+
- name: Install Super Browser
|
|
38
|
+
run: |
|
|
39
|
+
pip install --upgrade pip
|
|
40
|
+
pip install -e ".[patchright]"
|
|
41
|
+
python -m patchright install chromium
|
|
42
|
+
|
|
43
|
+
- name: Run stress test (quick)
|
|
44
|
+
if: inputs.mode == 'quick'
|
|
45
|
+
run: |
|
|
46
|
+
python scripts/stress_real_world.py --quick \
|
|
47
|
+
--output stress-results
|
|
48
|
+
|
|
49
|
+
- name: Run stress test (realistic)
|
|
50
|
+
if: inputs.mode == 'realistic'
|
|
51
|
+
run: |
|
|
52
|
+
python scripts/stress_real_world.py --realistic \
|
|
53
|
+
--sessions ${{ inputs.sessions }} \
|
|
54
|
+
--concurrency ${{ inputs.concurrency }} \
|
|
55
|
+
--output stress-results
|
|
56
|
+
|
|
57
|
+
- name: Upload stress report
|
|
58
|
+
if: always()
|
|
59
|
+
uses: actions/upload-artifact@v4
|
|
60
|
+
with:
|
|
61
|
+
name: stress-report
|
|
62
|
+
path: stress-results/
|
|
63
|
+
retention-days: 90
|
|
64
|
+
if-no-files-found: warn
|
|
@@ -7,6 +7,79 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.2.1] — 2026-06-17
|
|
11
|
+
|
|
12
|
+
### Overview
|
|
13
|
+
|
|
14
|
+
**v2.2.1 — Runtime Correctness**
|
|
15
|
+
|
|
16
|
+
Patch release fixing three user-facing runtime defects discovered in
|
|
17
|
+
post-release source audit. No new features, no breaking changes.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **Rich page fingerprint `interactive_count`** (loop.py): Was iterating
|
|
22
|
+
dict keys instead of `.values()`, calling `.get()` on string keys.
|
|
23
|
+
The `except` block silently returned `interactive_count=0` every time,
|
|
24
|
+
weakening page change detection. Now correctly counts interactive
|
|
25
|
+
nodes via `is_interactive` attribute.
|
|
26
|
+
|
|
27
|
+
- **iframe action scoping** (controller.py + facade.py): `enter_frame()`
|
|
28
|
+
pushed a frame locator but no interaction method used it — all actions
|
|
29
|
+
targeted the top-level page instead of the iframe. New
|
|
30
|
+
`FrameInteractionTarget` adapter normalizes Playwright's
|
|
31
|
+
`FrameLocator` API (`.locator(sel).click()`) to match the controller's
|
|
32
|
+
selector-tier signatures (`.click(sel)`).
|
|
33
|
+
|
|
34
|
+
- **IPReputationClient async path** (ip_reputation.py): Replaced
|
|
35
|
+
deprecated `asyncio.get_event_loop()` with `asyncio.get_running_loop()`
|
|
36
|
+
to fix DeprecationWarning on every call and future RuntimeError risk.
|
|
37
|
+
|
|
38
|
+
### Internal
|
|
39
|
+
|
|
40
|
+
- **Stress signal accuracy** (#167): RSS measurement prefers `psutil`
|
|
41
|
+
with platform-aware fallback; periodic `RSSSampler`; hard sleeps
|
|
42
|
+
replaced with `_wait_for_condition()` polling; `parallel_profiles`
|
|
43
|
+
verifies cross-context isolation; `/api/upload` returns real digest.
|
|
44
|
+
|
|
45
|
+
## [2.2.0] — 2026-06-16
|
|
46
|
+
|
|
47
|
+
### Overview
|
|
48
|
+
|
|
49
|
+
**v2.2.0 — API Ergonomics**
|
|
50
|
+
|
|
51
|
+
v2.2 polishes the public API surface based on the Track D discovery
|
|
52
|
+
audit. No new features, no breaking changes — cleaner imports, better
|
|
53
|
+
CLI discoverability, and a new `python -m super_browser` entry point.
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
|
|
57
|
+
- **`python -m super_browser` support**: New `__main__.py` delegates to
|
|
58
|
+
the CLI dispatcher, so users can run either `superbrowser version` or
|
|
59
|
+
`python -m super_browser version`.
|
|
60
|
+
|
|
61
|
+
### Changed
|
|
62
|
+
|
|
63
|
+
- **Standardized top-level imports**: All examples, quickstart, and docs
|
|
64
|
+
now use `from super_browser import SuperBrowser`, `Config`, and
|
|
65
|
+
`create_llm` instead of deep module paths.
|
|
66
|
+
- **CLI help clarified**:
|
|
67
|
+
- `stealth-check` → "Run offline fingerprint scoring and report"
|
|
68
|
+
- `stealth-validate` → "Validate fingerprint against baselines
|
|
69
|
+
(CI/regression mode)"
|
|
70
|
+
- `result-demo` → labeled as internal command
|
|
71
|
+
- **API reference cleaned**: Removed stale `SuperBrowserConfig`
|
|
72
|
+
references (class removed in v2.0) and the removed `core` field row
|
|
73
|
+
from `AgentConfig`.
|
|
74
|
+
- **`raw_page` deprecation updated**: Removal target changed from
|
|
75
|
+
"v2.1" to "v3.0" — the alias stays available through the v2.x series.
|
|
76
|
+
|
|
77
|
+
### Track D audit artifacts
|
|
78
|
+
|
|
79
|
+
- `docs/api-ergonomics-audit.md` — full discovery document with 15
|
|
80
|
+
findings across three buckets (patch-safe, backward-compatible polish,
|
|
81
|
+
defer).
|
|
82
|
+
|
|
10
83
|
## [2.1.1] — 2026-06-16
|
|
11
84
|
|
|
12
85
|
### Fixed — Smoke workflow install spec format
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superbrowser-sdk
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.1
|
|
4
4
|
Summary: Anti-detection agent browser SDK — stealth, budget governance, security guardrails, and structured error recovery behind one async facade
|
|
5
5
|
Project-URL: Homepage, https://github.com/Octo-Lex/Super-Browser
|
|
6
6
|
Project-URL: Documentation, https://github.com/Octo-Lex/Super-Browser#readme
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Track D — API Ergonomics Audit
|
|
2
|
+
|
|
3
|
+
> **v2.1.1 baseline** — 2026-06-16
|
|
4
|
+
>
|
|
5
|
+
> Discovery document for the v2.2 "API Ergonomics" track.
|
|
6
|
+
> No code changes in this audit — findings only.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Methodology
|
|
11
|
+
|
|
12
|
+
Systematic inspection of:
|
|
13
|
+
|
|
14
|
+
1. Public API surface (`__all__`, signatures, return types)
|
|
15
|
+
2. CLI help output, command naming, option consistency
|
|
16
|
+
3. Testing utilities (`E2EContext`, `MockLLMClient`, report builders)
|
|
17
|
+
4. Documentation (quickstart, API reference, architecture, examples)
|
|
18
|
+
5. Migration remnants from v1.x → v2.0
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Findings
|
|
23
|
+
|
|
24
|
+
### Bucket 1 — Patch-safe (docs, help text, examples, aliases)
|
|
25
|
+
|
|
26
|
+
These changes are safe to ship without any risk to existing code.
|
|
27
|
+
|
|
28
|
+
#### 1.1 Stale `SuperBrowserConfig` in API reference
|
|
29
|
+
|
|
30
|
+
`docs/api-reference.md` still references `SuperBrowserConfig` in three
|
|
31
|
+
places — a class removed in v2.0:
|
|
32
|
+
|
|
33
|
+
- Line 45: constructor signature shows `config: Optional[SuperBrowserConfig]`
|
|
34
|
+
- Line 54: parameter table lists `SuperBrowserConfig | None`
|
|
35
|
+
- Line 631: `AgentConfig.core` field table references `SuperBrowserConfig`
|
|
36
|
+
|
|
37
|
+
**Fix:** Replace all `SuperBrowserConfig` → `Config` in the API reference.
|
|
38
|
+
|
|
39
|
+
#### 1.2 Inconsistent import paths in examples and quickstart
|
|
40
|
+
|
|
41
|
+
The top-level package exports `SuperBrowser`, `Config`, `ActionResult`,
|
|
42
|
+
`StreamEvent`, and `create_llm` via `__all__`. But examples and docs use
|
|
43
|
+
inconsistent deep-import paths:
|
|
44
|
+
|
|
45
|
+
| Canonical (top-level) | Deep import used in docs/examples |
|
|
46
|
+
|:----------------------|:----------------------------------|
|
|
47
|
+
| `from super_browser import SuperBrowser` | `from super_browser.agent.facade import SuperBrowser` |
|
|
48
|
+
| `from super_browser import create_llm` | `from super_browser.agent.llm.factory import create_llm` |
|
|
49
|
+
| `from super_browser import Config` | `from super_browser.config import Config` |
|
|
50
|
+
|
|
51
|
+
Files affected:
|
|
52
|
+
- `examples/basic_usage.py`
|
|
53
|
+
- `examples/budget_tracking.py`
|
|
54
|
+
- `examples/error_handling.py`
|
|
55
|
+
- `examples/multi_tab_workflow.py`
|
|
56
|
+
- `examples/session_persistence.py`
|
|
57
|
+
- `docs/quickstart.md` (multiple sections)
|
|
58
|
+
|
|
59
|
+
**Fix:** Standardize all examples and quickstart to use top-level imports.
|
|
60
|
+
|
|
61
|
+
#### 1.3 Quickstart verification command uses deep import
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Current (deep import):
|
|
65
|
+
python -c "from super_browser.agent.facade import SuperBrowser; print('OK')"
|
|
66
|
+
|
|
67
|
+
# Should be:
|
|
68
|
+
python -c "from super_browser import SuperBrowser; print('OK')"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### 1.4 `raw_page` deprecation message is stale
|
|
72
|
+
|
|
73
|
+
The `DeprecationWarning` says:
|
|
74
|
+
|
|
75
|
+
> `raw_page is deprecated, use backend_page instead. Will be removed in v2.1.`
|
|
76
|
+
|
|
77
|
+
We are in v2.1.1. Either:
|
|
78
|
+
|
|
79
|
+
- **(a)** Update the message to say "Will be removed in v2.2" (defer)
|
|
80
|
+
- **(b)** Actually remove `raw_page` (breaking, see Bucket 3)
|
|
81
|
+
|
|
82
|
+
Recommendation: **(a)** — update the message, defer removal.
|
|
83
|
+
|
|
84
|
+
#### 1.5 CLI has no `python -m super_browser` entry point
|
|
85
|
+
|
|
86
|
+
Neither `python -m super_browser` nor `python -m super_browser.cli` works —
|
|
87
|
+
only the `superbrowser` console script does. Adding a `__main__.py` is a
|
|
88
|
+
common user expectation and trivially safe.
|
|
89
|
+
|
|
90
|
+
**Fix:** Add `src/super_browser/__main__.py` that calls `cli.main()`.
|
|
91
|
+
|
|
92
|
+
#### 1.6 CLI `result-demo` command is internal-looking
|
|
93
|
+
|
|
94
|
+
`result-demo` is a demonstration command that has no production use.
|
|
95
|
+
It clutters the top-level help output. Consider hiding it from the main
|
|
96
|
+
help listing or moving it to a `--debug` subgroup.
|
|
97
|
+
|
|
98
|
+
**Fix:** Remove from help listing (keep functional for backward compat).
|
|
99
|
+
|
|
100
|
+
#### 1.7 CLI `stealth-check` vs `stealth-validate` naming is confusing
|
|
101
|
+
|
|
102
|
+
Two similarly named commands with different purposes:
|
|
103
|
+
|
|
104
|
+
| Command | Purpose |
|
|
105
|
+
|:--------|:--------|
|
|
106
|
+
| `stealth-check` | Offline fingerprint scoring + report |
|
|
107
|
+
| `stealth-validate` | Fingerprint validation against baselines + CI mode |
|
|
108
|
+
|
|
109
|
+
**Fix:** Clarify in help text. Renaming would be a breaking change (defer).
|
|
110
|
+
|
|
111
|
+
### Bucket 2 — Backward-compatible polish
|
|
112
|
+
|
|
113
|
+
These add convenience without breaking existing code.
|
|
114
|
+
|
|
115
|
+
#### 2.1 `create_llm` should be in `__all__` already (confirmed OK)
|
|
116
|
+
|
|
117
|
+
Verified — `create_llm` is already exported at top level. No action needed.
|
|
118
|
+
|
|
119
|
+
#### 2.2 `ActionResult.ok` could have a boolean alias property
|
|
120
|
+
|
|
121
|
+
`ActionResult` uses `.ok` for success/failure. Some users may expect `.success`
|
|
122
|
+
or `.is_ok`. Currently only `.ok` exists. Adding a read-only property alias is
|
|
123
|
+
backward-compatible.
|
|
124
|
+
|
|
125
|
+
**Decision:** Low value, skip unless explicitly requested.
|
|
126
|
+
|
|
127
|
+
#### 2.3 `Config.from_env()` is not in quickstart's verification flow
|
|
128
|
+
|
|
129
|
+
The quickstart shows `Config.from_env()` but doesn't show how to verify it
|
|
130
|
+
succeeded without an LLM API key (validation will report a missing key).
|
|
131
|
+
|
|
132
|
+
**Fix:** Add a note in quickstart that `validate()` returns errors but doesn't
|
|
133
|
+
raise, and that the missing-API-key error is expected for browser-only use.
|
|
134
|
+
|
|
135
|
+
#### 2.4 Testing utilities could export `build_e2e_json_report` at a stable path
|
|
136
|
+
|
|
137
|
+
`build_e2e_json_report` is in `super_browser.testing` — good. But the E2E
|
|
138
|
+
schema v3 validator (`scripts/validate_e2e_report.py`) is not importable.
|
|
139
|
+
If users want to validate reports programmatically, they'd need to run the
|
|
140
|
+
script. Consider extracting the validator into an importable function.
|
|
141
|
+
|
|
142
|
+
**Decision:** Defer unless external consumers request it.
|
|
143
|
+
|
|
144
|
+
### Bucket 3 — Defer / avoid (risk to v2.x stability)
|
|
145
|
+
|
|
146
|
+
#### 3.1 Removing `raw_page` alias entirely
|
|
147
|
+
|
|
148
|
+
The migration doc said it would be removed in v2.1, but it still works with
|
|
149
|
+
a deprecation warning. Removing it would break any v1.x code that hasn't
|
|
150
|
+
migrated. Since v2.0 just shipped, defer to v3.0.
|
|
151
|
+
|
|
152
|
+
**Decision:** Defer. Update deprecation message to say "v3.0" instead.
|
|
153
|
+
|
|
154
|
+
#### 3.2 Removing legacy `core` sub-dict compat in `_build_agent()`
|
|
155
|
+
|
|
156
|
+
`_build_agent()` still merges a legacy `core` sub-dict for v1.x backward
|
|
157
|
+
compatibility. Removing it would break old YAML/dict configs. Defer.
|
|
158
|
+
|
|
159
|
+
**Decision:** Defer. No urgency — the compat path is ~5 lines of code.
|
|
160
|
+
|
|
161
|
+
#### 3.3 Renaming CLI commands
|
|
162
|
+
|
|
163
|
+
Renaming `stealth-check` → `stealth-score` or `stealth-validate` →
|
|
164
|
+
`stealth-baseline` would improve clarity but break scripts/automation.
|
|
165
|
+
|
|
166
|
+
**Decision:** Defer to a major version if at all.
|
|
167
|
+
|
|
168
|
+
#### 3.4 Removing `result-demo` CLI command
|
|
169
|
+
|
|
170
|
+
Removing it entirely would break anyone who uses it. Keep it functional
|
|
171
|
+
but hide from help (Bucket 1.6).
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Summary
|
|
176
|
+
|
|
177
|
+
| Bucket | Items | Risk | Recommended PR |
|
|
178
|
+
|:-------|------:|:-----|:---------------|
|
|
179
|
+
| **Patch-safe** | 7 | None | PR #163 |
|
|
180
|
+
| **Backward-compatible polish** | 4 | Minimal | Optional |
|
|
181
|
+
| **Defer** | 4 | Breaking | v3.0 |
|
|
182
|
+
|
|
183
|
+
### Recommended PR #163 scope (patch-safe only)
|
|
184
|
+
|
|
185
|
+
1. Fix `SuperBrowserConfig` → `Config` in API reference (3 occurrences)
|
|
186
|
+
2. Standardize examples to use top-level imports
|
|
187
|
+
3. Standardize quickstart to use top-level imports
|
|
188
|
+
4. Fix quickstart verification command
|
|
189
|
+
5. Update `raw_page` deprecation message to "v3.0"
|
|
190
|
+
6. Add `__main__.py` for `python -m super_browser` support
|
|
191
|
+
7. Hide `result-demo` from CLI help listing
|
|
192
|
+
8. Clarify `stealth-check` vs `stealth-validate` help text
|
|
193
|
+
|
|
194
|
+
All items are documentation, help text, or additive-only code changes.
|
|
195
|
+
No public API signatures change.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# API Reference
|
|
2
2
|
|
|
3
|
-
> **Super Browser** v2.
|
|
3
|
+
> **Super Browser** v2.2.0 — Complete public API documentation.
|
|
4
4
|
|
|
5
5
|
This reference covers every public class, method, and function in Super Browser. Classes are grouped by subsystem.
|
|
6
6
|
|
|
@@ -42,7 +42,7 @@ The primary entry point for all browser automation. Wraps the agent loop, stealt
|
|
|
42
42
|
|
|
43
43
|
```python
|
|
44
44
|
class SuperBrowser(
|
|
45
|
-
config: Optional[
|
|
45
|
+
config: Optional[Config] = None,
|
|
46
46
|
*,
|
|
47
47
|
tool_registry: Optional[ToolRegistry] = None,
|
|
48
48
|
llm_client: Optional[LLMClient] = None,
|
|
@@ -51,7 +51,7 @@ class SuperBrowser(
|
|
|
51
51
|
|
|
52
52
|
| Parameter | Type | Default | Description |
|
|
53
53
|
|---|---|---|---|
|
|
54
|
-
| `config` | `
|
|
54
|
+
| `config` | `Config \| None` | `None` | Agent configuration. Uses defaults when `None`. |
|
|
55
55
|
| `tool_registry` | `ToolRegistry \| None` | `None` | Custom tool registry. Creates a default registry when `None`. |
|
|
56
56
|
| `llm_client` | `LLMClient \| None` | `None` | LLM client for `act()` calls. **Required** for `act()`. |
|
|
57
57
|
|
|
@@ -628,7 +628,7 @@ if errors:
|
|
|
628
628
|
| `llm_provider` | `str` | `"anthropic"` | LLM provider: `"anthropic"` or `"openai"`. |
|
|
629
629
|
| `llm_model` | `str` | `"claude-sonnet-4-20250514"` | Model identifier. |
|
|
630
630
|
| `llm_api_key` | `str` | `""` | API key for the chosen provider. |
|
|
631
|
-
|
|
631
|
+
|
|
632
632
|
|
|
633
633
|
#### `TracingConfig`
|
|
634
634
|
|
|
@@ -26,7 +26,7 @@ pip install superbrowser-sdk[patchright]
|
|
|
26
26
|
Verify the installation:
|
|
27
27
|
|
|
28
28
|
```python
|
|
29
|
-
python -c "from super_browser
|
|
29
|
+
python -c "from super_browser import SuperBrowser; print('OK')"
|
|
30
30
|
# OK
|
|
31
31
|
```
|
|
32
32
|
|
|
@@ -68,7 +68,7 @@ Create `my_first_browser.py`:
|
|
|
68
68
|
"""5-minute Super Browser quickstart."""
|
|
69
69
|
|
|
70
70
|
import asyncio
|
|
71
|
-
from super_browser
|
|
71
|
+
from super_browser import SuperBrowser
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
class MockLLMClient:
|
|
@@ -151,7 +151,7 @@ export SB_DAILY_BUDGET=5.0
|
|
|
151
151
|
> browser is less detectable than headless).
|
|
152
152
|
|
|
153
153
|
```python
|
|
154
|
-
from super_browser
|
|
154
|
+
from super_browser import Config
|
|
155
155
|
|
|
156
156
|
config = Config.from_env()
|
|
157
157
|
errors = config.validate()
|
|
@@ -178,7 +178,7 @@ tracing:
|
|
|
178
178
|
```
|
|
179
179
|
|
|
180
180
|
```python
|
|
181
|
-
from super_browser
|
|
181
|
+
from super_browser import Config
|
|
182
182
|
|
|
183
183
|
config = Config.from_yaml("super-browser.yaml")
|
|
184
184
|
```
|
|
@@ -186,7 +186,7 @@ config = Config.from_yaml("super-browser.yaml")
|
|
|
186
186
|
### Option C: Dictionary
|
|
187
187
|
|
|
188
188
|
```python
|
|
189
|
-
from super_browser
|
|
189
|
+
from super_browser import Config
|
|
190
190
|
|
|
191
191
|
config = Config.from_dict({
|
|
192
192
|
"agent": {
|
|
@@ -205,7 +205,7 @@ config = Config.from_dict({
|
|
|
205
205
|
With a real API key, create an LLM client directly:
|
|
206
206
|
|
|
207
207
|
```python
|
|
208
|
-
from super_browser
|
|
208
|
+
from super_browser import create_llm
|
|
209
209
|
|
|
210
210
|
# Explicit
|
|
211
211
|
llm = create_llm(provider="anthropic", model="claude-sonnet-4-20250514", api_key="sk-ant-...")
|
|
@@ -12,7 +12,7 @@ import asyncio
|
|
|
12
12
|
import logging
|
|
13
13
|
|
|
14
14
|
from super_browser import Config
|
|
15
|
-
from super_browser
|
|
15
|
+
from super_browser import SuperBrowser
|
|
16
16
|
from super_browser.browser.config import SessionConfig
|
|
17
17
|
|
|
18
18
|
logging.basicConfig(level=logging.INFO, format="%(name)s %(levelname)s %(message)s")
|
|
@@ -18,7 +18,7 @@ import asyncio
|
|
|
18
18
|
import logging
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
|
|
21
|
-
from super_browser
|
|
21
|
+
from super_browser import SuperBrowser
|
|
22
22
|
from super_browser.agent.llm.protocol import LLMClient
|
|
23
23
|
from super_browser.budget.governor import TokenBudgetGovernor
|
|
24
24
|
from super_browser.budget.types import (
|
|
@@ -12,7 +12,7 @@ Run:
|
|
|
12
12
|
import asyncio
|
|
13
13
|
import logging
|
|
14
14
|
|
|
15
|
-
from super_browser
|
|
15
|
+
from super_browser import SuperBrowser
|
|
16
16
|
from super_browser.results.types import FailureCategory
|
|
17
17
|
|
|
18
18
|
logging.basicConfig(level=logging.INFO, format="%(name)s %(levelname)s %(message)s")
|
|
@@ -11,7 +11,7 @@ Run:
|
|
|
11
11
|
import asyncio
|
|
12
12
|
import logging
|
|
13
13
|
|
|
14
|
-
from super_browser
|
|
14
|
+
from super_browser import SuperBrowser
|
|
15
15
|
|
|
16
16
|
logging.basicConfig(level=logging.INFO, format="%(name)s %(levelname)s %(message)s")
|
|
17
17
|
logger = logging.getLogger(__name__)
|
|
@@ -12,7 +12,7 @@ Run:
|
|
|
12
12
|
import asyncio
|
|
13
13
|
import logging
|
|
14
14
|
|
|
15
|
-
from super_browser
|
|
15
|
+
from super_browser import SuperBrowser
|
|
16
16
|
|
|
17
17
|
logging.basicConfig(level=logging.INFO, format="%(name)s %(levelname)s %(message)s")
|
|
18
18
|
logger = logging.getLogger(__name__)
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "superbrowser-sdk"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.2.1"
|
|
8
8
|
description = "Anti-detection agent browser SDK — stealth, budget governance, security guardrails, and structured error recovery behind one async facade"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "Apache-2.0" }
|