anchorbrowser 0.3.2__tar.gz → 0.3.4__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.
- anchorbrowser-0.3.4/.release-please-manifest.json +3 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/CHANGELOG.md +22 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/PKG-INFO +1 -1
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/pyproject.toml +1 -1
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_streaming.py +4 -6
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_version.py +1 -1
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/agent.py +24 -8
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/sessions.py +23 -6
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/tools.py +39 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/tool_perform_web_task_params.py +25 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/test_tools.py +8 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_client.py +204 -164
- anchorbrowser-0.3.2/.release-please-manifest.json +0 -3
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/.gitignore +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/CONTRIBUTING.md +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/LICENSE +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/README.md +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/SECURITY.md +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/api.md +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/bin/check-release-environment +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/bin/publish-pypi +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/examples/.keep +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/noxfile.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/release-please-config.json +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/requirements-dev.lock +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/requirements.lock +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_base_client.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_client.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_compat.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_constants.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_exceptions.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_files.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_models.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_qs.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_resource.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_types.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_compat.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_datetime_parse.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_logs.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_proxy.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_reflection.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_resources_proxy.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_streams.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_sync.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_transform.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_typing.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/_utils/_utils.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/lib/.keep +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/lib/agent.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/lib/browser.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/py.typed +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/batch_sessions.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/browser.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/events.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/extensions.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/profiles.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/agent/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/agent/agent.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/agent/files.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/all.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/clipboard.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/keyboard.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/mouse.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/recordings/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/recordings/primary.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/recordings/recordings.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/task.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/batch_session_create_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/batch_session_create_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/batch_session_retrieve_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/event_signal_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/event_wait_for_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/event_wait_for_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/extension_delete_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/extension_list_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/extension_manifest.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/extension_retrieve_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/extension_upload_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/extension_upload_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/profile_create_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/profile_list_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/profile_retrieve_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_copy_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_create_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_create_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_drag_and_drop_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_drag_and_drop_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_goto_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_goto_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_list_pages_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_paste_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_paste_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_retrieve_downloads_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_retrieve_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_scroll_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_scroll_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_upload_file_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/session_upload_file_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/agent/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/agent/file_list_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/agent/file_upload_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/agent/file_upload_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/all_status_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/clipboard_get_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/clipboard_set_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/clipboard_set_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/keyboard_shortcut_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/keyboard_shortcut_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/keyboard_type_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/keyboard_type_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/mouse_click_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/mouse_click_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/mouse_double_click_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/mouse_double_click_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/mouse_move_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/mouse_move_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/recording_list_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/recording_pause_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/recording_resume_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/sessions/recordings/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/shared/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/shared/success_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/task/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/task/run_execute_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/task/run_execute_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/task_create_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/task_create_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/task_list_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/task_list_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/tool_fetch_webpage_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/tool_fetch_webpage_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/tool_perform_web_task_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/tool_screenshot_webpage_params.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/agent/test_files.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/recordings/__init__.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/recordings/test_primary.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/test_agent.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/test_all.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/test_clipboard.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/test_keyboard.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/test_mouse.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/sessions/test_recordings.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/test_batch_sessions.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/test_events.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/test_extensions.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/test_profiles.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/test_sessions.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/api_resources/test_task.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/conftest.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/sample_file.txt +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_deepcopy.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_extract_files.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_files.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_models.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_qs.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_required_args.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_response.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_streaming.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_transform.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_utils/test_datetime_parse.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_utils/test_proxy.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/test_utils/test_typing.py +0 -0
- {anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/tests/utils.py +0 -0
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.4 (2025-10-31)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.3.3...v0.3.4](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/compare/v0.3.3...v0.3.4)
|
|
6
|
+
|
|
7
|
+
## 0.3.3 (2025-10-31)
|
|
8
|
+
|
|
9
|
+
Full Changelog: [v0.3.2...v0.3.3](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/compare/v0.3.2...v0.3.3)
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Enhanced agent features documentation ([6ebf420](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/commit/6ebf4206b4e60185adc696d63c8847dcebd45c83))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **client:** close streams without requiring full consumption ([3ff9aa7](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/commit/3ff9aa743c874d2ecdbf3884fc630d1c81abc32c))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Chores
|
|
22
|
+
|
|
23
|
+
* **internal/tests:** avoid race condition with implicit client cleanup ([5883b7c](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/commit/5883b7ce49e1d130b094b44bee109b9ae20c27a9))
|
|
24
|
+
|
|
3
25
|
## 0.3.2 (2025-10-27)
|
|
4
26
|
|
|
5
27
|
Full Changelog: [v0.3.1...v0.3.2](https://github.com/anchorbrowser/AnchorBrowser-SDK-Python/compare/v0.3.1...v0.3.2)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: anchorbrowser
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: The official Python library for the anchorbrowser API
|
|
5
5
|
Project-URL: Homepage, https://github.com/anchorbrowser/AnchorBrowser-SDK-Python
|
|
6
6
|
Project-URL: Repository, https://github.com/anchorbrowser/AnchorBrowser-SDK-Python
|
|
@@ -57,9 +57,8 @@ class Stream(Generic[_T]):
|
|
|
57
57
|
for sse in iterator:
|
|
58
58
|
yield process_data(data=sse.json(), cast_to=cast_to, response=response)
|
|
59
59
|
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
...
|
|
60
|
+
# As we might not fully consume the response stream, we need to close it explicitly
|
|
61
|
+
response.close()
|
|
63
62
|
|
|
64
63
|
def __enter__(self) -> Self:
|
|
65
64
|
return self
|
|
@@ -121,9 +120,8 @@ class AsyncStream(Generic[_T]):
|
|
|
121
120
|
async for sse in iterator:
|
|
122
121
|
yield process_data(data=sse.json(), cast_to=cast_to, response=response)
|
|
123
122
|
|
|
124
|
-
#
|
|
125
|
-
|
|
126
|
-
...
|
|
123
|
+
# As we might not fully consume the response stream, we need to close it explicitly
|
|
124
|
+
await response.aclose()
|
|
127
125
|
|
|
128
126
|
async def __aenter__(self) -> Self:
|
|
129
127
|
return self
|
|
@@ -47,6 +47,7 @@ class AgentResource(SyncAPIResource):
|
|
|
47
47
|
*,
|
|
48
48
|
session_options: Optional[Session] = None,
|
|
49
49
|
task_options: Optional[AgentTaskParams] = None,
|
|
50
|
+
session_id: Optional[str] = None,
|
|
50
51
|
) -> str:
|
|
51
52
|
"""Execute an AI agent task within a browser session.
|
|
52
53
|
|
|
@@ -62,12 +63,19 @@ class AgentResource(SyncAPIResource):
|
|
|
62
63
|
Returns:
|
|
63
64
|
str: The result of the AI agent task execution.
|
|
64
65
|
"""
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
if session_id:
|
|
67
|
+
retrieved_session = self._client.sessions.retrieve(session_id)
|
|
68
|
+
if not retrieved_session or not retrieved_session or not retrieved_session.session_id:
|
|
69
|
+
raise ValueError("Failed to retrieve session: No session ID returned")
|
|
70
|
+
actual_session_id = retrieved_session.session_id
|
|
71
|
+
else:
|
|
72
|
+
created_session = self._client.sessions.create(session=session_options or {})
|
|
73
|
+
if not created_session or not created_session.data or not created_session.data.id:
|
|
74
|
+
raise ValueError("Failed to create session: No session ID returned")
|
|
75
|
+
actual_session_id = created_session.data.id
|
|
68
76
|
|
|
69
77
|
with BrowserSetup(
|
|
70
|
-
session_id=
|
|
78
|
+
session_id=actual_session_id,
|
|
71
79
|
base_url=str(self._client.base_url),
|
|
72
80
|
api_key=self._client.api_key,
|
|
73
81
|
) as browser_setup:
|
|
@@ -228,6 +236,7 @@ class AsyncAgentResource(AsyncAPIResource):
|
|
|
228
236
|
*,
|
|
229
237
|
session_options: Optional[Session] = None,
|
|
230
238
|
task_options: Optional[AgentTaskParams] = None,
|
|
239
|
+
session_id: Optional[str] = None,
|
|
231
240
|
) -> str:
|
|
232
241
|
"""Execute an AI agent task within a browser session.
|
|
233
242
|
|
|
@@ -243,12 +252,19 @@ class AsyncAgentResource(AsyncAPIResource):
|
|
|
243
252
|
Returns:
|
|
244
253
|
str: The result of the AI agent task execution.
|
|
245
254
|
"""
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
255
|
+
if session_id:
|
|
256
|
+
retrieved_session = await self._client.sessions.retrieve(session_id)
|
|
257
|
+
if not retrieved_session or not retrieved_session.session_id:
|
|
258
|
+
raise ValueError("Failed to retrieve session: No session ID returned")
|
|
259
|
+
actual_session_id = retrieved_session.session_id
|
|
260
|
+
else:
|
|
261
|
+
created_session = await self._client.sessions.create(session=session_options or {})
|
|
262
|
+
if not created_session or not created_session.data or not created_session.data.id:
|
|
263
|
+
raise ValueError("Failed to create session: No session ID returned")
|
|
264
|
+
actual_session_id = created_session.data.id
|
|
249
265
|
|
|
250
266
|
browser_setup = BrowserSetup(
|
|
251
|
-
session_id=
|
|
267
|
+
session_id=actual_session_id,
|
|
252
268
|
base_url=str(self._client.base_url),
|
|
253
269
|
api_key=self._client.api_key,
|
|
254
270
|
)
|
{anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/resources/sessions/sessions.py
RENAMED
|
@@ -42,6 +42,7 @@ from .keyboard import (
|
|
|
42
42
|
AsyncKeyboardResourceWithStreamingResponse,
|
|
43
43
|
)
|
|
44
44
|
from ..._compat import cached_property
|
|
45
|
+
from ..._models import construct_type
|
|
45
46
|
from .clipboard import (
|
|
46
47
|
ClipboardResource,
|
|
47
48
|
AsyncClipboardResource,
|
|
@@ -214,13 +215,21 @@ class SessionsResource(SyncAPIResource):
|
|
|
214
215
|
"""
|
|
215
216
|
if not session_id:
|
|
216
217
|
raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
|
|
217
|
-
|
|
218
|
+
|
|
219
|
+
# Get raw response to unwrap the data field
|
|
220
|
+
raw_response = cast(dict[str, object], self._get(
|
|
218
221
|
f"/v1/sessions/{session_id}",
|
|
219
222
|
options=make_request_options(
|
|
220
223
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
221
224
|
),
|
|
222
|
-
cast_to=
|
|
223
|
-
)
|
|
225
|
+
cast_to=object, # Get as raw object (dict) to unwrap
|
|
226
|
+
))
|
|
227
|
+
|
|
228
|
+
# Unwrap data field if API returns { data: {...} }
|
|
229
|
+
data: object = raw_response.get("data", raw_response)
|
|
230
|
+
|
|
231
|
+
# Construct the response type from the unwrapped data
|
|
232
|
+
return cast(SessionRetrieveResponse, construct_type(type_=SessionRetrieveResponse, value=data))
|
|
224
233
|
|
|
225
234
|
def delete(
|
|
226
235
|
self,
|
|
@@ -751,13 +760,21 @@ class AsyncSessionsResource(AsyncAPIResource):
|
|
|
751
760
|
"""
|
|
752
761
|
if not session_id:
|
|
753
762
|
raise ValueError(f"Expected a non-empty value for `session_id` but received {session_id!r}")
|
|
754
|
-
|
|
763
|
+
|
|
764
|
+
# Get raw response to unwrap the data field
|
|
765
|
+
raw_response = cast(dict[str, object], await self._get(
|
|
755
766
|
f"/v1/sessions/{session_id}",
|
|
756
767
|
options=make_request_options(
|
|
757
768
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
758
769
|
),
|
|
759
|
-
cast_to=
|
|
760
|
-
)
|
|
770
|
+
cast_to=object, # Get as raw object (dict) to unwrap
|
|
771
|
+
))
|
|
772
|
+
|
|
773
|
+
# Unwrap data field if API returns { data: {...} }
|
|
774
|
+
data: object = raw_response.get("data", raw_response)
|
|
775
|
+
|
|
776
|
+
# Construct the response type from the unwrapped data
|
|
777
|
+
return cast(SessionRetrieveResponse, construct_type(type_=SessionRetrieveResponse, value=data))
|
|
761
778
|
|
|
762
779
|
async def delete(
|
|
763
780
|
self,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from typing import Dict
|
|
5
6
|
from typing_extensions import Literal
|
|
6
7
|
|
|
7
8
|
import httpx
|
|
@@ -128,10 +129,14 @@ class ToolsResource(SyncAPIResource):
|
|
|
128
129
|
prompt: str,
|
|
129
130
|
session_id: str | Omit = omit,
|
|
130
131
|
agent: Literal["browser-use", "openai-cua"] | Omit = omit,
|
|
132
|
+
detect_elements: bool | Omit = omit,
|
|
131
133
|
highlight_elements: bool | Omit = omit,
|
|
134
|
+
human_intervention: bool | Omit = omit,
|
|
135
|
+
max_steps: int | Omit = omit,
|
|
132
136
|
model: str | Omit = omit,
|
|
133
137
|
output_schema: object | Omit = omit,
|
|
134
138
|
provider: Literal["openai", "gemini", "groq", "azure", "xai"] | Omit = omit,
|
|
139
|
+
secret_values: Dict[str, str] | Omit = omit,
|
|
135
140
|
url: str | Omit = omit,
|
|
136
141
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
137
142
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
@@ -152,8 +157,16 @@ class ToolsResource(SyncAPIResource):
|
|
|
152
157
|
|
|
153
158
|
agent: The AI agent to use for task completion. Defaults to browser-use.
|
|
154
159
|
|
|
160
|
+
detect_elements: Enable element detection for better interaction accuracy. Improves the agent's
|
|
161
|
+
ability to identify and interact with UI elements.
|
|
162
|
+
|
|
155
163
|
highlight_elements: Whether to highlight elements during task execution for better visibility.
|
|
156
164
|
|
|
165
|
+
human_intervention: Allow human intervention during task execution. When enabled, the agent can
|
|
166
|
+
request human input for ambiguous situations.
|
|
167
|
+
|
|
168
|
+
max_steps: Maximum number of steps the agent can take to complete the task. Defaults to 25.
|
|
169
|
+
|
|
157
170
|
model: The specific model to use for task completion. see our
|
|
158
171
|
[models](/agentic-browser-control/ai-task-completion#available-models) page for
|
|
159
172
|
more information.
|
|
@@ -162,6 +175,9 @@ class ToolsResource(SyncAPIResource):
|
|
|
162
175
|
|
|
163
176
|
provider: The AI provider to use for task completion.
|
|
164
177
|
|
|
178
|
+
secret_values: Secret values to pass to the agent for secure credential handling. Keys and
|
|
179
|
+
values are passed as environment variables to the agent.
|
|
180
|
+
|
|
165
181
|
url: The URL of the webpage. If not provided, the tool will use the current page in
|
|
166
182
|
the session.
|
|
167
183
|
|
|
@@ -179,10 +195,14 @@ class ToolsResource(SyncAPIResource):
|
|
|
179
195
|
{
|
|
180
196
|
"prompt": prompt,
|
|
181
197
|
"agent": agent,
|
|
198
|
+
"detect_elements": detect_elements,
|
|
182
199
|
"highlight_elements": highlight_elements,
|
|
200
|
+
"human_intervention": human_intervention,
|
|
201
|
+
"max_steps": max_steps,
|
|
183
202
|
"model": model,
|
|
184
203
|
"output_schema": output_schema,
|
|
185
204
|
"provider": provider,
|
|
205
|
+
"secret_values": secret_values,
|
|
186
206
|
"url": url,
|
|
187
207
|
},
|
|
188
208
|
tool_perform_web_task_params.ToolPerformWebTaskParams,
|
|
@@ -381,10 +401,14 @@ class AsyncToolsResource(AsyncAPIResource):
|
|
|
381
401
|
prompt: str,
|
|
382
402
|
session_id: str | Omit = omit,
|
|
383
403
|
agent: Literal["browser-use", "openai-cua"] | Omit = omit,
|
|
404
|
+
detect_elements: bool | Omit = omit,
|
|
384
405
|
highlight_elements: bool | Omit = omit,
|
|
406
|
+
human_intervention: bool | Omit = omit,
|
|
407
|
+
max_steps: int | Omit = omit,
|
|
385
408
|
model: str | Omit = omit,
|
|
386
409
|
output_schema: object | Omit = omit,
|
|
387
410
|
provider: Literal["openai", "gemini", "groq", "azure", "xai"] | Omit = omit,
|
|
411
|
+
secret_values: Dict[str, str] | Omit = omit,
|
|
388
412
|
url: str | Omit = omit,
|
|
389
413
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
390
414
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
@@ -405,8 +429,16 @@ class AsyncToolsResource(AsyncAPIResource):
|
|
|
405
429
|
|
|
406
430
|
agent: The AI agent to use for task completion. Defaults to browser-use.
|
|
407
431
|
|
|
432
|
+
detect_elements: Enable element detection for better interaction accuracy. Improves the agent's
|
|
433
|
+
ability to identify and interact with UI elements.
|
|
434
|
+
|
|
408
435
|
highlight_elements: Whether to highlight elements during task execution for better visibility.
|
|
409
436
|
|
|
437
|
+
human_intervention: Allow human intervention during task execution. When enabled, the agent can
|
|
438
|
+
request human input for ambiguous situations.
|
|
439
|
+
|
|
440
|
+
max_steps: Maximum number of steps the agent can take to complete the task. Defaults to 25.
|
|
441
|
+
|
|
410
442
|
model: The specific model to use for task completion. see our
|
|
411
443
|
[models](/agentic-browser-control/ai-task-completion#available-models) page for
|
|
412
444
|
more information.
|
|
@@ -415,6 +447,9 @@ class AsyncToolsResource(AsyncAPIResource):
|
|
|
415
447
|
|
|
416
448
|
provider: The AI provider to use for task completion.
|
|
417
449
|
|
|
450
|
+
secret_values: Secret values to pass to the agent for secure credential handling. Keys and
|
|
451
|
+
values are passed as environment variables to the agent.
|
|
452
|
+
|
|
418
453
|
url: The URL of the webpage. If not provided, the tool will use the current page in
|
|
419
454
|
the session.
|
|
420
455
|
|
|
@@ -432,10 +467,14 @@ class AsyncToolsResource(AsyncAPIResource):
|
|
|
432
467
|
{
|
|
433
468
|
"prompt": prompt,
|
|
434
469
|
"agent": agent,
|
|
470
|
+
"detect_elements": detect_elements,
|
|
435
471
|
"highlight_elements": highlight_elements,
|
|
472
|
+
"human_intervention": human_intervention,
|
|
473
|
+
"max_steps": max_steps,
|
|
436
474
|
"model": model,
|
|
437
475
|
"output_schema": output_schema,
|
|
438
476
|
"provider": provider,
|
|
477
|
+
"secret_values": secret_values,
|
|
439
478
|
"url": url,
|
|
440
479
|
},
|
|
441
480
|
tool_perform_web_task_params.ToolPerformWebTaskParams,
|
{anchorbrowser-0.3.2 → anchorbrowser-0.3.4}/src/anchorbrowser/types/tool_perform_web_task_params.py
RENAMED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from typing import Dict
|
|
5
6
|
from typing_extensions import Literal, Required, Annotated, TypedDict
|
|
6
7
|
|
|
7
8
|
from .._utils import PropertyInfo
|
|
@@ -23,9 +24,27 @@ class ToolPerformWebTaskParams(TypedDict, total=False):
|
|
|
23
24
|
agent: Literal["browser-use", "openai-cua"]
|
|
24
25
|
"""The AI agent to use for task completion. Defaults to browser-use."""
|
|
25
26
|
|
|
27
|
+
detect_elements: bool
|
|
28
|
+
"""Enable element detection for better interaction accuracy.
|
|
29
|
+
|
|
30
|
+
Improves the agent's ability to identify and interact with UI elements.
|
|
31
|
+
"""
|
|
32
|
+
|
|
26
33
|
highlight_elements: bool
|
|
27
34
|
"""Whether to highlight elements during task execution for better visibility."""
|
|
28
35
|
|
|
36
|
+
human_intervention: bool
|
|
37
|
+
"""Allow human intervention during task execution.
|
|
38
|
+
|
|
39
|
+
When enabled, the agent can request human input for ambiguous situations.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
max_steps: int
|
|
43
|
+
"""Maximum number of steps the agent can take to complete the task.
|
|
44
|
+
|
|
45
|
+
Defaults to 25.
|
|
46
|
+
"""
|
|
47
|
+
|
|
29
48
|
model: str
|
|
30
49
|
"""The specific model to use for task completion.
|
|
31
50
|
|
|
@@ -39,6 +58,12 @@ class ToolPerformWebTaskParams(TypedDict, total=False):
|
|
|
39
58
|
provider: Literal["openai", "gemini", "groq", "azure", "xai"]
|
|
40
59
|
"""The AI provider to use for task completion."""
|
|
41
60
|
|
|
61
|
+
secret_values: Dict[str, str]
|
|
62
|
+
"""Secret values to pass to the agent for secure credential handling.
|
|
63
|
+
|
|
64
|
+
Keys and values are passed as environment variables to the agent.
|
|
65
|
+
"""
|
|
66
|
+
|
|
42
67
|
url: str
|
|
43
68
|
"""The URL of the webpage.
|
|
44
69
|
|
|
@@ -84,10 +84,14 @@ class TestTools:
|
|
|
84
84
|
prompt="prompt",
|
|
85
85
|
session_id="sessionId",
|
|
86
86
|
agent="browser-use",
|
|
87
|
+
detect_elements=True,
|
|
87
88
|
highlight_elements=True,
|
|
89
|
+
human_intervention=True,
|
|
90
|
+
max_steps=0,
|
|
88
91
|
model="model",
|
|
89
92
|
output_schema={},
|
|
90
93
|
provider="openai",
|
|
94
|
+
secret_values={"foo": "string"},
|
|
91
95
|
url="url",
|
|
92
96
|
)
|
|
93
97
|
assert_matches_type(ToolPerformWebTaskResponse, tool, path=["response"])
|
|
@@ -237,10 +241,14 @@ class TestAsyncTools:
|
|
|
237
241
|
prompt="prompt",
|
|
238
242
|
session_id="sessionId",
|
|
239
243
|
agent="browser-use",
|
|
244
|
+
detect_elements=True,
|
|
240
245
|
highlight_elements=True,
|
|
246
|
+
human_intervention=True,
|
|
247
|
+
max_steps=0,
|
|
241
248
|
model="model",
|
|
242
249
|
output_schema={},
|
|
243
250
|
provider="openai",
|
|
251
|
+
secret_values={"foo": "string"},
|
|
244
252
|
url="url",
|
|
245
253
|
)
|
|
246
254
|
assert_matches_type(ToolPerformWebTaskResponse, tool, path=["response"])
|