superbrowser-sdk 2.1.0__tar.gz → 2.2.0__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.
Files changed (578) hide show
  1. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/CHANGELOG.md +64 -0
  2. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/PKG-INFO +1 -1
  3. superbrowser_sdk-2.2.0/docs/api-ergonomics-audit.md +195 -0
  4. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/api-reference.md +4 -4
  5. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/architecture.md +1 -1
  6. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/quickstart.md +6 -6
  7. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/backend_selection.py +1 -1
  8. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/basic_usage.py +1 -1
  9. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/budget_tracking.py +1 -1
  10. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/error_handling.py +1 -1
  11. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/multi_tab_workflow.py +1 -1
  12. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/session_persistence.py +1 -1
  13. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/pyproject.toml +1 -1
  14. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/scripts/browser_benchmark.py +2 -2
  15. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/scripts/smoke_published.py +9 -8
  16. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/__init__.py +1 -1
  17. superbrowser_sdk-2.2.0/src/super_browser/__main__.py +12 -0
  18. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/page.py +2 -2
  19. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/cli/__init__.py +7 -7
  20. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v194_features.py +2 -2
  21. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_cli/test_unified_cli.py +7 -0
  22. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_release/test_smoke_published.py +51 -0
  23. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.env.example +0 -0
  24. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.github/workflows/benchmark.yml +0 -0
  25. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.github/workflows/dco.yml +0 -0
  26. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.github/workflows/e2e.yml +0 -0
  27. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.github/workflows/publish.yml +0 -0
  28. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.github/workflows/smoke.yml +0 -0
  29. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.github/workflows/test.yml +0 -0
  30. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.gitignore +0 -0
  31. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/.pre-commit-config.yaml +0 -0
  32. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/CONTRIBUTING.md +0 -0
  33. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/Dockerfile +0 -0
  34. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/LICENSE +0 -0
  35. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/README.md +0 -0
  36. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/Super-Browser.png +0 -0
  37. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/00-SOURCE-INVENTORY.md +0 -0
  38. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/01-TRIAGE-QUEUE.md +0 -0
  39. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/AGENT-BROWSER-ANALYSIS.md +0 -0
  40. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/AGENT-S-ANALYSIS.md +0 -0
  41. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/BROWSER-HARNESS-ANALYSIS.md +0 -0
  42. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/BROWSER-USE-ANALYSIS.md +0 -0
  43. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/CROSS-PROJECT-SYNTHESIS.md +0 -0
  44. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/FIRECRAWL-ANALYSIS.md +0 -0
  45. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/GAP-INVENTORY.md +0 -0
  46. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/HERMES-AGENT-ANALYSIS.md +0 -0
  47. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/HERMES-SELF-EVOLUTION-ANALYSIS.md +0 -0
  48. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/HTTPMORPH-ANALYSIS.md +0 -0
  49. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/IMPLEMENTATION-ROADMAP.md +0 -0
  50. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/LAVAGUE-ANALYSIS.md +0 -0
  51. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/OPENCLAW-ANALYSIS.md +0 -0
  52. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/PATCHRIGHT-ANALYSIS.md +0 -0
  53. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/PROJECT-CONFIG.md +0 -0
  54. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/SESSION-STATE.md +0 -0
  55. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/SKYVERN-ANALYSIS.md +0 -0
  56. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/STAGEHAND-ANALYSIS.md +0 -0
  57. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/UI-TARS-ANALYSIS.md +0 -0
  58. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/UI-TARS-DESKTOP-ANALYSIS.md +0 -0
  59. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/CHROMECLAW-ANALYSIS.md +0 -0
  60. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/CLAW-VARIANTS-ASSESSMENT.md +0 -0
  61. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/E2B-ANALYSIS.md +0 -0
  62. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/EVOSKILL-ANALYSIS.md +0 -0
  63. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/GO-INFRA-ASSESSMENT.md +0 -0
  64. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/GUARDRAILS-ANALYSIS.md +0 -0
  65. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/KHOJ-ANALYSIS.md +0 -0
  66. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/LETTA-ANALYSIS.md +0 -0
  67. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/MCP-AGENT-ANALYSIS.md +0 -0
  68. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/MCP-ZERO-ANALYSIS.md +0 -0
  69. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/MEM0-ANALYSIS.md +0 -0
  70. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/OPENFGA-ANALYSIS.md +0 -0
  71. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/SKYLL-ANALYSIS.md +0 -0
  72. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/TEMPORAL-ANALYSIS.md +0 -0
  73. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/analysis/output/TOOL-BENCHMARK-ASSESSMENT.md +0 -0
  74. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/benchmarks/fixtures/behavioral.html +0 -0
  75. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/benchmarks/fixtures/dom-heavy.html +0 -0
  76. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/benchmarks/fixtures/form.html +0 -0
  77. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/benchmarks/fixtures/simple.html +0 -0
  78. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/benchmarks/v1.11.0-baseline-patchright.json +0 -0
  79. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/benchmarks/v1.11.0-baseline-patchright.md +0 -0
  80. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/conftest.py +0 -0
  81. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docker-compose.yml +0 -0
  82. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/agent-reliability.md +0 -0
  83. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/aiv/AIV_FRAMEWORK_v5.3.md +0 -0
  84. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/anti-detection-ejecta.md +0 -0
  85. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/api-stability.md +0 -0
  86. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/behavioral-synthesis.md +0 -0
  87. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/browser-networking.md +0 -0
  88. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/cloak-integration.md +0 -0
  89. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/consistency-engine.md +0 -0
  90. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/discovery/DISCOVERY-REPORT.md +0 -0
  91. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/error-catalog.md +0 -0
  92. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/fingerprint-scoring.md +0 -0
  93. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/fingerprint-validation.md +0 -0
  94. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/gap-analysis.md +0 -0
  95. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/human-behavior.md +0 -0
  96. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/memory.md +0 -0
  97. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/migration/v1-to-v2.md +0 -0
  98. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/migration/v1.8-to-v1.9.md +0 -0
  99. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/operating-doctrine.md +0 -0
  100. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/platform-abstraction.md +0 -0
  101. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/plugins.md +0 -0
  102. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/recording.md +0 -0
  103. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/rfcs/README.md +0 -0
  104. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/rfcs/v2-decomposition.md +0 -0
  105. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/rfcs/v2-track-a-api-simplification.md +0 -0
  106. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/rfcs/v2-track-b-network-stealth.md +0 -0
  107. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/rfcs/v2-track-c-behavioral-realism.md +0 -0
  108. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/rfcs/v2-track-d-challenge-infrastructure.md +0 -0
  109. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/rfcs/v2-track-e-e2e-harness.md +0 -0
  110. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/docs/stealth-coverage.md +0 -0
  111. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/cloak_stealth.py +0 -0
  112. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/fingerprint_scan.py +0 -0
  113. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/human_behavior.py +0 -0
  114. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/examples/stealth_mode.py +0 -0
  115. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/labels/config.json +0 -0
  116. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/scripts/agent_efficiency_benchmark.py +0 -0
  117. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/scripts/e2e_trend.py +0 -0
  118. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/scripts/run_stealth_gauntlet.sh +0 -0
  119. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/scripts/validate_e2e_report.py +0 -0
  120. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/scripts/verify_release_artifact.py +0 -0
  121. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/__init__.py +0 -0
  122. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/config.py +0 -0
  123. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/debug.py +0 -0
  124. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/delegator.py +0 -0
  125. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/facade.py +0 -0
  126. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/llm/__init__.py +0 -0
  127. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/llm/anthropic_client.py +0 -0
  128. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/llm/browser_transport.py +0 -0
  129. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/llm/budget_aware.py +0 -0
  130. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/llm/factory.py +0 -0
  131. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/llm/openai_client.py +0 -0
  132. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/llm/protocol.py +0 -0
  133. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/loop.py +0 -0
  134. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/loop_detector.py +0 -0
  135. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/plugins.py +0 -0
  136. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/registry.py +0 -0
  137. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/router.py +0 -0
  138. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/structured_logging.py +0 -0
  139. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/agent/types.py +0 -0
  140. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/__init__.py +0 -0
  141. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/bezier.py +0 -0
  142. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/dwell.py +0 -0
  143. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/fitts.py +0 -0
  144. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/gauss.py +0 -0
  145. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/keyboard.py +0 -0
  146. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/mouse.py +0 -0
  147. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/navigation.py +0 -0
  148. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/orchestrator.py +0 -0
  149. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/prng.py +0 -0
  150. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/qwerty.py +0 -0
  151. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/scroll.py +0 -0
  152. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/session_seed.py +0 -0
  153. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/behavioral/types.py +0 -0
  154. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/__init__.py +0 -0
  155. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/backends/__init__.py +0 -0
  156. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/backends/cdp_backend.py +0 -0
  157. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/backends/patchright_backend.py +0 -0
  158. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/backends/playwright_backend.py +0 -0
  159. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/backends/selenium_backend.py +0 -0
  160. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/cdp.py +0 -0
  161. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/cloak_backend.py +0 -0
  162. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/cloud.py +0 -0
  163. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/config.py +0 -0
  164. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/discovery.py +0 -0
  165. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/engine.py +0 -0
  166. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/fetch.py +0 -0
  167. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/injectors/__init__.py +0 -0
  168. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/injectors/bidi_injector.py +0 -0
  169. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/injectors/cdp_injector.py +0 -0
  170. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/injectors/page_injector.py +0 -0
  171. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/session.py +0 -0
  172. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/shutdown.py +0 -0
  173. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/browser/tabs.py +0 -0
  174. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/budget/__init__.py +0 -0
  175. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/budget/cascade.py +0 -0
  176. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/budget/client.py +0 -0
  177. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/budget/compressor.py +0 -0
  178. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/budget/cost_estimator.py +0 -0
  179. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/budget/credential_pool.py +0 -0
  180. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/budget/governor.py +0 -0
  181. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/budget/types.py +0 -0
  182. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/cli/commands.py +0 -0
  183. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/cli/interactive.py +0 -0
  184. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/cli/script.py +0 -0
  185. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/config.py +0 -0
  186. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/events/__init__.py +0 -0
  187. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/events/bus.py +0 -0
  188. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/events/types.py +0 -0
  189. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/__init__.py +0 -0
  190. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/cache.py +0 -0
  191. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/controller.py +0 -0
  192. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/decorator.py +0 -0
  193. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/presets.py +0 -0
  194. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/recovery.py +0 -0
  195. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/snapshot.py +0 -0
  196. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/types.py +0 -0
  197. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/interaction/vision.py +0 -0
  198. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/memory/__init__.py +0 -0
  199. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/memory/integration.py +0 -0
  200. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/memory/store.py +0 -0
  201. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/memory/types.py +0 -0
  202. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/plugins/__init__.py +0 -0
  203. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/plugins/decorators.py +0 -0
  204. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/plugins/hooks.py +0 -0
  205. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/py.typed +0 -0
  206. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recording/__init__.py +0 -0
  207. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recording/persistence.py +0 -0
  208. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recording/recorder.py +0 -0
  209. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recording/replayer.py +0 -0
  210. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recording/report.py +0 -0
  211. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recording/types.py +0 -0
  212. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/__init__.py +0 -0
  213. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/checkpoint.py +0 -0
  214. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/classifier.py +0 -0
  215. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/coordinator.py +0 -0
  216. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/event_bus.py +0 -0
  217. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/format_validator.py +0 -0
  218. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/reflection.py +0 -0
  219. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/retry_tracker.py +0 -0
  220. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/session_recovery.py +0 -0
  221. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/types.py +0 -0
  222. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/recovery/watchdogs.py +0 -0
  223. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/results/__init__.py +0 -0
  224. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/results/output.py +0 -0
  225. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/results/typed.py +0 -0
  226. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/results/types.py +0 -0
  227. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/results/validation.py +0 -0
  228. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/__init__.py +0 -0
  229. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/action_redaction.py +0 -0
  230. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/approval.py +0 -0
  231. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/credential_vault.py +0 -0
  232. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/domain_filter.py +0 -0
  233. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/gate.py +0 -0
  234. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/injection.py +0 -0
  235. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/manager.py +0 -0
  236. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/policy.py +0 -0
  237. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/redactor.py +0 -0
  238. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/security/types.py +0 -0
  239. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/session/__init__.py +0 -0
  240. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/session/proxy.py +0 -0
  241. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/skills/__init__.py +0 -0
  242. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/skills/activation.py +0 -0
  243. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/skills/markdown.py +0 -0
  244. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/skills/registry.py +0 -0
  245. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/skills/types.py +0 -0
  246. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/__init__.py +0 -0
  247. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/action_policy.py +0 -0
  248. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/captcha.py +0 -0
  249. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/challenges/__init__.py +0 -0
  250. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/challenges/cache.py +0 -0
  251. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/challenges/pow.py +0 -0
  252. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/challenges/turnstile.py +0 -0
  253. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/__init__.py +0 -0
  254. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/dag.py +0 -0
  255. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/derive.py +0 -0
  256. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/errors.py +0 -0
  257. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/inject.py +0 -0
  258. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/inject_delivery.py +0 -0
  259. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/matrix.py +0 -0
  260. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/prng.py +0 -0
  261. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rule.py +0 -0
  262. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/__init__.py +0 -0
  263. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/audio.py +0 -0
  264. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/behavior.py +0 -0
  265. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/fonts.py +0 -0
  266. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/gpu.py +0 -0
  267. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/locale.py +0 -0
  268. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/navigator.py +0 -0
  269. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/screen.py +0 -0
  270. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/consistency/rules/user_agent.py +0 -0
  271. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/diagnostics.py +0 -0
  272. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/__init__.py +0 -0
  273. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/audio.py +0 -0
  274. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/browser_apis.py +0 -0
  275. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/canvas.py +0 -0
  276. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/config.py +0 -0
  277. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/registry.py +0 -0
  278. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/timing.py +0 -0
  279. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/types.py +0 -0
  280. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ejecta/webrtc.py +0 -0
  281. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/fingerprint_scanner.py +0 -0
  282. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/fingerprint_score.py +0 -0
  283. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/headers.py +0 -0
  284. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/human.py +0 -0
  285. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/human_config.py +0 -0
  286. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/ip_reputation.py +0 -0
  287. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/manager.py +0 -0
  288. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/profiles/__init__.py +0 -0
  289. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/profiles/data/linux-chrome-stable.json +0 -0
  290. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/profiles/data/macos-chrome-stable.json +0 -0
  291. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/profiles/data/macos-m4-chrome-stable.json +0 -0
  292. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/profiles/data/windows-chrome-stable.json +0 -0
  293. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/profiles/host_detect.py +0 -0
  294. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/profiles/schema.py +0 -0
  295. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/proxy.py +0 -0
  296. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/proxy_pool.py +0 -0
  297. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/report.py +0 -0
  298. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/scoring.py +0 -0
  299. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/tls_baselines.json +0 -0
  300. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/tls_fingerprint.py +0 -0
  301. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/types.py +0 -0
  302. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/user_agent_pool.py +0 -0
  303. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/validation/__init__.py +0 -0
  304. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/validation/checks.py +0 -0
  305. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/validation/harness.py +0 -0
  306. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/validation/report.py +0 -0
  307. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/stealth/validation/suite.py +0 -0
  308. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/testing.py +0 -0
  309. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/tracing/__init__.py +0 -0
  310. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/tracing/cost_analytics.py +0 -0
  311. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/tracing/flow_logger.py +0 -0
  312. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/tracing/middleware.py +0 -0
  313. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/tracing/session_db.py +0 -0
  314. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/tracing/sinks.py +0 -0
  315. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/tracing/types.py +0 -0
  316. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/verification/__init__.py +0 -0
  317. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/verification/ax_diff.py +0 -0
  318. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/verification/hasher.py +0 -0
  319. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/verification/types.py +0 -0
  320. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/verification/verifier.py +0 -0
  321. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/vision/__init__.py +0 -0
  322. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/vision/cache.py +0 -0
  323. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/vision/controller.py +0 -0
  324. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/vision/coords.py +0 -0
  325. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/vision/factory.py +0 -0
  326. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/vision/ocr.py +0 -0
  327. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/vision/providers.py +0 -0
  328. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/src/super_browser/vision/types.py +0 -0
  329. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/__init__.py +0 -0
  330. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/conftest.py +0 -0
  331. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/__init__.py +0 -0
  332. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/conftest.py +0 -0
  333. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_01_example_nav.py +0 -0
  334. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_02_google_search.py +0 -0
  335. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_03_github_login.py +0 -0
  336. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_04_amazon_search.py +0 -0
  337. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_05_google_forms.py +0 -0
  338. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_06_google_flights.py +0 -0
  339. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_07_wikipedia_extract.py +0 -0
  340. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_08_reddit_spa.py +0 -0
  341. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_09_form_complex.py +0 -0
  342. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/discovery/test_task_10_signup_flow.py +0 -0
  343. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/__init__.py +0 -0
  344. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/conftest.py +0 -0
  345. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/test_behavioral_realism.py +0 -0
  346. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/test_challenge_detection.py +0 -0
  347. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/test_interaction.py +0 -0
  348. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/test_live_navigation.py +0 -0
  349. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/test_multi_tab.py +0 -0
  350. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/test_navigation.py +0 -0
  351. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/test_session_persistence.py +0 -0
  352. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e/test_stealth_overhead.py +0 -0
  353. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/e2e_v1_3_journey.py +0 -0
  354. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/__init__.py +0 -0
  355. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/conftest.py +0 -0
  356. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_config_composition.py +0 -0
  357. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_engine_backends.py +0 -0
  358. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_error_paths.py +0 -0
  359. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_facade_smoke.py +0 -0
  360. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_full_lifecycle.py +0 -0
  361. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_multi_backend.py +0 -0
  362. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_performance_smoke.py +0 -0
  363. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_playwright_integration.py +0 -0
  364. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_public_api.py +0 -0
  365. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_session_persistence.py +0 -0
  366. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_stealth_abstraction.py +0 -0
  367. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v1100_features.py +0 -0
  368. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v150_features.py +0 -0
  369. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v160_features.py +0 -0
  370. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v170_features.py +0 -0
  371. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v180_features.py +0 -0
  372. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v190_features.py +0 -0
  373. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v191_features.py +0 -0
  374. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v192_features.py +0 -0
  375. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v193_features.py +0 -0
  376. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v195_features.py +0 -0
  377. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v1_3_features.py +0 -0
  378. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/integration/test_v1_4_features.py +0 -0
  379. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/pattern_validation.py +0 -0
  380. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/__init__.py +0 -0
  381. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/conftest.py +0 -0
  382. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/test_chrome_runtime.py +0 -0
  383. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/test_cli_switches.py +0 -0
  384. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/test_headless_indicators.py +0 -0
  385. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/test_live_sites.py +0 -0
  386. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/test_runtime_enable.py +0 -0
  387. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/test_tls_fingerprint.py +0 -0
  388. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/stealth_detection/test_webdriver.py +0 -0
  389. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/__init__.py +0 -0
  390. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_action_timeout.py +0 -0
  391. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_browser_transport.py +0 -0
  392. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_controller_rebinding.py +0 -0
  393. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_debug_mode.py +0 -0
  394. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_default_tooling.py +0 -0
  395. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_delegator.py +0 -0
  396. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_error_screenshots.py +0 -0
  397. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_facade.py +0 -0
  398. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_facade_security.py +0 -0
  399. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_facade_security_control.py +0 -0
  400. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_facade_security_file_tab.py +0 -0
  401. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_facade_security_network.py +0 -0
  402. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_facade_security_session.py +0 -0
  403. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_fail_fast.py +0 -0
  404. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_llm.py +0 -0
  405. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_llm_budget.py +0 -0
  406. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_llm_production.py +0 -0
  407. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_llm_streaming.py +0 -0
  408. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_loop.py +0 -0
  409. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_loop_detector.py +0 -0
  410. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_prompt_isolation.py +0 -0
  411. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_registry.py +0 -0
  412. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_retry_budget.py +0 -0
  413. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_streaming.py +0 -0
  414. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_structured_logging.py +0 -0
  415. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_tab_cap.py +0 -0
  416. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_task_02.py +0 -0
  417. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_agent/test_types.py +0 -0
  418. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_behavioral/__init__.py +0 -0
  419. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_behavioral/test_behavioral.py +0 -0
  420. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_behavioral/test_dwell.py +0 -0
  421. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_behavioral/test_human_config_dwell.py +0 -0
  422. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_behavioral/test_navigation.py +0 -0
  423. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_behavioral/test_orchestrator.py +0 -0
  424. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_behavioral/test_session_seed.py +0 -0
  425. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_benchmark/__init__.py +0 -0
  426. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_benchmark/test_efficiency.py +0 -0
  427. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_benchmarks/test_browser_benchmark.py +0 -0
  428. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/__init__.py +0 -0
  429. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_cdp.py +0 -0
  430. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_cdp_backend.py +0 -0
  431. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_cloak_backend.py +0 -0
  432. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_cloak_docs.py +0 -0
  433. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_cloak_integration.py +0 -0
  434. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_config.py +0 -0
  435. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_discovery.py +0 -0
  436. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_engine_protocol.py +0 -0
  437. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_fetch.py +0 -0
  438. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_injectors.py +0 -0
  439. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_page.py +0 -0
  440. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_patchright_backend.py +0 -0
  441. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_playwright_backend.py +0 -0
  442. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_selenium_backend.py +0 -0
  443. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_session.py +0 -0
  444. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_browser/test_shutdown.py +0 -0
  445. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/__init__.py +0 -0
  446. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_cascade.py +0 -0
  447. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_cascade_governor.py +0 -0
  448. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_circuit_breaker.py +0 -0
  449. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_client.py +0 -0
  450. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_compressor.py +0 -0
  451. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_cost_estimator.py +0 -0
  452. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_credential_pool.py +0 -0
  453. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_governor.py +0 -0
  454. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_budget/test_types.py +0 -0
  455. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_cli/test_interactive.py +0 -0
  456. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_cli/test_script.py +0 -0
  457. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_cli/test_stealth_check.py +0 -0
  458. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_cli/test_stealth_validate.py +0 -0
  459. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_config.py +0 -0
  460. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_e2e/test_report_schema.py +0 -0
  461. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_e2e/test_trend.py +0 -0
  462. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_ejecta/test_audio.py +0 -0
  463. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_ejecta/test_batch37_integration.py +0 -0
  464. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_ejecta/test_batch38_integration.py +0 -0
  465. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_ejecta/test_browser_apis.py +0 -0
  466. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_ejecta/test_canvas.py +0 -0
  467. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_ejecta/test_integration.py +0 -0
  468. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_ejecta/test_timing.py +0 -0
  469. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_ejecta/test_webrtc.py +0 -0
  470. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_events/test_event_bus.py +0 -0
  471. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_events/test_lifecycle_hooks.py +0 -0
  472. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_governance_docs.py +0 -0
  473. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/__init__.py +0 -0
  474. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_cache.py +0 -0
  475. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_controller.py +0 -0
  476. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_decorator.py +0 -0
  477. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_injection.py +0 -0
  478. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_page_change.py +0 -0
  479. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_presets.py +0 -0
  480. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_recovery.py +0 -0
  481. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_snapshot.py +0 -0
  482. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_types.py +0 -0
  483. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_interaction/test_vision.py +0 -0
  484. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_memory/__init__.py +0 -0
  485. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_memory/test_cli_config.py +0 -0
  486. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_memory/test_integration.py +0 -0
  487. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_memory/test_store.py +0 -0
  488. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recording/__init__.py +0 -0
  489. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recording/test_persistence.py +0 -0
  490. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recording/test_recorder.py +0 -0
  491. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recording/test_replayer.py +0 -0
  492. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/__init__.py +0 -0
  493. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_checkpoint.py +0 -0
  494. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_classifier.py +0 -0
  495. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_coordinator.py +0 -0
  496. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_event_bus.py +0 -0
  497. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_format_validator.py +0 -0
  498. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_reflection.py +0 -0
  499. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_retry_tracker.py +0 -0
  500. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_session_recovery.py +0 -0
  501. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_types.py +0 -0
  502. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_recovery/test_watchdogs.py +0 -0
  503. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_release/test_naming_consistency.py +0 -0
  504. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_release/test_verify_artifact.py +0 -0
  505. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_results/__init__.py +0 -0
  506. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_results/test_batch40_integration.py +0 -0
  507. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_results/test_categories.py +0 -0
  508. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_results/test_output.py +0 -0
  509. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_results/test_typed.py +0 -0
  510. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_results/test_types.py +0 -0
  511. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_results/test_validation.py +0 -0
  512. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/__init__.py +0 -0
  513. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_approval.py +0 -0
  514. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_credential_vault.py +0 -0
  515. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_domain_filter.py +0 -0
  516. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_injection.py +0 -0
  517. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_manager.py +0 -0
  518. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_policy.py +0 -0
  519. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_redaction_pipeline.py +0 -0
  520. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_redactor.py +0 -0
  521. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_security/test_types.py +0 -0
  522. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_session/__init__.py +0 -0
  523. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_session/test_proxy.py +0 -0
  524. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_skills/__init__.py +0 -0
  525. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_skills/test_activation.py +0 -0
  526. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_skills/test_integration.py +0 -0
  527. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_skills/test_markdown.py +0 -0
  528. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_skills/test_registry.py +0 -0
  529. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_skills/test_types.py +0 -0
  530. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/__init__.py +0 -0
  531. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_action_policy.py +0 -0
  532. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_captcha.py +0 -0
  533. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_captcha_resolution.py +0 -0
  534. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_challenge_cache.py +0 -0
  535. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_challenge_config.py +0 -0
  536. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_consistency/test_consistency.py +0 -0
  537. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_consistency_inject.py +0 -0
  538. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_diagnostics.py +0 -0
  539. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_e2e_lifecycle.py +0 -0
  540. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_e2e_reporting.py +0 -0
  541. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_fingerprint_scanner.py +0 -0
  542. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_fingerprint_score.py +0 -0
  543. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_headers.py +0 -0
  544. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_human.py +0 -0
  545. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_human_behavior_v2.py +0 -0
  546. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_ip_reputation.py +0 -0
  547. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_kasada_detection.py +0 -0
  548. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_manager.py +0 -0
  549. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_network_stealth_config.py +0 -0
  550. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_profiles.py +0 -0
  551. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_proxy.py +0 -0
  552. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_proxy_pool.py +0 -0
  553. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_stealth_bridge.py +0 -0
  554. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_tls_fingerprint.py +0 -0
  555. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_turnstile_detection.py +0 -0
  556. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_types.py +0 -0
  557. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_user_agent_pool.py +0 -0
  558. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_stealth/test_validation.py +0 -0
  559. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_tracing/__init__.py +0 -0
  560. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_tracing/test_cost_analytics.py +0 -0
  561. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_tracing/test_flow_logger.py +0 -0
  562. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_tracing/test_middleware.py +0 -0
  563. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_tracing/test_session_db.py +0 -0
  564. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_tracing/test_sinks.py +0 -0
  565. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_tracing/test_types.py +0 -0
  566. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_verification/__init__.py +0 -0
  567. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_verification/test_ax_diff.py +0 -0
  568. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_verification/test_hasher.py +0 -0
  569. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_verification/test_types.py +0 -0
  570. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_verification/test_verifier.py +0 -0
  571. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_vision/__init__.py +0 -0
  572. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_vision/test_cache.py +0 -0
  573. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_vision/test_controller.py +0 -0
  574. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_vision/test_coords.py +0 -0
  575. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_vision/test_factory.py +0 -0
  576. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_vision/test_ocr.py +0 -0
  577. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_vision/test_providers.py +0 -0
  578. {superbrowser_sdk-2.1.0 → superbrowser_sdk-2.2.0}/tests/test_vision/test_types.py +0 -0
@@ -7,6 +7,70 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.2.0] — 2026-06-16
11
+
12
+ ### Overview
13
+
14
+ **v2.2.0 — API Ergonomics**
15
+
16
+ v2.2 polishes the public API surface based on the Track D discovery
17
+ audit. No new features, no breaking changes — cleaner imports, better
18
+ CLI discoverability, and a new `python -m super_browser` entry point.
19
+
20
+ ### Added
21
+
22
+ - **`python -m super_browser` support**: New `__main__.py` delegates to
23
+ the CLI dispatcher, so users can run either `superbrowser version` or
24
+ `python -m super_browser version`.
25
+
26
+ ### Changed
27
+
28
+ - **Standardized top-level imports**: All examples, quickstart, and docs
29
+ now use `from super_browser import SuperBrowser`, `Config`, and
30
+ `create_llm` instead of deep module paths.
31
+ - **CLI help clarified**:
32
+ - `stealth-check` → "Run offline fingerprint scoring and report"
33
+ - `stealth-validate` → "Validate fingerprint against baselines
34
+ (CI/regression mode)"
35
+ - `result-demo` → labeled as internal command
36
+ - **API reference cleaned**: Removed stale `SuperBrowserConfig`
37
+ references (class removed in v2.0) and the removed `core` field row
38
+ from `AgentConfig`.
39
+ - **`raw_page` deprecation updated**: Removal target changed from
40
+ "v2.1" to "v3.0" — the alias stays available through the v2.x series.
41
+
42
+ ### Track D audit artifacts
43
+
44
+ - `docs/api-ergonomics-audit.md` — full discovery document with 15
45
+ findings across three buckets (patch-safe, backward-compatible polish,
46
+ defer).
47
+
48
+ ## [2.1.1] — 2026-06-16
49
+
50
+ ### Fixed — Smoke workflow install spec format
51
+
52
+ - **Smoke install specs were malformed** (`dist==version[extra]` instead
53
+ of `dist[extra]==version`), causing the post-release smoke workflow
54
+ to fail for any version-targeted run.
55
+ - Affects `[all]`, `[patchright]`, and `[playwright]` install checks in
56
+ `scripts/smoke_published.py`.
57
+ - Found by the v2.1.0 post-release smoke run — exactly the kind of
58
+ packaging bug the workflow was designed to catch.
59
+ - Added `TestInstallSpecFormat` regression test verifying PEP 508
60
+ extras-before-version ordering.
61
+
62
+ ### Fixed — Benchmark deprecated API usage
63
+
64
+ - `scripts/browser_benchmark.py` used the deprecated `raw_page` attribute,
65
+ producing `DeprecationWarning` on every run.
66
+ - Replaced `page.raw_page.query_selector_all` → `page.backend_page`
67
+ - Replaced `page.raw_page.set_viewport_size` → `page.backend_page`
68
+
69
+ ### Version metadata
70
+
71
+ - `pyproject.toml`, `__init__.py`, doc headers, test assertions bumped
72
+ to `2.1.1`.
73
+
10
74
  ## [2.1.0] — 2026-06-16
11
75
 
12
76
  ### Overview
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superbrowser-sdk
3
- Version: 2.1.0
3
+ Version: 2.2.0
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.1.0 — Complete public API documentation.
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[SuperBrowserConfig] = None,
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` | `SuperBrowserConfig \| None` | `None` | Agent configuration. Uses defaults when `None`. |
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
- | `core` | `SuperBrowserConfig` | defaults | Nested agent-level settings. |
631
+
632
632
 
633
633
  #### `TracingConfig`
634
634
 
@@ -1,6 +1,6 @@
1
1
  # Architecture
2
2
 
3
- > **Super Browser** v2.1.0 — System architecture, data flow, and extension points.
3
+ > **Super Browser** v2.2.0 — System architecture, data flow, and extension points.
4
4
 
5
5
  ---
6
6
 
@@ -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.agent.facade import SuperBrowser; print('OK')"
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.agent.facade import SuperBrowser
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.config import Config
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.config import Config
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.config import Config
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.agent.llm.factory import create_llm
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.agent.facade import SuperBrowser
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")
@@ -11,7 +11,7 @@ Run:
11
11
  import asyncio
12
12
  import logging
13
13
 
14
- from super_browser.agent.facade import SuperBrowser
14
+ from super_browser import SuperBrowser
15
15
 
16
16
  # Configure logging to see what's happening
17
17
  logging.basicConfig(
@@ -18,7 +18,7 @@ import asyncio
18
18
  import logging
19
19
  from pathlib import Path
20
20
 
21
- from super_browser.agent.facade import SuperBrowser
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.agent.facade import SuperBrowser
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.agent.facade import SuperBrowser
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.agent.facade import SuperBrowser
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.1.0"
7
+ version = "2.2.0"
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" }
@@ -204,7 +204,7 @@ async def _bench_dom_query(base_url: str, runs: int) -> dict[str, Any]:
204
204
  samples: list[float] = []
205
205
  for _ in range(runs):
206
206
  t0 = time.monotonic()
207
- await page.query_selector_all("div")
207
+ await page.backend_page.query_selector_all("div")
208
208
  elapsed = (time.monotonic() - t0) * 1000
209
209
  samples.append(round(elapsed, 3))
210
210
  await page.close()
@@ -244,7 +244,7 @@ async def _bench_screenshot(base_url: str, runs: int) -> dict[str, Any]:
244
244
  try:
245
245
  page = await engine.new_page()
246
246
  await page.goto(f"{base_url}/simple.html", wait_until="load")
247
- await page.raw_page.set_viewport_size({"width": 1280, "height": 720})
247
+ await page.backend_page.set_viewport_size({"width": 1280, "height": 720})
248
248
  samples: list[float] = []
249
249
  for _ in range(runs):
250
250
  t0 = time.monotonic()
@@ -95,8 +95,9 @@ def run_smoke(
95
95
  checks: list[dict[str, Any]] = []
96
96
  started = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
97
97
 
98
- # Determine install spec
99
- install_spec = f"{dist}=={version}" if version else dist
98
+ # Determine install spec — extras go before version: dist[extra]==version
99
+ version_suffix = f"=={version}" if version else ""
100
+ install_spec = f"{dist}{version_suffix}" # for display only
100
101
 
101
102
  with tempfile.TemporaryDirectory(prefix="sb_smoke_") as tmpdir:
102
103
  tmp = Path(tmpdir)
@@ -114,10 +115,10 @@ def run_smoke(
114
115
 
115
116
  # Install [all]
116
117
  rc, out, err = _run(
117
- [str(venv_python), "-m", "pip", "install", f"{install_spec}[all]"],
118
+ [str(venv_python), "-m", "pip", "install", f"{dist}[all]{version_suffix}"],
118
119
  timeout=180,
119
120
  )
120
- checks.append(_check_result(f"install_all ({install_spec}[all])", rc, out, err))
121
+ checks.append(_check_result(f"install_all ({dist}[all]{version_suffix})", rc, out, err))
121
122
  if rc != 0:
122
123
  # No point continuing if base install fails
123
124
  report = _build_report(started, install_spec, checks)
@@ -145,17 +146,17 @@ def run_smoke(
145
146
 
146
147
  # Verify [patchright] extra installs without conflict
147
148
  rc, out, err = _run(
148
- [str(venv_python), "-m", "pip", "install", f"{install_spec}[patchright]"],
149
+ [str(venv_python), "-m", "pip", "install", f"{dist}[patchright]{version_suffix}"],
149
150
  timeout=180,
150
151
  )
151
- checks.append(_check_result(f"install_patchright ({install_spec}[patchright])", rc, out, err))
152
+ checks.append(_check_result(f"install_patchright ({dist}[patchright]{version_suffix})", rc, out, err))
152
153
 
153
154
  # Verify [playwright] extra installs without conflict
154
155
  rc, out, err = _run(
155
- [str(venv_python), "-m", "pip", "install", f"{install_spec}[playwright]"],
156
+ [str(venv_python), "-m", "pip", "install", f"{dist}[playwright]{version_suffix}"],
156
157
  timeout=180,
157
158
  )
158
- checks.append(_check_result(f"install_playwright ({install_spec}[playwright])", rc, out, err))
159
+ checks.append(_check_result(f"install_playwright ({dist}[playwright]{version_suffix})", rc, out, err))
159
160
 
160
161
  # Version match check (if version was specified)
161
162
  if version and installed_version:
@@ -6,7 +6,7 @@ from super_browser.agent.types import StreamEvent as StreamEvent # noqa: F401
6
6
  from super_browser.config import Config as Config # noqa: F401
7
7
  from super_browser.results.types import ActionResult as ActionResult # noqa: F401
8
8
 
9
- __version__ = "2.1.0"
9
+ __version__ = "2.2.0"
10
10
 
11
11
  __all__ = [
12
12
  "SuperBrowser",
@@ -0,0 +1,12 @@
1
+ """Entry point for ``python -m super_browser``.
2
+
3
+ Delegates to the CLI dispatcher so users can run either::
4
+
5
+ superbrowser version
6
+ python -m super_browser version
7
+ """
8
+
9
+ from super_browser.cli import main
10
+
11
+ if __name__ == "__main__":
12
+ main()
@@ -84,12 +84,12 @@ class PageHandle:
84
84
  """Deprecated alias for :attr:`backend_page`.
85
85
 
86
86
  .. deprecated:: 2.0
87
- Use :attr:`backend_page` instead. Will be removed in v2.1.
87
+ Use :attr:`backend_page` instead. Will be removed in v3.0.
88
88
  """
89
89
  import warnings
90
90
  warnings.warn(
91
91
  "raw_page is deprecated, use backend_page instead. "
92
- "Will be removed in v2.1.",
92
+ "Will be removed in v3.0.",
93
93
  DeprecationWarning,
94
94
  stacklevel=2,
95
95
  )
@@ -11,10 +11,10 @@ Commands:
11
11
  script — Execute a YAML script file
12
12
  replay — Replay a recording JSON file
13
13
  act — Run a one-shot agent instruction
14
- stealth-check — Run stealth fingerprint check (offline or online)
15
- stealth-validate — Fingerprint validation and regression harness
14
+ stealth-check — Run offline fingerprint scoring and report
15
+ stealth-validate — Validate fingerprint against baselines (CI/regression mode)
16
16
  memory — Manage per-domain agent memory
17
- result-demo — Demonstrate structured result categories
17
+ result-demo — Internal: result-type demo (not a primary command)
18
18
  """
19
19
 
20
20
  from __future__ import annotations
@@ -77,13 +77,13 @@ def main() -> None:
77
77
  act_parser.add_argument("--max-steps", type=int, default=50, help="Max agent steps (default: 50)")
78
78
 
79
79
  # stealth-check
80
- stealth_check = sub.add_parser("stealth-check", help="Run stealth fingerprint check (offline mode)")
80
+ stealth_check = sub.add_parser("stealth-check", help="Run offline fingerprint scoring and report")
81
81
  stealth_check.add_argument("--online", action="store_true", default=False, help="Run in online mode (requires browser)")
82
82
  stealth_check.add_argument("--format", default="markdown", choices=["markdown", "html"], help="Report format (default: markdown)")
83
83
  stealth_check.add_argument("--threshold", type=int, default=70, help="Pass threshold (default: 70)")
84
84
 
85
85
  # stealth-validate
86
- sv_parser = sub.add_parser("stealth-validate", help="Fingerprint validation and regression harness")
86
+ sv_parser = sub.add_parser("stealth-validate", help="Validate fingerprint against baselines (CI/regression mode)")
87
87
  sv_parser.add_argument("--profile", default=None, help="Device profile ID")
88
88
  sv_parser.add_argument("--seed", default=None, help="Seed for matrix derivation")
89
89
  sv_parser.add_argument("--baseline-dir", default=None, help="Baseline directory")
@@ -105,8 +105,8 @@ def main() -> None:
105
105
  memory_prune.add_argument("--dir", default=None, help="Memory directory")
106
106
  memory_prune.add_argument("--ttl", type=int, default=30, help="TTL in days (default: 30)")
107
107
 
108
- # result-demo
109
- json_parser = sub.add_parser("result-demo", help="Demonstrate structured result categories")
108
+ # result-demo (internal — not a primary command, kept for backward compat)
109
+ json_parser = sub.add_parser("result-demo", help="internal: result-type demo")
110
110
  json_parser.add_argument("--json", action="store_true", help="Output as JSON")
111
111
  json_parser.add_argument("--fail", action="store_true", help="Generate a failure result")
112
112
  json_parser.add_argument("--stale", action="store_true", help="Generate a stale-ref failure")
@@ -40,9 +40,9 @@ class TestV194APIReference:
40
40
  def test_api_reference_version_header(self) -> None:
41
41
  first_lines = Path("./docs/api-reference.md").read_text(encoding="utf-8").split("\n")[:5]
42
42
  joined = "\n".join(first_lines)
43
- assert "v2.1.0" in joined
43
+ assert "v2.2.0" in joined
44
44
 
45
45
  def test_architecture_version_header(self) -> None:
46
46
  first_lines = Path("./docs/architecture.md").read_text(encoding="utf-8").split("\n")[:5]
47
47
  joined = "\n".join(first_lines)
48
- assert "v2.1.0" in joined
48
+ assert "v2.2.0" in joined
@@ -118,3 +118,10 @@ class TestCLIEntryPoint:
118
118
  # The package __file__ should point to __init__.py, not cli.py
119
119
  assert cli.__file__.endswith("__init__.py")
120
120
  assert "cli.py" not in cli.__file__
121
+
122
+ def test_module_entry_point_exists(self) -> None:
123
+ """`python -m super_browser` works via `__main__.py`."""
124
+ import super_browser.__main__ as main_mod
125
+
126
+ assert hasattr(main_mod, "main")
127
+ assert callable(main_mod.main)