agentic-stealth-browser 2.1.1__tar.gz → 2.3.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 (137) hide show
  1. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/CHANGELOG.md +31 -2
  2. agentic_stealth_browser-2.3.0/PKG-INFO +184 -0
  3. agentic_stealth_browser-2.3.0/README.md +145 -0
  4. agentic_stealth_browser-2.3.0/agentic_stealth_browser.egg-info/PKG-INFO +184 -0
  5. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/agent_browser.py +9 -0
  6. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/mcp_server.py +1 -1
  7. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/pyproject.toml +1 -1
  8. agentic_stealth_browser-2.1.1/PKG-INFO +0 -383
  9. agentic_stealth_browser-2.1.1/README.md +0 -344
  10. agentic_stealth_browser-2.1.1/agentic_stealth_browser.egg-info/PKG-INFO +0 -383
  11. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/.env.example +0 -0
  12. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/LICENSE +0 -0
  13. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/MANIFEST.in +0 -0
  14. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/agentic_stealth_browser.egg-info/SOURCES.txt +0 -0
  15. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/agentic_stealth_browser.egg-info/dependency_links.txt +0 -0
  16. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/agentic_stealth_browser.egg-info/entry_points.txt +0 -0
  17. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/agentic_stealth_browser.egg-info/requires.txt +0 -0
  18. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/agentic_stealth_browser.egg-info/top_level.txt +0 -0
  19. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/ai/__init__.py +0 -0
  20. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/ai/ai_hooks.py +0 -0
  21. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/audit/__init__.py +0 -0
  22. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/audit/logger.py +0 -0
  23. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/behavior/__init__.py +0 -0
  24. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/behavior/adaptive_tuner.py +0 -0
  25. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/behavior/human_behavior.py +0 -0
  26. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/behavior/orchestration.py +0 -0
  27. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/behavior/persona_rotator.py +0 -0
  28. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/__init__.py +0 -0
  29. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/account_health.py +0 -0
  30. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/account_warming.py +0 -0
  31. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/connection_pool.py +0 -0
  32. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/error_messages.py +0 -0
  33. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/feature_flags.py +0 -0
  34. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/py.typed +0 -0
  35. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/session_checkpoint.py +0 -0
  36. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/core/types.py +0 -0
  37. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/examples/recipes/README.md +0 -0
  38. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/examples/recipes/linkedin.md +0 -0
  39. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/linkedin/__init__.py +0 -0
  40. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/linkedin/actions.py +0 -0
  41. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/Dockerfile +0 -0
  42. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/__init__.py +0 -0
  43. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/approval_gate.py +0 -0
  44. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/audit_enrichment.py +0 -0
  45. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/cli.py +0 -0
  46. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/deprecations.py +0 -0
  47. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/docker-compose.yml +0 -0
  48. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/docker-healthcheck.py +0 -0
  49. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/hermes_dashboard.py +0 -0
  50. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/mcp_input_validator.py +0 -0
  51. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/mcp_session_isolation.py +0 -0
  52. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/metrics.py +0 -0
  53. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/otel_export.py +0 -0
  54. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/policy_engine.py +0 -0
  55. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/profiler.py +0 -0
  56. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/rate_limiter.py +0 -0
  57. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/production/workflow_orchestrator.py +0 -0
  58. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/proxy/__init__.py +0 -0
  59. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/proxy/proxy_manager.py +0 -0
  60. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/recovery/__init__.py +0 -0
  61. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/recovery/anti_block_orchestrator.py +0 -0
  62. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/recovery/detectors.py +0 -0
  63. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/recovery/explain_blocked.py +0 -0
  64. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/scraping/__init__.py +0 -0
  65. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/scraping/scraper.py +0 -0
  66. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/sessions/__init__.py +0 -0
  67. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/sessions/cookie_manager.py +0 -0
  68. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/sessions/session_manager.py +0 -0
  69. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/setup.cfg +0 -0
  70. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/__init__.py +0 -0
  71. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/advanced_stealth.py +0 -0
  72. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/cache.py +0 -0
  73. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/firefox_adapter.py +0 -0
  74. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/headers.py +0 -0
  75. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/presets.py +0 -0
  76. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/profiles.py +0 -0
  77. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/tls_fingerprint.py +0 -0
  78. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/stealth/tls_ja3_ja4.py +0 -0
  79. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/debug_nowsecure.py +0 -0
  80. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/detection_check.py +0 -0
  81. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/detection_runner.py +0 -0
  82. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/fingerprint_scorecard.py +0 -0
  83. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/run_detection_tests.py +0 -0
  84. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_account_health.py +0 -0
  85. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_account_warming.py +0 -0
  86. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_adaptive_tuner.py +0 -0
  87. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_basic.py +0 -0
  88. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_cdp_snapshots.py +0 -0
  89. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_connection_pool.py +0 -0
  90. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_contract_agent_browser.py +0 -0
  91. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_cookie_manager_unit.py +0 -0
  92. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_detectors.py +0 -0
  93. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_differential.py +0 -0
  94. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_docker_config.py +0 -0
  95. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_e2e_anti_block_recovery.py +0 -0
  96. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_e2e_protected_sites_placeholder.py +0 -0
  97. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_golden_master.py +0 -0
  98. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_hermes_dashboard.py +0 -0
  99. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_human_behavior_fuzz.py +0 -0
  100. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_integration_modules.py +0 -0
  101. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_linkedin_actions.py +0 -0
  102. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_mcp_contract.py +0 -0
  103. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_mcp_server_runtime.py +0 -0
  104. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_mcp_stealth_workflows.py +0 -0
  105. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_metrics_collector_unit.py +0 -0
  106. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_mutation_stealth.py +0 -0
  107. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_persona_rotator.py +0 -0
  108. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_phase7_fixes.py +0 -0
  109. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_player.py +0 -0
  110. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_proxy_config_unit.py +0 -0
  111. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_proxy_manager.py +0 -0
  112. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_rate_limiter_unit.py +0 -0
  113. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_recorder.py +0 -0
  114. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_recovery.py +0 -0
  115. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_recovery_phase1.py +0 -0
  116. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_recovery_state_machine.py +0 -0
  117. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_rehearsal_validation.py +0 -0
  118. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_selector_auto_heal.py +0 -0
  119. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_session_checkpoint.py +0 -0
  120. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_stealth_cache.py +0 -0
  121. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_stealth_coverage.py +0 -0
  122. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_stealth_modules.py +0 -0
  123. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_stress_multi_account.py +0 -0
  124. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_tls_ja3_ja4.py +0 -0
  125. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_workflow_orchestrator.py +0 -0
  126. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_workflow_schema.py +0 -0
  127. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_workflow_schema_unit.py +0 -0
  128. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/tests/test_workflow_versioning.py +0 -0
  129. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/__init__.py +0 -0
  130. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/action_interpreter.py +0 -0
  131. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/player.py +0 -0
  132. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/recorder.py +0 -0
  133. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/recovery.py +0 -0
  134. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/schema.py +0 -0
  135. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/selector_generator.py +0 -0
  136. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/test-echo.yaml +0 -0
  137. {agentic_stealth_browser-2.1.1 → agentic_stealth_browser-2.3.0}/workflows/variable_resolver.py +0 -0
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## [2.3.0] — Show HN & Community Launch (2026-05-28)
11
+
12
+ ### Added
13
+ - **Show HN preparation**: Complete README overhaul with demo GIF, streamlined onboarding, and community-facing tone. (#HN)
14
+ - **Buy Me A Coffee badge**: Support link in README for community sponsorship. (#badge)
15
+ - **`_browser_process` exposure**: External PID tracking via `AgentBrowser._browser_process`, enabling process-level monitoring and recovery. (#pid)
16
+
17
+ ### Changed
18
+ - Full README rewrite for PyPI + HN audience (pip-first install path, Quick Start with CLI + Python SDK + MCP, reduced wall-of-text, more code examples).
19
+ - Demo GIF (`assets/hn-demo.gif`) showing end-to-end stealth browser flow.
20
+ - Various lint fixes for demo scripts.
21
+
22
+ ### Fixed
23
+ - Stray temp files cleaned from repo root.
24
+ - Ruff formatting applied across all Python sources.
25
+
26
+ ## [2.1.1] — PyPI & Docs Consolidation (2026-05-27)
27
+
28
+ ### Added
29
+ - **PyPI publish workflow** (`.github/workflows/pypi-publish.yml`): OIDC trusted publishing for automated release deployment. (#pypi)
30
+ - **PyPI release readiness**: README polished for pip-first consumption, badges and metadata tuned for PyPI listing.
31
+
32
+ ### Changed
33
+ - **Docs consolidation**: `docs/` folder removed, all documentation consolidated into README.md for a single source of truth. Content preserved (THREAT_MODEL, STEALTH_LIMITATIONS, ADRs, etc. remain accessible via GitHub blob links).
34
+ - ruff formatting applied across dashboard codebase.
35
+
10
36
  ## [2.1.0] — Hermes Browser Dashboard (2026-05-30)
11
37
 
12
38
  ### Added
@@ -272,8 +298,11 @@ See the full v0.9.0 milestone and the stacked PRs #383/#384/#385 for implementat
272
298
 
273
299
  ---
274
300
 
275
- [unreleased]: https://github.com/shanewas/agentic-stealth-browser/compare/v0.9.0...HEAD
276
- [1.0.0]: https://github.com/shanewas/agentic-stealth-browser/releases/tag/v1.0.0
301
+ [unreleased]: https://github.com/shanewas/agentic-stealth-browser/compare/v2.3.0...HEAD
302
+ [2.3.0]: https://github.com/shanewas/agentic-stealth-browser/releases/tag/v2.3.0
303
+ [2.1.1]: https://github.com/shanewas/agentic-stealth-browser/releases/tag/v2.1.1
304
+ [2.1.0]: https://github.com/shanewas/agentic-stealth-browser/releases/tag/v2.1.0
305
+ [2.0.0]: https://github.com/shanewas/agentic-stealth-browser/releases/tag/v2.0.0
277
306
  [0.9.0]: https://github.com/shanewas/agentic-stealth-browser/releases/tag/v0.9.0
278
307
  [0.2.0]: https://github.com/shanewas/agentic-stealth-browser/releases/tag/v0.2.0
279
308
  [0.1.0]: https://github.com/shanewas/agentic-stealth-browser/releases/tag/v0.1.0
@@ -0,0 +1,184 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentic-stealth-browser
3
+ Version: 2.3.0
4
+ Summary: Production-grade, human-mimicking browser automation framework for autonomous agents. Survives modern anti-bot systems.
5
+ Author-email: Shane W <shanewas@users.noreply.github.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/shanewas/agentic-stealth-browser
8
+ Project-URL: Repository, https://github.com/shanewas/agentic-stealth-browser
9
+ Project-URL: Issues, https://github.com/shanewas/agentic-stealth-browser/issues
10
+ Project-URL: Documentation, https://github.com/shanewas/agentic-stealth-browser/tree/master/docs
11
+ Project-URL: Changelog, https://github.com/shanewas/agentic-stealth-browser/blob/master/CHANGELOG.md
12
+ Keywords: stealth,browser,automation,playwright,anti-bot,scraping,agent
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
21
+ Classifier: Topic :: Software Development :: Testing
22
+ Classifier: Framework :: AsyncIO
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: playwright
27
+ Requires-Dist: aiohttp
28
+ Requires-Dist: cryptography
29
+ Requires-Dist: pyyaml
30
+ Requires-Dist: fastapi
31
+ Requires-Dist: jinja2
32
+ Requires-Dist: uvicorn
33
+ Provides-Extra: dev
34
+ Requires-Dist: pytest; extra == "dev"
35
+ Requires-Dist: pytest-asyncio; extra == "dev"
36
+ Requires-Dist: pytest-cov; extra == "dev"
37
+ Requires-Dist: httpx; extra == "dev"
38
+ Dynamic: license-file
39
+
40
+ # Agentic Stealth Browser
41
+
42
+ **Playwright gets detected. This doesn't.**
43
+
44
+ [![CI](https://github.com/shanewas/agentic-stealth-browser/actions/workflows/ci.yml/badge.svg)](https://github.com/shanewas/agentic-stealth-browser/actions/workflows/ci.yml)
45
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
46
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
47
+ [![PyPI](https://img.shields.io/pypi/v/agentic-stealth-browser.svg)](https://pypi.org/project/agentic-stealth-browser/)
48
+ [![Tests](https://img.shields.io/badge/tests-880%2B%20passing-brightgreen)](tests/)
49
+ [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-support-ffdd00?logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/shanewas)
50
+
51
+ <p align="center">
52
+ <img src="assets/hn-demo.gif" alt="Agentic Stealth Browser Demo" width="90%">
53
+ </p>
54
+
55
+ Production-grade stealth browser automation that **survives Cloudflare, LinkedIn, Amazon, and other anti-bot systems** by looking convincingly human at every layer.
56
+
57
+ ```bash
58
+ pip install agentic-stealth-browser
59
+ playwright install --with-deps chromium
60
+ ```
61
+
62
+ ```python
63
+ from core.agent_browser import AgentBrowser
64
+
65
+ async with AgentBrowser(session_name="demo") as browser:
66
+ await browser.launch(headless=True)
67
+ await browser.safe_goto("https://bot.sannysoft.com")
68
+ # ✓ passes WebGL, Canvas, AudioContext, WebRTC, and TLS fingerprinting
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Why vanilla Playwright fails
74
+
75
+ Sites don't just check your User-Agent anymore. They check *everything*:
76
+
77
+ | Attack Surface | Vanilla Playwright | This library |
78
+ |---|---|---|
79
+ | **TLS handshake** (JA3/JA4 fingerprint) | Standard Python TLS — instantly identifiable | Region-spoofed profiles (US, Japan, EU, Korea) |
80
+ | **Navigator APIs** (`navigator.webdriver`, `plugins`, `languages`) | Leaks automation flags everywhere | Every property patched before first paint |
81
+ | **WebGL / Canvas fingerprint** | Headless GPU renders differently | Consistent buffers across sessions |
82
+ | **Human behavior** | Robotic clicks, instant typing | Bézier mouse curves, variable speed, fatigue simulation |
83
+ | **Auto-recovery** | None — blocks = failure | CAPTCHA detection → proxy rotation → retry chain |
84
+ | **Account warming** | Nothing | 14-day graduated ramp-up per account |
85
+
86
+ Result: **passes bot.sannysoft.com, pixelscan.net, and CreepJS** with zero flags in headless mode.
87
+
88
+ ---
89
+
90
+ ## Quick Start
91
+
92
+ ### CLI (easiest)
93
+
94
+ ```bash
95
+ # Health check + stealth fingerprint test
96
+ stealth-browser health --preset linkedin_2026 --region us
97
+
98
+ # Start the operator dashboard
99
+ agentic-stealth-browser dashboard
100
+ ```
101
+
102
+ ### Python SDK
103
+
104
+ ```python
105
+ from core.agent_browser import AgentBrowser
106
+
107
+ async with AgentBrowser(
108
+ session_name="my-session",
109
+ region="japan",
110
+ headless=True
111
+ ) as browser:
112
+ await browser.launch()
113
+ await browser.safe_goto("https://example.com")
114
+ # TLS-spoofed, no webdriver leak, human-like interaction ready
115
+ ```
116
+
117
+ ### MCP (for AI agent clients)
118
+
119
+ ```json
120
+ {
121
+ "mcpServers": {
122
+ "stealth-browser": {
123
+ "command": "python",
124
+ "args": ["-m", "production.mcp_server"]
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ Then: `stealth_launch` → `stealth_navigate` → `stealth_scrape` → `stealth_close`.
131
+
132
+ ---
133
+
134
+ ## Key Features
135
+
136
+ | Feature | What It Does |
137
+ |---|---|
138
+ | **TLS Fingerprinting** | JA3/JA4 region profiles |
139
+ | **Human Behavior** | Mouse wobble, typing mistakes, fatigue, distraction |
140
+ | **Auto Recovery** | Block detection → proxy/session rotation → retry |
141
+ | **Account Warming** | 14-day gradual ramp-up for new accounts |
142
+ | **Workflow Orchestrator** | Queue, schedule, domain concurrency, retries, persistence |
143
+ | **Python SDK** | `StealthClient` — async API without MCP |
144
+ | **Security Governance** | Input validation, session isolation, policy engine, approval gates |
145
+ | **Adaptive Stealth** | Per-domain behavior profiles with FeedbackStore telemetry |
146
+ | **Plugin System** | Lifecycle hooks via `BasePlugin` |
147
+ | **Operator Dashboard** | Live DevTools, CAPTCHA intervention, workflow recording |
148
+ | **Feature Flags** | Runtime capability discovery per browser backend |
149
+ | **Performance Profiling** | Timing decorators + `perf_benchmark.py` |
150
+
151
+ ---
152
+
153
+ ## Full Documentation
154
+
155
+ - **Workflow System** — record real browser actions via CDP, replay as YAML (13 step types)
156
+ - **Operator Dashboard** — Grok/X-inspired dark UI, live browser view, CAPTCHA solving, workflow recording
157
+ - **Orchestrator** — queue, schedule, chain workflows with domain-aware concurrency
158
+ - **Security** — input validation, session isolation, policy engine, approval gates
159
+ - **SDK** — `StealthClient` async API without MCP
160
+ - **Plugins** — lifecycle hooks for custom behavior
161
+ - **VPS Deployment** — systemd, Caddy reverse proxy, Cloudflare Tunnel patterns
162
+ - **Migration v1 → v2** — deprecation shims, migration guide, script
163
+
164
+ See sections below for each topic. For release history: [CHANGELOG.md](CHANGELOG.md).
165
+
166
+ ---
167
+
168
+ ## Project Structure
169
+
170
+ ```
171
+ ├── core/ AgentBrowser, connection pool, session checkpoints
172
+ ├── stealth/ TLS, scripts, Firefox adapter, caching
173
+ ├── behavior/ Human simulation, personas, adaptive tuning
174
+ ├── recovery/ Anti-block orchestrator
175
+ ├── workflows/ Recorder, player, schema, library
176
+ ├── production/ MCP server, SDK, orchestrator, security, profiler
177
+ ├── plugins/ Plugin system with template
178
+ ├── scripts/ Migration, evaluation, benchmarking
179
+ └── tests/ 880+ contract + integration tests
180
+ ```
181
+
182
+ ## License
183
+
184
+ MIT. See [LICENSE](LICENSE) and [CHANGELOG.md](CHANGELOG.md).
@@ -0,0 +1,145 @@
1
+ # Agentic Stealth Browser
2
+
3
+ **Playwright gets detected. This doesn't.**
4
+
5
+ [![CI](https://github.com/shanewas/agentic-stealth-browser/actions/workflows/ci.yml/badge.svg)](https://github.com/shanewas/agentic-stealth-browser/actions/workflows/ci.yml)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
7
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
8
+ [![PyPI](https://img.shields.io/pypi/v/agentic-stealth-browser.svg)](https://pypi.org/project/agentic-stealth-browser/)
9
+ [![Tests](https://img.shields.io/badge/tests-880%2B%20passing-brightgreen)](tests/)
10
+ [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-support-ffdd00?logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/shanewas)
11
+
12
+ <p align="center">
13
+ <img src="assets/hn-demo.gif" alt="Agentic Stealth Browser Demo" width="90%">
14
+ </p>
15
+
16
+ Production-grade stealth browser automation that **survives Cloudflare, LinkedIn, Amazon, and other anti-bot systems** by looking convincingly human at every layer.
17
+
18
+ ```bash
19
+ pip install agentic-stealth-browser
20
+ playwright install --with-deps chromium
21
+ ```
22
+
23
+ ```python
24
+ from core.agent_browser import AgentBrowser
25
+
26
+ async with AgentBrowser(session_name="demo") as browser:
27
+ await browser.launch(headless=True)
28
+ await browser.safe_goto("https://bot.sannysoft.com")
29
+ # ✓ passes WebGL, Canvas, AudioContext, WebRTC, and TLS fingerprinting
30
+ ```
31
+
32
+ ---
33
+
34
+ ## Why vanilla Playwright fails
35
+
36
+ Sites don't just check your User-Agent anymore. They check *everything*:
37
+
38
+ | Attack Surface | Vanilla Playwright | This library |
39
+ |---|---|---|
40
+ | **TLS handshake** (JA3/JA4 fingerprint) | Standard Python TLS — instantly identifiable | Region-spoofed profiles (US, Japan, EU, Korea) |
41
+ | **Navigator APIs** (`navigator.webdriver`, `plugins`, `languages`) | Leaks automation flags everywhere | Every property patched before first paint |
42
+ | **WebGL / Canvas fingerprint** | Headless GPU renders differently | Consistent buffers across sessions |
43
+ | **Human behavior** | Robotic clicks, instant typing | Bézier mouse curves, variable speed, fatigue simulation |
44
+ | **Auto-recovery** | None — blocks = failure | CAPTCHA detection → proxy rotation → retry chain |
45
+ | **Account warming** | Nothing | 14-day graduated ramp-up per account |
46
+
47
+ Result: **passes bot.sannysoft.com, pixelscan.net, and CreepJS** with zero flags in headless mode.
48
+
49
+ ---
50
+
51
+ ## Quick Start
52
+
53
+ ### CLI (easiest)
54
+
55
+ ```bash
56
+ # Health check + stealth fingerprint test
57
+ stealth-browser health --preset linkedin_2026 --region us
58
+
59
+ # Start the operator dashboard
60
+ agentic-stealth-browser dashboard
61
+ ```
62
+
63
+ ### Python SDK
64
+
65
+ ```python
66
+ from core.agent_browser import AgentBrowser
67
+
68
+ async with AgentBrowser(
69
+ session_name="my-session",
70
+ region="japan",
71
+ headless=True
72
+ ) as browser:
73
+ await browser.launch()
74
+ await browser.safe_goto("https://example.com")
75
+ # TLS-spoofed, no webdriver leak, human-like interaction ready
76
+ ```
77
+
78
+ ### MCP (for AI agent clients)
79
+
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "stealth-browser": {
84
+ "command": "python",
85
+ "args": ["-m", "production.mcp_server"]
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ Then: `stealth_launch` → `stealth_navigate` → `stealth_scrape` → `stealth_close`.
92
+
93
+ ---
94
+
95
+ ## Key Features
96
+
97
+ | Feature | What It Does |
98
+ |---|---|
99
+ | **TLS Fingerprinting** | JA3/JA4 region profiles |
100
+ | **Human Behavior** | Mouse wobble, typing mistakes, fatigue, distraction |
101
+ | **Auto Recovery** | Block detection → proxy/session rotation → retry |
102
+ | **Account Warming** | 14-day gradual ramp-up for new accounts |
103
+ | **Workflow Orchestrator** | Queue, schedule, domain concurrency, retries, persistence |
104
+ | **Python SDK** | `StealthClient` — async API without MCP |
105
+ | **Security Governance** | Input validation, session isolation, policy engine, approval gates |
106
+ | **Adaptive Stealth** | Per-domain behavior profiles with FeedbackStore telemetry |
107
+ | **Plugin System** | Lifecycle hooks via `BasePlugin` |
108
+ | **Operator Dashboard** | Live DevTools, CAPTCHA intervention, workflow recording |
109
+ | **Feature Flags** | Runtime capability discovery per browser backend |
110
+ | **Performance Profiling** | Timing decorators + `perf_benchmark.py` |
111
+
112
+ ---
113
+
114
+ ## Full Documentation
115
+
116
+ - **Workflow System** — record real browser actions via CDP, replay as YAML (13 step types)
117
+ - **Operator Dashboard** — Grok/X-inspired dark UI, live browser view, CAPTCHA solving, workflow recording
118
+ - **Orchestrator** — queue, schedule, chain workflows with domain-aware concurrency
119
+ - **Security** — input validation, session isolation, policy engine, approval gates
120
+ - **SDK** — `StealthClient` async API without MCP
121
+ - **Plugins** — lifecycle hooks for custom behavior
122
+ - **VPS Deployment** — systemd, Caddy reverse proxy, Cloudflare Tunnel patterns
123
+ - **Migration v1 → v2** — deprecation shims, migration guide, script
124
+
125
+ See sections below for each topic. For release history: [CHANGELOG.md](CHANGELOG.md).
126
+
127
+ ---
128
+
129
+ ## Project Structure
130
+
131
+ ```
132
+ ├── core/ AgentBrowser, connection pool, session checkpoints
133
+ ├── stealth/ TLS, scripts, Firefox adapter, caching
134
+ ├── behavior/ Human simulation, personas, adaptive tuning
135
+ ├── recovery/ Anti-block orchestrator
136
+ ├── workflows/ Recorder, player, schema, library
137
+ ├── production/ MCP server, SDK, orchestrator, security, profiler
138
+ ├── plugins/ Plugin system with template
139
+ ├── scripts/ Migration, evaluation, benchmarking
140
+ └── tests/ 880+ contract + integration tests
141
+ ```
142
+
143
+ ## License
144
+
145
+ MIT. See [LICENSE](LICENSE) and [CHANGELOG.md](CHANGELOG.md).
@@ -0,0 +1,184 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentic-stealth-browser
3
+ Version: 2.3.0
4
+ Summary: Production-grade, human-mimicking browser automation framework for autonomous agents. Survives modern anti-bot systems.
5
+ Author-email: Shane W <shanewas@users.noreply.github.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/shanewas/agentic-stealth-browser
8
+ Project-URL: Repository, https://github.com/shanewas/agentic-stealth-browser
9
+ Project-URL: Issues, https://github.com/shanewas/agentic-stealth-browser/issues
10
+ Project-URL: Documentation, https://github.com/shanewas/agentic-stealth-browser/tree/master/docs
11
+ Project-URL: Changelog, https://github.com/shanewas/agentic-stealth-browser/blob/master/CHANGELOG.md
12
+ Keywords: stealth,browser,automation,playwright,anti-bot,scraping,agent
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
21
+ Classifier: Topic :: Software Development :: Testing
22
+ Classifier: Framework :: AsyncIO
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: playwright
27
+ Requires-Dist: aiohttp
28
+ Requires-Dist: cryptography
29
+ Requires-Dist: pyyaml
30
+ Requires-Dist: fastapi
31
+ Requires-Dist: jinja2
32
+ Requires-Dist: uvicorn
33
+ Provides-Extra: dev
34
+ Requires-Dist: pytest; extra == "dev"
35
+ Requires-Dist: pytest-asyncio; extra == "dev"
36
+ Requires-Dist: pytest-cov; extra == "dev"
37
+ Requires-Dist: httpx; extra == "dev"
38
+ Dynamic: license-file
39
+
40
+ # Agentic Stealth Browser
41
+
42
+ **Playwright gets detected. This doesn't.**
43
+
44
+ [![CI](https://github.com/shanewas/agentic-stealth-browser/actions/workflows/ci.yml/badge.svg)](https://github.com/shanewas/agentic-stealth-browser/actions/workflows/ci.yml)
45
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
46
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
47
+ [![PyPI](https://img.shields.io/pypi/v/agentic-stealth-browser.svg)](https://pypi.org/project/agentic-stealth-browser/)
48
+ [![Tests](https://img.shields.io/badge/tests-880%2B%20passing-brightgreen)](tests/)
49
+ [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-support-ffdd00?logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/shanewas)
50
+
51
+ <p align="center">
52
+ <img src="assets/hn-demo.gif" alt="Agentic Stealth Browser Demo" width="90%">
53
+ </p>
54
+
55
+ Production-grade stealth browser automation that **survives Cloudflare, LinkedIn, Amazon, and other anti-bot systems** by looking convincingly human at every layer.
56
+
57
+ ```bash
58
+ pip install agentic-stealth-browser
59
+ playwright install --with-deps chromium
60
+ ```
61
+
62
+ ```python
63
+ from core.agent_browser import AgentBrowser
64
+
65
+ async with AgentBrowser(session_name="demo") as browser:
66
+ await browser.launch(headless=True)
67
+ await browser.safe_goto("https://bot.sannysoft.com")
68
+ # ✓ passes WebGL, Canvas, AudioContext, WebRTC, and TLS fingerprinting
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Why vanilla Playwright fails
74
+
75
+ Sites don't just check your User-Agent anymore. They check *everything*:
76
+
77
+ | Attack Surface | Vanilla Playwright | This library |
78
+ |---|---|---|
79
+ | **TLS handshake** (JA3/JA4 fingerprint) | Standard Python TLS — instantly identifiable | Region-spoofed profiles (US, Japan, EU, Korea) |
80
+ | **Navigator APIs** (`navigator.webdriver`, `plugins`, `languages`) | Leaks automation flags everywhere | Every property patched before first paint |
81
+ | **WebGL / Canvas fingerprint** | Headless GPU renders differently | Consistent buffers across sessions |
82
+ | **Human behavior** | Robotic clicks, instant typing | Bézier mouse curves, variable speed, fatigue simulation |
83
+ | **Auto-recovery** | None — blocks = failure | CAPTCHA detection → proxy rotation → retry chain |
84
+ | **Account warming** | Nothing | 14-day graduated ramp-up per account |
85
+
86
+ Result: **passes bot.sannysoft.com, pixelscan.net, and CreepJS** with zero flags in headless mode.
87
+
88
+ ---
89
+
90
+ ## Quick Start
91
+
92
+ ### CLI (easiest)
93
+
94
+ ```bash
95
+ # Health check + stealth fingerprint test
96
+ stealth-browser health --preset linkedin_2026 --region us
97
+
98
+ # Start the operator dashboard
99
+ agentic-stealth-browser dashboard
100
+ ```
101
+
102
+ ### Python SDK
103
+
104
+ ```python
105
+ from core.agent_browser import AgentBrowser
106
+
107
+ async with AgentBrowser(
108
+ session_name="my-session",
109
+ region="japan",
110
+ headless=True
111
+ ) as browser:
112
+ await browser.launch()
113
+ await browser.safe_goto("https://example.com")
114
+ # TLS-spoofed, no webdriver leak, human-like interaction ready
115
+ ```
116
+
117
+ ### MCP (for AI agent clients)
118
+
119
+ ```json
120
+ {
121
+ "mcpServers": {
122
+ "stealth-browser": {
123
+ "command": "python",
124
+ "args": ["-m", "production.mcp_server"]
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ Then: `stealth_launch` → `stealth_navigate` → `stealth_scrape` → `stealth_close`.
131
+
132
+ ---
133
+
134
+ ## Key Features
135
+
136
+ | Feature | What It Does |
137
+ |---|---|
138
+ | **TLS Fingerprinting** | JA3/JA4 region profiles |
139
+ | **Human Behavior** | Mouse wobble, typing mistakes, fatigue, distraction |
140
+ | **Auto Recovery** | Block detection → proxy/session rotation → retry |
141
+ | **Account Warming** | 14-day gradual ramp-up for new accounts |
142
+ | **Workflow Orchestrator** | Queue, schedule, domain concurrency, retries, persistence |
143
+ | **Python SDK** | `StealthClient` — async API without MCP |
144
+ | **Security Governance** | Input validation, session isolation, policy engine, approval gates |
145
+ | **Adaptive Stealth** | Per-domain behavior profiles with FeedbackStore telemetry |
146
+ | **Plugin System** | Lifecycle hooks via `BasePlugin` |
147
+ | **Operator Dashboard** | Live DevTools, CAPTCHA intervention, workflow recording |
148
+ | **Feature Flags** | Runtime capability discovery per browser backend |
149
+ | **Performance Profiling** | Timing decorators + `perf_benchmark.py` |
150
+
151
+ ---
152
+
153
+ ## Full Documentation
154
+
155
+ - **Workflow System** — record real browser actions via CDP, replay as YAML (13 step types)
156
+ - **Operator Dashboard** — Grok/X-inspired dark UI, live browser view, CAPTCHA solving, workflow recording
157
+ - **Orchestrator** — queue, schedule, chain workflows with domain-aware concurrency
158
+ - **Security** — input validation, session isolation, policy engine, approval gates
159
+ - **SDK** — `StealthClient` async API without MCP
160
+ - **Plugins** — lifecycle hooks for custom behavior
161
+ - **VPS Deployment** — systemd, Caddy reverse proxy, Cloudflare Tunnel patterns
162
+ - **Migration v1 → v2** — deprecation shims, migration guide, script
163
+
164
+ See sections below for each topic. For release history: [CHANGELOG.md](CHANGELOG.md).
165
+
166
+ ---
167
+
168
+ ## Project Structure
169
+
170
+ ```
171
+ ├── core/ AgentBrowser, connection pool, session checkpoints
172
+ ├── stealth/ TLS, scripts, Firefox adapter, caching
173
+ ├── behavior/ Human simulation, personas, adaptive tuning
174
+ ├── recovery/ Anti-block orchestrator
175
+ ├── workflows/ Recorder, player, schema, library
176
+ ├── production/ MCP server, SDK, orchestrator, security, profiler
177
+ ├── plugins/ Plugin system with template
178
+ ├── scripts/ Migration, evaluation, benchmarking
179
+ └── tests/ 880+ contract + integration tests
180
+ ```
181
+
182
+ ## License
183
+
184
+ MIT. See [LICENSE](LICENSE) and [CHANGELOG.md](CHANGELOG.md).
@@ -250,6 +250,7 @@ class AgentBrowser:
250
250
  self.use_pooled_context: bool = use_pooled_context # #57/#48/#47 scalability: when True, launch uses shared browser pool instead of per-instance launch_persistent_context
251
251
  self._using_pool: bool = False
252
252
  self._pooled_ctx_id: Optional[int] = None # track for release
253
+ self._browser_process = None # set after launch for PID tracking
253
254
 
254
255
  # #136: Tool-level rate limiter for public API surface (MCP tool calls)
255
256
  if rate_limits is not None:
@@ -636,6 +637,14 @@ class AgentBrowser:
636
637
  self.browser = await pw.chromium.launch_persistent_context(**lp_kwargs)
637
638
  self.browser_context = self.browser
638
639
 
640
+ # Capture browser subprocess PID for external lifecycle management
641
+ try:
642
+ pw_browser_obj = self.browser.browser # BrowserContext -> Browser
643
+ if pw_browser_obj is not None:
644
+ self._browser_process = pw_browser_obj.process
645
+ except Exception:
646
+ self._browser_process = None
647
+
639
648
  # #377: discover CDP WS endpoint if enabled (uses Chrome's DevToolsActivePort + /json/version; stdlib only)
640
649
  if getattr(self, "debug_cdp", False):
641
650
  try:
@@ -32,7 +32,7 @@ JSONRPC_VERSION = "2.0"
32
32
  PROTOCOL_VERSION = "2025-03-26"
33
33
  SERVER_NAME = "agentic-stealth-browser"
34
34
  SERVER_TITLE = "Agentic Stealth Browser MCP Server"
35
- SERVER_VERSION = "2.1.0"
35
+ SERVER_VERSION = "2.3.0"
36
36
 
37
37
 
38
38
  class ToolError(Exception):
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agentic-stealth-browser"
7
- version = "2.1.1"
7
+ version = "2.3.0"
8
8
  description = "Production-grade, human-mimicking browser automation framework for autonomous agents. Survives modern anti-bot systems."
9
9
  readme = "README.md"
10
10
  license = "MIT"