visus-web 0.3.2__tar.gz → 0.3.3__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 (277) hide show
  1. {visus_web-0.3.2 → visus_web-0.3.3}/PKG-INFO +1 -1
  2. {visus_web-0.3.2 → visus_web-0.3.3}/RELEASING.md +5 -2
  3. {visus_web-0.3.2 → visus_web-0.3.3}/pyproject.toml +1 -1
  4. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/__init__.py +1 -1
  5. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/js/bundle.js +10 -12
  6. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/SKILL.md +1 -1
  7. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_page_ops.py +8 -2
  8. {visus_web-0.3.2 → visus_web-0.3.3}/.claude/skills/developing-visus-web/SKILL.md +0 -0
  9. {visus_web-0.3.2 → visus_web-0.3.3}/.github/dependabot.yml +0 -0
  10. {visus_web-0.3.2 → visus_web-0.3.3}/.github/workflows/ci.yml +0 -0
  11. {visus_web-0.3.2 → visus_web-0.3.3}/.github/workflows/publish.yml +0 -0
  12. {visus_web-0.3.2 → visus_web-0.3.3}/.gitignore +0 -0
  13. {visus_web-0.3.2 → visus_web-0.3.3}/.pre-commit-config.yaml +0 -0
  14. {visus_web-0.3.2 → visus_web-0.3.3}/CONTRIBUTING.md +0 -0
  15. {visus_web-0.3.2 → visus_web-0.3.3}/LICENSE +0 -0
  16. {visus_web-0.3.2 → visus_web-0.3.3}/NOTICE +0 -0
  17. {visus_web-0.3.2 → visus_web-0.3.3}/README.md +0 -0
  18. {visus_web-0.3.2 → visus_web-0.3.3}/SECURITY.md +0 -0
  19. {visus_web-0.3.2 → visus_web-0.3.3}/TESTING.md +0 -0
  20. {visus_web-0.3.2 → visus_web-0.3.3}/coverage-floors.json +0 -0
  21. {visus_web-0.3.2 → visus_web-0.3.3}/docs/agent-skill.md +0 -0
  22. {visus_web-0.3.2 → visus_web-0.3.3}/examples/demo_rpa.py +0 -0
  23. {visus_web-0.3.2 → visus_web-0.3.3}/examples/dolar.py +0 -0
  24. {visus_web-0.3.2 → visus_web-0.3.3}/examples/login.py +0 -0
  25. {visus_web-0.3.2 → visus_web-0.3.3}/examples/login_mcp.py +0 -0
  26. {visus_web-0.3.2 → visus_web-0.3.3}/examples/login_rpa.py +0 -0
  27. {visus_web-0.3.2 → visus_web-0.3.3}/mkdocs.yml +0 -0
  28. {visus_web-0.3.2 → visus_web-0.3.3}/page.pdf +0 -0
  29. {visus_web-0.3.2 → visus_web-0.3.3}/page.png +0 -0
  30. {visus_web-0.3.2 → visus_web-0.3.3}/scripts/check_coverage.py +0 -0
  31. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/__init__.py +0 -0
  32. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/_htmlsel.py +0 -0
  33. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/_steps.py +0 -0
  34. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/assertions.py +0 -0
  35. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/browser.py +0 -0
  36. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/context.py +0 -0
  37. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/devices.py +0 -0
  38. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/events.py +0 -0
  39. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/fields.py +0 -0
  40. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/frame_locator.py +0 -0
  41. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/input.py +0 -0
  42. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/locator.py +0 -0
  43. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/page.py +0 -0
  44. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/api/route.py +0 -0
  45. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/async_api/__init__.py +0 -0
  46. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/__init__.py +0 -0
  47. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/base.py +0 -0
  48. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/browsers/__init__.py +0 -0
  49. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/browsers/_ie_preflight.py +0 -0
  50. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/browsers/chrome.py +0 -0
  51. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/browsers/edge.py +0 -0
  52. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/browsers/edge_ie.py +0 -0
  53. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/browsers/firefox.py +0 -0
  54. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/__init__.py +0 -0
  55. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/_diagnostics.py +0 -0
  56. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/actionability.py +0 -0
  57. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/cdp_fetch.py +0 -0
  58. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/driver_delegate.py +0 -0
  59. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/expect_engine.py +0 -0
  60. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/js/__init__.py +0 -0
  61. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium/resolver.py +0 -0
  62. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/backends/selenium_backend.py +0 -0
  63. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/__init__.py +0 -0
  64. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/__main__.py +0 -0
  65. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/_entry.py +0 -0
  66. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/codegen.py +0 -0
  67. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/compact.py +0 -0
  68. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/config.py +0 -0
  69. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/console.py +0 -0
  70. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/fleet.py +0 -0
  71. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/main.py +0 -0
  72. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/output.py +0 -0
  73. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/session_client.py +0 -0
  74. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/session_server.py +0 -0
  75. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/skill_check.py +0 -0
  76. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/cli/skills.py +0 -0
  77. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/config.py +0 -0
  78. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/engine.py +0 -0
  79. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/errors.py +0 -0
  80. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/mcp/__init__.py +0 -0
  81. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/mcp/server.py +0 -0
  82. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/mcp/session.py +0 -0
  83. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/network.py +0 -0
  84. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/observability/__init__.py +0 -0
  85. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/observability/recorder.py +0 -0
  86. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/observability/report.py +0 -0
  87. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/observability/video.py +0 -0
  88. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/ops/__init__.py +0 -0
  89. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/ops/captcha.py +0 -0
  90. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/ops/dates.py +0 -0
  91. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/ops/registry.py +0 -0
  92. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/ops/remote.py +0 -0
  93. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/ops/targeting.py +0 -0
  94. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/py.typed +0 -0
  95. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/pytest_plugin.py +0 -0
  96. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/registry.py +0 -0
  97. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/rpa.py +0 -0
  98. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/cli-commands.md +0 -0
  99. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/cli-json-and-piping.md +0 -0
  100. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/cli-repl.md +0 -0
  101. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/cli-session.md +0 -0
  102. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/cli-targeting.md +0 -0
  103. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/library-api.md +0 -0
  104. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/mcp-tools.md +0 -0
  105. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/pytest-plugin.md +0 -0
  106. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/tracing-reports.md +0 -0
  107. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/troubleshooting.md +0 -0
  108. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/vision.md +0 -0
  109. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/skills/visus-web/references/windows-shell.md +0 -0
  110. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/tracing.py +0 -0
  111. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/vision/__init__.py +0 -0
  112. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/vision/_images.py +0 -0
  113. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/vision/imaging.py +0 -0
  114. {visus_web-0.3.2 → visus_web-0.3.3}/src/visus/web/vision/ocr.py +0 -0
  115. {visus_web-0.3.2 → visus_web-0.3.3}/tests/conftest.py +0 -0
  116. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/actions.html +0 -0
  117. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/agent_page.html +0 -0
  118. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/backtrack.html +0 -0
  119. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/backtrack_depth.html +0 -0
  120. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/captcha.html +0 -0
  121. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/captcha_turnstile.html +0 -0
  122. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/captcha_v3.html +0 -0
  123. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/clickables.html +0 -0
  124. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/datepicker.html +0 -0
  125. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/datepicker_form.html +0 -0
  126. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/deep.html +0 -0
  127. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/delayed.html +0 -0
  128. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/download.txt +0 -0
  129. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/downloads.html +0 -0
  130. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/dropzone.html +0 -0
  131. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/duplicates.html +0 -0
  132. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/expects.html +0 -0
  133. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/fields.html +0 -0
  134. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/forms.html +0 -0
  135. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/frames.html +0 -0
  136. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/hidden_duplicates.html +0 -0
  137. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/imagetarget.html +0 -0
  138. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/index.html +0 -0
  139. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/inner.html +0 -0
  140. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/input.html +0 -0
  141. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/interactions.html +0 -0
  142. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/links.html +0 -0
  143. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/locators.html +0 -0
  144. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/mouse.html +0 -0
  145. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/network.html +0 -0
  146. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/nullvsempty.html +0 -0
  147. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/overlay.html +0 -0
  148. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/page2.html +0 -0
  149. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/popups.html +0 -0
  150. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/route_fetch.html +0 -0
  151. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/rpa.html +0 -0
  152. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/shadow.html +0 -0
  153. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/shadow_click.html +0 -0
  154. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/smartsel.html +0 -0
  155. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/snapshot_tree.html +0 -0
  156. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/stale_a.html +0 -0
  157. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/stale_b.html +0 -0
  158. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/storage.html +0 -0
  159. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/upload_single.html +0 -0
  160. {visus_web-0.3.2 → visus_web-0.3.3}/tests/fixtures/visible_text.html +0 -0
  161. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_api_wiring.py +0 -0
  162. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_async_api_unit.py +0 -0
  163. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_backend_protocols.py +0 -0
  164. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_browsers_chrome.py +0 -0
  165. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_browsers_edge.py +0 -0
  166. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_browsers_edge_ie.py +0 -0
  167. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_browsers_firefox.py +0 -0
  168. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_captcha_service.py +0 -0
  169. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_ci_workflows.py +0 -0
  170. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli.py +0 -0
  171. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_agent_loop.py +0 -0
  172. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_agent_matrix.py +0 -0
  173. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_attach.py +0 -0
  174. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_batch.py +0 -0
  175. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_compact.py +0 -0
  176. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_config.py +0 -0
  177. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_devtools.py +0 -0
  178. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_drop_upload.py +0 -0
  179. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_e2e_practice_login.py +0 -0
  180. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_emulation.py +0 -0
  181. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_fleet.py +0 -0
  182. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_index_resolution.py +0 -0
  183. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_input_devices.py +0 -0
  184. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_nth.py +0 -0
  185. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_output.py +0 -0
  186. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_positional_targets.py +0 -0
  187. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_repl_parity.py +0 -0
  188. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_route.py +0 -0
  189. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_run_code.py +0 -0
  190. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_session.py +0 -0
  191. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_session_flag_placement.py +0 -0
  192. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_sessions_named.py +0 -0
  193. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_skills.py +0 -0
  194. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_tabs_state.py +0 -0
  195. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_tracing.py +0 -0
  196. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_visible_text.py +0 -0
  197. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_vision_targeting.py +0 -0
  198. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_cli_wait.py +0 -0
  199. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_codegen.py +0 -0
  200. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_config.py +0 -0
  201. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_console_scripts.py +0 -0
  202. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_coverage_floors.py +0 -0
  203. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_daemon_command_override.py +0 -0
  204. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_diagnostics.py +0 -0
  205. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_download_partial_files.py +0 -0
  206. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_driver_handle_inheritance.py +0 -0
  207. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_actions.py +0 -0
  208. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_actions_more.py +0 -0
  209. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_async.py +0 -0
  210. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_async_more.py +0 -0
  211. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_async_parity.py +0 -0
  212. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_backtrack.py +0 -0
  213. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_cli_session.py +0 -0
  214. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_contexts.py +0 -0
  215. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_downloads.py +0 -0
  216. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_edge.py +0 -0
  217. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_edge_ie.py +0 -0
  218. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_edge_rpa.py +0 -0
  219. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_errors.py +0 -0
  220. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_events.py +0 -0
  221. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_expect.py +0 -0
  222. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_expect_more.py +0 -0
  223. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_fields.py +0 -0
  224. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_firefox.py +0 -0
  225. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_frames.py +0 -0
  226. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_input.py +0 -0
  227. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_launch.py +0 -0
  228. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_locators.py +0 -0
  229. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_locators_more.py +0 -0
  230. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_mcp.py +0 -0
  231. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_navigation.py +0 -0
  232. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_network.py +0 -0
  233. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_observability.py +0 -0
  234. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_rpa.py +0 -0
  235. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_rpa_basics.py +0 -0
  236. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_smartsel.py +0 -0
  237. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_e2e_vision.py +0 -0
  238. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_engine.py +0 -0
  239. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_errors.py +0 -0
  240. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_events.py +0 -0
  241. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_expect_engine_unit.py +0 -0
  242. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_htmlsel.py +0 -0
  243. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_http_site_e2e.py +0 -0
  244. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_input_wiring.py +0 -0
  245. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_installed_entry_points.py +0 -0
  246. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_list_clickables.py +0 -0
  247. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_locator_steps.py +0 -0
  248. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_mcp_attach.py +0 -0
  249. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_mcp_index.py +0 -0
  250. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_mcp_list_fields.py +0 -0
  251. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_mcp_nth.py +0 -0
  252. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_mcp_server.py +0 -0
  253. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_mcp_tracing.py +0 -0
  254. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_network_capture.py +0 -0
  255. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_network_capture_cdp.py +0 -0
  256. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_no_console_window.py +0 -0
  257. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_ops_registry.py +0 -0
  258. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_ops_remote.py +0 -0
  259. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_ops_targeting.py +0 -0
  260. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_pick_date.py +0 -0
  261. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_pytest_config.py +0 -0
  262. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_pytest_plugin.py +0 -0
  263. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_registry.py +0 -0
  264. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_repo_hygiene.py +0 -0
  265. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_repo_metadata.py +0 -0
  266. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_report_copy.py +0 -0
  267. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_route.py +0 -0
  268. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_selenium_backend_protocol.py +0 -0
  269. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_skill_check_binary_rename.py +0 -0
  270. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_skill_commands_parse.py +0 -0
  271. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_skill_docs.py +0 -0
  272. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_steps_backtrack.py +0 -0
  273. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_tracing_unit.py +0 -0
  274. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_translation.py +0 -0
  275. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_unique_locators.py +0 -0
  276. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_vision.py +0 -0
  277. {visus_web-0.3.2 → visus_web-0.3.3}/tests/test_window_maximized.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: visus-web
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: Modern, Playwright-style web automation on a pure Selenium engine, with BotCity RPA reach.
5
5
  Project-URL: Homepage, https://github.com/botvisus/visus-framework-web
6
6
  Project-URL: Repository, https://github.com/botvisus/visus-framework-web.git
@@ -11,11 +11,14 @@ branch to PyPI, unversioned and untested.
11
11
 
12
12
  ## Steps
13
13
 
14
- 1. **Bump the version in BOTH places.** They are duplicated and nothing keeps them in
15
- sync — a release that bumps only one ships a package whose `visus version` lies.
14
+ 1. **Bump the version in ALL THREE places.** They are duplicated and nothing keeps them
15
+ in sync — a release that bumps only one ships a package whose `visus version` lies.
16
16
 
17
17
  - `pyproject.toml` → `[project] version = "X.Y.Z"` (line 7)
18
18
  - `src/visus/web/__init__.py` → `__version__ = "X.Y.Z"` (line 17)
19
+ - `src/visus/web/skills/visus-web/SKILL.md` → frontmatter `version: "X.Y.Z"` (line 5;
20
+ `tests/test_skill_docs.py` fails the CI gate when it lags — that stopped v0.3.3's
21
+ first publish)
19
22
 
20
23
  Verify: `uv run python -c "import visus.web; print(visus.web.__version__)"`
21
24
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "visus-web"
7
- version = "0.3.2"
7
+ version = "0.3.3"
8
8
  description = "Modern, Playwright-style web automation on a pure Selenium engine, with BotCity RPA reach."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -14,7 +14,7 @@ from visus.web.engine import Engine
14
14
  from visus.web.registry import get_browser_config
15
15
  from visus.web.rpa import rpa
16
16
 
17
- __version__ = "0.3.2"
17
+ __version__ = "0.3.3"
18
18
 
19
19
  __all__ = [
20
20
  "launch",
@@ -455,27 +455,25 @@
455
455
  return out;
456
456
  }
457
457
 
458
+ // The visus-studio highlight: brand green #2ea043, a 2px rounded border, a
459
+ // translucent green fill and a soft glow -- the same box the Studio draws.
460
+ var HIGHLIGHT_LOOK =
461
+ "border:2px solid #2ea043;background:rgba(46,160,67,0.14);" +
462
+ "box-shadow:0 0 0 1px rgba(46,160,67,0.35),0 0 14px rgba(46,160,67,0.55);";
463
+
458
464
  function highlight(el, style) {
459
465
  unhighlight();
460
466
  if (!el || !el.getBoundingClientRect) return null;
461
467
  var r = el.getBoundingClientRect();
462
- // `style` (optional) replaces the default border + glow, e.g. "2px dashed #0a0".
463
- var edge = style
464
- ? "border:" + style + ";"
465
- : "border:3px solid #cc785c;box-shadow:0 0 0 2px rgba(204,120,92,.35);";
468
+ // `style` (optional) replaces the default border, fill and glow, e.g. "2px dashed #0a0".
469
+ var look = style ? "border:" + style + ";" : HIGHLIGHT_LOOK;
466
470
  var box = document.createElement("div");
467
471
  box.setAttribute("data-visus-highlight", "1");
468
472
  box.style.cssText =
469
- "position:fixed;z-index:2147483647;pointer-events:none;box-sizing:border-box;" + edge +
473
+ "position:fixed;z-index:2147483647;pointer-events:none;box-sizing:border-box;" +
474
+ "border-radius:3px;" + look +
470
475
  "left:" + r.left + "px;top:" + r.top + "px;width:" + r.width + "px;height:" + r.height + "px;";
471
- var cx = document.createElement("div");
472
- cx.setAttribute("data-visus-highlight", "1");
473
- cx.style.cssText =
474
- "position:fixed;z-index:2147483647;pointer-events:none;width:10px;height:10px;" +
475
- "border:2px solid #cc785c;border-radius:50%;" +
476
- "left:" + (r.left + r.width / 2 - 5) + "px;top:" + (r.top + r.height / 2 - 5) + "px;";
477
476
  document.documentElement.appendChild(box);
478
- document.documentElement.appendChild(cx);
479
477
  return { x: Math.round(r.left), y: Math.round(r.top), w: Math.round(r.width), h: Math.round(r.height) };
480
478
  }
481
479
  function unhighlight() {
@@ -2,7 +2,7 @@
2
2
  name: visus-web
3
3
  description: Drive a real browser from the shell with the `visus` CLI — session daemon, list-fields/act-by-index, role/name targeting, expect-text, codegen, vision. Use when automating or testing a web page.
4
4
  allowed-tools: Bash(visus:*) Bash(visus-web-mcp:*) Bash(pip:*) Bash(uvx:*)
5
- version: "0.3.2"
5
+ version: "0.3.3"
6
6
  ---
7
7
 
8
8
  # visus-web
@@ -120,8 +120,14 @@ def test_highlight_draws_and_hides_a_box_on_a_real_page(base_url: str) -> None:
120
120
 
121
121
  try:
122
122
  assert h.handle("highlight", {"selector": "#btn"})["ok"] is True
123
- # highlight() appends the box AND a centre dot, both tagged.
124
- assert js("() => document.querySelectorAll('[data-visus-highlight]').length") == 2
123
+ # highlight() appends ONE tagged box, in the visus-studio look: green #2ea043,
124
+ # 2px rounded border, a translucent green fill.
125
+ assert js("() => document.querySelectorAll('[data-visus-highlight]').length") == 1
126
+ look = js(
127
+ "() => { const s = document.querySelector('[data-visus-highlight]').style;"
128
+ " return [s.borderTopColor, s.borderTopWidth, s.backgroundColor, s.borderRadius]; }"
129
+ )
130
+ assert look == ["rgb(46, 160, 67)", "2px", "rgba(46, 160, 67, 0.14)", "3px"]
125
131
 
126
132
  styled = h.handle("highlight", {"selector": "#btn", "style": "2px dashed rgb(0, 170, 0)"})
127
133
  assert styled["ok"] is True, styled
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes