anchorbrowser 0.3.3__py3-none-any.whl → 0.3.4__py3-none-any.whl

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/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "anchorbrowser"
4
- __version__ = "0.3.3" # x-release-please-version
4
+ __version__ = "0.3.4" # x-release-please-version
@@ -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
- session = self._client.sessions.create(session=session_options or {})
66
- if not session.data or not session.data.id:
67
- raise ValueError("Failed to create session: No session ID returned")
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=session.data.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
- session = await self._client.sessions.create(session=session_options or {})
247
- if not session.data or not session.data.id:
248
- raise ValueError("Failed to create session: No session ID returned")
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=session.data.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
  )
@@ -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
- return self._get(
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=SessionRetrieveResponse,
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
- return await self._get(
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=SessionRetrieveResponse,
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,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: anchorbrowser
3
- Version: 0.3.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
@@ -11,7 +11,7 @@ anchorbrowser/_resource.py,sha256=7lE1EgpVj5kwckk-27umtigTOf9nKTyRl97cgNwRbRQ,11
11
11
  anchorbrowser/_response.py,sha256=xsiyWOC8LWW-NvbFtZ-MJD4f7eI9RnivKwtKImZ-8o4,28860
12
12
  anchorbrowser/_streaming.py,sha256=ageQnvSloL91I4OxR1GL6-V5sDa4A_99PX1Sgi-U7zY,10177
13
13
  anchorbrowser/_types.py,sha256=hYSr4gk9908ZiGTqMX3pHhdzfzUUaHVelFS_I6p2Uj0,7243
14
- anchorbrowser/_version.py,sha256=B2mGIqtrUHRGp26kNi-Bq-PUQc-s3IeMHfR7CK0JAfc,165
14
+ anchorbrowser/_version.py,sha256=muJ6tadXuSGLaQVvia_mPMpjbXFxC4DnnTCIROngwQI,165
15
15
  anchorbrowser/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  anchorbrowser/_utils/__init__.py,sha256=7fch0GT9zpNnErbciSpUNa-SjTxxjY6kxHxKMOM4AGs,2305
17
17
  anchorbrowser/_utils/_compat.py,sha256=D8gtAvjJQrDWt9upS0XaG9Rr5l1QhiAx_I_1utT_tt0,1195
@@ -29,7 +29,7 @@ anchorbrowser/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224
29
29
  anchorbrowser/lib/agent.py,sha256=bPaGn2-Eta1HL0hB0cClL9WSmjwRfHphruBofq1oVvI,3533
30
30
  anchorbrowser/lib/browser.py,sha256=I8BGLRRBEAURb_rJHvMh5qGaN73Ln9jmXBwTkHJXOS0,6349
31
31
  anchorbrowser/resources/__init__.py,sha256=xw7K4TTIthqdKN3-YxvyoAtiNmx3dtvHkGbKPcaRhCs,3409
32
- anchorbrowser/resources/agent.py,sha256=LJoLbgZK75yjSESh9FSM978p7iwKgxgu8MwDaqstIxo,18580
32
+ anchorbrowser/resources/agent.py,sha256=-pceCs4e76Ofe-yAfSU_AjNekTl7EWWk3NiDcCf6pKI,19597
33
33
  anchorbrowser/resources/batch_sessions.py,sha256=d7Jy59NHE0u7mw4sx1N9mhG60-93reu_DqsXsU3stZo,11336
34
34
  anchorbrowser/resources/browser.py,sha256=BB5hq_ayIDL_ziYHq13oj8US3XkHzkoXiGLBm7h9dH0,5548
35
35
  anchorbrowser/resources/events.py,sha256=B6TwziBmOVMjWwoFO7OJR2X_Jt_3jtzNhQg4lgY-7SE,10780
@@ -42,7 +42,7 @@ anchorbrowser/resources/sessions/all.py,sha256=5iN5Vv6UW-2p07lEqiRHw3fFQC4m_acfv
42
42
  anchorbrowser/resources/sessions/clipboard.py,sha256=RuoY6Ev5oKsuk0KhPgtRk5GXCjqCk2D16e2hXzRY-4I,9572
43
43
  anchorbrowser/resources/sessions/keyboard.py,sha256=qeHOvmTC2cA_AcEyXBCTzp6QyjN-cU6BZBq603Ex49g,11024
44
44
  anchorbrowser/resources/sessions/mouse.py,sha256=vlyOJgvoJ2z5pDXEmoVQMq1IIifuwnVC3vV3BGEC4lE,14772
45
- anchorbrowser/resources/sessions/sessions.py,sha256=4dCS-VyPl90yfGcvDzA8MwNdqBZP3m9SFUsCKSfZxbo,55445
45
+ anchorbrowser/resources/sessions/sessions.py,sha256=yR1B39poMSxn4EfO_bJlQbH-LShXD6RZCgQOzOs1JgM,56323
46
46
  anchorbrowser/resources/sessions/agent/__init__.py,sha256=xhYEyZLlwYxvBVBNX6FfdOYz9B5Ps4bHXNG_LY1KuDU,976
47
47
  anchorbrowser/resources/sessions/agent/agent.py,sha256=VnrjYHkp6jDv3mYUUnfC6xxcrjwO1Uwm5bWAY85We8w,10013
48
48
  anchorbrowser/resources/sessions/agent/files.py,sha256=E5pFDXEeaqJAN7DfE774WWJMf-MsXv_tw_KAPsEcfrA,11461
@@ -118,7 +118,7 @@ anchorbrowser/types/shared/success_response.py,sha256=l9OWrucXoSjBdsx5QKdvBPFtxv
118
118
  anchorbrowser/types/task/__init__.py,sha256=CbGxF7UFks1LsFq_wdSi62f4bgThKymv5OOSDmaFBI4,267
119
119
  anchorbrowser/types/task/run_execute_params.py,sha256=P-gRINLzKJ12Q03u7Pwu_6QJ8XFvyvAOVvguy03K98k,6680
120
120
  anchorbrowser/types/task/run_execute_response.py,sha256=ha86lTlKsLA_yZlaHNHEqBM1F--GiOLuifZpAk9J1bM,794
121
- anchorbrowser-0.3.3.dist-info/METADATA,sha256=K3uNE9BrvZm85sAuYI9nltizQZ6_e7HkrTQsukvT0vw,15279
122
- anchorbrowser-0.3.3.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
123
- anchorbrowser-0.3.3.dist-info/licenses/LICENSE,sha256=QYTH6OztHxnELDn890vME8F7-euzmsHhWI4XOSYxwOg,11343
124
- anchorbrowser-0.3.3.dist-info/RECORD,,
121
+ anchorbrowser-0.3.4.dist-info/METADATA,sha256=3M_cwYxx_aq0EKw7BAV2ZT8__m_e12imAmf-FTmuauo,15279
122
+ anchorbrowser-0.3.4.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
123
+ anchorbrowser-0.3.4.dist-info/licenses/LICENSE,sha256=QYTH6OztHxnELDn890vME8F7-euzmsHhWI4XOSYxwOg,11343
124
+ anchorbrowser-0.3.4.dist-info/RECORD,,