superbrowser-sdk 2.3.1__tar.gz → 2.5.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 (616) hide show
  1. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/CHANGELOG.md +122 -0
  2. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/PKG-INFO +1 -1
  3. superbrowser_sdk-2.5.0/docs/mcp.md +325 -0
  4. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/pyproject.toml +1 -1
  5. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/__init__.py +1 -1
  6. superbrowser_sdk-2.5.0/src/super_browser/agent/diagnostics.py +287 -0
  7. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/facade.py +28 -0
  8. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/mcp_server.py +614 -97
  9. superbrowser_sdk-2.5.0/tests/test_diagnostics.py +760 -0
  10. superbrowser_sdk-2.5.0/tests/test_mcp_diagnostics.py +271 -0
  11. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_mcp_entrypoint.py +1 -1
  12. superbrowser_sdk-2.5.0/tests/test_mcp_navigation.py +1075 -0
  13. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_mcp_permissions.py +11 -6
  14. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_mcp_server.py +38 -22
  15. superbrowser_sdk-2.5.0/tests/test_mcp_server_smoke.py +229 -0
  16. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_mcp_write_tools.py +6 -4
  17. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_mcp_write_tools_wave2.py +2 -1
  18. superbrowser_sdk-2.3.1/docs/mcp.md +0 -190
  19. superbrowser_sdk-2.3.1/tests/test_mcp_server_smoke.py +0 -153
  20. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.env.example +0 -0
  21. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/adversarial-v3.yml +0 -0
  22. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/adversarial.yml +0 -0
  23. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/benchmark.yml +0 -0
  24. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/dco.yml +0 -0
  25. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/e2e.yml +0 -0
  26. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/publish.yml +0 -0
  27. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/smoke.yml +0 -0
  28. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/stress.yml +0 -0
  29. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.github/workflows/test.yml +0 -0
  30. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.gitignore +0 -0
  31. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/.pre-commit-config.yaml +0 -0
  32. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/CONTRIBUTING.md +0 -0
  33. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/Dockerfile +0 -0
  34. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/LICENSE +0 -0
  35. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/README.md +0 -0
  36. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/Super-Browser.png +0 -0
  37. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/benchmarks/fixtures/behavioral.html +0 -0
  38. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/benchmarks/fixtures/dom-heavy.html +0 -0
  39. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/benchmarks/fixtures/form.html +0 -0
  40. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/benchmarks/fixtures/simple.html +0 -0
  41. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/benchmarks/v1.11.0-baseline-patchright.json +0 -0
  42. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/benchmarks/v1.11.0-baseline-patchright.md +0 -0
  43. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/conftest.py +0 -0
  44. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docker-compose.yml +0 -0
  45. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/agent-reliability.md +0 -0
  46. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/aiv/AIV_FRAMEWORK_v5.3.md +0 -0
  47. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/anti-detection-ejecta.md +0 -0
  48. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/api-ergonomics-audit.md +0 -0
  49. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/api-reference.md +0 -0
  50. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/api-stability.md +0 -0
  51. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/architecture.md +0 -0
  52. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/behavioral-synthesis.md +0 -0
  53. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/browser-networking.md +0 -0
  54. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/cloak-integration.md +0 -0
  55. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/consistency-engine.md +0 -0
  56. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/discovery/DISCOVERY-REPORT.md +0 -0
  57. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/error-catalog.md +0 -0
  58. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/fingerprint-scoring.md +0 -0
  59. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/fingerprint-validation.md +0 -0
  60. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/gap-analysis.md +0 -0
  61. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/human-behavior.md +0 -0
  62. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/memory.md +0 -0
  63. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/migration/v1-to-v2.md +0 -0
  64. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/migration/v1.8-to-v1.9.md +0 -0
  65. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/operating-doctrine.md +0 -0
  66. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/platform-abstraction.md +0 -0
  67. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/plugins.md +0 -0
  68. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/quickstart.md +0 -0
  69. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/recording.md +0 -0
  70. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/rfcs/README.md +0 -0
  71. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/rfcs/v2-decomposition.md +0 -0
  72. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/rfcs/v2-track-a-api-simplification.md +0 -0
  73. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/rfcs/v2-track-b-network-stealth.md +0 -0
  74. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/rfcs/v2-track-c-behavioral-realism.md +0 -0
  75. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/rfcs/v2-track-d-challenge-infrastructure.md +0 -0
  76. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/rfcs/v2-track-e-e2e-harness.md +0 -0
  77. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/stealth-coverage.md +0 -0
  78. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/docs/stealth-evidence.md +0 -0
  79. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/backend_selection.py +0 -0
  80. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/basic_usage.py +0 -0
  81. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/budget_tracking.py +0 -0
  82. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/cloak_stealth.py +0 -0
  83. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/error_handling.py +0 -0
  84. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/fingerprint_scan.py +0 -0
  85. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/human_behavior.py +0 -0
  86. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/multi_tab_workflow.py +0 -0
  87. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/session_persistence.py +0 -0
  88. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/examples/stealth_mode.py +0 -0
  89. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/adversarial_run.py +0 -0
  90. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/agent_efficiency_benchmark.py +0 -0
  91. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/browser_benchmark.py +0 -0
  92. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/e2e_trend.py +0 -0
  93. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/run_stealth_gauntlet.sh +0 -0
  94. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/smoke_published.py +0 -0
  95. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/stress_real_world.py +0 -0
  96. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/validate_e2e_report.py +0 -0
  97. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/scripts/verify_release_artifact.py +0 -0
  98. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/__main__.py +0 -0
  99. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/__init__.py +0 -0
  100. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/config.py +0 -0
  101. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/debug.py +0 -0
  102. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/delegator.py +0 -0
  103. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/llm/__init__.py +0 -0
  104. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/llm/anthropic_client.py +0 -0
  105. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/llm/browser_transport.py +0 -0
  106. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/llm/budget_aware.py +0 -0
  107. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/llm/factory.py +0 -0
  108. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/llm/openai_client.py +0 -0
  109. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/llm/protocol.py +0 -0
  110. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/loop.py +0 -0
  111. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/loop_detector.py +0 -0
  112. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/plugins.py +0 -0
  113. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/registry.py +0 -0
  114. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/router.py +0 -0
  115. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/structured_logging.py +0 -0
  116. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/agent/types.py +0 -0
  117. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/__init__.py +0 -0
  118. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/bezier.py +0 -0
  119. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/dwell.py +0 -0
  120. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/fitts.py +0 -0
  121. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/gauss.py +0 -0
  122. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/keyboard.py +0 -0
  123. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/mouse.py +0 -0
  124. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/navigation.py +0 -0
  125. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/orchestrator.py +0 -0
  126. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/prng.py +0 -0
  127. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/qwerty.py +0 -0
  128. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/scroll.py +0 -0
  129. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/session_seed.py +0 -0
  130. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/behavioral/types.py +0 -0
  131. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/__init__.py +0 -0
  132. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/backends/__init__.py +0 -0
  133. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/backends/cdp_backend.py +0 -0
  134. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/backends/patchright_backend.py +0 -0
  135. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/backends/playwright_backend.py +0 -0
  136. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/backends/selenium_backend.py +0 -0
  137. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/cdp.py +0 -0
  138. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/cloak_backend.py +0 -0
  139. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/cloud.py +0 -0
  140. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/config.py +0 -0
  141. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/discovery.py +0 -0
  142. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/engine.py +0 -0
  143. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/fetch.py +0 -0
  144. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/injectors/__init__.py +0 -0
  145. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/injectors/bidi_injector.py +0 -0
  146. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/injectors/cdp_injector.py +0 -0
  147. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/injectors/page_injector.py +0 -0
  148. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/page.py +0 -0
  149. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/session.py +0 -0
  150. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/shutdown.py +0 -0
  151. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/browser/tabs.py +0 -0
  152. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/budget/__init__.py +0 -0
  153. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/budget/cascade.py +0 -0
  154. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/budget/client.py +0 -0
  155. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/budget/compressor.py +0 -0
  156. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/budget/cost_estimator.py +0 -0
  157. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/budget/credential_pool.py +0 -0
  158. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/budget/governor.py +0 -0
  159. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/budget/types.py +0 -0
  160. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/cli/__init__.py +0 -0
  161. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/cli/commands.py +0 -0
  162. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/cli/interactive.py +0 -0
  163. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/cli/script.py +0 -0
  164. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/config.py +0 -0
  165. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/events/__init__.py +0 -0
  166. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/events/bus.py +0 -0
  167. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/events/types.py +0 -0
  168. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/__init__.py +0 -0
  169. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/cache.py +0 -0
  170. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/controller.py +0 -0
  171. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/decorator.py +0 -0
  172. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/presets.py +0 -0
  173. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/recovery.py +0 -0
  174. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/snapshot.py +0 -0
  175. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/types.py +0 -0
  176. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/interaction/vision.py +0 -0
  177. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/memory/__init__.py +0 -0
  178. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/memory/integration.py +0 -0
  179. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/memory/store.py +0 -0
  180. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/memory/types.py +0 -0
  181. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/plugins/__init__.py +0 -0
  182. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/plugins/decorators.py +0 -0
  183. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/plugins/hooks.py +0 -0
  184. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/py.typed +0 -0
  185. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recording/__init__.py +0 -0
  186. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recording/persistence.py +0 -0
  187. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recording/recorder.py +0 -0
  188. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recording/replayer.py +0 -0
  189. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recording/report.py +0 -0
  190. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recording/types.py +0 -0
  191. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/__init__.py +0 -0
  192. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/checkpoint.py +0 -0
  193. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/classifier.py +0 -0
  194. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/coordinator.py +0 -0
  195. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/event_bus.py +0 -0
  196. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/format_validator.py +0 -0
  197. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/reflection.py +0 -0
  198. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/retry_tracker.py +0 -0
  199. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/session_recovery.py +0 -0
  200. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/types.py +0 -0
  201. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/recovery/watchdogs.py +0 -0
  202. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/results/__init__.py +0 -0
  203. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/results/output.py +0 -0
  204. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/results/typed.py +0 -0
  205. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/results/types.py +0 -0
  206. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/results/validation.py +0 -0
  207. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/__init__.py +0 -0
  208. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/action_redaction.py +0 -0
  209. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/approval.py +0 -0
  210. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/credential_vault.py +0 -0
  211. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/domain_filter.py +0 -0
  212. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/gate.py +0 -0
  213. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/injection.py +0 -0
  214. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/manager.py +0 -0
  215. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/policy.py +0 -0
  216. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/redactor.py +0 -0
  217. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/security/types.py +0 -0
  218. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/session/__init__.py +0 -0
  219. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/session/proxy.py +0 -0
  220. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/skills/__init__.py +0 -0
  221. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/skills/activation.py +0 -0
  222. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/skills/markdown.py +0 -0
  223. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/skills/registry.py +0 -0
  224. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/skills/types.py +0 -0
  225. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/__init__.py +0 -0
  226. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/action_policy.py +0 -0
  227. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/captcha.py +0 -0
  228. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/challenges/__init__.py +0 -0
  229. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/challenges/cache.py +0 -0
  230. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/challenges/pow.py +0 -0
  231. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/challenges/turnstile.py +0 -0
  232. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/__init__.py +0 -0
  233. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/dag.py +0 -0
  234. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/derive.py +0 -0
  235. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/errors.py +0 -0
  236. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/inject.py +0 -0
  237. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/inject_delivery.py +0 -0
  238. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/matrix.py +0 -0
  239. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/prng.py +0 -0
  240. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rule.py +0 -0
  241. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/__init__.py +0 -0
  242. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/audio.py +0 -0
  243. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/behavior.py +0 -0
  244. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/fonts.py +0 -0
  245. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/gpu.py +0 -0
  246. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/locale.py +0 -0
  247. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/navigator.py +0 -0
  248. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/screen.py +0 -0
  249. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/consistency/rules/user_agent.py +0 -0
  250. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/diagnostics.py +0 -0
  251. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/__init__.py +0 -0
  252. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/audio.py +0 -0
  253. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/browser_apis.py +0 -0
  254. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/canvas.py +0 -0
  255. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/config.py +0 -0
  256. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/registry.py +0 -0
  257. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/timing.py +0 -0
  258. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/types.py +0 -0
  259. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ejecta/webrtc.py +0 -0
  260. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/fingerprint_scanner.py +0 -0
  261. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/fingerprint_score.py +0 -0
  262. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/headers.py +0 -0
  263. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/human.py +0 -0
  264. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/human_config.py +0 -0
  265. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/ip_reputation.py +0 -0
  266. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/manager.py +0 -0
  267. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/profiles/__init__.py +0 -0
  268. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/profiles/data/linux-chrome-stable.json +0 -0
  269. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/profiles/data/macos-chrome-stable.json +0 -0
  270. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/profiles/data/macos-m4-chrome-stable.json +0 -0
  271. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/profiles/data/windows-chrome-stable.json +0 -0
  272. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/profiles/host_detect.py +0 -0
  273. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/profiles/schema.py +0 -0
  274. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/proxy.py +0 -0
  275. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/proxy_pool.py +0 -0
  276. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/report.py +0 -0
  277. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/scoring.py +0 -0
  278. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/tls_baselines.json +0 -0
  279. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/tls_fingerprint.py +0 -0
  280. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/types.py +0 -0
  281. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/user_agent_pool.py +0 -0
  282. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/validation/__init__.py +0 -0
  283. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/validation/checks.py +0 -0
  284. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/validation/harness.py +0 -0
  285. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/validation/report.py +0 -0
  286. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/stealth/validation/suite.py +0 -0
  287. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/testing.py +0 -0
  288. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/tracing/__init__.py +0 -0
  289. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/tracing/cost_analytics.py +0 -0
  290. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/tracing/flow_logger.py +0 -0
  291. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/tracing/middleware.py +0 -0
  292. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/tracing/session_db.py +0 -0
  293. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/tracing/sinks.py +0 -0
  294. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/tracing/types.py +0 -0
  295. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/verification/__init__.py +0 -0
  296. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/verification/ax_diff.py +0 -0
  297. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/verification/hasher.py +0 -0
  298. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/verification/types.py +0 -0
  299. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/verification/verifier.py +0 -0
  300. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/vision/__init__.py +0 -0
  301. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/vision/cache.py +0 -0
  302. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/vision/controller.py +0 -0
  303. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/vision/coords.py +0 -0
  304. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/vision/factory.py +0 -0
  305. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/vision/ocr.py +0 -0
  306. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/vision/providers.py +0 -0
  307. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/src/super_browser/vision/types.py +0 -0
  308. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/stress/__init__.py +0 -0
  309. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/stress/server.py +0 -0
  310. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/__init__.py +0 -0
  311. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/__init__.py +0 -0
  312. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/conftest.py +0 -0
  313. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/controlled_server.py +0 -0
  314. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/report.py +0 -0
  315. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/scoring.py +0 -0
  316. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/targets.py +0 -0
  317. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/test_controlled_server.py +0 -0
  318. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/test_targets_unit.py +0 -0
  319. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/test_tier1_scanners.py +0 -0
  320. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/test_tier2_vendors.py +0 -0
  321. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial/test_tier3_controlled.py +0 -0
  322. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/README.md +0 -0
  323. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/__init__.py +0 -0
  324. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/backends.py +0 -0
  325. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/behavioral_telemetry.py +0 -0
  326. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/core.py +0 -0
  327. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/engines/__init__.py +0 -0
  328. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/engines/scoring.py +0 -0
  329. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/harness.py +0 -0
  330. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/reporters/__init__.py +0 -0
  331. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/reporters/history.py +0 -0
  332. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/reporters/json_reporter.py +0 -0
  333. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/reporters/markdown_reporter.py +0 -0
  334. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/server.py +0 -0
  335. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/vectors/__init__.py +0 -0
  336. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/vectors/automation.py +0 -0
  337. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/vectors/behavioral.py +0 -0
  338. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/vectors/controlled.py +0 -0
  339. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/vectors/ejector.py +0 -0
  340. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/vectors/external.py +0 -0
  341. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/vectors/fingerprint.py +0 -0
  342. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/adversarial3/vectors/network.py +0 -0
  343. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/pytest.ini +0 -0
  344. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/run.py +0 -0
  345. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/__init__.py +0 -0
  346. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/conftest.py +0 -0
  347. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_backends.py +0 -0
  348. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_behavioral_telemetry.py +0 -0
  349. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_behavioral_telemetry_smoke.py +0 -0
  350. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_behavioral_vectors.py +0 -0
  351. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_core.py +0 -0
  352. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_external.py +0 -0
  353. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_harness_smoke.py +0 -0
  354. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_header_ordering.py +0 -0
  355. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_reporters.py +0 -0
  356. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_scoring.py +0 -0
  357. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_server.py +0 -0
  358. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_superbrowser_backend.py +0 -0
  359. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/adversarial_v3/tests/test_vectors.py +0 -0
  360. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/conftest.py +0 -0
  361. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/__init__.py +0 -0
  362. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/conftest.py +0 -0
  363. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_01_example_nav.py +0 -0
  364. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_02_google_search.py +0 -0
  365. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_03_github_login.py +0 -0
  366. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_04_amazon_search.py +0 -0
  367. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_05_google_forms.py +0 -0
  368. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_06_google_flights.py +0 -0
  369. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_07_wikipedia_extract.py +0 -0
  370. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_08_reddit_spa.py +0 -0
  371. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_09_form_complex.py +0 -0
  372. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/discovery/test_task_10_signup_flow.py +0 -0
  373. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/__init__.py +0 -0
  374. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/conftest.py +0 -0
  375. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/test_behavioral_realism.py +0 -0
  376. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/test_challenge_detection.py +0 -0
  377. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/test_interaction.py +0 -0
  378. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/test_live_navigation.py +0 -0
  379. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/test_multi_tab.py +0 -0
  380. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/test_navigation.py +0 -0
  381. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/test_session_persistence.py +0 -0
  382. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e/test_stealth_overhead.py +0 -0
  383. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/e2e_v1_3_journey.py +0 -0
  384. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/__init__.py +0 -0
  385. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/conftest.py +0 -0
  386. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_config_composition.py +0 -0
  387. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_engine_backends.py +0 -0
  388. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_error_paths.py +0 -0
  389. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_facade_smoke.py +0 -0
  390. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_full_lifecycle.py +0 -0
  391. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_multi_backend.py +0 -0
  392. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_performance_smoke.py +0 -0
  393. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_playwright_integration.py +0 -0
  394. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_public_api.py +0 -0
  395. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_session_persistence.py +0 -0
  396. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_stealth_abstraction.py +0 -0
  397. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v1100_features.py +0 -0
  398. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v150_features.py +0 -0
  399. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v160_features.py +0 -0
  400. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v170_features.py +0 -0
  401. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v180_features.py +0 -0
  402. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v190_features.py +0 -0
  403. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v191_features.py +0 -0
  404. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v192_features.py +0 -0
  405. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v193_features.py +0 -0
  406. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v194_features.py +0 -0
  407. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v195_features.py +0 -0
  408. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v1_3_features.py +0 -0
  409. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/integration/test_v1_4_features.py +0 -0
  410. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/pattern_validation.py +0 -0
  411. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/__init__.py +0 -0
  412. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/conftest.py +0 -0
  413. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/test_chrome_runtime.py +0 -0
  414. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/test_cli_switches.py +0 -0
  415. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/test_headless_indicators.py +0 -0
  416. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/test_live_sites.py +0 -0
  417. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/test_runtime_enable.py +0 -0
  418. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/test_tls_fingerprint.py +0 -0
  419. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/stealth_detection/test_webdriver.py +0 -0
  420. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/__init__.py +0 -0
  421. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_action_timeout.py +0 -0
  422. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_browser_transport.py +0 -0
  423. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_controller_rebinding.py +0 -0
  424. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_debug_mode.py +0 -0
  425. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_default_tooling.py +0 -0
  426. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_delegator.py +0 -0
  427. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_error_screenshots.py +0 -0
  428. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_facade.py +0 -0
  429. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_facade_security.py +0 -0
  430. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_facade_security_control.py +0 -0
  431. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_facade_security_file_tab.py +0 -0
  432. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_facade_security_network.py +0 -0
  433. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_facade_security_session.py +0 -0
  434. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_fail_fast.py +0 -0
  435. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_llm.py +0 -0
  436. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_llm_budget.py +0 -0
  437. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_llm_production.py +0 -0
  438. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_llm_streaming.py +0 -0
  439. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_loop.py +0 -0
  440. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_loop_detector.py +0 -0
  441. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_prompt_isolation.py +0 -0
  442. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_registry.py +0 -0
  443. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_retry_budget.py +0 -0
  444. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_streaming.py +0 -0
  445. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_structured_logging.py +0 -0
  446. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_tab_cap.py +0 -0
  447. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_task_02.py +0 -0
  448. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_agent/test_types.py +0 -0
  449. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_behavioral/__init__.py +0 -0
  450. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_behavioral/test_behavioral.py +0 -0
  451. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_behavioral/test_dwell.py +0 -0
  452. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_behavioral/test_hardening.py +0 -0
  453. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_behavioral/test_human_config_dwell.py +0 -0
  454. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_behavioral/test_navigation.py +0 -0
  455. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_behavioral/test_orchestrator.py +0 -0
  456. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_behavioral/test_session_seed.py +0 -0
  457. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_benchmark/__init__.py +0 -0
  458. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_benchmark/test_efficiency.py +0 -0
  459. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_benchmarks/test_browser_benchmark.py +0 -0
  460. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_benchmarks/test_stress_real_world.py +0 -0
  461. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/__init__.py +0 -0
  462. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_cdp.py +0 -0
  463. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_cdp_backend.py +0 -0
  464. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_cloak_backend.py +0 -0
  465. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_cloak_docs.py +0 -0
  466. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_cloak_integration.py +0 -0
  467. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_config.py +0 -0
  468. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_discovery.py +0 -0
  469. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_engine_protocol.py +0 -0
  470. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_fetch.py +0 -0
  471. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_injectors.py +0 -0
  472. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_page.py +0 -0
  473. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_patchright_backend.py +0 -0
  474. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_playwright_backend.py +0 -0
  475. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_selenium_backend.py +0 -0
  476. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_session.py +0 -0
  477. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_browser/test_shutdown.py +0 -0
  478. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/__init__.py +0 -0
  479. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_cascade.py +0 -0
  480. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_cascade_governor.py +0 -0
  481. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_circuit_breaker.py +0 -0
  482. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_client.py +0 -0
  483. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_compressor.py +0 -0
  484. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_cost_estimator.py +0 -0
  485. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_credential_pool.py +0 -0
  486. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_governor.py +0 -0
  487. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_budget/test_types.py +0 -0
  488. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_cli/test_interactive.py +0 -0
  489. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_cli/test_script.py +0 -0
  490. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_cli/test_stealth_check.py +0 -0
  491. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_cli/test_stealth_validate.py +0 -0
  492. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_cli/test_unified_cli.py +0 -0
  493. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_config.py +0 -0
  494. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_e2e/test_report_schema.py +0 -0
  495. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_e2e/test_trend.py +0 -0
  496. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_ejecta/test_audio.py +0 -0
  497. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_ejecta/test_batch37_integration.py +0 -0
  498. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_ejecta/test_batch38_integration.py +0 -0
  499. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_ejecta/test_browser_apis.py +0 -0
  500. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_ejecta/test_canvas.py +0 -0
  501. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_ejecta/test_integration.py +0 -0
  502. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_ejecta/test_timing.py +0 -0
  503. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_ejecta/test_webrtc.py +0 -0
  504. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_events/test_event_bus.py +0 -0
  505. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_events/test_lifecycle_hooks.py +0 -0
  506. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_governance_docs.py +0 -0
  507. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/__init__.py +0 -0
  508. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_cache.py +0 -0
  509. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_controller.py +0 -0
  510. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_decorator.py +0 -0
  511. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_injection.py +0 -0
  512. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_page_change.py +0 -0
  513. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_presets.py +0 -0
  514. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_recovery.py +0 -0
  515. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_snapshot.py +0 -0
  516. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_types.py +0 -0
  517. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_interaction/test_vision.py +0 -0
  518. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_memory/__init__.py +0 -0
  519. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_memory/test_cli_config.py +0 -0
  520. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_memory/test_integration.py +0 -0
  521. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_memory/test_store.py +0 -0
  522. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recording/__init__.py +0 -0
  523. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recording/test_persistence.py +0 -0
  524. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recording/test_recorder.py +0 -0
  525. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recording/test_replayer.py +0 -0
  526. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/__init__.py +0 -0
  527. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_checkpoint.py +0 -0
  528. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_classifier.py +0 -0
  529. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_coordinator.py +0 -0
  530. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_event_bus.py +0 -0
  531. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_format_validator.py +0 -0
  532. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_reflection.py +0 -0
  533. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_retry_tracker.py +0 -0
  534. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_session_recovery.py +0 -0
  535. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_types.py +0 -0
  536. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_recovery/test_watchdogs.py +0 -0
  537. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_release/test_naming_consistency.py +0 -0
  538. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_release/test_smoke_published.py +0 -0
  539. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_release/test_verify_artifact.py +0 -0
  540. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_results/__init__.py +0 -0
  541. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_results/test_batch40_integration.py +0 -0
  542. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_results/test_categories.py +0 -0
  543. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_results/test_output.py +0 -0
  544. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_results/test_typed.py +0 -0
  545. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_results/test_types.py +0 -0
  546. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_results/test_validation.py +0 -0
  547. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_runtime_correctness/__init__.py +0 -0
  548. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_runtime_correctness/test_runtime_fixes.py +0 -0
  549. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/__init__.py +0 -0
  550. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_approval.py +0 -0
  551. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_credential_vault.py +0 -0
  552. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_domain_filter.py +0 -0
  553. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_injection.py +0 -0
  554. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_manager.py +0 -0
  555. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_policy.py +0 -0
  556. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_redaction_pipeline.py +0 -0
  557. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_redactor.py +0 -0
  558. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_security/test_types.py +0 -0
  559. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_session/__init__.py +0 -0
  560. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_session/test_locale.py +0 -0
  561. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_session/test_proxy.py +0 -0
  562. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_skills/__init__.py +0 -0
  563. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_skills/test_activation.py +0 -0
  564. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_skills/test_integration.py +0 -0
  565. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_skills/test_markdown.py +0 -0
  566. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_skills/test_registry.py +0 -0
  567. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_skills/test_types.py +0 -0
  568. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/__init__.py +0 -0
  569. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_action_policy.py +0 -0
  570. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_captcha.py +0 -0
  571. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_captcha_resolution.py +0 -0
  572. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_challenge_cache.py +0 -0
  573. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_challenge_config.py +0 -0
  574. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_consistency/test_consistency.py +0 -0
  575. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_consistency_inject.py +0 -0
  576. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_diagnostics.py +0 -0
  577. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_e2e_lifecycle.py +0 -0
  578. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_e2e_reporting.py +0 -0
  579. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_fingerprint_scanner.py +0 -0
  580. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_fingerprint_score.py +0 -0
  581. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_headers.py +0 -0
  582. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_human.py +0 -0
  583. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_human_behavior_v2.py +0 -0
  584. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_ip_reputation.py +0 -0
  585. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_kasada_detection.py +0 -0
  586. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_manager.py +0 -0
  587. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_network_stealth_config.py +0 -0
  588. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_profiles.py +0 -0
  589. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_proxy.py +0 -0
  590. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_proxy_pool.py +0 -0
  591. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_stealth_bridge.py +0 -0
  592. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_tls_fingerprint.py +0 -0
  593. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_turnstile_detection.py +0 -0
  594. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_types.py +0 -0
  595. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_user_agent_pool.py +0 -0
  596. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_stealth/test_validation.py +0 -0
  597. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_tracing/__init__.py +0 -0
  598. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_tracing/test_cost_analytics.py +0 -0
  599. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_tracing/test_flow_logger.py +0 -0
  600. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_tracing/test_middleware.py +0 -0
  601. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_tracing/test_session_db.py +0 -0
  602. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_tracing/test_sinks.py +0 -0
  603. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_tracing/test_types.py +0 -0
  604. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_verification/__init__.py +0 -0
  605. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_verification/test_ax_diff.py +0 -0
  606. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_verification/test_hasher.py +0 -0
  607. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_verification/test_types.py +0 -0
  608. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_verification/test_verifier.py +0 -0
  609. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_vision/__init__.py +0 -0
  610. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_vision/test_cache.py +0 -0
  611. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_vision/test_controller.py +0 -0
  612. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_vision/test_coords.py +0 -0
  613. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_vision/test_factory.py +0 -0
  614. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_vision/test_ocr.py +0 -0
  615. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_vision/test_providers.py +0 -0
  616. {superbrowser_sdk-2.3.1 → superbrowser_sdk-2.5.0}/tests/test_vision/test_types.py +0 -0
@@ -5,6 +5,128 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.5.0] — 2026-06-25
9
+
10
+ ### Added — MCP Server P2: Diagnostics Pack
11
+
12
+ An explainability layer for failed reads/rendering. Five new inspect-tier
13
+ tools let an agent inspect browser/page/network evidence when
14
+ `navigate → wait_for → extract_text` returns unexpected content — without
15
+ expanding the action surface. No `--allow-actions`, no action budget, no audit
16
+ entry, no side effects.
17
+
18
+ - `get_console_messages` — buffered browser console messages, filterable by
19
+ level.
20
+ - `get_page_errors` — buffered uncaught page errors with stack traces.
21
+ - `get_network_errors` — requests that failed (status ≥ 400, no response, or
22
+ net error).
23
+ - `list_requests` — all buffered request summaries; returns `request_id` for
24
+ `get_request` follow-up.
25
+ - `get_request` — one request's metadata by `request_id`.
26
+
27
+ New `DiagnosticsBuffer` (`super_browser.agent.diagnostics`): session-wide ring
28
+ buffers for console / page-error / network events, wired into the facade
29
+ lifecycle (`start()` + `_attach_page()`). Survives tab switches. Exposed as
30
+ `SuperBrowser.diagnostics`. Reads are snapshots (non-destructive); bounded
31
+ deques (default 500, via `config.event_buffer_size`).
32
+
33
+ ### Design constraints (P2)
34
+
35
+ - Diagnostics entries carry a monotonic `seq`, `timestamp_ms`, and `page_url`.
36
+ - Request records use a stable `request_id` (assigned by the buffer). A URL can
37
+ have multiple requests (redirects, retries), so retrieval is always by
38
+ `request_id`, never by URL.
39
+ - **No response bodies** and **no raw header values** are returned. `get_request`
40
+ exposes `header_names` (keys) only. Console text, page errors, and URLs are
41
+ returned as-is, matching the existing inspect-tool posture.
42
+ - `get_request` returns a structured `{ok: false, reason: "not_found"}` when the
43
+ request was never buffered or evicted; it never raises.
44
+
45
+ ### Compatibility notes
46
+
47
+ - The default stdio server now advertises **13 tools** (was 8): the 5
48
+ diagnostics tools are inspect-tier and always advertised. Clients asserting
49
+ on the advertised count should update. This is additive — no tools were
50
+ removed and no refusal strings changed.
51
+ - Action mode advertises **19 tools** (was 14).
52
+
53
+ ## [2.4.0] — 2026-06-23
54
+
55
+ ### Added — MCP Server P1: Navigation Workflows
56
+
57
+ The default MCP server can now read a URL end-to-end (`navigate → wait_for →
58
+ observe/extract_text/screenshot`) without action mode. The tool surface was
59
+ re-partitioned into a **four-tier model**:
60
+
61
+ - **Inspect tier** (always advertised): `browser_status`, `current_url`,
62
+ `observe`, `extract_text`, `screenshot`, `list_tabs`.
63
+ - **Navigation tier** (always advertised): `navigate`, `wait_for` (new).
64
+ Navigation mutates browser state (page acquisition) but is default-allowed
65
+ because reading requires a page to read. It is `SecurityManager`-checked and
66
+ audited (both approvals and denials) in the default stdio / `build_server()`
67
+ path, but it does **not** consume the action budget. Bare
68
+ `ToolDispatcher(runtime)` integrations may navigate without an attached
69
+ authorizer; in that case no audit/security check is performed.
70
+ - **Action tier** (requires `--allow-actions` / `SB_MCP_ALLOW_ACTIONS=1`):
71
+ `scroll`, `press_key`, `click`, `fill`, `open_tab`, `close_tab`.
72
+ - **High-risk tier** (not implemented): `download`, `upload`, `act`, arbitrary JS.
73
+
74
+ New APIs:
75
+
76
+ - `wait_for` tool: wait for exactly one page condition (`selector` / `text` /
77
+ `url` / `load_state`) with `timeout_ms` (100–60000, default 10000).
78
+ - `MCPSessionPolicy.allow_actions` (primary) with `allow_writes` retained as a
79
+ backward-compatibility alias.
80
+ - `MCPAuthorizer.record_audit()` — public audit helper for navigation-tier
81
+ entries; returns the `MCPAuthorizationResult` it constructed.
82
+ - `--allow-actions` CLI flag and `SB_MCP_ALLOW_ACTIONS` env var
83
+ (truthy sentinels: `1`, `true`, `yes`, `on`).
84
+ - `SB_MCP_DOMAIN_ALLOWLIST` / `SB_MCP_DOMAIN_BLOCKLIST` env vars for opt-in
85
+ domain filtering on the default stdio server (comma- or whitespace-separated;
86
+ glob patterns supported).
87
+ - `run_server()` now constructs a default `SecurityManager` so navigation is
88
+ security-checked in the default stdio path; callers may pass
89
+ `security_manager=` to override (or `None` to disable).
90
+
91
+ ### Changed
92
+
93
+ - **Default advertised tool count: 6 → 8** (adds `navigate` and `wait_for`).
94
+ - `navigate` moved from the action-gated write tier to the default-allowed
95
+ navigation tier.
96
+ - Action-gate refusal message changed from `"writes are disabled"` to
97
+ `"actions are disabled"` (the gate protects the Action tier).
98
+ - `_tools_for_policy()` now advertises `DEFAULT_TOOLS` (inspect + navigation)
99
+ by default and adds `ACTION_TOOLS` when `allow_actions` is set.
100
+ - `main()` now uses `argparse` (previously raw `sys.argv` substring matching).
101
+
102
+ ### Compatibility notes
103
+
104
+ - The action-gate refusal `reason` changed from `"writes are disabled"` to
105
+ `"actions are disabled"`. Clients/docs pattern-matching the old string should
106
+ update. (`MCPSessionPolicy(allow_writes=True)` callers are otherwise
107
+ unaffected — the flag still enables action tools via the compat alias.)
108
+ - The default stdio server now advertises 8 tools, not 6. Clients asserting on
109
+ the advertised count should update.
110
+
111
+ ### Fixed
112
+
113
+ - Fixed default navigation dispatch so bare `ToolDispatcher(runtime)`
114
+ integrations can use `navigate` without requiring an authorizer; security
115
+ checks and audit still run when an authorizer/security manager is attached,
116
+ including the default stdio server path.
117
+
118
+ ### Internal
119
+
120
+ - Tier constants: `INSPECT_TOOLS` / `NAVIGATION_TOOLS` / `ACTION_TOOLS` /
121
+ `DEFAULT_TOOLS` and their `_NAME` frozensets. (`PHASE1_TOOLS`,
122
+ `PHASE2B_TOOLS`, `PHASE2B_WAVE2_TOOLS`, and `WRITE_TOOL_NAMES` retained as
123
+ aliases for backward-compat imports.)
124
+ - `_validate_write_args` split into `_validate_navigation_args` and
125
+ `_validate_action_args`; the old name remains as a routing alias.
126
+ - `wait_for` reaches the raw Patchright/Playwright page via
127
+ `sb._page.backend_page` (one hop); the deprecated `.raw_page` accessor is
128
+ not used.
129
+
8
130
  ## [2.3.1] — 2026-06-22
9
131
 
10
132
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superbrowser-sdk
3
- Version: 2.3.1
3
+ Version: 2.5.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,325 @@
1
+ # Super Browser MCP Server
2
+
3
+ Super Browser exposes its browser inspection and control surface over the
4
+ [Model Context Protocol](https://modelcontextprotocol.io) so that AI coding
5
+ agents (Claude, Cursor, etc.) can observe and interact with a page without
6
+ scripting Python.
7
+
8
+ The stdio server advertises **thirteen tools by default** (six inspect + five
9
+ diagnostics + two navigation) — enough to read a URL end-to-end and explain
10
+ why a read failed. When action mode is enabled, it advertises **six additional
11
+ action tools**; every action call is checked by
12
+ `MCPSessionPolicy` and `SecurityManager` before it can reach the browser.
13
+
14
+ See [RFC #178](https://github.com/Octo-Lex/Super-Browser/issues/178) for the
15
+ design history.
16
+
17
+ > `screenshot` captures the rendered page contents as the browser sees them. There is no automatic redaction; callers decide when to invoke it.
18
+
19
+ ## Install
20
+
21
+ ```bash
22
+ pip install 'superbrowser-sdk[mcp,patchright]'
23
+ python -m patchright install chromium
24
+ ```
25
+
26
+ `[mcp]` pulls the lightweight `mcp` SDK (no browser deps of its own).
27
+ `[patchright]` provides the browser backend the server drives.
28
+
29
+ ## Run
30
+
31
+ Either of:
32
+
33
+ ```bash
34
+ superbrowser-mcp # default: 13 tools (inspect + diagnostics + navigation)
35
+ superbrowser-mcp --allow-actions # 14 tools (adds the action tier)
36
+ python -m super_browser.mcp_server
37
+ ```
38
+
39
+ Both start a **stdio** server. The default server advertises 13 tools and
40
+ recognizes (but refuses) action-tool calls with a structured policy refusal.
41
+
42
+ Action mode can also be enabled via the environment:
43
+
44
+ ```bash
45
+ SB_MCP_ALLOW_ACTIONS=1 superstl-browser-mcp
46
+ ```
47
+
48
+ Accepted truthy values: `1`, `true`, `yes`, `on` (case-insensitive).
49
+
50
+ ## Client configuration
51
+
52
+ ### Claude Desktop / Claude Code
53
+
54
+ Add to your MCP config (`claude_desktop_config.json` or the equivalent):
55
+
56
+ ```json
57
+ {
58
+ "mcpServers": {
59
+ "super-browser": {
60
+ "command": "superbrowser-mcp"
61
+ }
62
+ }
63
+ }
64
+ ```
65
+
66
+ Or, if you prefer the module form:
67
+
68
+ ```json
69
+ {
70
+ "mcpServers": {
71
+ "super-browser": {
72
+ "command": "python",
73
+ "args": ["-m", "super_browser.mcp_server"]
74
+ }
75
+ }
76
+ }
77
+ ```
78
+
79
+ To enable action tools:
80
+
81
+ ```json
82
+ {
83
+ "mcpServers": {
84
+ "super-browser": {
85
+ "command": "superbrowser-mcp",
86
+ "args": ["--allow-actions"]
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ ### Cursor
93
+
94
+ ```json
95
+ {
96
+ "mcpServers": {
97
+ "super-browser": {
98
+ "command": "superbrowser-mcp"
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ ## Tools
105
+
106
+ All tools return structured JSON (`{"ok": bool, ...}`) as `TextContent`. The
107
+ screenshot tool additionally returns an `ImageContent` block.
108
+
109
+ The tool surface is partitioned into four tiers. The first two are always
110
+ advertised; the third requires action mode; the fourth is not implemented.
111
+
112
+ ### Inspect tier (always advertised)
113
+
114
+ | Tool | Args | Behavior | Lazy-starts browser? |
115
+ |---|---|---|---|
116
+ | `browser_status` | none | Runtime status (running, backend). | No |
117
+ | `current_url` | none | Current URL, or a structured "not started" state. | No |
118
+ | `observe` | none | Page state: URL, title, interactive/total element counts. | Yes |
119
+ | `extract_text` | `query` (required), `selector` (optional) | Text content, optionally scoped to a CSS selector. | Yes |
120
+ | `screenshot` | `full_page` (optional, default `false`) | Base64 PNG of the viewport or full page. | Yes |
121
+ | `list_tabs` | none | Snapshot of open tabs. | Yes |
122
+ | `get_console_messages` | `level` (optional), `limit` (optional, default 100) | Buffered browser console messages (snapshot, non-destructive). | Yes |
123
+ | `get_page_errors` | `limit` (optional, default 100) | Buffered uncaught page errors with stack traces. | Yes |
124
+ | `get_network_errors` | `url_filter` (optional), `limit` (optional, default 100) | Requests that failed (status ≥ 400, no response, or net error). | Yes |
125
+ | `list_requests` | `url_filter` (optional), `resource_type` (optional), `limit` (optional, default 100) | All buffered request summaries; returns `request_id` for `get_request`. | Yes |
126
+ | `get_request` | `request_id` (required) | One request's metadata (method, url, status, `header_names` — keys only, no values, no body). | Yes |
127
+
128
+ The five diagnostics tools read from a session-wide ring buffer that captures
129
+ console messages, page errors, and network requests via page-event listeners.
130
+ Reads are **snapshots** (non-destructive): the buffer is not cleared on read.
131
+ Diagnostics entries carry a monotonic `seq`, a `timestamp_ms`, and the
132
+ `page_url` at the time of the event. Request records use a stable `request_id`
133
+ (assigned by the buffer); a URL can have multiple requests, so always retrieve
134
+ via `request_id` from `list_requests`, not by URL. **No response bodies and no
135
+ raw header values** are returned — `get_request` exposes `header_names` (keys)
136
+ only.
137
+
138
+ ### Navigation tier (always advertised)
139
+
140
+ Navigation mutates browser state (page acquisition) but is default-allowed
141
+ because reading requires a page to read. It is always checked by the
142
+ `SecurityManager` and is audited, but it does **not** consume the action
143
+ budget and does **not** require action mode.
144
+
145
+ | Tool | Args | Behavior |
146
+ |---|---|---|
147
+ | `navigate` | `url` (required), `wait_until` (optional) | Go to a URL. URL is passed to `SecurityManager` for injection detection, secret redaction, and domain allow/block enforcement. |
148
+ | `wait_for` | exactly one of `selector` / `text` / `url` / `load_state`; `timeout_ms` (optional, 100–60000, default 10000) | Wait for a page condition before the next read. |
149
+
150
+ `wait_for` accepts exactly one condition per call (deterministic single
151
+ results; compound waits can be added later as an explicit AND mode).
152
+
153
+ #### Read workflow
154
+
155
+ ```text
156
+ navigate → wait_for → observe / extract_text / screenshot
157
+ ```
158
+
159
+ This is the default-mode loop an agent uses to read a page.
160
+
161
+ #### Debugging workflow
162
+
163
+ When a read returns unexpected or empty content, the diagnostics tools explain
164
+ why — without expanding the action surface:
165
+
166
+ ```text
167
+ navigate → wait_for → extract_text / observe
168
+ ↓ (unexpected / empty / errored)
169
+ get_console_messages → get_page_errors → get_network_errors
170
+ ↓ (inspect the evidence)
171
+ list_requests → get_request(request_id=...) (drill into one request)
172
+ ↓
173
+ adjust selector / report failure / retry
174
+ ```
175
+
176
+ Diagnostics are inspect-tier: no `--allow-actions`, no action budget, no audit
177
+ entry, no side effects.
178
+
179
+ ### Action tier (advertised when action mode is enabled)
180
+
181
+ | Tool | Args | Security level |
182
+ |---|---|---|
183
+ | `scroll` | `direction` (optional), `amount` (optional) | SENSITIVE |
184
+ | `press_key` | `key` (required) | SENSITIVE |
185
+ | `click` | `target` (required), `description` (optional) | SENSITIVE |
186
+ | `fill` | `target` (required), `value` (required), `clear_first` (optional), `description` (optional) | SENSITIVE |
187
+ | `open_tab` | `url` (optional) | SENSITIVE — URL passed to `SecurityManager` when provided |
188
+ | `close_tab` | `tab_id` (required) | SENSITIVE |
189
+
190
+ `fill` sends only the literal value supplied by the caller. It does not
191
+ retrieve, infer, store, or auto-fill credentials.
192
+
193
+ #### Action workflow
194
+
195
+ ```bash
196
+ superbrowser-mcp --allow-actions
197
+ ```
198
+
199
+ Action calls pass through the full authorization path (action gate →
200
+ action-count budget → timeout budget → `SecurityManager` → audit) before
201
+ reaching the browser.
202
+
203
+ ### High-risk tier (not implemented)
204
+
205
+ `download`, `upload`, `act` (the LLM agent loop), and arbitrary JS execution
206
+ are not implemented. They will return a structured "Unknown tool" error and
207
+ will require a separate design pass before implementation.
208
+
209
+ ## Domain filtering
210
+
211
+ Navigation is always security-checked, but domain allow/block enforcement is
212
+ **opt-in** via environment variables. With neither set, the domain filter is
213
+ allow-all (injection detection and secret redaction still run).
214
+
215
+ ```bash
216
+ # Block specific hosts (comma- or whitespace-separated; glob patterns allowed)
217
+ SB_MCP_DOMAIN_BLOCKLIST="evil.com, *.test" superstl-browser-mcp
218
+
219
+ # Restrict to an allowlist (anything not matching is denied)
220
+ SB_MCP_DOMAIN_ALLOWLIST="example.com, docs.example.com" superstl-browser-mcp
221
+ ```
222
+
223
+ When both are set, the blocklist is evaluated first; the allowlist then
224
+ restricts the survivors.
225
+
226
+ ## Four-tier tool model
227
+
228
+ The default server behavior partitions the surface by risk:
229
+
230
+ - **`list_tools()`** advertises only the Inspect + Navigation tiers (13 tools).
231
+ - **`call_tool()`** still recognizes action-tool names and returns a structured
232
+ policy refusal (`refusal.reason = "actions are disabled"`), not an "Unknown
233
+ tool" error.
234
+
235
+ This means clients don't see action tools by default, but manual or
236
+ unadvertised action calls are handled cleanly rather than misclassified.
237
+
238
+ ### Permission model (action tools)
239
+
240
+ Every action-tier call passes through a central authorization path before
241
+ reaching the browser:
242
+
243
+ 1. **Action-enabled check** — `MCPSessionPolicy.allow_actions` must be `True`
244
+ 2. **Action-count check** — `actions_used` must not exceed `max_actions`
245
+ 3. **Timeout-budget check** — session elapsed time must not exceed `timeout_seconds`
246
+ 4. **`SecurityManager.check_action()`** — domain allow/block lists, action policy, injection detection, redaction
247
+ 5. **Audit log** — every action attempt (allowed or denied) is recorded
248
+
249
+ Navigation-tier calls use a lighter path: argument validation →
250
+ `SecurityManager.check_action()` (navigate only) → audit (both approvals and
251
+ denials) → handler. They bypass the action gate, action-count budget, and
252
+ timeout budget.
253
+
254
+ All denials return structured JSON as normal MCP content, never raised:
255
+
256
+ ```json
257
+ {
258
+ "ok": false,
259
+ "refusal": {
260
+ "tool": "navigate",
261
+ "blocked_by": "security_manager",
262
+ "reason": "domain_filter",
263
+ "security_level": "sensitive"
264
+ }
265
+ }
266
+ ```
267
+
268
+ ### Lifecycle
269
+
270
+ - One browser per server process.
271
+ - The browser lazy-starts on the first browser-dependent tool call
272
+ (`navigate`, `wait_for`, `observe`, `extract_text`, `screenshot`,
273
+ `list_tabs`, or any action tool that reaches the facade after authorization).
274
+ - `browser_status` and `current_url` are safe to call before startup and do
275
+ **not** force a launch.
276
+ - On server close, the runtime calls `SuperBrowser.stop()` to tear down.
277
+
278
+ ## Errors
279
+
280
+ Errors are returned as structured JSON, never raised across the MCP boundary:
281
+
282
+ ```json
283
+ {"ok": false, "error": "Unknown tool: '__missing__'. Available: [...]" }
284
+ ```
285
+
286
+ Argument-validation errors use the `invalid_arguments` key:
287
+
288
+ ```json
289
+ {"ok": false, "invalid_arguments": "'query' is required and must be a non-empty string"}
290
+ ```
291
+
292
+ `wait_for` timeouts return a structured timeout result:
293
+
294
+ ```json
295
+ {"ok": false, "timeout": true, "reason": "Timeout 10000ms exceeded"}
296
+ ```
297
+
298
+ ## Behavior changes
299
+
300
+ ### `superbrowser-sdk` 2.4 — navigation tier
301
+
302
+ Prior to 2.4, the default MCP server advertised 6 read-only tools and gated
303
+ **all** side-effecting tools (including `navigate`) behind `allow_writes=True`.
304
+
305
+ In 2.4 the tool surface was re-partitioned into four tiers:
306
+
307
+ - `navigate` moved into a default-allowed **Navigation tier** (reading requires
308
+ page acquisition). It is still `SecurityManager`-checked and audited.
309
+ - `wait_for` was added (navigation tier).
310
+ - The former "write tools" became the **Action tier**, gated by
311
+ `allow_actions` (`--allow-actions` / `SB_MCP_ALLOW_ACTIONS`).
312
+ - The action-gate refusal message changed from `"writes are disabled"` to
313
+ `"actions are disabled"`. Clients pattern-matching the old string must update.
314
+
315
+ `allow_writes` remains as a backward-compatibility alias for `allow_actions`
316
+ in `MCPSessionPolicy`; existing callers using `MCPSessionPolicy(allow_writes=True)`
317
+ continue to work.
318
+
319
+ ## Reference
320
+
321
+ - Design: [RFC #178](https://github.com/Octo-Lex/Super-Browser/issues/178)
322
+ - The deleted prior server (`a370cf9`) is recoverable from git history for
323
+ reference — it shipped 10 tools including 6 side-effecting ones with no
324
+ permission model and no tests. The current server is the deliberate
325
+ correction: tested, permissioned, tiered, with structured refusals and audit logging.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "superbrowser-sdk"
7
- version = "2.3.1"
7
+ version = "2.5.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" }
@@ -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.3.1"
9
+ __version__ = "2.5.0"
10
10
 
11
11
  __all__ = [
12
12
  "SuperBrowser",